「開發 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 應用框架開發上有所突破,軟體工程教育就必須要落實,畢竟這是軟體開發的基本學科。