岸上的船兒如同海上的燈塔,沒法移動
程序員
A ship on the beach is a lighthouse to the sea...算法
巨獸在焦油坑中垂死掙扎,它們掙扎得越是猛烈,焦油糾纏得越緊,沒有任何猛獸足夠強壯或具備強壯或具備足夠的技巧,可以掙脫束縛,它們都沉到了坑底。編程
過去幾十年的大型系統開發就猶如這樣一個焦油坑,各類團隊,大型的或小型的,龐雜的或精幹的,一個接一個淹沒在了焦油坑中。ide
獨立來看,每個坑都不是問題,但置身於軟件項目中,衆多問題交織在一塊兒,就可能帶來具大的風暴,世界自己就是一個複雜的系統,軟件系統亦是如此。測試
任何人都對本身過分自信,入坑前,感受本身無所不能,望風披靡,幻想着本身總能在各類複雜環境中安然度過。前人的智慧告訴咱們,若是沒有認真地進行需求分析、設計、進度計劃,風險管理等,真正開始開發後,總會出現讓本身陷入使人痛苦的麻煩。這也須要咱們擁有豐富的項目管理經驗和解決複雜問題的能力。spa
既然是明知是焦油坑,那咱們爲何要跳進去呢?操作系統
大概是由於過程是痛苦的,但結果是快樂的!設計
快樂在於不只知足了咱們心裏深處進行創造的渴望,並且還喚醒了每一個人心裏的情感。接口
這也是爲何看起來前路艱險,但每一年仍有成千上萬的人加入到程序開發的洪流中。ip
在開始以前,先了解4個概念:程序 program、編程產品 programing product、編程系統 programing system 和 編程系統產品 programing system product
程序program
它自己是完整的,能夠由開發者在所開發的系統平臺上運行。
編程產品programing product
這是能夠被任何人運行,測試,修復和擴展的程序。它能夠運行在多種操做系統平臺上,供多套數據使用。
要成爲通用的編程產品,程序必須按照廣泛承認的風格來編寫,特別是輸入的範圍和形式必須擴展,以適用於全部能夠合理使用的基本算法。
同時,對程序進行完全的測試,確保它的穩定性和可靠性,使其值得信賴。這就意味着必須準備,運行和記錄詳盡的測試用例庫,用來檢查輸入的邊界和範圍。
此外,要將程序提高爲程序產品,還須要有完備的文檔,每一個人均可以加以使用,修復和擴展。
經驗數據代表,相同功能的編程產品的成本,至少是已經通過測試的程序的3倍。
編程系統programing system
這是在功能上能相互協做的程序集合,具備規範的格式,能夠進行交互,並能夠用來組裝和搭建整個系統。
要成爲系統構件,程序必須按照必定的要求編制,使輸入和輸出在語法和語義上與精肯定義的接口一致。
同時程序還要符合預先定義的資源限制—內存空間,輸入輸出設備,計算機時間。
最後,程序必須同其它系統構件單元一道,以任何能想象到的組合進行測試。
因爲測試用例會隨着組合不斷增長,因此測試的範圍很是廣。由於一些意想不到的交互會產生許多不易察覺的bug,測試工做將會很是耗時。
所以相同功能的編程系統構件的成本至少是獨立程序的3倍。
編程系統產品 programing system product
其成本高達9倍,然而,只有它纔是真正有用的產品,是大多數系統開發的目標。
軟件從業人員的苦惱,主要來自於如下幾方面:
一、苦惱來自追求完美。羅馬不是一天建成的,軟件系統項目要用修長城的理念,而不要用修核電站的思惟。
二、苦惱來自由他人來設定目標,供給資源,提供信息。如必需要和其它程序員合做,拙劣的設計,不完整的代碼或文檔等,不怕神同樣的對手,就怕豬同樣的隊友。
三、概念設計是有趣的,但尋找瑣碎的bug倒是一項重複性活動。
四、無奈 - 當歷經千心萬苦,產品終於要發佈時,卻已顯得陳舊過期。尤爲是如今的互聯網產品,競爭更是激烈。
這是一個痛並快樂着的職業,但對許多人而言,其中的快樂遠遠大於苦惱。
待到軟件系統項目成功的那一刻,看到每一個人臉上洋溢着的幸福,感受歷來沒有經歷過任何苦惱。