构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...
/*
?*?這是 《構建之法》 第三版的草稿
?*/
3.2 軟件工程中的幾種思維誤區(qū)
正如我們在第一章講的那樣,軟件有很多特性,軟件開發(fā)有它自己獨特的規(guī)律,如果不了解這些特性,軟件工程師就會產(chǎn)生不符合實際的想法,在開發(fā)過程中走很多彎路。軟件的模塊之間存在著各種復雜的依賴關系,由于軟件的不可見性和易變性,依賴關系很難定義清楚,并得到及時的維護和修復。對依賴關系的兩種極端態(tài)度都會導致可笑的行為,并且無一例外地引起延遲交付。
被依賴關系束縛:一種極端是過于悲觀,不想修復,出了問題都賴在相關問題上面,下面是工程師果凍和項目經(jīng)理大牛之間的對話[XZ1]?:
木桶有一個洞,? 咋辦啊, 大牛?
修哇,果凍!
用啥來修啊,? 大牛?
用粗麻繩把它堵上, ?果凍!
麻繩太長, 咋辦啊, ?大牛?
用刀砍短啊, 果凍!
刀太鈍,? 咋辦啊, 大牛?
????? 磨刀啊, 果凍!
磨刀石太干, 咋辦啊, 大牛?
拿木桶去取水啊, 果凍!
?木桶有一個洞,咋辦啊,大牛?
不分主次,想解決所有依賴問題:另一種極端是過于積極,想馬上動手修復所有主要和次要的依賴問題,然后就可以“完美地”達到最初設定的目標,而不是根據(jù)現(xiàn)有條件找到一個“足夠好”的方案。我們還可以看一個小飛的故事:
????????????? 小飛早上醒來之后,發(fā)現(xiàn)宿舍的哥們都出門學習去了,他想起昨晚下決心要和哥幾個一起每天去圖書館自習,連續(xù)奮斗一個月迎接考試!他拎著書包出門,發(fā)現(xiàn)自行車輪胎氣不足,于是就去找隔壁宿舍的果凍同學借打氣筒,果凍說他的打氣筒昨天拿去她女朋友荔荔那里去了,但是他們倆昨晚吵架了,打氣筒還在荔荔的宿舍里。小飛說我可以去拿!果凍說最好帶個小禮物去;小飛問帶什么禮物呢?果凍說荔荔說過她想要手織的圍巾,小飛想牦牛毛的圍巾最好了,于是小飛就開始剪牦牛的毛[XZ2]?。
過了大半天,同學們自習回來了,看到小飛,就問:你為啥要追著牦牛跑啊?小飛摸了摸臉上的汗水,喃喃地說,我也忘了,? 我本來是要去上自習的…
過早優(yōu)化:既然軟件是“軟”的,那它就有很大的可塑性,可以不斷改進,放眼望去,一個復雜的軟件似乎很多模塊都可以變得更好。一個工程師在寫程序的時候,經(jīng)常容易在某一個局部問題上陷進去,花大量時間對其優(yōu)化,無視這個模塊對全局的重要性,甚至還不知道這個“全局”是怎么樣的。這個毛病早就被歸納為“過早的優(yōu)化是一切罪惡的根源”:
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only after that code has been identified[XZ3]?.
王屋村軟件學院的小飛同學在下雨的時候經(jīng)常打著一把很精巧的小雨傘,和同學們一起匆匆趕路。同學們提醒他:
小飛,你這雨傘太小了,你的褲腿都濕了!
但是小飛還是打著這把小雨傘。幾年過去了,在畢業(yè)酒會上,大家又談起這個故事。小飛紅著臉解釋了原因:
我原來想,如果有女朋友的話,兩人在雨中打著很小的雨傘,她就會靠我近一些。現(xiàn)在我還是單身,我想起了“過早優(yōu)化是煩惱的根源”。
過早擴大化/泛化(Premature Generalization):
軟件的”軟” 還表現(xiàn)在它可以擴展, 在寫一個程序的時候,需要某個函數(shù)可以處理整數(shù)類型和字符串類型的信息。有程序員往往靈光閃現(xiàn)-- 哎,能不能把類型抽象出來,讓這個函數(shù)處理所有可能的類型?這樣不就一勞永逸了么?有些軟件本來是解決一個特點環(huán)境下的具體問題,有程序員一想,我們能做一個平臺,處理所有類似的問題,這樣多好啊!這樣的前景的確美妙,程序員的確需要這樣的凌云壯志,但是要分清楚必要性,難度和時機。本書8.8.1 提到的畫扇面就是一個很好的例子。
王屋村的程序員這幾種錯誤做法放在一起,就構成了下面這個靚麗的風景線:
?
(在3.2 后面加一段)
3.3 軟件工程師的職業(yè)發(fā)展
21 世紀以來,中國大陸每年招收六百萬大學生,其中的百分之十是在學習各種IT 相關的專業(yè)(計算機科學與技術、計算機工程、計算機軟件、軟件工程、管理信息系統(tǒng)等)。扣除讀研究生(最終大部分也會走上工作崗位)、出國等分流,同時考慮到培訓機構給就業(yè)市場貢獻的大量勞動力,每年大致有四十萬到六十萬左右的“軟件工程師”進入工作崗位。他們都是以什么樣的心態(tài)對待這一職業(yè)的呢?在工程師抱怨這個行業(yè)的同時,我們可以由低到高,看看人們對職業(yè)的態(tài)度有哪些等級:
1.??????? 臨時的寄托或工作 ( Temporary Work)
在大學你會看到很多人選IT專業(yè)的原因和“熱愛”沒有什么關系,有些人是因為專業(yè)調(diào)劑來到這里,有些人是因為要拿一個文憑作為敲門磚(例如,跨專業(yè)考上軟件專業(yè)的研究生,然后計劃以碩士的資格去考公務員)。 他們處于低動力, 低技能的狀態(tài).
2.??????? 工作 (Job)
這就是一個能掙錢養(yǎng)家的營生,如果別的營生更賺錢,那就會跳到別的地方去。一些人留在這個職業(yè),只不過是因為他不會做別的。這些人會經(jīng)常問“軟件開發(fā)做到35歲以后怎么辦”這樣的問題。當然,如果了解和體會了軟件開發(fā)的投入和回報的關系, 這些人的心態(tài)會進步到下一個階段.
3.??????? 職業(yè) (Profession)
在工作的基礎上,能加上職業(yè)道德,職業(yè)規(guī)劃。只有在這個層次上可以開始談有意義的“職業(yè)發(fā)展”。他們對“30歲以后”、“35歲以后”都有一定的打算。
4.??????? 投身的事業(yè) (Commitment / vocation? )
把軟件項目相關的目標作為長期的承諾,碰到困難也不退縮,一直堅持到完成任務。
5.??????? 理想的呼喚(Calling)
一些人覺得這是理想的呼喚,通過軟件可以改變世界,他們主動尋找機會,實現(xiàn)自己的理想。
很多讀者會問,? 我怎么知道這個工作就是我的事業(yè), 或是理想的呼喚呢? ?我上課、上班不用心,正因為這不是我想投身的事業(yè),我想投身什么我也不知道,但是肯定不是正在學習的軟件工程!
這些讀者可以參考一下 Emanuel Derman 的故事,他從小喜歡物理,認為這就是“理想的呼喚”,在名校拿了理論物理的博士學位之后,非常想做“純物理”研究,很看不起應用物理,更不用說其他工作了。但是由于經(jīng)濟和能力的原因,他不得不去一般的大學做物理老師,和家人兩地分居,郁郁不得志。在35歲的時候(很多中國IT人士認為是程序員的職業(yè)終點),他改行做了貝爾實驗室某不太重要部門的程序員,在那里領悟到了編程的優(yōu)美和挑戰(zhàn);幾年后他跳槽去華爾街證券公司做程序員,第一個項目是把交易員用的命令行程序改造為GUI 的程序(聽起來也不是很高大上),也經(jīng)常被資深的交易員呼來喚去,令人不爽。但是他堅持學習金融知識,做各種金融分析,逐漸成長為金融風險研究的專家,部門總經(jīng)理(也被公司解雇過);最后在實踐中把金融,數(shù)學,和軟件融合在一起,在這個新領域提出了有廣泛影響力的新模型,被評為金融界的“年度金融工程師”。他最后去一流大學開創(chuàng)了金融工程 (Financial Engineering) 這門學科。他回顧自己的職業(yè)經(jīng)歷時說:
回首當年,我(的態(tài)度)的確是錯了。任何事情,當你仔細探究,你就會理解它的量和質(zhì);當你對一個領域的神韻足夠了解,并開始連接這個領域的表現(xiàn)形式和實現(xiàn)細節(jié)的時候,任何一個領域都是會變得引人入勝的[XZ4]?。
再多說一句,這么多年之后,大家發(fā)現(xiàn)交易員的工作逐漸被程序和程序員取代了。?
如果我們對職業(yè)有認真的態(tài)度,那就能發(fā)現(xiàn)很多證明個人能力的方式。
?[XZ1]改編自兒歌<木桶有個洞>, 參見http://www.scoutsongs.com/lyrics/theres-a-hole-in-the-bucket.html?
?[XZ2]尾注:剪牦牛毛(Yak Shaving)是在國外編程編程界小范圍流行的術語,描述為了間接地幫助實現(xiàn)一個目標,而做的一些次要而且和目標無關的工作。其中一個解釋:http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html
?[XZ3]尾注:來源于Donald Kunth 的論文?Structured Programming with go to Statements, ACM Computing Surveys, Vol 6, No. 4, Dec. 1974 (p.268).
?[XZ4]尾注:故事來自《My Life as a Quant: Reflections on Physics and Finance》作者Emanuel Derman.? ISBN 0470192739.? 翻譯的文字出自其中第六章。Emanuel Derman的個人網(wǎng)站: http://www.emanuelderman.com
總結
以上是生活随笔為你收集整理的构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代软件工程讲义 个人项目和结对项目练习
- 下一篇: 结对和团队项目建议 - 黄金点游戏