苹果之所以成为全球最赚钱的公司,关键在于产品的性能超越了用户的预期,且因为大量可重用的核心领域知识,综合成本大幅度降低。Yourdon和Constantine在《结构化设计》一书中,将经济学作为软件设计的底层驱动力,软件设计应该致力于降低整体成本。人们发现软件的维护成本远远高于它的初始成本,因为理解现有代码需要花费时间,而且容易出错。同时改动之后,还要进行测试和部署。由于缺乏科学的软件工程方法,不仅软件难以重用,而且扩展和维护难度很大,从而导致开发成本居高不下。
更多的时候,程序员不是在编码,而是在阅读程序。由于阅读程序需要从细节和概念上理解,因此修改程序的投入会远远大于最初编程的投入。基于这样的共识,让我们操心的一系列事情,需要不断地思考和总结使之可以重用,这就是方法论的源起。
通过财务数据分析,由于早期决策失误和缺乏科学的软件工程方法,我们开发了一些周期长、技术难度大且回报率极低的产品,不仅软件难以重用,而且扩展和维护难度很大,从而导致开发成本居高不下。
由此可见,从软件开发来看,软件工程与计算机科学是完全不同的两个领域的知识,其主要区别在于人,因为软件开发是以人为中心的过程。如果考虑人的因素,软件工程更接近经济学,而非计算机科学。显然,如果我们不改变思维方式,则很难开发出既好卖且成本低的产品。
产品的BOM成本很低,而毛利又很高,为何很多上市公司的年利润却买不起一套房?房子到底被谁买走了,这个问题值得我们反思!
伟大企业除了愿景、使命和价值观之外,其核心指标就是利润,作为开发人员一个最大的痛苦就是很难精准地开发好卖的产品。因为很多企业普遍都不知道利润是如何来的?所以有必要建立一个利润模型,即“利润=需求-设计”。需求是致力于解决“产品如何好卖”的问题,设计是致力于解决“如何降低成本”的问题。
代码的优劣不仅直接决定了软件的质量,还将直接影响软件成本。软件成本是由开发成本和维护成本组成的,而维护成本却远高于开发成本,蛮力开发的现象比比皆是,大量来之不易的资金被无声无息地吞没,整个社会的资源浪费严重。
为何不将复杂的技术高度抽象呢?如果实现就能做到让专业的人做专业的事,AWorksLP就是在这样的背景下诞生的。由于其中融入了更多的软件工程技术方法,因此就能做到将程序员彻底从非核心域中释放出来聚焦于核心竞争力。
其实一个软件系统封装了若干领域的知识,其中一个领域知识代表了系统的核心竞争力,这个领域被称为“核心域”,其它领域称为“非核心域”。虽然更通俗的说法是“业务”和“技术”,但使用“核心域”和“非核心域”更严谨。
非核心域就是别人的领域,比如,底层驱动、操作系统和组件,即便你有一些优势,那也是暂时的,竞争对手也能通过其它渠道获得。虽然非核心域的改进是必要的,但不充分,还是要在核心域上深入挖掘,让竞争对手无法轻易从第三方获得。因为在核心域上深入挖掘,达到基于核心域的复用,这是获得和保持竞争力的根本手段。
要达到基于核心域的复用,有必要将核心域和非核心域分开考虑。因为过早地将各个领域的知识混杂,会增加不必要的负担,从而导致开发人员腾不出脑力思考核心域中更深刻的问题。由于待解决的问题的规模一旦变大,而人脑的容量和运算能力有限,因此必须分而治之,因为核心域与非核心域的知识都是独立的。
如果没有Arm®公司的IP授权模式,则在设计MCU时势必消耗大量来之不易的财富。虽然Arm®公司的规模相对来说不大,但毫不影响Arm®成为一个伟大的企业,其为人类做出的贡献是有目共睹的。
尽管如此,没有软件的支持,那么硬件就是一坨废铁。由于需求五花八门,尽管人们也做出了巨大的努力,期望最大限度地降低开发成本,似乎人们期望实现美好的心愿遥遥无期,无法做到高度地重用人类通过艰苦努力积累的知识。由于商业利益的驱使,伟大企业的不伟大之处,企图将客户绑在他们的战车上,让竞争对手绝望,大凡成功的企业无不如此。
有没有破解的办法呢?那就是“共性与差异性分析”抽象工具。实际上,不管是基于何种内核的MCU,也不管是哪家公司的OS,其设计原理是一样,只是实现方法和实体(硬件和程序)不一样,但只要将其共性抽象为统一接口,差异性用特殊的接口应对即可。
基于此,我们不妨做一个大胆的假设。虽然PCF85063、RX8025T和DS1302来自不同的半导体的公司,但其共性都是RTC实时日历时钟芯片,即可高度抽象共用相同的驱动接口,其差异性用特殊的驱动接口应对。虽然FreeRTOS或μC/OS-II或sysBIOS、Linux、Windows各不相同,但它们都是OS,多线程、信号量、消息、邮箱、队列等是其特有的共性,显然QT和emWin同样可以高度抽象为GUI框架。也就是说,不管什么MCU,也不管是否使用操作系统,只要修改相应的头文件,即可复用应用代码。
由此可见,无论选择何种MCU和OS,只要AWorksLP支持它,就可以在目标板上实现跨平台运行。因为无论何种OS,它只是AWorksLP的一个组件,针对不同的OS,AWorksLP都会提供相应的适配器,那么所有的组件都可以根据需要互换。
由于AWorksLP制定了统一的接口规范,并对各种MCU内置的功能部件与外围器件进行了高度的抽象,因此无论你选用的是Arm®还是DSP,以高度复用的软件设计原则和只针对接口编程的思想为前提,则应用软件均可实现“一次编程、终生使用、跨平台”,显然AWorksLP给你带来的最大价值就是不需要重新发明轮子。
如果仅有OS和应用软件框架就构成了生态系统,这是远远不够的。在万物互联的时代,一个完整的IoT系统还包括传感器、信号调理电路、算法和接入云端的技术,可以说异常复杂包罗万象,这不是一个公司拿到需求就可以在几个月之内完成的,需要长时间的大量积累。
ZLG在成立之初就做了长期的布局,我们并没有将自己定位于芯片代理或设计,也没有将自己定位于仪器制造,更没有将自己定位于方案供应商,但随着时间的推移和时代的发展,经过艰苦的努力自然而然地成为“工业互联网生态系统”代表品牌。这不是刻意而为的,而是通过长期的奋斗顺理成章的结果。
ZLG通过“芯片+AWorksLP”设计了高附加值的模块、板卡和高端测量仪器,通过有线和无线通信接口接入ZWS IoT-PaaS云平台,,实现大数据处理,构成工业互联网生态系统。
其商业模式既可以销售硬件,也可以销售平台,还可以针对某个有针对性的行业提供系统服务于终端用户。与此同时ZLG将在全国50所大学建立工业互联网生态系统联合实验室,通过产学研的模式培养人才服务于工业界,还可以通过天使投资打造ZLG系,帮助更多的人取得更大的成功,推动“中国智造2025”计划的高速发展。
任何一个组织和系统的成功都离不开专家和通才的鼎力配合与奋斗,这12年一路走来很不容易,但欣慰的是AWorksLP生态系统的开发,培养了一些专家和核心骨干人才。我深深地体会到卓越人才的价值,怎么形容都不为过,所以今后我的主要工作就是寻找和发现卓越人才,为他们提供一个衣食无忧的,可以静下心创新的平台,大家共同努力改变这世界某一小部分,欢迎自我推荐或读者向我推荐有理想有抱负的人才。如果你有心,你一定能找到我。
这套丛书命名为《嵌入式软件工程方法与实践丛书》,其最新动态详见www.zlg.cn(ok138太阳集团中国官方网站),全部以电子版的形式发布。
目前已经完成《程序设计与数据结构》、《面向AMetal框架与接口的编程》和《面向Aworks框架与接口的编程》(上),后续还将推出《面向AWPI框架和接口的编程》、《面向AWUI框架和接口的编程》和《面向ZWS IoT框架和接口的编程》系列图书。