以史爲鑑 軟件開發未來路在何方?

 【IT168 技術分析】1975年Frederick Brooks寫出了軟件項目管理的經典著作——《人月神話》。在這本書中,他最著名的觀點就是,軟件項目中並非總是人多力量大,他認爲增加更多的人到軟件開發項目中非但不會讓項目進展更快,相反會起到阻礙作用。理由是讓更多的人在一個項目上工作會因交流中的不順暢而造成諸多問題。
 
    在《人月神話》面世的五年之前,瀑布模型軟件開發方法就已經誕生。這種方法將成長工程學的觀點運用到軟件中。其指導思想是,首先收集需求,然後進行設計,接下來實施,然後經過測試,最終得到我們需要的軟件成品,這種方法指導下的軟件開發是一個線性的過程。
 
    自此以後在軟件開發方面我們已經走過了一段很長的路,已經學習到了許多相關的知識。我們現在知道,瀑布模型是一種有缺陷的方法,因爲它非常不靈活和不符合實際情況。在真實的世界中,軟件項目通常會存在定義不清和不斷變化的需求,要想一次把所有事情都考慮到是一件不可能的事情。取而代之的是,今天最好的軟件是使用敏捷方法來創建和改進的。這類技術可以讓軟件開發工程師根據業務和客戶的需要來不斷的繼續重新設計軟件。
 
    隨着現代編程語言的到來,諸如Java、PHP、Python和Ruby等,以及豐富的代碼庫和來自類似Amzon的空前的底層服務的出現,我們正在進入另一個革命性的階段。Digg、del.icio.us、YouTube等新的Web時代的典範只是由一小部分程序員所開發的。爲了創建今天的軟件,你只需要有一些真正有才華的程序員就可以了。在這篇文章中,我們將描繪出軟件開發走到今天的軌跡,以及未來將走向何方。

爲什麼瀑布模型會失敗
 
    非技術領域的人一般會認爲,軟件是一個非常靈活或容易修改的東西,認爲它沒有可以看得見摸得着的東西的約束,因此可以在任何時候任意的修改。當然,這是一種錯誤的看法。和任何機械系統一樣,軟件具有設計和架構;它並不像看起來那麼靈活。
 
    然而,加速發展的業務需要人們對軟件進行不斷的修改。老的開發方法已經完全不能滿足這種需要。使用瀑布模型,這些修改是不可能的,開發週期會非常長,系統會會耗費過多的人力、物力成本,而且通常情況最終開發出的軟件卻並不好用。


圖1、瀑布軟件開發模型


    瀑布模型落伍的問題在於傲慢自大。這種傲慢自大則來自於這樣一個因素:我們相信可以一蹴而就的製作出一個完美的系統。瀑布模型存在的第二個問題是它是一個成長性方法,不適合動態系統,而正是這種進化的思想導致了敏捷方法的推出。

敏捷方法—爲不斷髮展的軟件而生
 
    在90年代初,許多敏捷軟件開發方法就已經出現。儘管它們在細節上有所不同,在總體上思想上一致的:它們都認爲對於軟件開發方法需要進行重新思考。首先,軟件應該不得不接受被修改的現實。今天的設想和需求在明天可能已經發生變化,軟件需要迅速的響應這些變化。爲了面對這種挑戰,敏捷方式主張簡單化。製作能夠滿足今天需求的最簡單的系統,而且要做好明天修改的準備。


圖2、敏捷軟件開發原則


    敏捷方法所倡導的兩個技術值得特別關注:重構和開發測試。Martin Fower在他的經典著作中將一種開發思想優雅的稱爲重構(refactoring):在不改變現有代碼工作方式的前提下改善其設計。


圖3、重構


    重構可以允許敏捷的系統接受修改,同時又保持軟件的穩定和效率。如同一個裝潢設計師不斷的改變和完善你的傢俱的佈局,敏捷開發者爲了從整體上改進他的產品可以不斷的修改代碼。代碼被不斷的修改,可以確保我們最終擁有一個可以反映我們目前需要的最簡單、最合適的系統。
 
    使用敏捷方法創建的軟件系統要成功的多,因爲它們已經採取了改進,可以適應需求不斷改變這個問題。這些系統如同一個有生命的東西,可以不斷的變化以適應一直變化的需求。毫無疑問,敏捷方法在兩方面對今天我們開發軟件的思維方式帶來了很大的衝擊:動態編程和連續編程。

代碼庫讓軟件開發更輕鬆
 
    在我們發現了軟件開發的更好的方法的同時,我們還發現了更好的編程語言。C語言被C++所替代,接着又出來Java語言。Perl雖然非常偉大,但是PHP和Python更進一步優化了它。最近又除了Ruby,由於其在表達代碼時非常自然的特點,它已經成爲最受歡迎的編程語言之一。綜上所述,今天我們擁有了許多優秀的編程語言。
 
    儘管編程語言的選擇通常是一個敏感的話題,不過事實上我們選擇的並不是語言本身,而讓我們作出不同選擇的是語言所帶的代碼庫的強弱。是什麼讓Java把C++取而代之?是的,Java是一個更簡單的語言,但是在十年的時間中人們一直很好的使用C++,它難道不如Java?問題就在於代碼庫。C++從來沒有Java所擁有的標準庫。讓Java具備優勢的正是其豐富的可重用的代碼庫。PHP也是如此。它已經成爲最適合Web開發者的選擇,因爲它具有非常豐富的功能來支持Web和數據庫處理。


圖4、比比誰的庫裏東西多


    除了現代編程語言所帶來的豐富代碼庫外,開源運動也爲全球軟件界貢獻了大量的代碼。最爲顯著的是,僅僅Apache基金會自己就創造了大量的高質量可重用代碼。我們現在已經進入了一個新時代,我們在創建複雜軟件系統的時候,已經擁有了一個強大的基礎。現在我們既擁有了方法,又擁有了工具,這對未來的軟件開發意味着什麼呢?

軟件開發的未來:有才華的程序員的天下
 
    在軟件開發的的早期時代,人們爲了創建一個好的系統而苦苦奮鬥。越來越多的人加入進來以實現這個目標,卻使事情變得更加糟糕。但是,隨着最近社交網站的爆發,我們看到了一個新的有趣現象:少數開發者現在能夠創建可以被數百萬人使用的系統了。這是如何實現的呢?
 
    祕密在於這些系統只是一些有才華的軟件開發人員獨自完成的。只要遵循一點軟件開發的紀律並具有高漲的熱情,高效的工程師們能夠自己搭建出一個偉大、複雜的系統。
 
    掌握了一門現代編程語言,藉助於偉大的代碼庫和敏捷編程方法,許多在車間中的聰明的傢伙可以比那些由普通開發者所組成的正規軍更快、更好的把事情搞定。


圖5、軟件開發的三種利器


    在未來的數年中我們極有可能看到以下變化:
 
    •熱情的高級軟件工程師將供不應求,當然他們也將會得到更高的回報。
 
    •那些不具備偉大的編程技能的開發者將不得不另謀生路。
 
    •我們今天在社會軟件市場所看到的改變將逐漸在企業級別的市場上演。
 
    •軟件外包將具有越來越少的經濟意義。
 
    •計算機科學將繼續是一個競爭激烈受人尊重的領域。
 
結論
 
    可笑的是,軟件開發的發展完全遵循了《人月神話》中描述的軌跡。二十年前正確的的東西在今天依然適用,只是論證其正確的理由發生了改變。衆多令人驚喜的編程語言、基礎類庫與敏捷方法結合在一起,讓我們可以老的軟件開發教條中解放出來。只有少數偉大的工程師現在能夠成功的創建出具有高度複雜性的系統。技術最終又重新回到軟件工程學中。

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