《人月神話》第1章:焦油坑

岸上的船兒如同海上的燈塔,無法移動

A ship on the beach is a lighthouse to the sea...


巨獸在焦油坑中垂死掙扎,它們掙扎得越是猛烈,焦油糾纏得越緊,沒有任何猛獸足夠強壯或具有強壯或具有足夠的技巧,能夠掙脫束縛,它們都沉到了坑底。

過去幾十年的大型系統開發就猶如這樣一個焦油坑,各種團隊,大型的或小型的,龐雜的或精幹的,一個接一個淹沒在了焦油坑中。


獨立來看,每一個坑都不是問題,但置身於軟件項目中,衆多問題交織在一起,就可能帶來具大的風暴,世界本身就是一個複雜的系統,軟件系統亦是如此。

任何人都對自己過度自信,入坑前,感覺自己無所不能,戰無不勝,幻想着自己總能在各種複雜環境中安然度過。前人的智慧告訴我們,如果沒有認真地進行需求分析、設計、進度計劃,風險管理等,真正開始開發後,總會出現讓自己陷入令人痛苦的麻煩。這也需要我們擁有豐富的項目管理經驗和解決複雜問題的能力。


既然是明知是焦油坑,那我們爲什麼要跳進去呢?

大概是因爲過程是痛苦的,但結果是快樂的!

快樂在於不僅滿足了我們內心深處進行創造的渴望,而且還喚醒了每個人內心的情感。

這也是爲什麼看起來前路艱險,但每年仍有成千上萬的人加入到程序開發的洪流中。


在開始之前,先了解4個概念:程序 program、編程產品 programing product、編程系統 programing system 和 編程系統產品 programing system product


程序program

它本身是完整的,可以由開發者在所開發的系統平臺上運行。


編程產品programing product

這是可以被任何人運行,測試,修復和擴展的程序。它可以運行在多種操作系統平臺上,供多套數據使用。

要成爲通用的編程產品,程序必須按照普遍認可的風格來編寫,特別是輸入的範圍和形式必須擴展,以適用於所有可以合理使用的基本算法。

同時,對程序進行徹底的測試,確保它的穩定性和可靠性,使其值得信賴。這就意味着必須準備,運行和記錄詳盡的測試用例庫,用來檢查輸入的邊界和範圍。

此外,要將程序提升爲程序產品,還需要有完備的文檔,每個人都可以加以使用,修復和擴展。

經驗數據表明,相同功能的編程產品的成本,至少是已經經過測試的程序的3倍。


編程系統programing system

這是在功能上能相互協作的程序集合,具有規範的格式,可以進行交互,並可以用來組裝和搭建整個系統。

要成爲系統構件,程序必須按照一定的要求編制,使輸入和輸出在語法和語義上與精確定義的接口一致。

同時程序還要符合預先定義的資源限制—內存空間,輸入輸出設備,計算機時間。

最後,程序必須同其它系統構件單元一道,以任何能想象到的組合進行測試。

由於測試用例會隨着組合不斷增加,所以測試的範圍非常廣。因爲一些意想不到的交互會產生許多不易察覺的bug,測試工作將會非常耗時。

因此相同功能的編程系統構件的成本至少是獨立程序的3倍。


編程系統產品 programing system product

其成本高達9倍,然而,只有它纔是真正有用的產品,是大多數系統開發的目標。


軟件從業人員的苦惱,主要來自於以下幾方面:

1、苦惱來自追求完美。羅馬不是一天建成的,軟件系統項目要用修長城的理念,而不要用修核電站的思維。

2、苦惱來自由他人來設定目標,供給資源,提供信息。如必須要和其它程序員合作,拙劣的設計,不完整的代碼或文檔等,不怕神一樣的對手,就怕豬一樣的隊友。

3、概念設計是有趣的,但尋找瑣碎的bug卻是一項重複性活動。

4、無奈 - 當歷經千心萬苦,產品終於要發佈時,卻已顯得陳舊過時。尤其是現在的互聯網產品,競爭更是激烈。


這是一個痛並快樂着的職業,但對許多人而言,其中的快樂遠遠大於苦惱。

待到軟件系統項目成功的那一刻,看到每個人臉上洋溢着的幸福,感覺從來沒有經歷過任何苦惱。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章