现代软件工程系列 学生读后感 梦断代码 软件难做
讀《夢斷代碼》
讀《夢斷代碼》的感想
《夢斷代碼》詳細(xì)敘述了OSAF的Chandler項(xiàng)目從2001年開創(chuàng)以來直至2005年間的進(jìn)展?fàn)顩r,真實(shí)展示了Chandler項(xiàng)目的艱難的開發(fā)過程,通過Chandler項(xiàng)目中遇到的各種問題展現(xiàn)了現(xiàn)代軟件開發(fā)中的種種困難,最終歸結(jié)到一句話就是“軟件難做”。
在軟件項(xiàng)目開發(fā)的歷史上,失敗的例子比比皆是。作者Scott?Rosenberg作為媒體工作者,見證了軟件世界中無數(shù)個(gè)悲慘的故事——“無論是跨國公司、政府機(jī)構(gòu),還是軍工大鱷,都曾一頭撞上過代碼的冰山。”其中比如FBI投資4億美元,花費(fèi)10年時(shí)間,開展的名為Trilogy的計(jì)算機(jī)現(xiàn)代化項(xiàng)目,當(dāng)進(jìn)行到耗資1億7千萬美元的第三個(gè)模塊時(shí),撞上了冰山,1億7千萬美元也就此打了水漂。美國國內(nèi)稅務(wù)局(IRS)是另一個(gè)活生生的例子。IRS在過去40年里,曾3次嘗試改造計(jì)算機(jī)系統(tǒng),但至今仍一事無成。再如聯(lián)邦航空管理局(FAA)的先進(jìn)自動系統(tǒng)(AAS)項(xiàng)目,從1981年啟動到1994年宣告終止,花費(fèi)了幾十億美元,結(jié)果顆粒無收。麥當(dāng)勞的"Innocvate"項(xiàng)目耗資1億7千萬美金,也以失敗告終。福特公司耗資數(shù)億美金的"Everest"采購系統(tǒng),也成了一個(gè)歷時(shí)5年的黑洞。1995年一家名為斯坦迪矢的咨詢公司做過一個(gè)關(guān)于軟件項(xiàng)目失敗的研究報(bào)告,發(fā)現(xiàn)只有16%的項(xiàng)目獲得成功,其余的項(xiàng)目中,31%被削減或被完全取消,剩下的53%預(yù)算超支、延誤或者不能交付計(jì)劃中的全部功能特性。
軟件為什么如此難做?如果沒有親身經(jīng)歷過真正的軟件項(xiàng)目開發(fā),也許很難回答這個(gè)問題。作為Chandler項(xiàng)目的記者,Scott?Rosenberg親歷了該項(xiàng)目開發(fā)過程中的各個(gè)環(huán)節(jié),真切地感受到了軟件開發(fā)的種種困難。
如果以軟件開發(fā)的流程為線索,第一個(gè)要解決的問題是“要做什么”的問題,也就是項(xiàng)目的目標(biāo)。項(xiàng)目的目標(biāo)要明確,并且可能實(shí)現(xiàn)。如果項(xiàng)目的目標(biāo)過高,也許根本不可能實(shí)現(xiàn)。Mitch?Kapor很清楚自己想要的軟件是什么樣的,他對Chandler項(xiàng)目也有著很高的目標(biāo)——管理各種個(gè)人信息,靈活的輸入方式,動態(tài)的數(shù)據(jù)組織方式,P2P網(wǎng)上共享數(shù)據(jù)模式等等。
在確定了這樣一些目標(biāo)之后,項(xiàng)目的總設(shè)計(jì)者就需要定下一些基礎(chǔ)框架性的實(shí)施方案,比如實(shí)現(xiàn)的語言,構(gòu)造GUI的工具集,存儲各種數(shù)據(jù)的數(shù)據(jù)庫等等。對于一個(gè)大項(xiàng)目,做出這樣一些決定往往是很難的。因?yàn)橐恍Q定一旦做出,其影響就會作用到工程的整個(gè)開發(fā)過程中。比如確定用何種語言來實(shí)現(xiàn),各種語言都有自己不同的優(yōu)點(diǎn)和局限,如果定下一種語言,其局限性就將作用于整個(gè)工程。因此,項(xiàng)目的架構(gòu)師需要對整個(gè)項(xiàng)目有一個(gè)全局的把握,并且熟悉已有的各種語言和技術(shù)的功能特點(diǎn),這樣才能合理地根據(jù)項(xiàng)目的目標(biāo)做出正確的決定。
Chandler項(xiàng)目的設(shè)計(jì)者們就面臨這樣的一些重大的抉擇。他們最終確定用Python作為項(xiàng)目的編程語言,因?yàn)殡m然Python是一種解釋執(zhí)行的語言,但它能極大地節(jié)省程序員的編程時(shí)間,并且它在跨平臺方面具有天生的優(yōu)越性,還有其他各種優(yōu)點(diǎn):比如開源、有大量的工具可以使用等等。另一個(gè)重要問題是用何種GUI構(gòu)造工具集。OSAF的設(shè)計(jì)者們考慮了各種可能的選擇,最后一個(gè)叫做wxWidgets的構(gòu)造器脫穎而出。然而,在確定存儲各種數(shù)據(jù)的數(shù)據(jù)庫的原型時(shí),Chandler項(xiàng)目的設(shè)計(jì)者們遇到了麻煩。為此,他們開了無數(shù)的會議,提出了無數(shù)種數(shù)據(jù)庫的實(shí)現(xiàn)方案,但總是不能滿足所有的需求。Chandler項(xiàng)目就在這個(gè)十字路口上徘徊不前,舉步維艱。最后,為了能按時(shí)發(fā)布一個(gè)可用的版本,程序員們臨時(shí)確定了一個(gè)數(shù)據(jù)庫的方案,并在此不穩(wěn)定的基礎(chǔ)上開始編程,并發(fā)布了Chandler0.1版。直到一個(gè)叫做Andi?Vajda的“牛仔程序員”加入這個(gè)項(xiàng)目后,正式的數(shù)據(jù)庫原型才逐漸確定下來,整個(gè)項(xiàng)目的基礎(chǔ)才得以夯實(shí)。可見,在一個(gè)大項(xiàng)目中做出這樣一些基礎(chǔ)性的重大的決定有多困難。
軟件開發(fā)中最重要的一個(gè)方面是組織和管理。如何讓程序員們高效地協(xié)作,為最后的項(xiàng)目目標(biāo)共同努力,是一個(gè)值得研究的問題。當(dāng)以合理的方式組織時(shí),一個(gè)團(tuán)隊(duì)可能發(fā)揮最高的效能,達(dá)到的效果是1加1大于等于2。然在相反的情況下,一個(gè)團(tuán)隊(duì)發(fā)揮的效能很低,這時(shí)1加1小于2。在極限情況下,整個(gè)項(xiàng)目只有一個(gè)程序員,該程序員掌握整個(gè)工程的所有信息和知識,雖然該程序員免去了與他人交流協(xié)調(diào)的額外時(shí)間,但由于只有一個(gè)人,開發(fā)時(shí)間將會相當(dāng)長。如果有多個(gè)程序員,看似可以并行地開發(fā),但實(shí)際上在軟件項(xiàng)目中,很多工作并不是可以充分并行化的,這使得一個(gè)人的工作必須以另外若干個(gè)人的工作為基礎(chǔ),并且由于單個(gè)人對整個(gè)工程可能不具有完整的信息,工程進(jìn)行時(shí)各個(gè)人間還要不斷地協(xié)調(diào)。合理地劃分并分配任務(wù),并使每個(gè)程序員間可以高效地共享項(xiàng)目信息,是提高團(tuán)隊(duì)運(yùn)行效率的重要途徑。
Chandler項(xiàng)目有著比較明確的分工,比如約翰·安德森是架構(gòu)師,麥卡斯科等人負(fù)責(zé)數(shù)據(jù)庫等。在共享信息和記錄項(xiàng)目的狀態(tài)方面,他們最初采用了郵件列表、blog,和wiki等多種方式。wiki在格式上的隨意性給信息的查找?guī)砹讼喈?dāng)大的不便。另一方面,由于有些開發(fā)者在wiki頁上貼便簽,有些向郵件列表發(fā)信息,另一些在blog上貼進(jìn)度。不同的信息共享方式導(dǎo)致整個(gè)項(xiàng)目的狀態(tài)無處可尋。后來,他們又用Bugzilla來統(tǒng)一管理工作,但支持者很少。最后,摩根·薩奇為團(tuán)隊(duì)開發(fā)了一套狀態(tài)管理器,才使得項(xiàng)目可以統(tǒng)一正式地管理。
Chandler項(xiàng)目聚集了頂尖的程序員,但耗時(shí)多年,最后不了了之,Kapor也在他的blog上承認(rèn)了失敗。原因是多方面的。我想第一個(gè)原因可能是Chandler的目標(biāo)太高了。他們想做一個(gè)幾乎是萬能的信息管理器,前無古人后無來者,這個(gè)目標(biāo)實(shí)在太難達(dá)到了。另外一方面,在某些基礎(chǔ)性的重大決策方面,他們也許做出了錯(cuò)誤的決定。比如用wxWidget作為構(gòu)造GUI的工具集,這導(dǎo)致了他們在GUI上很多bug,比如窗體閃爍問題。在組織和管理方式方面,他們采用的方式是大教堂模式與集市模式的混合模式,一方面想利用開源軟件開發(fā)中的依靠程序員的熱情進(jìn)行自發(fā)的開發(fā),另一方面又制定了詳細(xì)的工作進(jìn)度,并有明確的分工,但也許這并沒有真正集成兩者的優(yōu)點(diǎn),并沒有真正地提高效率。
總之,我們可以從Chandler項(xiàng)目學(xué)習(xí)到諸多經(jīng)驗(yàn),總結(jié)許多教訓(xùn)。雖然“軟件難做”,但通過科學(xué)的開發(fā)方法,應(yīng)該可以有效地降低軟件開發(fā)的復(fù)雜度。
11:15 AM?| Add a comment?| Permalink?| Blog it 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的现代软件工程系列 学生读后感 梦断代码 软件难做的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java url authority,J
- 下一篇: python怎么设置代码执行时间_pyt