OO過時了嗎?軟件危機還有嗎?

今天隨便聊兩句最近覺得有點迷惑的問題。年齡大一點的程序員應該都經歷過大家都在談OO的年代。那個時候我們最熱衷的問題大概無外乎什麼是對象,對象間的關係,UML,等等技術話題,以及對於非OO設計的深深鄙視了。但是三十年河東,三十年河西,不知何時OO已經不是計算機科學領域的熱點話題了。取而代之的是雲計算,函數式編程。但是OO是否真的過時了?

我仔細地想了想這個問題,其實毫無疑問OO並沒有過時。第一,絕大多數流行的編程語言仍然是至少支持OO的。JAVA,C++,Python,都是支持OO的。當讓,對於C++和Python你可以選擇不用OO。第二,在做設計時,其實OO的設計方法仍然是主流的設計工具。序列圖,類圖,狀態圖,活動圖,等幾乎仍然出現在沒一個設計文檔中。所以在軟件開發中離開OO仍然是寸步難行的。

OO之所以變得不再那麼熱主要原因在於有更熱點的技術演化出來,雖然有的是基於OO的概念構建的。比如說函數式編程,其實很明顯FP並不能擺脫掉OO,但是對OO進行了演化。FP將OO的複雜關係簡化到關注於對象的轉換,也就是通過函數將一種對象轉換成另一種對象。當然FP並非是簡單的將OO簡化到某種關係上,實際包含了建立模型和編寫程序的理念上的變化,並且在不少領域可以帶來極大的好處,但FP裏仍然是基於OO之上的。再比如雲計算,偏重於分佈式的設計理念,和運營方式以及設計方式上的根本變革,可以說是一種更高層次上的革命,已經和OO不是同一個檔次的東西了。因此,OO被較少提及,其實並不是代表OOP和OOD已經過時了,該被拋棄了。而是仍然需要牢固掌握作爲程序員的基本技能。

另一個和OO有點像的話題是軟件危機。這個曾經被程序員們津津樂道的東西最近也較少被人提及。而曾經程序員們以軟件危機作爲自身價值的體現,難道現在軟件開發真的已經變成下里巴人都可以隨隨便便搞定的東西了嗎?

根據一篇文章所呈現的數據,在2015年,有19%的項目開發失敗,52%的項目處於帶有重大問題的發佈狀態,所以整體看軟件危機也似乎並沒有解除。那麼爲什麼軟件危機較少被提及呢?我覺得原因在於不同於1960年代,現在軟件開發項目從大到小多如牛毛。各個大公司僅是每年公司內部恐怕就有上千個項目被開發。那麼帶來的一個結果是軟件之間可替代性大大增強了。一個軟件開發失敗,你幾乎可以從公司內部或者外部找到不止一種可以暫時代替該軟件的軟件,當然壞處是可能要交錢,可能功能上不是那麼令人滿意,但是用總是可以用的。因此軟件開發失敗的影響大大降低。第二,現在的軟件開發工具和管理水平也比1960年大大提高了。從某種程度上說人們可以更好的控制軟件開發的失敗了。也就是即便一個軟件開發失敗,其實更早的得到預期,很少會掉到那個不停的投入更多資源卻越陷越深的陷阱中了。第三,現在很多的開發理念其實從客觀上也緩解了軟件危機所帶來的傷害,比如微服務的設計,還有OO的設計,都大大降低了局部軟件開發失敗所帶來的影響。

 

參考文章:https://medium.com/@ryancohane/has-the-software-crisis-passed-d45ce975a1e7

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