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