軟件產品的終極目標是為了實現用戶需求從而滿足人們的需要。也正是為了不斷滿足人們的需要使得軟件行業不斷向前發展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出現都在當時為了滿足不同的需要而被發明。然而,人們的需要(行業發展的外部動力)卻并非是軟件技術發展的唯一驅動力,因為它無法解釋為什么業內的編程語言、軟件平臺與框架等會層出不窮,有的甚至給人“重新發明輪子”的感覺。如何判斷“新輪子”的確是必要的呢?這與本文想重點關注的另外三大驅動力有關,重點關注它們的原因源于其與我們的日常工作更加息息相關。
我認為,軟件技術發展的另外三大驅動力分別是簡化、復用和美化(行業發展的內部動力)。“新輪子”是否必要的關鍵,是看它在簡化、復用和美化這三個緯度上是否存在優于“老輪子”的內容。注意,這三大驅動力是站在程序員的角度去觀察的,而不是從軟件產品的最終用戶角度。因為最終用戶只關心產品的功能與使用體驗,而不關注產品的開發過程,更不關心產品是用“老輪子”抑或“新輪子”構建的。
簡化是應對日益復雜和規模龐大軟件的核心有效手段,因為“復雜的問題總是以簡單的方法解決的”(引自《大師亞當斯》)。簡化的關鍵不是“拍腦袋”做到哪是哪,而需運用我們的洞察力去找到解決問題的關鍵路徑、去繁求簡。然而,洞察力的獲得除了需要在某一技術方向上的長期積累外,更需要我們不斷堅持就所面臨的問題全神貫注地思考,洞察力也因此成為了行業的稀缺資源,也決定了真正能簡化軟件設計與實現的人少之又少。
簡化在業內有各種不同的表現形式,除了有方法論(比如,領域驅動開發、面向對象編程、設計模式和解耦),更有通過不同形式和程度的抽象(比如,C編程語言之于匯編語言、C++編程語言之于C編程語言、各種軟件平臺與框架)。有趣的是,這些表現形式在簡化的道路上自身卻帶來了更大的復雜度(復雜度是守恒的?)。
復用的好處相信眾人皆知,這使得我們因避免“重新造(相同的)輪子”而獲得更高的開發效率和更高質的產品。復用這一驅動力使得業內出現各種不同的開源軟件平臺與框架,也使得軟件企業長期致力于打造自有產品的通用軟件平臺與框架。對于復雜軟件來說,競品的背后實際上是軟件平臺與框架之爭。
復用的表現形式不只是構建軟件平臺與框架,還有各種編程語言的“語法糖”等。
簡單是一種美,但美不只在于簡單,更有軟件的內在結構與代碼的表現形式,美化因此也成為了驅動軟件技術發展的另一大動力。我認為軟件之美在于:1)對適應將來軟件功能變化而導致的代碼變更保持一定的彈性。這種適應能力其實是對軟件內在結構的合理性提出了要求。2)代碼能作為程序員間流暢溝通的載體與橋梁。這是對代碼的表現形式所提出的要求,也間接地指出編程的目的不只是提供API或實現軟件功能。美化工作的不到位是很多軟件開發團隊深陷質量困境的重要原因。
我認為,軟件技術發展的另外三大驅動力分別是簡化、復用和美化(行業發展的內部動力)。“新輪子”是否必要的關鍵,是看它在簡化、復用和美化這三個緯度上是否存在優于“老輪子”的內容。注意,這三大驅動力是站在程序員的角度去觀察的,而不是從軟件產品的最終用戶角度。因為最終用戶只關心產品的功能與使用體驗,而不關注產品的開發過程,更不關心產品是用“老輪子”抑或“新輪子”構建的。
簡化是應對日益復雜和規模龐大軟件的核心有效手段,因為“復雜的問題總是以簡單的方法解決的”(引自《大師亞當斯》)。簡化的關鍵不是“拍腦袋”做到哪是哪,而需運用我們的洞察力去找到解決問題的關鍵路徑、去繁求簡。然而,洞察力的獲得除了需要在某一技術方向上的長期積累外,更需要我們不斷堅持就所面臨的問題全神貫注地思考,洞察力也因此成為了行業的稀缺資源,也決定了真正能簡化軟件設計與實現的人少之又少。
簡化在業內有各種不同的表現形式,除了有方法論(比如,領域驅動開發、面向對象編程、設計模式和解耦),更有通過不同形式和程度的抽象(比如,C編程語言之于匯編語言、C++編程語言之于C編程語言、各種軟件平臺與框架)。有趣的是,這些表現形式在簡化的道路上自身卻帶來了更大的復雜度(復雜度是守恒的?)。
復用的好處相信眾人皆知,這使得我們因避免“重新造(相同的)輪子”而獲得更高的開發效率和更高質的產品。復用這一驅動力使得業內出現各種不同的開源軟件平臺與框架,也使得軟件企業長期致力于打造自有產品的通用軟件平臺與框架。對于復雜軟件來說,競品的背后實際上是軟件平臺與框架之爭。
復用的表現形式不只是構建軟件平臺與框架,還有各種編程語言的“語法糖”等。
簡單是一種美,但美不只在于簡單,更有軟件的內在結構與代碼的表現形式,美化因此也成為了驅動軟件技術發展的另一大動力。我認為軟件之美在于:1)對適應將來軟件功能變化而導致的代碼變更保持一定的彈性。這種適應能力其實是對軟件內在結構的合理性提出了要求。2)代碼能作為程序員間流暢溝通的載體與橋梁。這是對代碼的表現形式所提出的要求,也間接地指出編程的目的不只是提供API或實現軟件功能。美化工作的不到位是很多軟件開發團隊深陷質量困境的重要原因。
現實中,軟件技術的進步其實是簡化、復用和美化三大驅動力的綜合結果,因為三者間并非完全正交。比如,簡化的結果可能也實現了美化,美化的結果可能也帶來了簡化,復用又為我們帶來了簡化。無論如何,通常其中一個是作為技術發展的主導動機。
了解三大驅動力有助于我們更理性地看待軟件技術的發展,同時作者也想暗示,我們在軟件開發工作中應從簡化、復用和美化三方面著手,而不能停留在“軟件能用就行”這種“原始需求”上。否則,我們的行為就是不符合軟件技術發展的“潮流”哦!