培養 Android 軟體人才: 從落實軟體工程教育開始

jollen 發表於 June 29, 2011 11:24 PM

文/Jollen(原文刊載於零組件雜誌 2011 年 6 月號)

「開發 Android」是台灣科技業的全民運動了。未來幾年,如果要尋求更大的突破,並提升整體軟體開發能力,根本的做法與策略為何?個人看法是「落實軟體工程的基本教育」。以下是個人對於「軟體人才培養」的看法與心得,請不吝指教。

提昇 Android 軟體能量,我們的當務之急是:培養一批「架構分析」的工程師。架構分析需要考量的層面較廣,包括技術面與產品面。軟硬整合的工作,幾年前訴求的是硬體驅動程式與系統軟體,主要工作是效能的提昇與優化,這是從硬體層面思考的軟硬整合。從產品層面重新思考軟硬整合,涉及的層面會放大至中間軟體(Middleware、Application Framework)、應用程式(Application)以及網路服務等。

架構分析的重點工作之一,在於了解 Application Framework 與驅動程式(硬體)間的關係,使用各種現有的技術來整合系統,並提出更好的架構設計方案。架構分析的技術屬於「軟體工程」領域,而不是硬體或系統程式領域。但具備驅動程式與硬體經驗,可以幫助工程師找出更好的架構設計方法。

Android 是軟體框架的技術。台灣廠商得天獨厚的優勢在於,過去積累大量的IC設計、硬體主板、驅動程式與系統軟體經驗,若能補足軟體框架的分析與設計能力,未來競爭力將有很大的想像空間。因此,導入架構分析技術,培養架構分析工程師,理論上能讓我們發揮這項得天獨厚的能力,建立獨特的競爭力。這也是三星(Samsung)正在積極進行的工作。

落實軟體工程教育是根本,必須從教育做起。軟體工程所討論的「軟體框架」就像資訊科學的「位元運算」一樣,屬於通識學科。軟體框架技術,重度依賴這些基礎學科:物件導向(OO)、物件導向語言(OOP)、物件導向分析與設計(OOAD)、分層架構設計、設計模式(Design Patterns)等,這些知識缺一不可。

軟體框架 (Software Framework ) 的四大特性

以下針對軟體框架做簡單的說明,以做為研究「軟體框架」的起步點。軟體框架具備四項特性:控制點反轉、預設行為、不可修改性與擴充性。第一、控制點反轉(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 開發工作的我們,具備這四個基本觀念了嗎?從以上的介紹便能發現,未來如果要在 Android 應用框架開發上有所突破,軟體工程教育就必須要落實,畢竟這是軟體開發的基本學科。

讀者留言 (6)

  • Michael 於 June 30, 2011 23:45:

    說實在的,軟體架構人才台灣很多,
    但是被很多的老闆蹧踏...
    只要老闆不願意投資在這種看不見的事物上
    台灣軟體層面就沒有提升的機會

  • jollen 於 July 1, 2011 00:35:

    因為過去的成功經驗變成現在的包袱。

    有些大老闆已經願意正視軟體人的價值,是一個很大的進步;但靠自已還是實在點。不患人之不己知。

    軟體世代已經到來了。台灣的軟體高手確實不少,用期待的心情來看待。

  • fred 於 July 1, 2011 14:10:

    我重述下您的看法
    1
    提升整個台灣的IT
    需要軟件開發能力的提升
    這來自部份開發人員能力的提升
    2
    具體來說
    能力指的是能夠根據產品需求,整合硬件軟件的資源
    提升指的是之前是硬件軟件的協作太簡單,比如說沒有出現android這樣的產品

    這部份人如何提升tw的IT
    現在tw在基礎技術人才方面積累深厚,但是缺乏這種架構人才來整合資源,推到新的一階段
    3
    這裡您是以android經驗做的思考
    可以重新總結為
    tw要出現android類似的產品
    這個軟件可以整合現有的硬件軟件資源
    現在缺乏這樣的軟件開發人員
    這樣的軟件需要的能力是OOD,framework
    4
    理解了您的意思,但是我沒有自己的意見,因為我覺著資料不足,我鬆散的列出來一點讀後感

    強有力的系統級的方案,如android,一項可以帶動很多產業
    好的軟件,牽扯到硬件和軟件的,除了android,還有國外的如plan9,openmoko等
    現在具體到教育,應該是在學校/lab去研究大的系統級的軟件,先學習,再等待創造
    之所以要在大學階段,因為目前的受教育主要還是在大學完成的
    在大學,單單開幾門design pattern,OOD的課程概念是沒用的,工程性學科,後期還是要用大的工程案例去講

  • jollen 於 July 1, 2011 15:03:

    「現在tw在基礎技術人才方面積累深厚,但是缺乏這種架構人才來整合資源,推到新的一階段」,這句話講得真好

  • Heidi 於 July 4, 2011 12:12:

    對Jollen大所述深表同感
    參予android開發案子到現在
    真的是缺乏具備「架構分析」能力的工程師

  • 匿名 於 August 3, 2011 17:54:

    完全同意。

    但另一個角度來看,具有軟體架構常識的人,在現在的時空背景居然鮮少成為老闆?更別說成為上市公司。

    我們應該也要思考,如果軟體架構如果真的這麼重要,要如何讓他為我們帶來穫利?進而成立公司,打敗那些不重視軟體的公司?

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。