產業發展需要更長遠的研發眼光/洪士灝
眼前的業界,是朝向「質」的方向發展,這是可喜可賀的事;至於「量」的方面,關鍵是業界和政府能否把握機會行動、以及學生能否看清現實,而我只能盡人事聽天命,無法預測未來。
2016年3月22日,梁文耀博士來到台大講Linux Kernel(Linux核心技術)。
筆者在此先來暖一下場子,提一下Linux Performance Tools(Linux效能工具),順便說說故事,免得學生覺得,這個老師都找業師來上課,自己到底懂不懂?而且故事或許可以告訴大家,從以前到現在有什麼變遷,不要食古不化、學錯重點了。
同時,大家也可想想,為什麼要學習Linux Kernel?學了之後有什麼用?如何學習?Linux Kernel這麼龐大,要花多少時間來學?如果學不得法,事倍功半。
故事的開端
在早期,很多台灣的學生和工程師學Linux Kernel,只是為了寫裝置驅動程式(device drivers);因為系統代工廠開始採用Linux作業系統,要讓系統能夠在新的硬體上工作,必須找一群人來寫驅動程式。下游的系統晶片、周邊晶片、周邊設備廠,也得幫自家產品寫驅動程式給客戶用。
這些年來,有不少資工系的學生,在畢業後去業界負責寫驅動程式。例如聯發科技,在業界的風評不錯;使用聯發科技的晶片的客戶只要夠大,在驅動程式方面就會得到迅速確實的服務;而幕後當然就是那些刻苦耐勞的系統軟體工程師了。一旦有程式臭蟲(bug),他們就會在最短時間內解決掉。
十多年前「嵌入式系統」頗紅,教授只要宣稱有做嵌入式系統,學生就趨之若鶩,這就是衝著台灣系統晶片和消費性電子產品熱潮而來的發展。
那時政府投入系統晶片的資源多、做嵌入式系統教學研究的人也分得到一杯羹;學生畢業後進了像聯發科技這類的公司,也可以賺不少錢,好像大家都很開心。
那時很多人學做嵌入式系統,只是看了幾本書、追蹤過Linux Kernel、寫寫驅動程式,讓系統會動、功能正確就好;在學術界做嵌入式系統研究,很多人為了發表論文跑去做系統裡面的工作即時排程、節能省電的研究,搞一堆數學模型和「啟發式研究」(heursitics)。
這些研究成果雖然也很厲害,但是跟當時業界的技術層級距離頗遙遠。
距離遙遠?是的,大多數代工廠只需要按照客戶的規格要求,把系統做出來;至於系統上面跑什麼應用,就不是他們要擔心的事了。
「只能碰驅動程式」
以HTC為例,早期代工做Windows Mobile手機,最在乎的就是如何選料、做出價廉物美的硬體;而整支手機軟體中唯一能改的,就只有驅動程式了──這是2006年我們到HTC訪問時,軟體部門主管回應我的問題時說的話,因為「微軟只讓他們碰這個」。
因為學界被要求要證明自己是世界一流,而業界有很多限制,所以學用落差很大;而兩邊又都很忙、很少溝通,但大家似乎不以為意。
或許是因為當時的電子業錢太好賺,業界只要學校開一些簡單的實作課程,幫學生打基礎就好。反正業界做的也不是什麼偉大的研發工作;只要有了基礎,到業界就能在短時間上手。那些眉眉角角的know-how,入行久了自然會知道。
因此,政府出錢、用補助設備和課程開發經費的方式,鼓勵學界開一系列強調實作的嵌入式系統課程。
基礎和需求的拉扯
筆者在2005年回到台大教書,看到這種情況覺得很不以為然;所以同樣是做嵌入式系統的教學研究,我特別強調複雜系統的設計、效能分析、以及優化。
我陸續開了一系列課程,包括:
輸出裝置與驅動程式設計
嵌入式處理器設計
嵌入式多核心系統與軟體
計算機效能最佳化
平行計算機系統與應用
Linux系統核心與應用
……等等,嘗試訓練一些高階系統實務人才;但絕大多數賺錢的業界公司並沒有珍惜這些技能、也沒有想提升他們自己的境界。原因很簡單,因為搶錢都來不及了。
舉例來說,我在2005年去演講的時候,一位技術學院的教授當場嗆我:
你講這些對我們沒什麼用,我們只要訓練出能寫USB裝置驅動程式的學生,他們就有做不完的工作了。
我認為他看到的職場現狀接近現實,當時需要大量的工程師來幫忙,做這些做不完的系統軟體開發工作[footnote]〈嵌入式系統商機大,卻鬧人才荒〉(2005/01)[/footnote]。
但邏輯上的問題是:這兩年有做不完的工作,未必代表未來二十年都有工作。
我們不應該只教那些,業界也不應該只做那些;大家現在都知道了,膚淺技術的代工業已經大不如前。即使代工,也得有高階技術才能生存發展;那些不上不下的公司,要如何生存發展呢?這是個大問題。
過了十年,現在還是有很多系統廠還無法轉型和升級,仍然以代工製造硬體、搭配膚淺的軟體為主。
上個月有一家公司找我去諮商,公司大部分的軟體技術都仰賴微軟的供應鏈,自身的軟體研發能力薄弱。說到為何不用Linux呢?他們一下子說不敢用、一下子說看不懂市場、一下子又說找不到人才。
我說,一直這樣的話,你們也只能讓微軟予取予求,果然講到他們的痛點。
以前讓微軟予取予求,就當作是繳稅;現在利潤如此微薄,這個微軟稅繳起來就很痛。我看那個態勢,似乎是要我介紹人給他們,但我猜想,這公司恐怕僱不起Linux人才,也不見得有給人才發揮的空間,所以就謝謝再聯絡了。
先天不足,如何後天補強?
不久前,有位考上碩士班的學生來找我,他雖然是名校畢業,但並不是資工系,全是靠自學。
他原本在某家高雄軟體園區的公司上班,做月薪22K的軟體開發工作;一開始聊,他完全聽不懂我在講什麼,他自承是靠補習考上研究所,但對系統有興趣。
其實,不只一位學生,這幾天來了好幾位考上碩士班的學生,對系統的認識薄弱到令我訝異。所以我花了不少時間告訴他們如何迎頭趕上,包括看看我們在「開源系統軟體」臉書社團上分享的資訊和課程內容。
言歸正傳,話說Linux Kernel這麼龐大,要花多少時間來學?這幾位靠補習考上研究所的碩士生,連Linux都沒用過,要怎麼在短時間內學會做系統研究?
1. 用力學就對了
如果想做系統,只要能抽出時間,用力學就對了!不要管要花多少時間,just do it!
或許,有了一百小時的研習,可以讓你入門;幾百小時,可成為某個部分的高手。接下來就繼續補充不足、與其他高手過招、漸入佳境。
如果想快速成為真正的專家,每天10小時、3年一萬小時,應該有機會。不過各位看看Jserv(黃敬群老師)這麼厲害,我猜他應該一天有超過十小時的時間,花在作業系統相關的議題上,搞了30年,大概是10萬小時。
2. 利用社群資源
一般學生在考試陰影下,潛意識中某種程度會敵視老師和同儕;因為一個逼你念書、一個跟你搶名次。殊不知,到了研究所,老師和同儕都是寶貴的資源;甚至為了有更多資源,還要設法到網路社群上找。
國內外有很多開源碼的討論社群,都可以加入;尤其是最新的資訊,不可能等到人家寫書或是開課來教你,一定要懂得上社群網路去搜刮最新資訊和參與討論。
3. 挑戰高階(複雜)的實作問題
我認識很多聰明人,給他抽象、簡化過的難題,他們可以解得不亦樂乎;但是真實世界是複雜多元的,如果不會解析複雜問題、化繁為簡的話,根本無從解起。這是現代高階人才該具備的重點能力之首:解決複雜問題的能力(Complex Problem Solving)。
有些資訊系畢業的學生,連上千行的程式都沒看過幾個,要如何探討軟體架構(software architecture)?如果在學校能看懂Linux Kernel架構、能了解其運作、嘗試解決其中的問題,也算是個開始。
比如,找一個大數據分析應用,設法解決其效能問題。
由於很多大數據應用是架設在Linux系統上,這時候解析Linux Kernel的能力,對於改進系統在做資料儲存、資料交換上的效能非常重要。
當然,處理大數據所用的中介軟體也很重要,所以我們之後也會來看Hadoop、Spark之類的中介軟體。但我希望大家可以舉一反三,否則只是學到皮毛而已。
效能工具(Performance Tools)的使用,是在實務上分析效能的關鍵。要解決問題,先要有資料;要有資料,最好是能自己動手蒐集,不必等人。要知道,電腦系統裡面有很多效能監控機制,使用者可以透過效能工具取出這些資料加以分析。
但是,系統中有哪些效能工具?如何使用效能工具?如何分析蒐集到的資料?解決這些問題常常需要專業的知識。例如,上圖來自於介紹Linux Performance Tools的網頁,作者就是開顧問公司的。
我們當年在SUN的系統上,開發了很多效能工具以及分析的方法,後來幾位SUN的工程師出去,開了這家顧問公司。
我回到台大之後,也訓練學生做類似的工作,幫業界解決效能問題;但是因為過去代工業太賺錢了,願意花時間和傷腦筋創新的大公司不多,所以看到一大堆機會沒有被業界把握住,實在可惜。
務實的深度研發
這幾年新創蔚為風氣,但許多贊助新創的機構的思維還是沒變;為了快速回收,只敢投在淺薄的技術研發上。
不過,最近一些資金開始關注到某些「務實做有深度研發的項目」,燃起希望的火苗。例如,有找我們解決效能問題的公司變多了、題目的素質也提升了。
我有學生畢業後到VMFive和Appier去幫忙解決效能問題;台灣開始有以「解決效能問題」為開發項目的新創公司,例如Skymizer,翟神開的和沛最近也重金禮聘幾位我認識的Linux專家,希望有好的發展。
台灣的競爭力應該是在人才的素質上,而不是人力的數量上。
我想,眼前的業界,是朝向「質」的方向發展,這是可喜可賀的事;至於「量」的方面,關鍵是業界和政府能否把握機會行動、以及學生能否看清現實,而我只能盡人事聽天命,無法預測未來。
所以,請各位同學、業界朋友、長官不要問我「現在投入系統研發的行列,未來會不會大發」。我只能說,學生要做的話,就好好做到出師;業界要做的話,就卯足全力衝刺。
政府學界要做的話,就給足資源;不上不下的半吊子,恐怕是難以呈現出價值的。