日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

有人负责,才有质量:写给在集市中迷失的一代

發(fā)布時(shí)間:2024/1/8 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有人负责,才有质量:写给在集市中迷失的一代 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章來(lái)源:https://m.ituring.com.cn/article/9363

13年前,新興的草根開源軟件運(yùn)動(dòng)如火如荼,而Eric Raymond的《大教堂與集市》(O'Reilly Media, 2001)一書則重新定義了我們的詞匯表,幾乎預(yù)言了瀑布模型和大型軟件公司的終結(jié)。這本書有煽動(dòng)性,但卻沒(méi)有說(shuō)服我。與此同時(shí),由于我正全身心投入開源運(yùn)動(dòng),也就情不自禁地寧愿相信他是對(duì)的。

而今年夏天我?guī)У胶I別墅來(lái)的這本書,同樣有煽動(dòng)性,比Raymond那本更甚(但這本書在提到《大教堂與集市》時(shí)是相當(dāng)正面的),那就是Frederick P. Brooks的《設(shè)計(jì)原本》(Addison-Wesley Professional, 2010)。Brooks這本書不斷引發(fā)我的共鳴,我也越來(lái)越佩服他的語(yǔ)言表達(dá)能力和他提出的觀點(diǎn),然而越是有共鳴,就越感到難過(guò)和失望。

![enter image description here][5]

13年前,正值.COM熱潮涌動(dòng),年輕的Web程序員比比皆是,輟學(xué)創(chuàng)業(yè)的大學(xué)生也屢見不鮮。在向其中一些人傳授過(guò)去那些編程技巧的同時(shí),我也獲得了很多樂(lè)趣。像什么測(cè)試恢復(fù)備份、寫腳本安裝操作系統(tǒng)、版本控制等等。當(dāng)然,現(xiàn)在再看,也就那么回事(有些事并不像你印象中那么激動(dòng)人心,對(duì)吧)。而且,我們已經(jīng)無(wú)路可逃,整個(gè).COM時(shí)代總體上對(duì)IT/CS而言就是一場(chǎng)災(zāi)難,尤其對(duì)軟件質(zhì)量和Unix來(lái)說(shuō),更是如此。

好像從來(lái)沒(méi)有人分析過(guò).COM泛濫那些年,IT行業(yè)增長(zhǎng)了多少。以我個(gè)人的經(jīng)驗(yàn),我估計(jì)整個(gè)行業(yè)(包括IT行業(yè)由此新增的就業(yè)機(jī)會(huì))大概增長(zhǎng)了兩個(gè)數(shù)量級(jí),或者更確切地說(shuō),達(dá)到了原來(lái)的百分之一萬(wàn)(100倍)。

學(xué)會(huì)計(jì)算機(jī)編程很容易,就像學(xué)會(huì)用釘子把兩塊木板釘?shù)揭黄鹨粯雍?jiǎn)單。但問(wèn)題是——打個(gè)不恰當(dāng)?shù)谋确?#xff0c;市場(chǎng)對(duì)“釘在一起的兩塊木板”的需求,除了“自豪的爺爺”的那點(diǎn)天倫之樂(lè)以外,真的是太小了。而且,由此再進(jìn)一步學(xué)習(xí)釘椅子或做碗櫥,都需要天分、實(shí)踐和訓(xùn)練。我們?cè)鲩L(zhǎng)的這99倍恰恰都來(lái)自那些既沒(méi)有實(shí)踐經(jīng)驗(yàn),又沒(méi)有受過(guò)良好訓(xùn)練的人。等這些人有時(shí)間學(xué)習(xí)和接受訓(xùn)練了,聚會(huì)已然結(jié)束,大多數(shù)人失去了工作。可以樂(lè)觀地假定那些堅(jiān)持下來(lái)的人最有天分,而且經(jīng)驗(yàn)也最多,即便如此我們還是無(wú)路可逃,因?yàn)樽鳛镮T專業(yè)人士,由于缺乏基本功,他們大多數(shù)都很濫!

不幸的是,Raymond鼓吹的——與.COM泡沫之前精心建造大教堂的理念恰恰相反的集市模因(meme)1——“對(duì)付過(guò)去就行”(just hack it),并沒(méi)有隨.COM泡沫破裂灰飛煙滅。今天,Unix這艘大船正因?yàn)殡y堪重負(fù)而迅速沉沒(méi)。

1?模因論是基于達(dá)爾文進(jìn)化論的觀點(diǎn)解釋文化進(jìn)化規(guī)律的新理論。[參見這里][6]。——譯者注

我剛升級(jí)了自己的筆記本電腦。到現(xiàn)在,我運(yùn)行FreeBSD開發(fā)版已經(jīng)足足有18個(gè)年頭了,但從源代碼編譯我的Spartan工作環(huán)境仍然要花一整天時(shí)間,因?yàn)樗仨毨砬孱^緒,在Raymond那亂糟糟的軟件集市中建起一座大教堂來(lái)。

宏觀上講,FreeBSD的Ports Collection會(huì)盡力為這個(gè)集市畫一幅地圖,以便FreeBSD用戶輕易找到自己的應(yīng)用。目前來(lái)看,這幅地圖由22 198個(gè)文件構(gòu)成,而這些文件就是集市中每個(gè)攤位的簡(jiǎn)要說(shuō)明:用寥寥數(shù)語(yǔ)告訴你某個(gè)攤位賣什么,要了解詳細(xì)信息再去哪里找。此外,還有23 214個(gè)Makefile,告訴你可以對(duì)每個(gè)攤位上的軟件做什么。這些Makefile還想告訴你都有哪些選擇,要選擇什么,以及不作選擇時(shí)用什么默認(rèn)值比較明智。為方便起見,這幅地圖還提供24 400個(gè)補(bǔ)丁文件,以便彌補(bǔ)這些玩藝兒在制作工藝上的瑕疵,但一般來(lái)說(shuō),還是因?yàn)樗鼈償y帶(portability )不便,所以才催生了這些補(bǔ)丁。

最后,地圖提供一些建設(shè)性意見,比如要是你想要www/firefox,那得先得到devel/nspr、security/nss、databases/sqlite3,等等。在你手拿地圖,查到這些依賴,以及這些依賴的依賴之后,你會(huì)發(fā)現(xiàn)自己的購(gòu)物清單上已經(jīng)記滿了122個(gè)包,你必須在能買www/firefox之前買全它們。

當(dāng)然啦,模塊化和代碼重用都是好主意。可是,就算在最簡(jiǎn)單的情況下,CS/IT的代碼重用信條在集市里也沒(méi)有用武之地:FreeBSD Ports Collection中的軟件最少都包含1342個(gè)復(fù)制粘貼加密算法。

如果有人奮不顧身或者偏聽偏信,非要代碼重用,結(jié)果真制造出了自身完備且無(wú)依賴的軟件包,那要換得這個(gè)容易管理的包,享受代碼重用的成果,就算多花點(diǎn)銀子也值啊!但這樣的事并沒(méi)有發(fā)生過(guò):各種包把Web搞得一團(tuán)糟, 隨便依賴,互相糾纏,代碼越重用,浪費(fèi)越嚴(yán)重。

舉個(gè)浪費(fèi)的例子吧。Sam Leffler的graphics/libtiff是前面提到在安裝www/firefox之前必須安裝的122個(gè)包中的一個(gè),但安裝后的Firefox瀏覽器卻無(wú)法渲染TIFF圖片。問(wèn)題出在哪里我還沒(méi)來(lái)得及查清楚,但這122個(gè)包中的10個(gè)需要Perl,7個(gè)需要Python;這其中又有一個(gè)devel/glib20,同時(shí)依賴著Perl和Python,至于為什么,我到現(xiàn)在都沒(méi)想通。

繼續(xù)往下看你的購(gòu)物清單,你會(huì)不斷發(fā)現(xiàn)滿足彼得定律的應(yīng)用。所謂彼得定律,就是說(shuō)在一個(gè)根據(jù)人的業(yè)績(jī)、成就和價(jià)值來(lái)提拔人的組織中,最終會(huì)把一些人提拔到他們并不勝任的位置上。這個(gè)定律經(jīng)常被通俗地說(shuō)成“把員工提拔到他們不勝任的職位”。軟件行業(yè)也一樣,你會(huì)發(fā)現(xiàn)自己需要三個(gè)不同版本的make程序、一個(gè)宏處理器、一個(gè)匯編器和其他一些必要的包。而在這個(gè)“食物鏈”末端,則是libtool,它試圖掩蓋一個(gè)事實(shí),即在Unix中沒(méi)有構(gòu)建共享庫(kù)的標(biāo)準(zhǔn)方式。的確沒(méi)有適用于所有Unix變體的標(biāo)準(zhǔn)方式——比如給ld(1)命令加個(gè)標(biāo)簽之類的;而此時(shí)彼得定律就適用了:這個(gè)工作被交給了libtool。此時(shí)此刻,彼得定律確實(shí)牛,devel/libtool的源代碼達(dá)到了414 740行,而其中有一半是測(cè)試用例。原則上講,這倒是值得稱贊的,但實(shí)際上這卻是彼得定律的結(jié)果:這些測(cè)試煞費(fèi)苦心地在那里驗(yàn)證一個(gè)本來(lái)就不該存在的問(wèn)題的復(fù)雜方案是否功能齊備!更讓人抓狂的是,其中31 085行代碼都保存在一個(gè)叫configure的shell腳本里,代碼格式之亂,任誰(shuí)也難看明白。這樣做是想讓configure腳本執(zhí)行大約200個(gè)自動(dòng)測(cè)試,從而免除用戶手工配置libtool之苦。這個(gè)想法很濫,早在1980年代剛剛出現(xiàn)時(shí),就招來(lái)很多非議。因?yàn)樵创a是靠configure腳本的偽裝才讓人感覺(jué)它可移植的,而實(shí)際上并非真正可移植。可以說(shuō)它是配置思想的余孽。

1980年代出現(xiàn)過(guò)很多不同的Unix實(shí)現(xiàn):Cray-1s及其24位指針、Amdahl UTS主機(jī)Unix、來(lái)自微機(jī)制造商的大量的SysV+BSD混搭、Data General等公司開發(fā)的準(zhǔn)Unix“墊片”,甚至連油漆廠Mark Williams都有純粹的Unix克隆Coherent。

當(dāng)時(shí)的configure腳本是手寫的,用于檢測(cè)當(dāng)前系統(tǒng)是BSD還是SysV風(fēng)格的Unix,然后根據(jù)檢測(cè)結(jié)果把一個(gè)或另一個(gè)Makefile(有時(shí)候還帶一個(gè).h文件)復(fù)制到指定位置。后來(lái),這個(gè)configure腳本的神通越來(lái)越大,而且不折不扣地印證了彼得定律。我們沒(méi)有看到Unix采用標(biāo)準(zhǔn)做法來(lái)消除對(duì)該腳本的依賴,反倒是有人寫了一個(gè)叫autoconf的程序,用來(lái)自動(dòng)生成configure腳本。

今天,Unix/Posix一脈的操作系統(tǒng),就連IBM的z/OS主機(jī)版,都跟1980年代那些完全一樣;libtool這個(gè)configure腳本中的31 085行代碼仍然還要檢測(cè)<sys/stat.h>和<stdlib.h>是否存在,即便是沒(méi)有這兩個(gè)文件的Unix變體,在既沒(méi)有足夠內(nèi)存執(zhí)行l(wèi)ibtool,也沒(méi)有足夠硬盤保存其16MB源代碼的情況下。

為什么會(huì)這樣呢?

由于尚不知曉的原因,autoconf是用晦澀的M4宏語(yǔ)言寫的,因而實(shí)際的測(cè)試代碼如下:

## Whether `make' supports order-only prerequisites. AC_CACHE_CHECK([whether ${MAKE-make} supports order-only prerequisites],[lt_cv_make_order_only],[mkdir conftest.dircd conftest.dirtouch btouch a cat >confmk << 'END' a: b | c a b c:touch $[]@ ENDtouch cif ${MAKE-make} -s -q -f confmk >/dev/null 2>&1; thenlt_cv_make_order_only=yeselselt_cv_make_order_only=noficd ..rm -rf conftest.dir ]) if test $lt_cv_make_order_only = yes; thenORDER='|' elseORDER='' fi AC_SUBST([ORDER])

毋庸諱言,這超出了大多數(shù)程序員的承受能力。即便有人有這個(gè)能力,但給autoconf指定輸入文件都是用復(fù)制粘貼的,所以那些涵蓋前述“標(biāo)準(zhǔn)測(cè)試”的標(biāo)準(zhǔn)宏代碼日益膨脹也就很難被發(fā)現(xiàn),而這些宏都是為了處理20年前并不存在的兼容性問(wèn)題。

我一直不明白:為什么針對(duì)我系統(tǒng)里根本沒(méi)有的Fortan編譯器,但libtool的配置探針仍然有不少于26個(gè)名字,而且還要再執(zhí)行26個(gè)測(cè)試,檢測(cè)這些根本不存在的Fortran編譯器分別支不支持-g選項(xiàng)。也許這就是原因所在。

這是由Raymond在其書中稱頌的集市模式導(dǎo)致的悲哀的現(xiàn)實(shí):一坨膿包似的權(quán)宜代碼,被一群盲目的根本不知IT架構(gòu)為何物的所謂IT“專業(yè)人士”永無(wú)休止地復(fù)制著,粘貼著。這事兒放在今天你也許很難相信,但就是在這令人無(wú)比尷尬的混沌之下,沉睡著美輪美奐的Unix大教堂的遺跡,而Unix恰恰是以設(shè)計(jì)簡(jiǎn)約、功能實(shí)用、執(zhí)行優(yōu)雅而著稱于世的。(世間榮耀就此消失……)

Brooks提出了很多有見地的觀點(diǎn),其中一個(gè)就是所謂質(zhì)量,只有在某人對(duì)它負(fù)責(zé)時(shí)才有意義,而這個(gè)“某人”只能是一個(gè)人,不能是幾個(gè)人——二重奏除外。我有點(diǎn)奇怪,為什么Brooks不把Unix作為他這個(gè)觀點(diǎn)的論據(jù),因?yàn)槲覀兛梢跃_地指出Unix開始走向碎片化的時(shí)間點(diǎn):1990年代初,AT&T拋棄Unix,將其商業(yè)化,搶走其架構(gòu)師的那一刻。

最近幾年,不止一個(gè)人像Brooks一樣得出相同的結(jié)論。有些人企圖粉飾太平,假裝正經(jīng),還有人通過(guò)制定技術(shù)標(biāo)準(zhǔn)的形式來(lái)達(dá)到類似立法的目的,希冀著在集市中引入秩序和結(jié)構(gòu)。到目前為止,他們的努力全部以失敗告終,因?yàn)樵诩兄忻允У倪@一代.COM神奇小子,從來(lái)就沒(méi)有見過(guò)大教堂,也不可能知道你為什么需要大教堂,更不用說(shuō)去想象教堂是個(gè)什么樣子了。這么挖苦別人,其實(shí)我心里也很難過(guò)。真的,那些最需要看看《設(shè)計(jì)原本》的人,可能會(huì)發(fā)現(xiàn)這本書完全無(wú)法理解。但對(duì)于那些懷疑過(guò)構(gòu)建一個(gè)Web瀏覽器居然要使用M4宏來(lái)配置autoconf,要寫shell腳本,要檢測(cè)26種Fortran編譯器,而且又覺(jué)得這怎么說(shuō)都有點(diǎn)南轅北轍的人,Brooks也謹(jǐn)慎地指出了方向:還有更好的方式。

讀書筆記:

千萬(wàn)不要在集市中迷失自己。

1.“所謂質(zhì)量,只有在某人對(duì)它負(fù)責(zé)時(shí)才有意義,而這個(gè)“某人”只能是一個(gè)人,不能是幾個(gè)人——二重奏除外”。我們要對(duì)我們自己制造出來(lái)的產(chǎn)品負(fù)責(zé)任,保證產(chǎn)品的質(zhì)量。

2.“學(xué)會(huì)計(jì)算機(jī)編程很容易,就像學(xué)會(huì)用釘子把兩塊木板釘?shù)揭黄鹨粯雍?jiǎn)單。但問(wèn)題是——打個(gè)不恰當(dāng)?shù)谋确?#xff0c;市場(chǎng)對(duì)“釘在一起的兩塊木板”的需求,除了“自豪的爺爺”的那點(diǎn)天倫之樂(lè)以外,真的是太小了。而且,由此再進(jìn)一步學(xué)習(xí)釘椅子或做碗櫥,都需要天分、實(shí)踐和訓(xùn)練。”這句話讓我印象十分深刻,也許學(xué)會(huì)一門編程語(yǔ)言很簡(jiǎn)單,比如c語(yǔ)言的學(xué)習(xí)。但是盡管我們學(xué)會(huì)了一門編程語(yǔ)言,但是我們到底能不能夠滿足市場(chǎng)的需求,能不能迎合市場(chǎng)發(fā)展趨勢(shì)都未可知。

3.“可以樂(lè)觀地假定那些堅(jiān)持下來(lái)的人最有天分,而且經(jīng)驗(yàn)也最多,即便如此我們還是無(wú)路可逃,因?yàn)樽鳛镮T專業(yè)人士,由于缺乏基本功,他們大多數(shù)都很濫!”這句話強(qiáng)調(diào)了編程基本功的重要性。編程就好比練功,如果學(xué)習(xí).net,mfc,vb等具體的語(yǔ)言和工具是外功(招式),對(duì)基礎(chǔ)的學(xué)習(xí)就是內(nèi)功,只注重招式而內(nèi)功不扎實(shí)是不可能成為高手的。代碼質(zhì)量既是設(shè)計(jì)出來(lái)的,也是迭代優(yōu)化出來(lái)的。換句話說(shuō),無(wú)論是前期的產(chǎn)品需求分析、架構(gòu)設(shè)計(jì),還是后期的詳細(xì)代碼設(shè)計(jì)與編碼,都離不開良好的設(shè)計(jì)。程序設(shè)計(jì)是每個(gè)程序員的基本功。但是,大多數(shù)人都只是對(duì)新技術(shù)充滿熱情,卻很少有人愿意沉下心來(lái),花幾個(gè)月甚至- -兩年的時(shí)間來(lái)重溫基礎(chǔ)知識(shí),修煉基本功。

總結(jié)

以上是生活随笔為你收集整理的有人负责,才有质量:写给在集市中迷失的一代的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。