“現(xiàn)在,程序設(shè)計(jì)工作已經(jīng)成了試圖創(chuàng)建更大更好的傻瓜式程序的軟件工程師和試圖制造更大更高的傻瓜的上天之間的較量。迄今為止,上天贏了?!边@話是技術(shù)商業(yè)作家Rick Cook說(shuō)的。什么意思?往下看就明白了。
盡管我把軟件工程師當(dāng)作偶像,但他們?nèi)匀活l繁地撒謊。也許撒謊是創(chuàng)新所必須的,太多人會(huì)告訴你,你想做的東西無(wú)法達(dá)成或者根本沒人想要。只要知道他們?cè)谌鲋e,你就不用擔(dān)心。下面是一些工程師經(jīng)常說(shuō)的謊言。
1 “我對(duì)市場(chǎng)一無(wú)所知”。這是一句假的謙遜之辭。事實(shí)上,這位工程師正在想的是,“我不了解市場(chǎng)營(yíng)銷,但與我所做的工作相比,那又算得了什么?工程和市場(chǎng)我都能應(yīng)付自如,我只是希望那些MBA能夠提出一些配得上我寫出的代碼的想法”。不過,不用對(duì)此太擔(dān)心,在工程師錯(cuò)過了一個(gè)個(gè)產(chǎn)品開發(fā)的最終截止日期之后,他們會(huì)發(fā)現(xiàn)自己遇到了麻煩。
2 “我們將要進(jìn)行測(cè)試”。這是一個(gè)毫無(wú)意義的陳述,因?yàn)殛P(guān)鍵不在于什么時(shí)候開始測(cè)試,而在于什么時(shí)候完成測(cè)試。目前看來(lái),惟一能夠肯定的測(cè)試完成日期,就是錢花光的時(shí)候。
在過去,產(chǎn)品Alpha版本的意思是“所有的部分都完成了,盡管不一定能夠合格運(yùn)作”;Beta版本的意思是,“不會(huì)再出現(xiàn)重復(fù)性的錯(cuò)誤了”。而到了現(xiàn)在,Beta版本則意味著,“在承諾的交貨期之后,我們就消失了”。
3 “我已經(jīng)對(duì)代碼進(jìn)行了注釋,后來(lái)者可以看懂我的工作”。工程師確實(shí)打算對(duì)代碼進(jìn)行注釋,不過隨著日子漸漸過去,工作重點(diǎn)也發(fā)生了變化。管理層將面對(duì)這樣的問題:“你是想讓我為代碼進(jìn)行注釋還是盡快完成項(xiàng)目”?答案不言而喻。幸運(yùn)的是,缺少注釋并沒有什么關(guān)系,因?yàn)榇a是如此蹩腳,一年之內(nèi)肯定需要重新編寫。
4 “我們的產(chǎn)品結(jié)構(gòu)是可擴(kuò)展的”。這是我最樂于聽到的謊言。一般來(lái)說(shuō),從未交付過產(chǎn)品的工程師在vB中建立模型后會(huì)這么說(shuō)。整個(gè)謊言是這樣的:“Google的擴(kuò)展性不如我們。他們可以支持2,500萬(wàn)次同時(shí)搜索,而我們可以輕而易舉地處理10億次?!毙疫\(yùn)的是,在大多數(shù)情況下,產(chǎn)品真正能夠應(yīng)用所花的時(shí)間要比CEO的保守估計(jì)還長(zhǎng),所以可擴(kuò)展性從來(lái)也不是—個(gè)重要問題。
5 “我們編寫的代碼支持所有行業(yè)標(biāo)準(zhǔn)”。這幾乎是事實(shí),當(dāng)然還需要一點(diǎn)補(bǔ)充:“這些代碼支持著我所認(rèn)同的所有行業(yè)標(biāo)準(zhǔn)”。工程師對(duì)他不喜歡的標(biāo)準(zhǔn)習(xí)慣地選擇視而不見——例如那些微軟頒布的標(biāo)準(zhǔn)。對(duì)工程師來(lái)說(shuō),這無(wú)關(guān)緊要,反正客戶不會(huì)知道這些。 6 “我們有一個(gè)數(shù)據(jù)庫(kù)和系統(tǒng),可以有效地報(bào)告bug”。但是,故障報(bào)告系統(tǒng)的設(shè)計(jì)前提是系統(tǒng)中沒有故障,所以不需要報(bào)告。一艘情況下,如果記錄的故障從不超過1,000個(gè),那只能說(shuō)明這個(gè)公司沒有進(jìn)行仔細(xì)的檢查。
7 “與印度的外包團(tuán)隊(duì)合作,會(huì)幫助我們做得更快、更好,而且更便宜”。普通的技術(shù)人員通常不會(huì)說(shuō)出這樣的謊言,這是CTO的杰作。在他們腦中,印度的程序員優(yōu)秀、迅速、便宜,而美國(guó)人則差勁、拖沓、昂貴。事實(shí)顯然不是這樣。
8 “我們的測(cè)試版網(wǎng)站喜歡它”。在技術(shù)界工作了25年,我從未聽說(shuō)過任何一個(gè)公司說(shuō)起它的測(cè)試版網(wǎng)站不喜歡有軟件產(chǎn)品出現(xiàn)在上面。有三個(gè)原因:首先,很多測(cè)試版網(wǎng)站很榮幸能得到軟件的預(yù)發(fā)行版本,他們不希望提出否定意見;第二,大多數(shù)測(cè)試版網(wǎng)站并不怎么使用軟件;第三,測(cè)試版網(wǎng)站并不希望無(wú)情地批評(píng)公司的新產(chǎn)品。正如告訴父母他們的孩子其實(shí)很丑一樣,這是一件很難的事情。 9 “這一次我們做對(duì)了”。這個(gè)謊言的可怕之處在于工程師對(duì)此真的相信。問題在于,“這一次”實(shí)際上已發(fā)生了很多次,到底哪一次做對(duì)了?我對(duì)工程師很有信心,并認(rèn)為經(jīng)過長(zhǎng)時(shí)間的努力,他們真的能做好,只是我們活不到那個(gè)時(shí)候。
10 “這段代碼太差了,與調(diào)試和擴(kuò)展相比,還是重寫更好”。所有的程序員都會(huì)對(duì)別人的作品做此評(píng)價(jià),還有一些人如此評(píng)論被重編后的版本。 11 “我喜歡像建筑師一樣思考,但是我可以編程”。這意味著該程序員實(shí)際上不能編程,而且很可能也不能設(shè)計(jì)好建筑。
12 “在我的機(jī)器上它能正常運(yùn)轉(zhuǎn)”?!拔业臋C(jī)器”很可能是世界上該軟件能夠正常運(yùn)轉(zhuǎn)的機(jī)器。
13 “我當(dāng)然可以放棄編程,而是去經(jīng)商”。這是每個(gè)轉(zhuǎn)型創(chuàng)業(yè)者的工程師的遺言,其意思是他既不能放棄編程,也不能去經(jīng)商。
14 “即使是我媽媽也可以在屏幕上沖浪”。當(dāng)然,他的媽媽可能是麻省理工畢業(yè)的計(jì)算機(jī)專業(yè)博士。
上面列出了一些工程師經(jīng)常喜歡說(shuō)的謊言,我喜歡工程師為了這三個(gè)原因而撒下的謊:首先,其謊言暗示了他們像個(gè)孩子一樣,忽視了計(jì)算機(jī)是怎樣工作的;第二,工程師真的相信他們自己的謊言,而創(chuàng)業(yè)者、投資人和律師則不相信;第三,他們的大多數(shù)謊言并不是不誠(chéng)實(shí)所致,只是時(shí)機(jī)太早了,最終總會(huì)成為現(xiàn)實(shí)。如果你是個(gè)工程師,現(xiàn)在你知道了自己在不知不覺中都做了些什么;如果你正和工程師一起工作,那么現(xiàn)在你知道了他們的謊言,明白該怎么理解了吧?