一、思维差异
苹果之所以成为全球最赚钱的公司,关键在于产品的性能超越了用户的预期,且因为大量可重用的核心领域知识,综合成本做到了极致。Yourdon和Constantine在《结构化设计》一书中,将经济学作为软件设计的底层驱动力,软件设计应该致力于降低整体成本。人们发现软件的维护成本远远高于它的初始成本,因为理解现有代码需要花费时间,而且容易出错。同时改动之后,还要进行测试和部署。由于缺乏科学的软件工程方法,不仅软件难以重用,而且扩展和维护难度很大,从而导致开发成本居高不下。
更多的时候,程序员不是在编码,而是在阅读程序。由于阅读程序需要从细节和概念上理解,因此修改程序的投入会远远大于最初编程的投入。基于这样的共识,让我们操心的一系列事情,需要不断地思考和总结使之可以重用,这就是方法论的源起。
通过财务数据分析,由于早期决策失误和缺乏科学的软件工程方法,我们开发了一些周期长、技术难度大且回报率极低的产品,不仅软件难以重用,而且扩展和维护难度很大,从而导致开发成本居高不下。
由此可见,从软件开发来看,软件工程与计算机科学是完全不同的两个领域的知识,其主要区别在于人,因为软件开发是以人为中心的过程。如果考虑人的因素,软件工程更接近经济学,而非计算机科学。显然,如果我们不改变思维方式,则很难开发出既好卖且成本低的产品。
二、利润模型
产品的BOM成本很低,而毛利又很高,为何很多上市公司的年利润却买不起一套房?房子到底被谁买走了,这个问题值得我们反思!
伟大企业除了愿景、使命和价值观之外,其核心指标就是利润,作为开发人员一个最大的痛苦就是很难精准地开发好卖的产品。因为很多企业普遍都不知道利润是如何来的?所以有必要建立一个利润模型,即“利润=需求-设计”。需求是致力于解决“产品如何好卖”的问题,设计是致力于解决“如何降低成本”的问题。
代码的优劣不仅直接决定了软件的质量,还将直接影响软件成本。软件成本是由开发成本和维护成本组成的,而维护成本却远高于开发成本,蛮力开发的现象比比皆是,大量来之不易的资金被无声无息地吞没,整个社会的资源浪费严重。
为何不将复杂的技术高度抽象呢?如果实现就能做到让专业的人做专业的事,AWorks就是在这样的背景下诞生的。由于其中融入了更多的软件工程技术方法,因此就能做到将程序员彻底从非核心域中释放出来聚焦于核心竞争力。
三、核心域和非核心域
其实一个软件系统封装了若干领域的知识,其中一个领域知识代表了系统的核心竞争
力,这个领域被称为“核心域”,其它领域称为“非核心域”。虽然更通俗的说法是“业务”和“技术”,但使用“核心域”和“非核心域”更严谨。
非核心域就是别人的领域,比如,底层驱动、操作系统和组件,即便你有一些优势,那
也是暂时的,竞争对手也能通过其它渠道获得。虽然非核心域的改进是必要的,但不充分,还是要在核心域上深入挖掘,让竞争对手无法轻易从第三方获得。因为在核心域上深入挖掘,达到基于核心域的复用,这是获得和保持竞争力的根本手段。
要达到基于核心域的复用,有必要将核心域和非核心域分开考虑。因为过早地将各个领
域的知识混杂,会增加不必要的负担,从而导致开发人员腾不出脑力思考核心域中更深刻的问题。由于待解决的问题的规模一旦变大,而人脑的容量和运算能力有限,因此必须分而治之,因为核心域与非核心域的知识都是独立的。
四、共性与差异性
如果没有ARM公司的IP授权模式,则在设计MCU时势必消耗大量来之不易的财富。虽然ARM公司的规模相对来说不大,但毫不影响ARM成为一个伟大的企业,其为人类做出的贡献是有目共睹的。