「开发 Android」是台湾科技业的全民运动了。未来几年,如果要寻求更大的突破,并提升整体软件开发能力,根本的做法与策略为何?个人看法是「落实软件工程的基本教育」。
提升 Android 软件能量,当务之急是培养一批「架构分析」的工程师。架构分析需要考虑的层面较广,包括技术面与产品面。软硬整合的工作,几年前诉求的是硬件驱动程序与系统软件,主要工作是效能的提升与优化,这是从硬件层面思考的软硬整合。从产品层面重新思考软硬整合,涉及的层面会放大至中间软件(Middleware、Application Framework)、应用程序(Application)以及网络服务等。
架构分析的重点工作之一,在于了解 Application Framework 与驱动程序(硬件)间的关系,使用各种现有的技术来整合系统,并提出更好的架构设计方案。架构分析的技术属于「软件工程」领域,而不是硬件或系统程序领域。但具备驱动程序与硬件经验,可以帮助工程师找出更好的架构设计方法。
Android 是软件框架的技术。台湾厂商得天独厚的优势在于,过去积累大量的IC设计、硬件主板、驱动程序与系统软件经验,若能补足软件框架的分析与设计能力,未来竞争力将有很大的想象空间。因此,导入架构分析技术,培养架构分析工程师,理论上能发挥这项得天独厚的能力,建立独特的竞争力。这也是三星(Samsung)正在积极进行的工作。
落实软件工程教育是根本,必须从教育做起。软件工程所讨论的「软件框架」就像信息科学的「位运算」一样,属于通识学科。软件框架技术,重度依赖这些基础学科:面向对象(OO)、面向对象语言(OOP)、面向对象分析与设计(OOAD)、分层架构设计、设计模式(Design Patterns)等,这些知识缺一不可。
软件框架具备四项特性。第一、控制点反转(Inverse of control),整体来看,控制应用程序执行流程的人,是软件框架,而不是应用程序本身的函数呼叫关系。这与一般循序式的结构化语言(如:C语言)很不同。
第二、默认行为(default behavior),软件框架本身都有预先设定好的行为。这些行为通常都是预先定义好后,才释出软件框架。所谓的「行为」范围广大,例如同步呼叫、异步呼叫、阻塞式I/O等。
第三、不可修改性,这是软件框架相当重要的观念。以 Android 为例,其 Application Framework 的程序代码「不能」修改,开发者「不能直接改 Code」。意思是下载 AOSP(Android Open Source Project)程序代码后,不能直接修改框架层的程序代码。若直接修改 Android 应用框架程序代码,在编译时期便会出现警告讯息。直接修改 Android 应用框架程序代码也会造成 API 兼容性的问题,可能无法通过 CTS,导致产品无法上市,不可不重视。
最后是扩充性,在不能直接修改软件框架的前提下,如何「加入自已的功能」至 Android 框架呢?正确的方法是以覆载(override)方式进行扩充(extend)。覆载是面向对象领域的基本知识,也是开发 Android 应用框架的重要技术。撰写「应用程序」补上软件框架所没有的功能,也是「扩充性」的另外一个做法。从以上的介绍便能发现,未来如果要在 Android 应用框架开发上有所突破,软件工程教育就必须要落实,毕竟这是软件开发的基本学科。