一、思維差異
蘋果之所以成為全球最賺錢的公司,關鍵在于產品的性能超越了用戶的預期,且因為大量可重用的核心領域知識,綜合成本做到了極致。Yourdon和Constantine在《結構化設計》一書中,將經濟學作為軟件設計的底層驅動力,軟件設計應該致力于降低整體成本。人們發現軟件的維護成本遠遠高于它的初始成本,因為理解現有代碼需要花費時間,而且容易出錯。同時改動之后,還要進行測試和部署。由于缺乏科學的軟件工程方法,不僅軟件難以重用,而且擴展和維護難度很大,從而導致開發成本居高不下。
更多的時候,程序員不是在編碼,而是在閱讀程序。由于閱讀程序需要從細節和概念上理解,因此修改程序的投入會遠遠大于最初編程的投入。基于這樣的共識,讓我們操心的一系列事情,需要不斷地思考和總結使之可以重用,這就是方法論的源起。
通過財務數據分析,由于早期決策失誤和缺乏科學的軟件工程方法,我們開發了一些周期長、技術難度大且回報率極低的產品,不僅軟件難以重用,而且擴展和維護難度很大,從而導致開發成本居高不下。
由此可見,從軟件開發來看,軟件工程與計算機科學是完全不同的兩個領域的知識,其主要區別在于人,因為軟件開發是以人為中心的過程。如果考慮人的因素,軟件工程更接近經濟學,而非計算機科學。顯然,如果我們不改變思維方式,則很難開發出既好賣且成本低的產品。
二、利潤模型
產品的BOM成本很低,而毛利又很高,為何很多上市公司的年利潤卻買不起一套房?房子到底被誰買走了,這個問題值得我們反思!
偉大企業除了愿景、使命和價值觀之外,其核心指標就是利潤,作為開發人員一個最大的痛苦就是很難精準地開發好賣的產品。因為很多企業普遍都不知道利潤是如何來的?所以有必要建立一個利潤模型,即“利潤=需求-設計”。需求是致力于解決“產品如何好賣”的問題,設計是致力于解決“如何降低成本”的問題。
代碼的優劣不僅直接決定了軟件的質量,還將直接影響軟件成本。軟件成本是由開發成本和維護成本組成的,而維護成本卻遠高于開發成本,蠻力開發的現象比比皆是,大量來之不易的資金被無聲無息地吞沒,整個社會的資源浪費嚴重。
為何不將復雜的技術高度抽象呢?如果實現就能做到讓專業的人做專業的事,AWorks就是在這樣的背景下誕生的。由于其中融入了更多的軟件工程技術方法,因此就能做到將程序員徹底從非核心域中釋放出來聚焦于核心競爭力。
三、核心域和非核心域
其實一個軟件系統封裝了若干領域的知識,其中一個領域知識代表了系統的核心競爭
力,這個領域被稱為“核心域”,其它領域稱為“非核心域”。雖然更通俗的說法是“業務”和“技術”,但使用“核心域”和“非核心域”更嚴謹。
非核心域就是別人的領域,比如,底層驅動、操作系統和組件,即便你有一些優勢,那
也是暫時的,競爭對手也能通過其它渠道獲得。雖然非核心域的改進是必要的,但不充分,還是要在核心域上深入挖掘,讓競爭對手無法輕易從第三方獲得。因為在核心域上深入挖掘,達到基于核心域的復用,這是獲得和保持競爭力的根本手段。
要達到基于核心域的復用,有必要將核心域和非核心域分開考慮。因為過早地將各個領
域的知識混雜,會增加不必要的負擔,從而導致開發人員騰不出腦力思考核心域中更深刻的問題。由于待解決的問題的規模一旦變大,而人腦的容量和運算能力有限,因此必須分而治之,因為核心域與非核心域的知識都是獨立的。
四、共性與差異性
如果沒有ARM公司的IP授權模式,則在設計MCU時勢必消耗大量來之不易的財富。雖然ARM公司的規模相對來說不大,但毫不影響ARM成為一個偉大的企業,其為人類做出的貢獻是有目共睹的。