初讀《人月神話》(the mythical man and month), 看到一些剔醍醐灌頂?shù)木渥? 抄錄如下, 希望能在實踐中消化吸收, 化為內(nèi)功心法.
將定義書寫成文字,必須對很多原先并不是非常重要的問題進(jìn)行判斷,并得出結(jié)論。
定義規(guī)定什么的同時,也要定義未規(guī)定什么
手冊不但要描述包括所有界面在內(nèi)的用戶可見的一切, 它同時還要避免描述用戶看不見的事物.
精確和完整的定義所有的接口后, 研發(fā)人員只需要了解自己負(fù)責(zé)的部分, 而無需去了解整個系統(tǒng).
數(shù)據(jù)的表現(xiàn)形式是編程的根本
書面記錄決策是必要的. 只有記錄下來, 分歧才會明朗, 矛盾才會突出.書寫這項活動, 需要上百次的細(xì)小決定, 正式由于它們的存在, 人們才能從令人迷惑的現(xiàn)象中得到清晰, 確定的策略.
事物在最初總是最好的
系統(tǒng)軟件開發(fā)是減少混亂度(減少熵)的過程, 所以它本身是處于亞穩(wěn)態(tài)的. 軟件維護(hù)是提高混亂度(增加熵)的過程,即使是最熟練的軟件維護(hù)工作, 也只是放緩了系統(tǒng)退化到非穩(wěn)態(tài)的進(jìn)程.
軟件的模塊總數(shù)量隨版本號的增加呈線性增長,但是受到影響的模塊以版本號指數(shù)的級別增長. 所有修改都傾向于破壞系統(tǒng)的架構(gòu), 增加了系統(tǒng)的混亂成都(熵增). 用在修復(fù)原有設(shè)計上的瑕疵的工作量越來越少, 而早期維護(hù)活動本身所引起的漏洞的修復(fù)工作越來越多. 隨著時間的推移, 系統(tǒng)會變得越來越無序,修復(fù)工作遲早會失去根基.
軟件的復(fù)雜度是根本屬性,不是次要因素。因此,抽掉復(fù)雜度的軟件實體描述常常也去掉了一些本質(zhì)屬性。數(shù)學(xué)和物理學(xué)在過去三個世紀(jì)取得了巨大的進(jìn)步,數(shù)學(xué)家和物理學(xué)家們?yōu)閺?fù)雜的現(xiàn)象建立了簡化的模型,從模型中抽取出各種特性,并通過試驗來驗證這些特性。這些方法之所以可行,是因為模型中忽略的復(fù)雜度不是被研究現(xiàn)象的根本屬性。當(dāng)復(fù)雜度是本質(zhì)特性時,這些方法就行不通了。
首先, 項目的關(guān)鍵問題是溝通, 個性化的工具妨礙而不是促進(jìn)溝通.其次, 當(dāng)機(jī)器和工作語言發(fā)生變化時,技術(shù)也會隨之變化.所有工具的生命周期都是很短的.
自動編程 和 圖形化編程, (到目前也沒有突破, 最近印度那家的融資騙局)
軟件開發(fā)人員為客戶所承擔(dān)的最重要的職能就是不斷重復(fù)地抽取和細(xì)化產(chǎn)品的需求.
復(fù)雜性是最嚴(yán)重的內(nèi)在困難, 但并不是所有的復(fù)雜性都是不可避免的. 我們的很多軟件, 但不是全部, 來自應(yīng)用本身隨意的復(fù)雜特性.
昨天的復(fù)雜性是今天的規(guī)律. 我相信有一天軟件的復(fù)雜性將以某種更高級的規(guī)律性概念來解釋.
程序員不愿意為設(shè)計書寫文檔, 不僅僅是因為惰性, 更多的是源于設(shè)計人員的躊躇--要為自己常識性的設(shè)計決策進(jìn)行辯解.
根據(jù)接口最小化和邊界嚴(yán)格清晰化, 將系統(tǒng)分解成子系統(tǒng).
概念完整性是產(chǎn)品質(zhì)量的核心.
對于任何軟件產(chǎn)品, 任何用戶群屬性實際上都是一種概率分布, 每個屬性具有若干可能的值, 每個值有自己發(fā)生的頻率.為了得到完整, 明確和共享的用戶描述, 機(jī)構(gòu)是應(yīng)該猜測(guess), 或者假設(shè)(postulate)一系列完整的屬性和頻率值. 進(jìn)而根據(jù)假設(shè), 去做 AB test...
對于軟件工程領(lǐng)域 主要的問題實質(zhì)上更側(cè)重于社會學(xué)(sociological)而不是科學(xué)技術(shù)(technological).