拜讀完這本74年的大作奥此,我產生了兩個想法:
- 人和月并不能相互轉化到腥,因為工程周期并不能隨意更改账锹。
- silver bullet更像倚天劍屠龍刀,無堅不摧坷襟,對軟件開發(fā)造成的巨大障礙和困難都是所向披靡奸柬。然后現(xiàn)實中并不存在。
這本書開頭講了一些很輕松的話題:
編程是一種創(chuàng)造性的有趣活動婴程。這種快樂首先來自于創(chuàng)造事物廓奕。其次,快樂來自于開發(fā)一些對他人有用的東西档叔。這讓我想到小孩子從小就有的桌粉,對拼裝玩具的興趣。而編程也像這個一樣衙四,他能將互相嚙合的零部件組裝在一起铃肯,讓他們以一種精妙的方式運行。
而且編程是一種持續(xù)學習届搁,且大部分時間缘薛,都是單純的思考的腦力活動。就像詩人一樣卡睦,程序員可以憑空利用自己的想象來建造自己的城堡宴胧。
然而這個職業(yè)也有,同樣的也有一些煩惱表锻。
完美主義在編程行業(yè)中備受推崇恕齐,但達到這個目標是非常困難的。另外持續(xù)與人交流瞬逊,尋找bug显歧,以及追求最新的技術,這些都造就了所謂的焦油坑确镊,使從業(yè)人員深陷其中士骤。
人月神話
在這個章節(jié)中,Brooks首先提出蕾域,
所有的編程人員都是樂觀主義者拷肌,他們往往都相信,一切都將運作良好旨巷,每一項任務僅花費它所應該花費的時間巨缘。
然而現(xiàn)實往往不盡如人意,構建軟件概念以后采呐,在實現(xiàn)過程中往往會遇到許多困難若锁,并且造成一定的延遲。
人月這個名詞斧吐,是一個衡量勞動量的單位又固。它有一個很大的迷惑性仲器,就是
“ 用人月作為衡量一項工作的規(guī)模,是一個危險和帶有欺騙性的神話仰冠÷χ埽”
在這種思維下,人員數(shù)量和時間看上去是可以置換的沪停。然而在實際的工作中這是難以實現(xiàn)的,因為這種置換只有在人員之間不需要相互交流的情況下裳涛,這才有可能會成立木张。
一個最典型的例子就是Brooks原則:
“為進度落后的項目增加人手,只會使進度更加落后端三∠侠瘢”
Brooks他認為,一支優(yōu)秀的軟件開發(fā)團隊應該是由一流人才組成的郊闯,小型精干的隊伍妻献。
曾經有一組針對具有經驗的程序員,進行測量的調查团赁。發(fā)現(xiàn)最好的和最差的表現(xiàn)在生產率上相差將近十倍育拨。
然而對于一些大型項目來說,如此的人員配置欢摄,會使有真正意義的大型系統(tǒng)進度過慢熬丧。
這就造成了一種進退兩難的境地,Mills為此提出了一個嶄新的怀挠,具有創(chuàng)造性的解決方案析蝴。那就是建議把大項目分成若干個部分,每個部分由一支類似于外科手術人員構成的開發(fā)團隊負責绿淋。
Mills的理念就是讓編程進行 從個人藝術到公共視線 這樣的觀念轉變闷畸,并且將所有的程序和數(shù)據看作團隊的所有物,而非私人財產吞滞。
Brooks主張在系統(tǒng)設計中佑菩,概念完整性應該是最重要的考慮因素。在這種情況下冯吓,為了反映一系列連貫的設計思路倘待,寧可省略一些不規(guī)則的特性和改進。
另外他認為
功能與概念復雜程度的比值组贺,才是衡量系統(tǒng)設計的易用性的最終測試標準凸舵。
為了確保概念的完整性,他要求設計必須由一個人失尖,或者非常少數(shù)互有默契的人員來實現(xiàn)啊奄。
這種理念付諸于大型項目中渐苏,就是將設計方法、體系結構方面的工作菇夸,與具體實現(xiàn)相分離琼富,這是獲得概念完整性的強有力方法。
而且為了達到這個目的庄新,必須有人控制這些概念鞠眉,這實際上是一種合理的專制統(tǒng)治。他相信依據和規(guī)則择诈,對行業(yè)是有益的械蹋,正所謂“沒有規(guī)矩不成方圓”。
結構師是計算機編程過程中一個很重要的角色羞芍,實際情況中哗戈,盡早和持續(xù)溝通能使結構師具有較好的成本意識,以及使開發(fā)人員獲得對設計的信心荷科,并且不會混淆各自的責任分工唯咬。但是這并不是說結構師能夠支配開發(fā)人員,他能做的只是建議畏浆。
沒有銀彈
銀彈是西方傳說中胆胰,用于對付人狼的特效藥。本書中全度,brook把進度落后煮剧,缺陷很多的軟件系統(tǒng)比喻為人狼。并且斷言:
在未來的十年內将鸵,無論在技術上還是管理方式上勉盅,都看不出來有任何突破性的進步,能夠保證在十年內大幅度地提高軟件生產率的可靠性和簡潔性顶掉。
Brooks在這篇文章中提出了軟件活動的兩個概念草娜,一個是根本任務,即打造軟件實體的抽象概念.另外一個是次要任務痒筒,也就是通過編程實現(xiàn)這個軟件概念宰闰。
這也就帶來了根本困難和次要困難。根本困難在于此簿透,抽象是人類的思維活動移袍,而一個良好的軟件系統(tǒng),具有復雜度老充,一致性葡盗,可變性,不可見性等諸多困難啡浊。這些特性對抽象過程提出了很高的要求觅够,而且沒有太多的規(guī)則和模板可供開發(fā)人員參考胶背。也就造成了軟件開發(fā)中固有的困難。
而對于解決次要困難喘先,可能需要等待輔助條件的進步钳吟,欣慰的是,已經逐漸出現(xiàn)了一些突破窘拯,例如高級編程語言红且,分時理念和統(tǒng)一編程環(huán)境。
面對這兩種困難涤姊,Brooks在書中還提出了一些希望直焙,具體有高級編程語言,面向對象編程砂轻,人工智能(包括其子領域專家系統(tǒng)),還有圖形化編程斤吐,程序驗證搔涝,IDE。
后記感想
四年多年過去了和措,我們似乎仍然沒有看到銀彈的出現(xiàn)庄呈,軟件業(yè)的整體生產率也只有提高了1倍,Brooks的斷言一直成立派阱。
但也沒有必要灰心诬留,說不定在不久以后,會在軟件開發(fā)行業(yè)出現(xiàn)《三體》中的“降維打擊”贫母,這些“人狼”將會不戰(zhàn)而亡文兑。