軟件產品的終極目標是爲了實現用戶需求從而知足人們的須要。也正是爲了避免斷知足人們的須要使得軟件行業不斷向前發展。好比,新的算法(MPEG-一、MPEG-二、MPEG-四、H.26四、……)等的出現都在當時爲了知足不一樣的須要而被髮明。然而,人們的須要(行業發展的外部動力)卻並不是是軟件技術發展的惟一驅動力,由於它沒法解釋爲何業內的編程語言、軟件平臺與框架等會層出不窮,有的甚至給人「從新發明輪子」的感受。如何判斷「新輪子」的確是必要的呢?這與本文想重點關注的另外三大驅動力有關,重點關注它們的緣由源於其與咱們的平常工做更加息息相關。
我認爲,軟件技術發展的另外三大驅動力分別是簡化、複用和美化(行業發展的內部動力)。「新輪子」是否必要的關鍵,是看它在簡化、複用和美化這三個緯度上是否存在優於「老輪子」的內容。注意,這三大驅動力是站在程序員的角度去觀察的,而不是從軟件產品的最終用戶角度。由於最終用戶只關心產品的功能與使用體驗,而不關注產品的開發過程,更不關心產品是用「老輪子」抑或「新輪子」構建的。
簡化是應對日益複雜和規模龐大軟件的核心有效手段,由於「複雜的問題老是以簡單的方法解決的」(引自《大師亞當斯》)。簡化的關鍵不是「拍腦殼」作到哪是哪,而需運用咱們的洞察力去找到解決問題的關鍵路徑、去繁求簡。然而,洞察力的得到除了須要在某一技術方向上的長期積累外,更須要咱們不斷堅持就所面臨的問題全神貫注地思考,洞察力也所以成爲了行業的稀缺資源,也決定了真正能簡化軟件設計與實現的人少之又少。
簡化在業內有各類不一樣的表現形式,除了有方法論(好比,領域驅動開發、面向對象編程、設計模式和解耦),更有經過不一樣形式和程度的抽象(好比,C編程語言之於彙編語言、C++編程語言之於C編程語言、各類軟件平臺與框架)。有趣的是,這些表現形式在簡化的道路上自身卻帶來了更大的複雜度(複雜度是守恆的?)。
複用的好處相信衆人皆知,這使得咱們因避免「從新造(相同的)輪子」而得到更高的開發效率和更高質的產品。複用這一驅動力使得業內出現各類不一樣的開源軟件平臺與框架,也使得軟件企業長期致力於打造自有產品的通用軟件平臺與框架。對於複雜軟件來講,競品的背後其實是軟件平臺與框架之爭。
複用的表現形式不僅是構建軟件平臺與框架,還有各類編程語言的「語法糖」等。
簡單是一種美,但美不僅在於簡單,更有軟件的內在結構與代碼的表現形式,美化所以也成爲了驅動軟件技術發展的另外一大動力。我認爲軟件之美在於:1)對適應未來軟件功能變化而致使的代碼變動保持必定的彈性。這種適應能力實際上是對軟件內在結構的合理性提出了要求。2)代碼能做爲程序員間流暢溝通的載體與橋樑。這是對代碼的表現形式所提出的要求,也間接地指出編程的目的不僅是提供API或實現軟件功能。美化工做的不到位是不少軟件開發團隊深陷質量困境的重要緣由。
現實中,軟件技術的進步實際上是簡化、複用和美化三大驅動力的綜合結果,由於三者間並不是徹底正交。好比,簡化的結果可能也實現了美化,美化的結果可能也帶來了簡化,複用又爲咱們帶來了簡化。不管如何,一般其中一個是做爲技術發展的主導動機。程序員
推薦閱讀
算法
《軟件設計的真諦》編程
《駕馭你的「職場布朗運動」》設計模式