什么是軟件開(kāi)發(fā)最重要的一環(huán)? 從不同的角度可以有不同的觀(guān)點(diǎn), 但如何保證一個(gè)執行中的項目在順利和按時(shí)進(jìn)行?最簡(jiǎn)單的辦法就是檢查有關(guān)文檔. 不然就只能聽(tīng)程序員匯報了。而程序員永遠是對自己的進(jìn)展最樂(lè )觀(guān)的人。他們對軟件原型到產(chǎn)品的時(shí)間的估計往往令人啼笑皆非。 《人月神話(huà)》一書(shū)中對此有很好的描述,我在 軟件開(kāi)發(fā)的兩條鐵律一文中,也舉了一些親身的例子。一個(gè)沒(méi)有文檔或者文檔很糟糕的項目一定是一個(gè)背后有問(wèn)題的項目. 所以說(shuō),軟件開(kāi)發(fā)最重要的一環(huán),但也是最常被忽視的一環(huán),就是軟件開(kāi)發(fā)文檔,而不是通常想象的Coding.
世界上沒(méi)有一個(gè)軟件工程師喜歡寫(xiě)文檔. 因為他們常常感覺(jué)自己的工作象個(gè)藝術(shù)家,而不是工程師。這有點(diǎn)象沒(méi)有一個(gè)詩(shī)人喜歡逐句注釋自己的詩(shī)詞, 沒(méi)有一個(gè)畫(huà)家喜歡用文字來(lái)描述自己作品的意境. 他們覺(jué)得這是多余的,甚至是畫(huà)蛇添足的。因為他們的作品是不可描述的?;蛘哒f(shuō),無(wú)法有對應的文檔的。但是, 軟件項目工程已經(jīng)不再是一門(mén)可以隨意發(fā)揮的藝術(shù), 而是一項必須遵循規范的系統工程. 文檔就是軟件從藝術(shù)轉化為工程的一個(gè)標志. 這里我們需要的不是朦朧的美, 而是清楚和科學(xué)的工程描述。 我比較喜歡軟件工程師這個(gè)稱(chēng)呼,而不是程序開(kāi)發(fā)員。因為軟件項目工程與寫(xiě)程序不是同一個(gè)概念。寫(xiě)程序只是軟件項目工程的一部分。工程師這個(gè)詞有很多內涵,它不同于藝術(shù)家,也不同于科學(xué)家。雖然軟件開(kāi)發(fā)可能常常界于三者之間。 但作為一個(gè)項目執行者來(lái)說(shuō),他必須首先是一個(gè)嚴謹的工程師。
軟件工程師不喜歡寫(xiě)文檔還很多實(shí)際的原因. 比如說(shuō), 他們可能從來(lái)沒(méi)有受到這方面的訓練和缺乏相關(guān)實(shí)踐;寫(xiě)文檔像寫(xiě)code一樣,不是一開(kāi)始就能寫(xiě)好的。他們也可能不認識到文檔的重要性;有的則可能認為文檔是給別人看的, 自己不需要,就懶得寫(xiě);有的軟件工程師甚至故意不好好寫(xiě)文檔, 這樣就沒(méi)有其他人能夠取代他們的工作. 跟跨國大公司的老總討論國內員工的管理,他們說(shuō),國內軟件工程師最大的問(wèn)題,一是溝通,特別是英語(yǔ)溝通。二就是不認為他們寫(xiě)的code是屬于公司的,而是屬于他們自己的.但如果沒(méi)有文檔, 那么想屬于公司都沒(méi)有辦法,因為一切都在他頭腦里, 他一走就都帶走了。
一般的軟件工程師都認為coding 最重要. 當他們當上經(jīng)理之后, 或者辦了幾個(gè)軟件公司之后, 他們才認識到, 沒(méi)有文檔的code 對公司財富的積累其實(shí)沒(méi)有什么幫助。特別是對做軟件項目工程的公司來(lái)說(shuō)。沒(méi)有好的文檔管理的軟件公司一定是失敗的. 現在網(wǎng)上開(kāi)源的code 什么方面的都有,但開(kāi)源的問(wèn)題就是沒(méi)有好的文檔。許多人認為code是實(shí)的,文檔是虛的.其實(shí)不是這樣的.為什么說(shuō)文檔這樣重要呢?
第一,最直接的原因,有好文檔的code 其他人才能看得懂.特別是一些復雜一點(diǎn)的程序,比如編解碼器,沒(méi)有文檔如何能在幾個(gè)月內看懂?除非你以前寫(xiě)過(guò)類(lèi)似的程序?,F在反編譯工具越來(lái)越發(fā)達,其實(shí)有沒(méi)有code 都是差不太多的, 特別是對Java這樣的程序。.
第二,認真說(shuō)來(lái),文檔與code一樣,其實(shí)是項目不可分割的一部分。
第三,文檔是項目管理的表現形式,是項目與其他方面溝通的媒體,也是項目管理的工具。 軟件項目,與程序不再是一個(gè)概念?!?/p>
我們知道,現代項目管理的概念是從現代飛機制造開(kāi)始的,現代飛機有幾萬(wàn)到幾十萬(wàn)個(gè)零件,必須有一整套管理方法,管理的體現方式就是一整套相應的文檔。 我們知道,一個(gè)產(chǎn)品, 比如說(shuō)醫療設備,要通過(guò)美國FDA是非常難的。FDA 除了設備的質(zhì)量檢查以外,更要看你的生產(chǎn)過(guò)程及其管理,怎么看,就是看文檔。你這個(gè)零件是從哪里采購的,有關(guān)文檔在那里?如果拿不出來(lái),直接就當掉了。
最近在一個(gè)軟件公司作交接, 意外的發(fā)現項目經(jīng)理竟然不知道他管理的項目實(shí)際上是用什么技術(shù)來(lái)開(kāi)發(fā)的. 不管是否是項目經(jīng)理真的不懂, 還是故意忽悠. 如果要這樣的事情不會(huì )發(fā)生, 只有一招, 文檔管理.
用一個(gè)通俗一點(diǎn)的比喻, 沒(méi)有文檔的軟件, 就像沒(méi)有賬目的財務(wù). 最后他把錢(qián)和原始發(fā)票單據交給你就完事, 賬目是沒(méi)有的. 要知道錢(qián)怎么用的? 自己去查發(fā)票吧.要了解軟件的內容?自己去看源代碼吧.
讓軟件工程師寫(xiě)文檔, 常常聽(tīng)到的回答是, 太忙了, 沒(méi)有時(shí)間寫(xiě), 如果我是經(jīng)理, 那我就會(huì )讓他們停下來(lái), 先把文檔寫(xiě)好. 因為我知道項目已經(jīng)出了問(wèn)題了。不然的話(huà), 從公司的角度來(lái)說(shuō),他們只是在浪費時(shí)間而已.文檔管理好的公司都很難成功,沒(méi)有文檔管理的公司長(cháng)期來(lái)說(shuō)一定是失敗的. 軟件項目管理,說(shuō)穿了其實(shí)就是軟件文檔管理.你能夠讓工程師寫(xiě)出很好的很完全的文檔,你的管理就成功了.
在美國所有的軟件公司,都要求完整的,完善的, 和符合UML 標準的文檔.設計文檔沒(méi)有上級簽字之前,任何工程師不許開(kāi)始coding . 除非是必須的 prove concept. 一些軟件公司,不但要求完全的文檔,有的甚至要求code 全部從Rose里面生成和編譯,以保證文檔和code 完全相符.至于要求所有的程序員都按一定的風(fēng)格來(lái)寫(xiě)code, 那就是更高的要求了。
一個(gè)很多人參與的長(cháng)期的項目,文檔就更重要了,code 很容易亂的。 我看過(guò)一些世界上很通用和很著(zhù)名的商用軟件的源代碼,其混亂程度使人吃驚。這樣的code后來(lái)一定是要重寫(xiě)的。改到一定程度就沒(méi)有辦法改了。
這里插一句,什么是軟件公司? 微軟是軟件公司。EBA 是軟件公司, 但惠普,思科以及華為這樣的公司本來(lái)都不能算軟件公司,盡管他們有很多天才的軟件人員,但他們對軟件開(kāi)發(fā)的理解和體會(huì )是跟真正的軟件公司不一樣的。 今天,因為估值的原因和軟件的重要性,所有的IT公司都把自己稱(chēng)為軟件公司了。
那軟件開(kāi)發(fā)需要什么樣的文檔呢?具體程序又是怎么樣的呢?請聽(tīng)下回分解.

