軟件開發的隱喻

         昨晚刻了代碼大全的第二章,很有感想,想一下,那一章,真的有很多東西.而最令我贊同的是兩個印喻,軟件開發向生長,另外一個是軟件開發象建房子.

          其實我個人以前一直認爲,軟件工程是工程,建築也是工程,他們兩者之間肯定有共通的地方的.我在大三的時候一直在想爲什麼軟件開發不可以向建房子那樣一氣呵成,先規劃好,然後再進行開發.一直到現在兩年了,還是沒有怎麼搞懂這個問題.CC2說帝國大廈在建的時候每一輛車都是提前十五分鐘安排的.這讓我想起了最後期限裏面的那幾個被拋棄的用來做實驗的項目組,他們就是其他組的提前量.可是我們在實際開發中根本就沒有提前量這種東西.我現在在客戶現場,維護一個根本捧都沒有碰過的系統,系統經過了很多個項目組的開發,像一團亂麻.如果軟件工程是建築的話,我應該提前得到這個系統的項目文檔,熟悉一下這個系統,然後再到客戶現場.試想一下,有那一個物業公司不知道自己管理的建築的緊急出口在哪裏的?

               二,軟件工程的實施過程與建築其實蠻不同的.軟件工程開發過程中,會有多少年來個協作員?會有多少個輪班?會有多少提前量?各個公司不同,但是基本上都沒有,特別是中國的軟件公司.我們的提前量是用加班來構成的.輪班?軟件開發的邏輯特性使得,輪班是絕對不可能發生的事情.那麼協作員應該有了吧,有,就是那些願意幫你的自己還在做事的人.

        第三,我覺得這一點是根本性的不同.建築是一種物料是現成的工程,他們是工程建設,而軟件工程是系統構架.工程建設有一整套的工程規範,有一大堆現成的材料.而系統架構了?軟件工程還沒有一套成型的工程規範,雖然現在很多RUP,AGILE,原形等等的東西,但是他們並不是標準,他們只是推薦實施方式.

         任何一個系統都會有不穩定性,只是大還是小而已.黑客帝國中的系統的不穩定性一直沒有找到方法解決,我想也是因爲這個原因.而這些不穩定性是我們難以控制的.在建築中,我們可以控制材料,控制員工的實施水平,我們可以用計算機模擬受力.....我們可以把一切不穩定因素考慮起來.但是在軟件開發中,我們可以控制員工的素質,但是沒辦法控制他的編碼質量,設計質量.用建築來比較就是,我們沒辦法保證水泥和鋼筋是合格的.爲什麼?因爲這是人的邏輯產品,每一個人隨着心情和環境的不同,邏輯思考能力也會不同.我們沒辦法保證,可能有人會說那我叫專人監督,總可以吧?可以,但是你會用兩倍甚至10倍的錢做一個系統不?我們的不穩定因素還和設計有關,這是更難控制的地方,什麼地方該用什麼構架技術,什麼地方該用什麼設計模式,這並沒有一個標準,也沒有一個可驗證它爲錯的公式.只有到了開發後期,或者工程的二期我們才知道,原來這樣會.........

        還有一點值得注意的是,軟件工程的測試與建築的測試是不同時期的,建築的測試一般是通過公式計算,計算機模擬,都是在還沒有開始建設的時候就完成的.可是軟件工程是工程完成後纔可以進行系統的測試的.雖然我們有模塊測試,但是個人覺得模塊測試就好像在建築中測試每一包水泥的質量一樣.而測試驅動,我覺得就是測試每一個根鋼筋是否直徑是適合的(可能用鋁合金窗,和窗戶做比喻更合適).至於一般的集成測試就是建築中的在建工程抽樣檢查了.我們可以看到,建築和軟件工程其實並不是那麼的相同.

       

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