電腦效能應用與安全研究室 Performance, Applications and Security Lab


我們的研究範圍很廣,從嵌入式系統、手機應用、一直到雲端計算、商務應用、資訊安全都有做。
我們的合作研究夥伴很多,包括聯發科、IBM、中研院、資策會,還有和台大、清大、交大的教授合組研發團隊
,包括高階應用處理器架構研究、虛擬化技術、異質計算、系統軟體等重要技術的研究與創新,我們很關切台灣人才與產業的未來。

顯示具有 課程 標籤的文章。 顯示所有文章
顯示具有 課程 標籤的文章。 顯示所有文章

2019年3月17日 星期日

大學生的專業技能學習

幾天前跟一位我的大學部專題生聊到他的近況,有些聊到的東西可以拿出來鼓勵同學們致力於學專業技能,而非盲目地讀書、考試、拿學位之後才發現世界根本不是自己想的那樣。

他並非資訊、電機本科生,大學成績也不怎麼樣,但是推甄上某頂尖大學的資工研究所,原因之一應該是他在大學幾年到過多家公司實習所累積的程式設計的實務經驗與能力;原因之二大概與他常於開源社群貢獻以及在個人部落格上分享心得有關。

他前一陣子到某家科技公司從事近乎全職的實習工作,薪資六字頭,只比全職工程師略少些。公司高層主管欣賞他,願意栽培他。所以他覺得好像不必去唸研究所,在公司也可以學到很多。

其實他走的是技職體系的路線,只是現在台灣絕大多數的學生都去唸大學,甚至覺得要拿到碩士學位才有好工作,所以反倒忽略了「工藝技術」的專業能力。多年前有很多一流學生讀台北工專,對業界有頗大的貢獻,但後來教育部把技職學校「升級」成大學,限縮了這條路。

剛好我上週才談過美國的狀況,許多資訊科技公司和情治單位都到高中和大學去招募資質極佳的人才,及早進到公司後自己來培育。據說Google台灣分公司也招募了不少大學生,做類似的事情。不過,這些人為了要有更好的發展,都會不斷學新東西。

其實在現代的軟體應用開發環境中,程式設計的工作有很大的部份是熟能生巧的「工藝技術」。站在巨人的肩膀上,利用最新的程式語言、程式庫、程式工具,發展出有產業價值的軟體,這種機會太多了。

反觀大學和研究所教的東西,很多是告訴學生「巨人」的運作原理、內部構造,以及如何讓巨人更大更強,所以有演算法、作業系統、計算結構等課程,原意是厚植學生的基礎,讓他們不只知其然,還要能知其所以然。

頂尖研究型大學資訊系的目標之一,是培育擁有紮實的學術基礎和足夠的實習經驗的學生,讓他們有能力做尖端的技術研發,幫業界改良或發展新型的巨人、提高業界的研發水準。具備這種專業能力的人,身價非常高。

可是一大堆教授為了升等,學生為了考試和學位,成天在這些知識中打轉了好幾年卻還是爬不到巨人的肩膀上,因為誤以為通過考試、拿到學位就行,所以反而困在巨人的肚子裡面!

我們都知道,醫學系的課程,除了講授知識之外,經常要實際操作、臨床考試,還要幾年的實習之後才能執業,並不是會讀書就好。厲害的醫生,時常還要吸收新知,才能站在巨人的肩膀上為人治病,道理也是相同。

所以,我給一些有才能也有心致力於培養專業能力的學生們的建議是:

1. 資訊系的學生,最好是學術和實務能力兼備,思考如何深化專業能力和嘗試做一些非資訊本科生不會做的高價值工作。

2. 非資訊本科的學生,如果對程式設計很有天份和興趣,可以透過各種自學、社群、實習的管道,學得某些業界需要的高價值軟體實務開發專長,也未嘗不可。

3. 無論本科與否,如果我們想說「學位不重要」這句話,就必須有辦法呈現出技能的水準出來,否則別人如何賞識和重用你呢?

4. 即便已經有了不錯的開始,還是要設法持續學習,因為新的東西不斷出現,舊的東西可能越來越不值錢。時常問自己,要學習研究什麼東西,讓自己得以呈現更專業、更出色的技能呢?

2016年7月30日 星期六

資訊科技教育、課綱制訂與後續發展

很多朋友知道我幾年前就鼓吹要在中小學加入資訊科技教育,教導運算思維。我的好朋友成大資工蘇文鈺教授甚至還親自去偏鄉教小朋友,但我們都不認為這件事能夠以傳統方式進行,對於規劃和實施的方式有過一些討論,讀者可參考 [1]。在討論中,我提到:
「台灣要做的話,應該要找在教育理念上獲得大家認同的、對資訊科學素養卓越的人來全職全力來領導和推動整件事。或許台灣學界應該設法推舉出一個工作團隊,並且賦予這個足夠的資源、權力、責任,去完成這個任務,包括教材、教具、教師訓練,否則蘇教授提到的問題,勢必會出現,而且一旦引入不合適的課程和教師,不只是搞砸了資訊教育的美意,而且不容易收拾後果。」
然而,我不是政府長官,以上這些話,雖然被轉載於網路媒體上,例如[2],但大長官聽不聽得進去,就不知道了。有時候,長官即便知道應該怎麼做,但礙於政治現實,也不做了那麼多,只好妥協,所謂無魚蝦也好,先求有再求好。
我們這類專門做系統效能優化的工程師,最不想看到的就是「先求有再求好」這種事,因為這樣做的下場,就是有了之後求好不得,只好擺爛;但諷刺的是,我們常常在「先求有卻好不了」的情況下進場救援。
十多年我在Sun工作的時候,有些產品部門的心態就是「先求有再求好」,例如為了趕進度,產品開發部門先把密碼加速器做出來,效能優化的事情之後再說。可是軟硬體的架構不搭配好,結果就是不好,只好聯絡我們效能工程部門來善後。受到教訓之後,這個產品開發部門從設計之初就會希望我們參與,以免重蹈覆轍。後來Oracle購併了Sun,非常重視這個部門。
話題回到資訊教育,既然我身為鼓吹者,所以在政府開始規劃中小學資訊科技教育的時候,只要找我,我自然義不容辭、盡可能參加討論,希望能提早發現問題加以解決,也因此對於規畫的過程略知一二,也知道制訂課綱的種種限制。
首先是法規面的問題,高級中等教育法第四十三條明定:「中央主管機關應訂定高級中等學校課程綱要及其實施之有關規定,作為學校規劃及實施課程之依據。前項課程綱要之研究發展事項,由國家教育研究院辦理之」。國民教育法第八條亦規定:「國民小學及國民中學之課程綱要,由教育部常設課程研究發展機構定之。」[3]
依據上述法規,教育部必須對資訊科技教育訂出課程綱要(簡稱課綱)之後,中小學才有依據做後續的規劃和實施,而課程綱要之研究發展,明訂為國家教育研究院(簡稱國教院)負責。又依據國家教育研究院組織法第二條第四項中亦明訂國家教育研究院之掌理事項包括:「課程、教學、教材與教科書、教育指標與學力指標、教育測驗與評量工具及其他教育方法之研究發展」。故國家教育研究院負有國家專責課程發展基地之任務與使命。[3]
由此可知,國教院的職責重大,也有很多經驗豐富的專業人員在裡面,然而由於資訊科技教育幾乎是一個全新而且快速演進的項目,所以本來就不容易掌握,但我想長官可能沒有聽進去我的逆耳忠言,或是籌措不出資源,或是為了配合其他科目的課綱修訂,必須在很短的時間內以傳統方式完成這個重大的職責。
在資訊科技的課綱起草初期,國教院有詢問我的意見,我以當面與書面告知想法。基本上,我說不要教太難、教學時間要足夠、課程要設計好、師資要準備好,要做的話就要有充分的資源來做,不然會做不好。但在正式規劃資訊科技課綱草案時,我並沒有參與。我想這理所當然,因為我不是教育專業,沒修過教育學分,沒正式教過中小學。
但後來我看到某一版的課綱草案後,在我臉書上發表個人看法 [4],還險些被朋友們誤會。我明白政府也沒拿多少資源出來做規劃,只是給一點點出席費要參與的專家學者提供建言,這些專家學者平時有很多要忙的事情,已經犧牲很多寶貴時間來擬訂課綱,因此我這個沒有參與的人,最好不要隨便發言讓外界覺得他們沒好好做事。「不在其位,不謀其政」,大概就是這個意思。
不過現在是民主、網路時代,我一來只是以個人立場發言,二來沒想佔位子、搶資源,三來只是對事不對人,幫忙釐清問題、促進討論而已。況且擔心的是,今天我沈默不說話,到了政策要啟動時,民眾看到訂出來的政策不周延,是不是會出來罵人?事後再改(先求有再求好),所需要面對的問題更大。
還好長官和朋友都能溝通,沒造成重大誤會,但我也瞭解參與者難為之處。由於課綱中必須以簡要條目的形式呈現,如圖一所示,因此很難將綜合反映各方多元的意見。例如說某某原理要教多深?演算法要用什麼方式教?每個項目的比例佔多少、需要多少教學時數?這些都沒辦法在課綱中陳述。

圖一: 課綱中所制定的學習內容 (部分列表)














我個人比較屬於自由派,我認為課綱不需要規定太多項目,老師或是教材可以彈性地做補充,但是有些專家學者並不如此認為,覺得如果某個項目不放入課綱,教材就不會編進去;就算編進去,如果升學考試不考,學生也不會好好學。
我有理由猜想(理由容後再敘述),由於每位專家學者都見多識廣,自然會認為很多東西都是重要的;不同的專家學者一起開會,不好意思當面說別人認為重要的東西不重要,所以到最後,幾乎是採用「聯集」的概念來放進專家學者的意見,於是課綱中的項目多到會嚇人,有些關心資訊教育的朋友看到後傻眼。
定了課綱之後,某些長官們覺得應該可以透過下一階段,也就是在課綱所訂定的各學習主題之下編寫課程教材的時候,與編教材的專家、學者溝通,建議出所應學習之重要概念。其中一項作法,是透過師大資訊教育所的研究案,發出問卷請教專家學者(包括好幾位中學資訊科教師)的意見。我參與了其中三次的問卷調查,以及最後的討論會。圖二是節錄自第三次問卷調查結果。

圖二: 問卷調查,關於課綱的各學習主題之下所應學習之重要概念





讀者從圖二可以發現,到了第三次問卷,21位專家學者仍對於「1.1.1 程式語言的種類」有不同的意見,3位認為非常不適合、3位認為不適合、7位持平、5位覺得適合、3位覺得非常適合。通常,認為不適合的人,會提供修改建議,然而由於要80%以上的人認為不適合才能決議刪除此項目,所以大部分有爭議的項目都留在上面刪不掉,這就是為何我猜想在先前制定課綱時會成為聯集的理由。
最後到現場開會時,我發言主張盡可能刪減,但只有不到一半的專家學者出席,所以能改動的有限。最後只能刪除一些明顯太難的東西,以及修改有爭議項目的文字。如圖三所示,我們在1.1.1加了「(高、低階語言)」來表達「只要教學生高、低程式語言的差異性和用途即可,不要叫他們背誦世界上有哪些重要的語言」。我們把1.2.5的歸納改為舉例,因為歸納太過抽象。至於1.3.2的二維陣列,某些人覺得很重要,希望再加上「概念」兩字之後保留,但我們還是決議刪除,所以放上了灰色的陰影。

圖三: 問卷討論的結果範例





由於這樣的經驗,我能夠理解為什麼中小學有這麼多要學的東西,大概是因為這些東西都是某些專家學者認為非常重要的東西。程序來說,課綱的制訂應該沒有什麼瑕疵,召集人在行政工作上也負責盡職,找來的專家學者也是一時之選,做上述的研究也有一套標準的研究方法,但結果仍然是大堆頭式的內容,這大概就是所謂的傳統教育文化。
只不過近年強調適性學習、發展專長、自學,大學很多科系逐步減少必修學分,認為與其嘗試盡量列入必修,貪多嚼不爛,不如給學生自由空間,以選修課來建構個人的專長,也希望學生發展出自學的能力,因為在這個時代快速變遷的趨勢下,學校不可能教授各種將來會用到的知識,所以要懂得自學。因此我個人不贊成以制式的填鴨式教學內容來教資訊科技,雖然課綱上有很多項目,但還好資訊科技雖是必修,但非大學必考項目,所以還能夠希望學校和學生平常心教之學之。
如果我們以平常心來看待這個過程,我把個人所知寫出來,大家討論一番,或許將來在課綱的制定過程上有改進的空間,或許有助於接下來教材編寫和教學實施的規劃,總之希望能幫得上忙。至於接下來的工作項目才是重頭戲,在在都需要專業人士花時間去做,教科書的編撰會交由書商,書商會找專家;教科書的採用是各地教育主管機關的職責,各地教育主管機關會找專家;而資訊教師的訓練養成與教學方法的塑造,牽涉到人的因素,則是更複雜的問題,可能需要花很大的心力去解決,更不是少數幾個人就能夠做好的。其中有很多的部份需要民間的參與,而關心資訊教育的企業也可以協助和贊助相關的工作,不能凡事都只靠政府。
[4] 關於資訊教育課綱,http://hungsh-ntucsie.blogspot.tw/2⋯⋯

2016年3月3日 星期四

改行做軟體與自學新專業

某位臉友來信談到轉行自學的問題,由於是常見問題,在徵得他本人同意之下,我公開回答他的提問,也希望諸位先進給與指教。

Q. 臉友提問:

我是您Blog & FB 的追蹤者,長時間閱讀老師所寫的文章,而老師也時常點出業界的弊病及提出改善的方法,台灣須從高資本低技術轉型到低資本高技術產業,已是刻不容緩的事情。

本身研究所畢業之後從事顯示器背光模組機構設計(兩年),近年來因技術被大陸追趕,不斷被搶單,而高層只想賺可以立竿見影的easy money,不願意長期投資先端的研發。因為硬體開發成本高的特性,底下的工程師縱使再有想法也無力影響公司改變,最後是失望離開。

因想要轉職&政府補助,在資策會進修過java web設計,目前做銀行AP的軟體撰寫。但是從硬體產業跳到軟體產業,發現若不從事深度技術的研發,依然是在做代工。若是想往系統底層技術發展,勢必須在系統軟體鑽研,而根據老師你近日的文章表示,此領域若不能全心投入很難有顯著的成果。

雖然本身透過下班之餘自學,但以非相關背景進入此領域還是感受到困難。由於您在平行運算&異質系統有深刻的研究,希望可以請教老師有關學習&如何踏入這行的建議。

A. 我的回覆:

在這個資訊全球化的時代,如果只是會做一些眾多人都會的東西,技術門檻不高的話,那麼無論做甚麼,所可能獲得的利益,恐怕還是會和硬體代工業或是傳統產業差不多,除非有個富爸爸或是政府補助。甚至由於資訊科技的進步極快,較為浮面膚淺的東西過不了多久就被淘汰,因此要在資訊界安身立命,談何容易?

如果細心看我的文字,我從來不隨便鼓勵年輕人走資訊科技這條路的,我只是說資訊界目前需要人才,而且在可預見的將來還持續提供人才發揮能力的舞台,但未必所有人都適合走這條路。事實上,這條路並不容易走,如果只是偏重技術研發,沒辦法在生態系中佔據一席之地的話,到頭來還是只能以技術代工,甚至在一窩蜂搶訂單,無法向上發展的情況下,就會遇到您所見的窘境。

我所謂的在生態系中佔據一席之地、向上發展,並不是說一定要擴大營業額、做品牌行銷。那是一般的迷思,覺得代工廠賺錢後,就應該放大利潤、朝品牌發展、直接面對消費者。我認為,以台灣本身的市場規模和經濟實力,在大型消費市場上做品牌行銷,需要大量資本和商業操作,如果沒有技術門檻的保護,很容易踢到鐵板。

因此,其實我並不反對代工,只是我們總是希望工作可以換取更高的報酬。代工業者如果精益求精,提高自己與競爭者的技術差距,就有機會獲得較高報酬。例如台積電、鴻海這些公司,雖然是代工,但他們長期在製造技術上所投入的研發,讓他們得以在生態系中佔據一席之地。

但是要向上發展的話,不只要會做漸進式的改進,而是要能解決原本不會,或是更複雜的問題。例如組裝iPhone的工廠和設計iPhone的Apple相比,一個強調代工製造的能力,一個強調「Think Different」,各有各的專業,但專業的報酬有頗大的差別。雖然很多人都覬覦Apple的高獲利能力,但這並非台灣的廠商能夠快速趕上的領域。

單單只是換個方向朝「軟體」發展,如果不能提高技術門檻的話,也很難提昇工作的報酬。美國的公司,在十多年前就將一些軟體的工作外包到印度去,而印度也欣然地扶植其軟體代工業,然而迄今印度的軟體技術以及從業人員的收入,仍然大幅落後美國。

印度的軟體代工人員的薪資不高的原因是軟體越來越複雜,用途越來越廣,但提高軟體價值的關鍵不在於軟體本身,而在於如何使用軟體開拓新產業,或是提昇既有產業的競爭力。因此,如果我們不改變想法,一頭熱投向軟體產業,做一些低技術門檻的軟體代工,那結果可能就如同您所描述的「從硬體產業跳到軟體產業,發現若不從事深度技術的研發,依然是在做代工」。因此,我希望國內在做軟體研發的時候,能夠找到一些方法來提昇產業的競爭力,包括與特定產業領域知識的深度結合,或是在軟體技術上產生差異化。

想與特定產業領域知識的深度結合,以您目前做銀行AP的軟體撰寫的工作為例,如果只是被動接受委託寫出銀行所需的軟體功能,那就是代工;如果您能夠深切了解銀行的需求,主動提出可能提昇銀行競爭力、因應未來需求的軟體方案,那就是目前最熱門的金融科技(FinTech)了。同樣是幫銀行寫軟體,工作性質有很大的不同。如果要做金融科技的話,就要有能力跟得上這門快速進步中的新興領域,如同我一開始講的,從業者本身若是沒有兩下子,談何容易?

那麼要在軟體技術上產生差異化,可以怎麼做呢?方法頗多,如我昨天在「開源系統軟體」社團上貼文提到,我們可以把改善開源軟體效能的方法分為四大類:

1. 改進演算法,這個是大多數CS的學生都可以試試看的

2. 加入JIT編譯技術加速,範例請參考Jim Huang (黃敬群老師)的筆記(註)

3. 改以平行化,分散式計算或異質運算加速

4. 改進資料流動的效率,例如以DMA/RDMA傳送資料,以caching存取常用資料,以memory取代硬碟存放大數據

要解決實務問題,招數不嫌多。第一招是最多人可以嘗試的,像是參加程式設計競賽一樣,要想到別人想不到的最佳的演算法,難度頗高;第二招需要懂一些動態編譯器的技術,屬於比較硬一點的軟體技術;第三招需要搭配計算機架構/平行計算/網路/GPU,也有其難度;第四招則需要打破傳統以計算為主的思維,在系統層面觀察實際資料的流動,再以軟硬體綜合規劃的方式去改善效能。

然而,要精通上述的每一種招數,都需要花費時間去學習和應用,很難速成。黃敬群老師昨天來我課堂上講三小時,學生起碼要花三十小時才能有起碼的了解,都是學生們必須自己嘗試去學習的,如果所有的東西都要等老師來教,那將來要如何面對快速進化的開源系統軟體?

今天有位大四的學生對我說,他聽了黃老師的課之後非常惶恐,覺得自己懂得太少。我勸他不要太擔心,因為業界有太多人基本的軟體功夫不夠扎實,很少跟社群接觸,根本不知道自己懂太少。知道自己懂得少,有幸遇到明師願意指導,就好好把握學習機會,只要一路學下去,就有機會成為專家。

此外,要使用上述招數之前,必須有能力解析資訊系統和複雜軟體的功能和效能,這些也不是短期間能夠精熟的東西。而且,就算能精通以上的技能,我們還是要回歸到應用面,想辦法用這些技能去改善高價值的軟體應用,提昇產業的競爭力,這樣才會得到重視。

所以說,您問到要如何踏入這行、鑽研系統軟體,這固然有其困難之處,但我想更關鍵的問題在於,您是否了解這個行業快速變化的特質,是否能夠適應這種不斷在演進的場域,願意花多少時間來學習成為專家,以及未來想如何展現身手、持續精進?如果只有下班之餘能夠自學,也不是不可行,但要在有限時間和資源之下迎頭趕上,恐怕難度頗高。

我個人已經浸淫在資訊科技將近三十五年了,到現在還是時常要涉獵新領域、學習新知識、思考新問題,才能維持自己在這個行業的競爭力和敏銳度,如果將此視為興趣,自然會樂此不疲,但若以此維生養家活口,那麼可能還是再考慮一下吧?

延伸閱讀: 關於產業轉型的部分,我另外寫了一篇網誌,可以參考一下: https://www.facebook.com/notes/洪�⋯⋯

(註)

https://ntuoss.hackpad.com/Mar-1-20⋯⋯

https://embedded2015.hackpad.com/Co⋯⋯

2016年1月10日 星期日

人工智慧太厲害了,我們該怎麼辦? (Part II)

昨天概說了人工智慧過去和未來性 (註1),在技術面上著墨不多,所以今天來談談技術面。

首先是關於「摩爾定律」,我在半年前寫了一篇「後摩爾定律的世界和台灣的產業發展」(註2),有興趣的人可以參考一下。我當時說:

「說白一點,摩爾定律是錢砸出來的。摩爾定律的黃金時代,開始於個人電腦急速成長的時代,但個人電腦的效能在十年前就已經能夠滿足大多數個人,所以「世界」對於摩爾定律的期待逐漸降低,雖然智慧手機和平板的異軍突起,但主要是希望摩爾定律能夠提供更高的性能耗能比(power-performance),然而這幾年手機平板已趨於飽和,也沒看到真正個人所需要的高性能耗能比的應用(killer apps),再加上像Qualcomm、Samsung這樣的公司上在推出新的行動晶片上屢次因為晶片過熱而踢到鐵板,所以在既然沒有消費者的需求,晶片製造商也裹足不前的情況下,自然就會降低對於摩爾定律的挹注。」

「我想,在缺乏資金挹注的情況下,摩爾定律在技術上能延續的機率不高,即便不少研究者熱中於此。除非有真正大眾需要的應用,或是再度出現軍備競賽,否則很難改變摩爾定律的終結。」

但任何事都可能有例外,不能太鐵嘴,還好我最後有加上一個以「除非」開頭的句子。人工智慧是否能成為大眾真正需要的應用,或是用於軍事用途? 我想其可能性還不小,所以我在這幾個月跟一些業界朋友說,不要再搞那些傳統的消費電子產品了,要想想如何將「智慧」加進產品之中。

怎麼把「智慧」加進小型的裝置之中? 基本上,有下列方法:

(1)由小型裝置自己做
(2)藉由網路把工作送到集中式的伺服器去做
(3)藉由網路把計算工作送到周遭多台機器分工合作
(4)上述三種的組合

先說「自己做」行不行? 現在很多人手上的手機,能做多少事情? 其實手機可以做很多事情,只是會遇到過熱和電量不足的問題,但是這兩個問題影響較大的是較長時間使用的應用,如果我們要的是「即時性的智慧」,那麼問題應該比較像是「如果手機在五秒內全速執行,能夠解決那些問題」?

舉例來說,即將出現在手機市場上的Qualcomm旗艦處理機Snapdragon 820有多厲害呢? 據說(註3) 這顆晶片的 4核CPU比前一代S810的8核快35%,省30%的電,支援600Mbps的無線網路,其中的GPU也快了40%、省40%的電,還支援OpenCL 2.0。不只如此,他還有一顆名為Spectra的影像訊號處理機(image signal processor),可以加速影像處理和支援電腦視覺(computer vision)。

要自己做,可以,要想辦法把各種運算能力整合到晶片上。要讓手機晶片有智慧,不能只靠跑在CPU上的純軟體,一定不夠力的。有些應用可藉由GPGPU來加速以資料為主的運算(data-parallel computing),例如做機器學習的開源軟體,Mahout和Caffe,都可以用OpenCL程式碼跑在GPU上。另外,以影像和聲音為主的應用,則最好設法在源頭解決問題,也就是說在感測器紀錄影像或聲音之後馬上送到訊號處理機,使用專門特殊化的(specialized)計算架構來提升效率,其實電腦視覺也可算是初步的人工智慧。

從上述的例子,可以看到「特殊化」處理機的趨勢越來越明顯,因為用CPU跑純軟體太沒有效率。時下很多人討厭寫C程式,喜歡用像是Java, Javascript, Python之類的高階語言來開發應用,但是對於開發與效能息息相關的系統軟體的人來說,光是懂得寫C程式可能還不夠,要懂得multithread、OpenCL、CUDA才會善用多核心的CPU/GPU,要懂得訊號處理機的架構和專用語言才能發揮其能力,甚至要會使用「硬體描述語言」才能用FPGA來加速計算。

我預測未來這十年,是大家各憑本事、各顯神通,想盡辦法來打造智慧系統的黃金年代。我們將會看到百家爭鳴,在計算架構和軟體設計上不斷推陳出新,快速發展。當然,演算法也極為重要 -- 再厲害的運算能力,也挽救不了愚笨的演算法。而且,針對大系統所開發的演算法和軟體,不見得適用於小機器,例如把Google釋出的Tensorflow裝在小機器上,可能會發現它的效率不彰,所以各公司可尋找屬於自己的利基市場(niche)。

當然,如果不限定要帶在身上,智慧型裝置也可能出現在車上、電線桿上的監視錄影機。因為體積和電力供應較大,我們有機會將百倍於手機的運算能力放進這些裝置。所以某些人工智慧的應用,可能會先出現在這類裝置上,例如前幾天的CES 2016,我們看到NVIDIA和Qualcomm都推出車用的處理機(註4)(註5),來搶攻這類市場。

這是新興市場,我希望台灣的業界人士看到以上幾段會頗為振奮,尤其是那些在硬體公司寫系統軟體的朋友們,這是值得把握的機會。如果您能夠針對某個智慧型應用設計出又快又省電的系統,那就有機會逐鹿天下。不過呢,要把握機會,必須先搞清楚這些研發工作將會需要「緊密的垂直整合」,最好有一個人才濟濟的團隊,針對應用的需求規劃系統軟硬體,要有「軟體為主,硬體為輔」的思維,最好要找到軟硬兼備的系統架構師(system architect)來領導研發工作,如我在這篇專訪上談到的(註6) 。

當然,我們也可如第二種方法,「藉由網路把工作送到集中式的伺服器去做」,來提升小型設備的智慧。但首先,網路傳輸需要時間,不利於即時性的應用;其次是隱私性和安全性的問題,我們未必希望讓大公司那麼清楚的知道我們的一舉一動,所以也可能不希望把全部的工作送到集中式的伺服器去做;再來,極為耗費運算資源的工作,除非Google能夠由此獲的廣告利益,否則它未必願意提供免費的伺服器資源來幫大眾做這個,所以並非所有應用都會有免費服務。

同時,在資料中心做人工智慧的運算,更需要高效率的加速技術。因此現今很多大公司都在積極找高手來加速需要大量運算的服務,例如微軟有個專門以FPGA加速資料中心服務的研究團隊Catapult,陸續發表加速搜尋引擎和機器學習的技術(註7)。

第三種方法與第二種方法的差別,在於利用較近的機器做計算來縮短時間,選擇能夠信任的機器來保護隱私,以及以互助會的模式來分享互惠資源。我們做過這類模式的相關研究,也實際建構出系統,例如這篇將Android程式中大量數據處理的工作轉移其他機器的作法(註8)。雖然目前還缺乏需要這種模式的高運算量行動應用,不過我相信在未來身邊需要人工智慧的時候,應該會有這類的需求和做法。

實際的作法,也可能是以上三種方法的排列組合。至於如何排列組合,就考驗系統架構師的能力。台灣現在很缺系統架構師的人才,缺到業界連如何善用系統架構師、去哪裡找這些人、如何培養這種人都不知道。以前做代工不需要這種人才就算了,如果現在還不知道,那就難做了。現在業界有不少地方都說要做人工智慧,但我奉勸想加入這類團隊的朋友,先看看帶頭大哥懂不懂,有沒有兩把刷子再說。

(註1) 人工智慧太厲害了,我們該怎麼辦?
臉書版: https://www.facebook.com/shihhaohung/posts/1072464976129323
部落格: http://hungsh-ntucsie.blogspot.tw/2016/01/blog-post.html

(註2) 後摩爾定律的世界和台灣的產業發展
臉書版: https://www.facebook.com/shihhaohung/posts/968793609829794
部落格: http://hungsh-ntucsie.blogspot.tw/2015/07/blog-post_13.html
轉載於Inside: http://www.inside.com.tw/2015/07/14/post-moores-law-and-the-industry-development-in-taiwan

(註3) Qualcomm's Snapdragon 820 INSANE Specs & Features DETAILED
http://www.knowyourmobile.com/samsung/qualcomm-snapdragon-820/23126/qualcomm-snapdragon-820-release-date-specs-features-android-n-launch

(註4) NVIDIA推出車用人工智慧電腦NVIDIA DRIVE PX 2,號稱性能比 Macbook Pro強150倍http://www.techbang.com/posts/40654-nvidia-at-ces-not-flagship-graphics-card-but-strong-for-a-taxi-containing-artificial-intelligence-supercomputers-nvidia-drive-px-2

(註5)
【CES 2016】高通發表 Snapdragon 820A 車用處理器,具機器智能神經學習系統
http://technews.tw/2016/01/08/qualcomm-snapdragon-820a-automotive-processor/

(註6) 深化產學合作!向沒有能力領導創新的大企業說掰
http://www.bnext.com.tw/article/view/id/38432

(註7) Project Catapult
http://research.microsoft.com/en-us/projects/catapult/

(註8) Shih-Hao Hung, Tien-Tzong Tzeng, Gyun-De Wu, Jeng-Peng Shieh. A Code Offloading Scheme for Big-Data Processing in Android Applications, Software—Practice and Experience, first published online May 2014.
http://onlinelibrary.wiley.com/doi/10.1002/spe.2265/abstract

2015年12月30日 星期三

資訊科學納入通識課程--與蘇文鈺教授的虛擬對談

我一直很關心這個議題,希望大家來做點事,但對於政府部門的執行能力頗不放心。原因是,這樣重大的事情,政府要做的話,必須提供足夠的資源,找第一流的人來全力以赴,而不是只找一群像我這種沒有在中小學教過幾天書的大學教授來訂課綱、編教科書。

我的好朋友成大蘇文鈺教授,帶著研究生去偏鄉教弱勢小孩寫程式,累積了相當的實務經驗,他的話自然比我和很多大學教授更值得借鏡。

蘇教授這幾天在臉書上陸續發表一些想法(註一、註二),以下我把蘇教授的話貼出來,同時在段落之間穿插一些我個人的想法,以虛擬對談的方式與蘇教授相呼應:

蘇: 對於美國總統歐巴馬簽署將資訊科學納入通識課程的教育法案,我的心情很是複雜。原因很多,先講憂心的地方好了。「若願意分享,請把我的文字也轉貼過去,謝謝!」

洪: 我的心情也很複雜,在此貼了您的文字,也分享我的想法,來呼應您的看法。

蘇: 首先,這個法案宣稱要每個孩子都可以成功,但是以過去美國的教育的走向,其實是優勢的越優勢,弱勢的越弱勢,也就是跟多年來美國社會的結構往不對稱的M型化傾斜的走向是一致的。要知道,資訊教育所需要的資源,不管是教材,教具與師資,與過去的傳統教學科目重疊的不多,這是一個國家需要大量投入的,既然是需要大量投入資源,那麼可預見的就是,優勢家庭普遍會取得更多優勢,這是資本主義社會的特點,除非在資本主義的骨子裡添加一點變因,這麼走下去的結果會是貧富更為不均。

洪: 美國資本主義在貧富不均上的問題,我們都看到了,但是台灣在貧富不均上更加的嚴重。美國的作法,基本上是藉由他們的優勢成為國際強權,從世界各地獲得利益,只要這些從國外得來的利益在某部分能夠分配給弱勢者,弱勢者日子還過得下去,就沒甚麼好抱怨的。台灣多方面師法美國,卻沒有像美國那樣利用優勢人才和重視技術的研發從國外賺取大量利益,在利益的分配上又有各種政治問題,導致現在不均的局面,被犧牲忽視的是(1)貧窮線以下的人們以及(2)缺乏發展機會的年輕人。但問題是,政經上層幾乎被壟斷,誰來照顧弱勢和給年輕人機會? 現在大家也都對貧富不均的狀況很反感,所以,有些所謂「對國家好」的政策,大家會去區辨,究竟是對有錢人好,還是對窮人家好? 政府說利大於弊,究竟站在誰的立場談利弊得失? 但是就資訊教育來說,如果國家不教這些,那麼誰來教這些弱勢的學生? 靠蘇教授和一群樂意犧牲奉獻的人來教,也只能照顧到部分的弱勢學生,所以我們還是希望在教育上要有一套方法來引進資訊教育。

蘇: 上一節討論到的資源問題,硬體方面,不管是教材與教具,只要是有心人願意做,都不成問題。以 Program the world兒童與少年程式設計教學計劃來說,我們已經計劃每年出四到五個開放教材,並搭配三到四個教具,所有的資料與程式碼都會在明年我們的網站上下載得到。但是真正的問題卻在於師資。優良的資訊教育師資之難尋不在於我們找不到程式設計師來教,而是一來程式設計師可能不善於教學,二來,好的程式設計師的薪資很高,我們如何吸引他們願意參與程式教學的行列呢?

洪: 教材與教具,需要找到兼具有心和有能力的人。美國有不少這樣的人在做這件事,例如Scratch是MIT發展出來的。台灣要做的話,應該要找在教育理念上獲得大家認同的、對資訊科學素養卓越的人來全職全力來領導和推動整件事。或許台灣學界應該設法推舉出一個工作團隊,並且賦予這個足夠的資源、權力、責任,去完成這個任務,包括教材、教具、教師訓練,否則蘇教授提到的問題,勢必會出現,而且一旦引入不合適的課程和教師,不只是搞砸了資訊教育的美意,而且不容易收拾後果。

蘇: 再來,因為是通識課程,以我目前為止在大學裡開通識課程的經驗,多數學生因為學校規定要修通識課而修課,從第一堂就滑手機到最後一堂。我知道,課程無法吸引學生,老師也該負責任,但是要每一個老師都能把課程上得有趣以達到每一個人都成功的難度太高了。我們到底想教學生什麼樣子的資訊科學應該有得吵的,檢討過去的通識課程到底達到什麼效果應該是很重要的一步。

洪: 的確,現在的學生普遍希望老師把課程內容用風趣幽默的方式表達,讓他們能夠產生興趣;普遍希望老師以淺顯易懂的方式解說,讓他們容易理解吸收。然而這也產生了學生在學習上偏向於趨易避難的問題,因此在當前大學生學程式設計都有某種障礙的情況下,要中小學生學習程式設計,其難度更是高。因此,教材、教具、教學不能憑空想像,也不應從國外直接移植現成教材,必須考量實際現場狀況。

蘇: 所謂通識課程通常無法要求深入與難度,假如我們只是希望透過通識課程吸引真正有天份的學生進入資訊領域,那麼類似Hour of code這類的課程就足夠了,實在不必大張旗鼓地弄個通識,只要授權校內有興趣的老師,用網路上可以找到的這樣子簡短的教材,自己花一點時間練習,然後對全校學生開選修課就可以,甚至外包也許都可以。若是有特別有興趣的學生,在學校鼓勵成立社團,在每一個地區應該都有鄰近大學,也許設立大學先修課程也行。只要資訊夠充分,生命會找到出路的。

洪: 一般人常有的誤解,認為中小學程式課程是為了培育資訊科技人才的,但其實不然;也有人誤以為資訊教育就是教文書處理、試算表等工具,也是誤解。首先,程式設計課程,教的是基本科學和工程概念,啟發學生解決實務問題、做中學,培養跨領域的基本能力,不是教工具的使用。其次,有些程度好、對資訊科學有興趣的學生,會想學得更多,那麼應該有其他的管道輔導他走上這條道路,例如到線上課程、到大學修課等,但是不應該為了少數人而塞入很多艱澀的教材,讓一般人一起陪讀。

蘇: 但是,若是我們希望學生是真的能用資訊科技來幫他們做一點事,甚至輔助他們在不管是資訊,程式,甚至是其他學科方面的進步,那麼幾個小時的程式設計教學恐怕用處不大。要做到這個地步,課程必須有一定的強度與時數。過去 Program the world兒童與少年程式設計教學計劃在偏鄉的課程就是如此,因為我們的目標是技能,而非課外社團活動。因此,即使是課業成績在全班後段的學生,還是有可能學得不錯。我們也明白,這樣子的上課方式不可能適合所有學生,但是既然打算是訓練技能,俗話說,錢不是萬能,沒錢就萬萬不能,目標就是指向有以程式設計能力謀生的可能,這也是偏鄉的孩子最需要的,要不然就不必做了。

洪: 我想,資訊科學和其他科學較為不同的地方之一是「廣泛的實用性」。這不是說其他科學不實用,而是說資訊科學太好用了。就拿我念過的電機系為例,如果沒有學過一大堆課程,個人是很難做出好東西。然而,懂得程式設計,搭配其他領域的知識,就有機會解決問題,因此這樣的技能,即使學生學藝不精,或是日後不做電腦科學家工程師,還是一項有用的技能。

蘇: 我們也很清楚,不能只教程式,還要教導實做的能力,所以Maker教學也在我們的課程裡面,也就是除了bits,也要atoms。我們的用意並不在學生要樣樣皆通,而是,一來,讓學生廣泛接觸資訊科技,二來,儘量讓不同天賦的學生都可以找到資訊科技對她有幫助的部分,三來,學生可以選一兩樣他最擅長的技術切入即可。所以,我們能力與懂的範圍有限,必須結合其他專長團隊,一起加入教學。但是,這樣子範圍能跨超過一個領域的大學前教育的教學團隊,即使在全世界也並不多。即使有,也會被優勢團體先一步網羅,要做到每個人的成功,好難。

洪: 既然資訊科學教育是一項有用的技能,課程中應該要強調時做,適度引進Maker做中學的作法,讓學生動手,發想創意,或是團隊合作。事實上,資訊科學可能是世界上最開放、創新速度最快、最樂於與人合作的學門,我們有最多的開放資源、最多的創新、影響遍及各領域,因此學生提早接觸這個領域,應該有機會感染到這些文化。這樣的文化,是台灣最缺乏的,如果能資訊科學能為中小學注入新動力,那就再好不過的。

蘇: 若是以Program the world的方式,夠多的課程,夠高的師生比,傾我們的全力,最多只可以照顧兩個偏鄉,而且是以村為單位,不是鄉。學生人數很難超過50人。從2014年起,我們接到超過十五個單位的訊息,要我們把課程擴展過去,我很願意一口氣都接下來,但是也知道接下來的後果,無奈的,心裡流著眼淚地,回答無能為力。所以,雖然知道面對面教學是偏鄉孩子們最需要的,我們也只好轉為先開發免費開源且在偏鄉實際上過的課程為主要工作。希望願意到偏鄉教學的熱血朋友,不必自己開發課程。

蘇: 也因為是以技能為導向,這樣子的課程都是以50個小時為一單位,份量頗重,也會先在偏鄉的孩子團體先試教過,修改再修改,確認一個班裡超過1/3學生有辦法接受才會release。所以,我們的課程不見得適合極為優秀的孩子,或者說,這樣子的課程對後者來說,也許不到20小時就可以上完,假如是這樣,我還是建議有特殊管道,讓他一路往上衝好了。這種就不在我的範疇,若是偏鄉有這樣子的孩子,直接送給 葉丙成老師去教就好。

洪: 蘇教授的熱情和浪漫實屬稀有,我覺得蘇教授在偏鄉推動資訊教育的經驗非常值得參考,但我希望社會能更有系統性去推動資訊教育,政府也能撥出資源來贊助這些,讓更多人受惠。

蘇: 雖然說,我們以程式設計與Maker教學為主,但是我們並不希望孩子只會寫程式或做勞作。真正的資訊科學教育不在於寫程式,而在於善於利用電腦幫我們解決問題的能力。很會寫程式,卻不會解決問題,甚至發現問題,那麼我們還是會淪為軟體代工國家,與過去的硬體代工,並無多大差異。在資訊科學教育裡,計算思維(computational thinking)才是重點所在,而進一步的是演算法思維(algorithmic thinking),這不是修完大學裡的計算理論或是演算法就可以的。最後還是必須回到很基礎的理論,以及理論與應用的聯結才是。

洪: 「發現值得研究的好問題」這件事,可能比一般人所認為的還難。一般人在學習時,總是研究那些已經被解決好的案例,不見得會針對「當初他怎麼會想到這個問題?」去做思考和練習,以至於工作時習慣於被交付問題,然後才動腦筋去解決,因此代工思維盛行,甚至連在大學研究所,也有很多人在研究外國人提出的問題框架中解決芝麻蒜皮的小問題,發表研究成果,等於是幫人家代工解題。我不是說解題不重要,而是說我們缺乏具備主動找問題能力的人,這樣的能力很多人都有,但是需要被啟發的。

蘇: 我恐怕,跟著美國人的教育政策,學到的若只是皮毛,最後還是一樣補習班或才藝班滿天飛,孩子們多了更多東西要補,豈不悲哀?但是,衡諸過去的台灣經驗,只要列入課綱,考試要考,升學必須,利之所趨,豈有不大補特補呢?家長觀念不改,教育單位政策不能慎重,恐怕台灣的競爭力會每下愈況啊!

洪: 這也是我最擔心的。所以我前面說了,應該要找在教育理念上獲得大家認同的、對資訊科學素養卓越的人來全職全力來領導和推動整件事,賦予足夠的資源、權力、責任,去完成這個任務,否則蘇教授提到的問題,勢必會出現,而且一旦出現了,要收拾就是難上加難。

蘇: 過去20年,我最常對大一或大二學生說的就是,他們非常幸運能念資訊系,因為當今幾乎所有的熱門或不熱門的產業都與資訊脫不了關係,食衣住行是,連學習音樂都是。假如可以把自己的興趣導入到資訊技術,會是一件幸運的事。但是,20年來,我屢屢看到學生在沒念完大二就對資訊技術失去興趣,甚至念完大四還不會寫C或java的都有,原因不用我說。所以我也常對學生說,若是沒有興趣,趕快轉系,會這麼說,實屬無奈。

洪: 這裡談到的,就是專業教育的領域了。我這幾年來,每年看到不少對於資訊技術沒有興趣的學生,有很多念到大四、五、六,說穿了就是想要一個學位。對於台大的學生,我不擔心,因為他們自己應該會找到出路,但是對於中後段大學的學生,我覺得情況很不樂觀。我們到一些中後段大學的資訊系拜訪,發現學生因為家境不佳、在外打工付學費的情況很嚴重,而且學生的英文程度不好,對於學習日新月異的資訊科技是一大障礙,所以多數自認為畢業後只能做做網頁設計以及簡單的資訊科技服務而已。但相對地,資訊科技進展太快,迫切需要的是中高階、創新的人才,所以他們也做不了這些研發的工作。在這種情況下,他們該何去何從呢? 我想,要不就是回歸技職體系,建立扎實的專業基礎,要不就是設法建立跨領域的專業,否則全國大學生人數最多的資訊系,如果專業訓練不上不下的,能夠在專業上或是跨領域上能做出的貢獻也是有限,要找到高薪的工作也不容易。當然業界也得要多努力將專業水準提昇,否則我們即便有對資訊科技很有興趣的高材生,沒有發揮的管道,也是枉然。

蘇: 我這人也許有點小聰明,但是卻無大智慧,所以,也只能做我自己想得到的,自以為對的事。面對多年來台灣教育,產出這麼多對求學沒興趣的孩子,很是憂心。只願,我們的資訊教育,不要再重蹈覆徹,再次讓孩子對這門重要的學問失去興趣。

洪: 我們個人的智慧都有其限度,這類眾人之事,光靠幾個人是不夠的。我認為有三個重要的環節,第一,中小學教育如何引發學生的興趣,第二,技職教育和大學教育如何務實務本,第三,業界如何提昇其技術競爭力,這三個環節緊密扣連著,不能只解決一個問題。即便我們翻轉了教育,讓許多孩子學到些東西,讓他們對某項領域產生興趣,但到了業界卻處處得要遷就冷酷的事實,沒有機會實現夢想,那麼興趣和熱情自然會消散,連帶著影響到下一代的學子,所以我們所看到的教育現場的問題,是多年累積之下的系統性問題,不是單一教育改革所能解決的。我想,資訊科技的重要性,不在於資訊產業本身,而在於國家整體的競爭力,而計算思維的概念,勢必要以各種形式讓有志於迎接新時代挑戰的人理解。此外,資訊科技產業本身是個機會,要把握這個機會,不能等那些還在學校的下一代,應該由這一代開始。美國不只有這個Every Student Succeeds法案,先前還有許多業界主動為了訓練職場人才的計畫,甚至不斷引進國外的人才,至於我們的業界除了會精打細算之外,是否樂意主動培育人才,關鍵到當前資訊產業的榮景,我認為產業本身該在人才訓練上多做些努力才行。

蘇: 通識課程中的電腦科學要教什麼?若是照著過去政府的做法,一定是去找一堆學者專家來訂定教育政策,或者說是課綱。這些課綱被某些學者專家定了之後,想必會有相關人士開始出版相關教材,然後就是補習班跟進。以建構式數學為往例,想必可以讓大家都印象深刻。我並不認為建構式數學本身有多大的錯,這是學習數學的方法之一,但卻不是唯一的方法。若是用電腦程式的觀點來看,建構式數學有非常類似之處,但是當它變成一種制式教學與評量標準時,很多事就變了調了。

洪: 所以主事者必須有某種高度,資訊教育,不應該以傳統方式來教學和考試,否則很容易變調。

蘇: 我是資訊系大學教授,這幾年又在從事兒童少年程式教學,被找去問的機率頗高,但是我是不敢站出來說要制定什麼樣子的課程資料與大綱,來當作這些通識課程的參考,更不用說是標準或準則了。

洪: 這是需要集思廣益的事情。

蘇: 為什麼我說過我怕資訊科學被納入通識課程呢?原因就在此,我們太擅長把一樣東西當作教條,“廣泛”施行,從教學效率上來看,這沒什麼錯,但是這卻會違反資訊作為“科學”二字的含義。既然是科學,就應該沒什麼答案,而沒有答案的東西要怎麼寫教科書呢?遑論是怎麼教?既然照著學習科學這件事不好教,那麼就很為難老師了。以我在大學教書20年的經驗,單單要與學生溝通以下這件事都很難了,何況在中小學階段。那就是前面說的,科學是沒有一定的答案的。

蘇: 所有人應該都會同意,科學沒有定的答案這件事,但是我們的學生為什麼會一直到念了大學都還老是希望老師可以給個答案呢?我想,若是因循過去的做法,資訊科學納入通識課程,甚至有一天變成大學入學要考的科目之一,恐怕我們上的不是資訊科學,而是資訊學科了。

洪: 這是目前教育上常見到共同問題,所以我不希望在資訊教育中教得太複雜,希望多一些實作類的專題,讓學生多些自由發揮的空間,也就是所謂的project-based learning的概念。同時,還希望利用資訊教育,把其他學科的東西帶進來活用,培養跨領域的概念。

蘇: 前文所說,資訊科學有兩個重要的觀念要建立,也就是computational thinking與algorithmic thinking。這些是思維,沒有針對哪一個領域,哪一個應用,或是哪一門學科。資訊的東西往往只是個工具,希望能用來解決諸多事物,本身不是主角,通常只有在資訊系裏才會把資訊技術本身的發展當作主角。前面說過,許多資訊系學生在還沒有念完大二就對資訊失去興趣,之所以願意留下來繼續念,看的不過就是畢業後工作好找,這是蠻悲哀的。當學生學一樣東西不知道要解決什麼問題,只是被要求把工具來來去去弄得很熟,還會產生興趣的學生比例是很少的。

洪: 如果每個人都搶著要當主角,覺得主角最厲害,無視於配角的存在和價值,那麼這會是什麼樣的社會?台灣過度重視「人比人」這件事,凡事都要比,從小比到大,所以很難建立所謂的職人文化,很少願意友人十年磨一劍,做某項技術的專家。真正的專家不多,但唬人的專家到處都是,今天早上有位教授說到某個單位,最擅長「用PowerPoint做研究」,拿政府經費,這是社會文化的議題。

蘇: 這讓我想起自己當年學習如何解微分方程的往事。解微分方程有很多方法,在工程數學裡,老師一一教我們這些方法,我為了考試,必須每種方法都熟練,卻不知道最重要的其實是,“微分方程是用來解決什麼問題?”,的這個問題。我之所以勉力學習只不過是為了不要落在我的同班同學之後太遠,這個不知所以的理由。

洪: 蘇老師您總是拿這個我大一不及格的微積分來講... 當時我不及格,原因是有一大堆的積分表要背誦,老師總是找些難題來為難電機系的學生,而我並不認同那樣的教法。我大四重修時,跟地理系的學生一起修,老師將比較多的應用面,我認為是比較好的教法。工程數學也是如此,有老師多講些應用面,讓學生知道學這個東西有什麼用,有的老師則喜歡談理論,我個人比較喜歡前者,而在當前電腦可以自動解決很多微積分和工程數學的時代,我認為了解概念和用途,遠比把算法背得滾瓜爛熟來得重要。

蘇: 我想,若是大一新生就可以讓他們知道,學習資訊技術可以解決哪些有趣的問題,那麼一定可以有更大比例的學生在未來的四年大學生涯裡,不治喪失對資訊技術的興趣,甚至是可以深深地投入到新資訊科技的研發,要不然也可以解決許多現實的應用。

洪: 這是國外大學當前在推所謂的「基石(cornerstone)課程」的概念,資訊系不見得要和傳統課程那樣按部就班由程式語言學起,然後是演算法、物件導向、自動機、系統程式、作業系統、計算機結構等等,而是先告訴學生訊技術可以解決哪些有趣的問題,以及如何實際利用工具解決問題,再告訴他們裡面有哪些複雜的問題會在以後哪些課程中教到。

蘇: 資訊科學作為中小學的教學材料也該是如此。對於一個多年來以資訊技術解決問題的人,我相信即使是小學裡的其他科目,一定也有可以運用到資訊技術的地方,而運用資訊技術的第一步就是計算思維與演算法思維的建立。這就像是獨孤九劍的總訣式一樣。

洪: 上述「基石課程」的概念,更需要在中小學課程中強調。我認為應該採用「由上而下」(top-down)計畫導向實作學習(project-based learning)的方式進行,這也就是獨孤九劍的總訣式。記得風清揚怎麼教令狐沖的?除了教他總訣之外,還讓他實際和當時要來抓令狐沖下山的大盜田伯光對打,從旁指導,這就是由做中學,讓學生領悟道理。

蘇: 再來,我們也該對教學的目標有一個明確的想法。舉例來說,中學有一般高中與技職高中之分,教學目標自然不同。以我在偏鄉的程式教學的走向是以後者為主,因為身在偏鄉,我知道多數學科成績較差的學生會走技職體系,我希望他們在入學後有更堅實的程式設計基礎,所以我的目標不在啟發天才,而在於一步步建立程式設計概念,並且儘早讓他們離開圖形化程式界面,進入文字模式的編寫程式,因為後者才是工作場域之所必需。俗話說,錢不是萬能,沒有錢萬萬不能。期待他們若是有一天上了大學,至少學費與生活費可以靠自己掙來。

洪: 我前面說過很多中後段大學的學生念完資訊系後不上不下的,不利於找工作。資訊系如此,其他科系應該也相仿。所以我們需要提倡技職教育,強調專業性和跨領域合作,而不是讓大學生滿街跑、自生自滅。

蘇: 為了確認同學的學習成果,Program the world 的晉級考試題目都只有一題,可是考試時間都至少是一天。這有別于一般考試的題目數多,每一題的解題時間卻不多。以寫程式這件事而論,本來就是要用比較長的時間來寫一隻程式,以昨天我們的AppInventor考試題目,每一題都要使用超過5000的程式碼積木才可以做完,判斷是否過關的標準也模擬一般專案開發的檢查過程,目的就在讓學生知道程式設計的世界到底是什麼樣子。

蘇: Program the world兒童與少年程式設計教學計劃的課程也會安排讓學生有快速升級的機會,這類學生在偏鄉的比例雖然不高,但是我們就會以專案(Project Based Learning)學習的方式來試著帶領他們。若是她們可以因此更上層樓,而且我們的升學制度真正邁向多元,我想自會有其他大學教授(我在成大資訊系的同儕就有)對他們有興趣而願意接手繼續帶領他們。

洪: 我想大學的多元入學應該要考慮到這類特殊才能學生,我個人很樂意指導這類學生,但礙於學校入學規定,這類人才往往無法進到台大,是一件很可惜的事情,應該有更好的方法來進行。

蘇: 這些都不是目前體制內的制式教學可以辦到的。對於多數學科,我覺得也許制式教學不失是一個方法。但是以資訊科學來說,卻難以用這樣的教學法來達到教學效果。事實上,在一般大學資訊系裡,也還未能完全融合當今資訊科學教學的所需,這是我們要努力改變的。

洪: 我之前批判了很多大學體制的問題,如我以上所說,資訊科技是當前世界上最靈活、創新最多、最能夠跨領域的學門,但我們的大學體制和評鑑制度把資訊系的發展限制住了,是件非常可惜的事情。

蘇: 我想在上位者需要先想好的是,我們的資訊科學教育的目標為何,而且沒有一種方式會適合所有學生,正如過去我們有技職與一般的分法,之後也許該更進一步分流。雖說有教無類的目標過於遠大,也許難以達成,但是我們總該想個方法,努力往Every student succeeds這個方向邁進。只要政策對了,連補習教育也不會是只為升學而存在,當然,正規教育就更不會只是為了升學。

洪: 未來的職場會有很大變革,只顧著升學和學位,將來會如何?我也不知道。我們這裡談的是整個教育理念的問題,加上對於國家未來競爭力的定位問題,所以說,絕對不是單純由資訊科系的教授們來規劃資訊教育就行的。

蘇: 教育的目標當然是提升學生的競爭力,這個競爭力不是跟身邊的人競爭,而是跟全世界的人才競爭才對。假如我們的教育把過去的硬體代工只是導向軟體代工,那麼我們就還未看到真正的困境,假如我們的學生因之而提起對一切問題產生疑問,進而對一切問題產生解法,台灣才算真正看到隧道口的光。

洪: 我們需要各種人才團結合作來對外擴展,而不是鎖國內鬥。我對於以往國家在培育和運用人才上很大的意見,基本上過度強調穩定安逸,在國內卡位自保,而逐漸喪失了拼勁,這個問題太大了,我們以上聚焦在資訊科技教育上的討論,希望從這個角度去探索一條提昇對外競爭力的機會,希望台灣能把握這個機會。

(註一)上集 https://goo.gl/jAXlNx
(註二)下集 https://goo.gl/yyT9Fd

2015年11月30日 星期一

Maker - 夢想的自造者

自造者是目前國內對Maker的翻譯,在當前一片鼓勵年輕人自造、新創的風潮中,對於有夢想、想突破現況的人來說,是再好不過的環境。

然而,所謂「多情自古空餘恨,好夢由來最易醒」,如果只是追逐時尚、圖一時之快,沒有真正的熱情,也沒有個人的創見,那麼自造、新創的夢是很容易醒的,或許也因此而留下餘恨。

所以好友蘇文鈺​教授感嘆說,作為一個普通的Maker最怕的就是遇到有人問以下這類問題: 「你這個人家早就做過了啊!而且人家做得比你早又比你好!」

我回他說,或許該先認清楚自我的定位,作為Maker所為何來? 初心是什麼?目標又是什麼?

對我這個自認為是舊時代的老Maker的人來說,回想起當年,Maker的意義很大,對我一生的影響遠比很多事物來得大多了。作為一個Maker,我學會自行創造夢想,有機會與同好們一起築夢,能夠為了追逐夢想而狂野奔放、堅持到底,至少在心靈上沒有被庸俗和邪惡所困苦或同化。

所以我說Maker是夢想的自造者,Maker的能力不斷創造夢想,也讓夢想堅持下去,乃至於讓我成為Problem Solver、Hacker、Innovator、Educator、Promoter...

Maker可以是好玩的,就像我從小到現在,逢年過節有空就會做塑膠模型一樣,有時候只是興趣,沒有要跟誰比高下,只是寓教於樂 - 在自造的過程中,教會自己一些能力,長一些知識,多一份快樂。

如果我小時候不親自做一台F-14飛機模型,我沒辦法充實地欣賞與想像那些我從書中讀到的關於F14的種種頂尖設計和科技結晶;如果我沒有自組一台PG級的機動戰士Z鋼彈,我也沒辦法實際領略其中巧妙的機構設計,以及透過把玩將我從動畫上看到的神奇變形的系統具象化獲得快感。

雖然聽起來頗幼稚的,但這不就是所謂的有夢最美嗎?

人生而有情,因為有情,則有喜、有悲、有樂、有苦。如何燃起熱情追逐夢想而成就自己、離苦得樂,則是大議題。試問時下有多少人無心於尋夢、缺乏熱情、隨波逐流度日? 當然,維持夢想需要相當的付出,夢想的破滅也有相當的代價,這是作為有情眾生之一的覺悟。

我從小喜歡動手做的個性,讓我曾經有過成為科學家、工程師、藝術家的夢想,至今這些夢想還在,熱情也還在,不因沒有成就而苦惱喪志,只是因為興趣太多,無法兼顧而已。

想起當年高中時代在電腦上做的東西,可能今天的Maker會不屑一顧。然而,打從我在Apple II上按照書上的範例輸入程式碼的那一刻起,我製造出一些夢。我夢想有一天,擁有高解析度、色彩繽紛的工作站,電腦可以幫我解決記憶不好的問題,自動化和網路可以幫我解決雙手不夠用、分身乏術的問題,更好奇如何做出令人滿意的人工智慧。

我的腦海中充滿著對未來的憧憬,而這個憧憬讓我求知若渴,讓我竭盡所能。但我知道我正在做的東西只是過程的一部分,我勉強自己背三民主義,為的是進入最好的系去追尋我的夢。

在大學時,我們有一群人在社團學著造小火箭,夢想有朝一日能做出大火箭。我修了六個學習的專題,雖然沒做出甚麼偉大的東西,但我知道我能做東西,而且能從做中學,能從其中得到樂趣。

因為樂趣而做,做了而產生樂趣,這樣就會有源源不斷的熱情。如何啟動這樣的正向循環,就是每個人的課題了。然而,如果因為贏過別人而有樂趣,為了樂趣而不斷想贏過別人,那就麻煩了。這是我們這種注重考試排名的教育文化容易產生的迷思,很多人不認輸,或是輸不起,因為必須以贏過他人來肯定自己、獲得樂趣。

還好,我有足夠的夢想來撐起自己,我不需要盲目與人比成就。我出國留學、去一流公司工作、到學校做研究,為的是學更多的東西。當然,我的些許成就,能讓我在尋夢的過程中獲得生活上和專業上的支持,所以我可以擁有不斷地前進的熱情和動力。對我來說,當電腦工程師和當資工系教授的初衷,從來就不是名和利,只是去園一個夢,一個幼年Maker的夢。

話說,沒有夢想,恐怕在科技的領域上很難走得長遠。

科技的本身往往是冰冷的,越是理性的論述,越是複雜的理論,越是周全的設計,科技的後面充滿的嚴謹但機械式的分析、建構、評估,如果身為一個無法從科技上獲得某種滿足感的科技人,就算以此維生、成名、創業、發財,但從某種人生的意義與從事某種活動的價值層面來看,是極為空虛無聊的。

我不想做冰冷的科技人,我不想過窮到只有名位和財富的日子。骨子裡,我還是狂野奔放的Maker。

當然,我早已不是幼年的那個我,夢想也越築越有個人特色,後來又陸續加入了其他的夢,而這些可以讓我廢寢忘食的夢想,也讓我擁有點燃生命火花的熱情。或許每個人都該從幼年開始築夢,或許該築屬於自己的、複數的夢,而夢與現實相連之處,或許正是感情所寄託之處、身心靈所關照之處。

或許我們可以學習把夢做大一些,學習如何把夢想家的動力帶入現實,學習如何不懼怕夢想的破滅;或許正是因為夢想所帶來此情此景,才好讓我們領略到人生中的因緣際會;或許正是因為懂得觀夢幻泡影,才懂得如何超越一切有為法。

2015年11月21日 星期六

轉型到Open Source的世界來尋寶

Open source( 開源碼 )是時代趨勢,使用者極多的開源系統軟體,例如Linux、Android,很多廠商都愛用,廣泛用在伺服器和手機上。IBM早在1998年引進Red Hat Linux (註1),而一直視Linux為敵人、說Linux是癌細胞的微軟,就在前幾天宣布全面與Red Hat Linux合作 (註2)。
我當年在矽谷SUN工作時(2000-2005),公司深受Linux的威脅,員工的意見分為兩派,在幾年間不斷辯論,不斷嘗試各種路線,好幾位主管做不好就下台。「在某些方面打不過他,就包容他、利用他」,似乎是最後的結論,所以SUN在低階伺服器市場上逐漸引進Linux,把自家的處理機、作業系統和中介軟體用於中、高階市場。
後來Oracle收購SUN之後,也是走相同的路線。Oracle正在銷售的Big Data Appliance (註3),上面主打的是已經安裝、優化好的開源系統軟體,例如Hadoop、NoSQL、Hbase、Impala、Accumulo、Cloudera、Spark、Kafka等等。當然,Oracle也提供自家的軟體,繼續向那些不敢轉用開源系統軟體的客戶收取高額的軟體授權費用,有肥羊可宰,何樂不為?
這些公司很清楚,要如何放棄利潤過低的產品,如何引進公開好用的資源,在這個科技進展迅速、資訊迅速流轉的時代,要如何做抉擇,找出公司研發的策略,是管理決策階層的職責,也是對他們能力的考驗。決策錯誤就下台以示負責,是常見的事情,而高科技本來就是高風險,賭錯了也不是甚麼丟臉的事,否則Steve Jobs哪有東山再起、重回Apple的機會?
話說台灣,一大堆所謂高科技業的主管,即使這些年來把公司和業界搞到了今天如此慘澹,還能夠振振有詞地說年輕人不夠抗壓、政府補助太少,我覺得被稱為「慣老闆」是咎由自取。我在SUN工作的那五年,公司的股票一路貶值到十五分之一,從來沒有聽說有人說要跟美國政府要求補助的,而公司為了保住人才,還是年年加薪。相較於此,台灣科技產業的有很許多領導階層,非常地不負責任。
只會做那些擅長做的東西,對新的東西多半由道聽塗說而來,對其他領域的東西一知半解,卻要在專家和手下的面前裝出一副「我知道很多你們所不知道的東西」的樣子,是最令人厭惡的行為。在有些公司,中階主管們明爭暗鬥,如同政壇,政客出一張嘴,表面上對罵,實際上架空長官、壓榨下屬,私底下串聯分贓,甚至掏空公司。
前天有人問我產業這樣子該麼辦? 我說,這些人要把公司玩垮,我們也沒辦法,只是政府不應該用大家的錢隨便給補助,讓他們早點垮掉,才能活化鎖在裡面的人才,像Nokia衰落瓦解 (註4) 那樣不也是一條活路嗎?否則連人才都爛在裡面了,將來更慘。也就是說,這些年政府補助扶持產業這招,已經行不通了 -- 政府再怎麼補助,也沒有中國政府厲害,所以靠補助才能生存的公司,面對紅色供應鏈,實際上也競爭不過的。
那麼我們就放棄科技研發了嗎? 當然不是。一些朋友和我認為,台灣在眾多可以嘗試的方向中,可以做的一件事,是集中人才去探索那些「資本門檻不高、技術門檻高」的研發項目,包括既有的產業想轉型,或是新創事業想找方向,都可以考慮。舉例來說:
- 如果某一代工產業所需的資本門檻高,但如果技術門檻不高,那對岸可以靠著充沛的資金和人力,很快來佔領這樣的產業,現在大家都看到這樣的結果,但很多這樣的公司還在吃老本,難以轉型。
- 資本門檻不高的新創企業,如果技術門檻也不高,即便靠創意、靠經營模式,也很容易曇花一現,因為創意和經營模式很容易被複製,有錢的公司可以後來居上。
- 能夠發展出門檻高的技術,不只是技術有價值,人才也是國家重要的資源。如果台灣實際上能好好耕耘這塊,才是長久之道。我十月在荷蘭開會,深深覺得荷蘭產業的發展方法,很值得借鏡。
在資訊產業上,要發展「資本門檻不高、技術門檻高」的產品或是服務,一個非常可行的方式,就是利用高度發展的open source軟硬體的基礎,站在巨人的肩膀上,研究如何打造能吸引大家來使用的優質的系統和應用。資本門檻不高,因為做研發時不需要昂貴的生產機具,不需要昂貴的軟體授權,我們只要有一流的人才,就可以藉由閱讀open source來吸取世界頂尖的智慧,並且證明自己的技術能力 (註5)。
當前的問題是,在台灣的業界能夠領悟並且善用開源系統軟體的優勢的資本家和人才不夠集中。之前學界和業界曾經有一些open source的推廣以及研發計畫,很少有能夠聚集火力攻佔某領域站上世界舞台的作為。現在業界所使用的open source,早已不是搞懂一兩個open source計畫,也不是小眾搞一些自娛娛人的計畫就行的 ,如果可以從系統面貫串到應用面,會有更大的機會。
VMFive是一個例子 (註6)。在許多新創公司中,這家公司所涵蓋的技術層面是較廣的,從系統層面的虛擬化技術連結到應用面,大都採用open source,在某些關鍵點上進行優化,提升效率和功能性節省系統建置成本
然而,不少新創團隊,偏向低門檻的作法 ,或者低估技術門檻,一昧想在短期內開發出看起來很酷的產品,因此而走不遠 (註7、8) 。傳統系統代工廠的長官們,似乎還活在上個世紀,腦袋轉不過來,對open source一昧排拒,不懂open source的價值,不會運用open source,如何帶領公司轉型打仗? 眼中只有訂單,只會抱著大廠的大腿,不知道以前的運作方式已經落伍了。
話說 2006年時,我們一行人在參訪HTC的時候,公司所有高層都出來對我們簡報,軟體部門擺在最後,乏善可陳,似乎是最不受重視的部門。當時還沒有iPhone和Android,HTC只會做Windows CE作業系統的智慧型手機,唯一微軟願意讓HTC插手的是與硬體相關的驅動程式(device drivers),所以也沒甚麼前瞻研發工作可做。
在當時那種封閉的生態系,只要緊抱著Microsoft、Intel、IBM、HP等大廠的大腿,提供價廉物美的組件和代工生產,就可以賺得很高興。早在智慧手機之前,PC和周邊的代工產業已經風光了十多年,所謂Wintel的供應鏈,包括Asus、Acer、廣達等系統廠,以及相關的零組件廠,就像當年的HTC一樣,在軟體上沒有甚麼研發空間。
那段期間(2006~2009)我開授Linux Kernel and Device Drivers課程,學生趨之若鶩,廠商也來邀約演講,因為廠商開始導入Linux,但極度缺乏Linux核心人才。學生為了就業而跑來修課,因為學會寫Device Drivers就可以找到不錯的工作機會。
很多資訊工程的人才到這些產業去幫硬體裝置寫firmware和device drivers,雖然很多人因此成為科技新貴,但我常常聽到這些軟體、韌體工程師向我抱怨,做來做去都是差不多的東西,沒甚麼長進;而且技術門檻不高,要與人競爭只有設法做得比別人快,所以常常要趕工加班,累到過勞爆肝。後來我不大想開這門課,因為我不願學生去幫缺乏研發企圖心的廠商賣肝,而且我認為這種行業撐不了多久。
2009年,Google正式釋出Android的開源碼,而HTC也幫Google開發出世界上第一款Android手機。挾著以往做Windows手機的經驗優勢,HTC靠著硬體技術、研發速度、穩定性、工業設計、行銷管道,在一開始那幾年做得有聲有色,非常風光。
HTC崛起的案例,大部分可以說是受到open source和Google的加持,加上員工們辛勤努力,所產生的必然結果,也算是時勢造英雄。Android最早由2003年成立的新創公司開始研發 (註9),2005年被Google收購後繼續改進,總共歷經7年才釋出,如果不是Open Source和Google,不可能造就HTC一時的榮景,也不可能與Apple競爭。
可是,Android雖然是open source,但規格主要還是掌握在Google手上,所以HTC做了幾年,又回到老路,在系統上並沒有特別突出的賣點。當時HTC除了在軟體上抱著Google的大腿外,在處理機上抱著Qualcomm的大腿,看人家給甚麼就做甚麼,在系統設計上沒有很大發揮的空間,所以我看了搖頭,不知道他拿甚麼跟人家競爭。
當時我問HTC與聯發科的朋友,兩家公司為何不設法合作?有人猜測是高層有心結,有人說HTC怕得罪Qualcomm,而聯發科的朋友光是做山寨機就忙得不亦樂乎,兩邊都沒有合作的意願。我想,如果當時有合作,現在HTC可能會多一條活路。
「成也是open source,敗也是open source」。如果沒辦法在open source的基礎上加料,端出好菜,那麼其他公司趕上來,尤其是紅色供應鏈挾其廣大資本和市場,自然搞不過人家。所以如何善用open source,是一門大學問
我們現在談open source,主要看的已經不是手機和傳統雲端服務,而是務聯網(IoT)和Big Data產業所用的系統。為了IoT的市場,許多單位開發開源的軟體,包括ARM公司的Mbed (註10),不是沒有原因的。簡單來說,IoT談的是利用資訊科技去提升各項既有產業的效率與服務品質,主導權在既有產業,而這些公司當然會希望有可以公開受檢驗其安全性,可以自行根據應用做客製化,容易找到開發人員的開放式平台。Big Data所使用的系統,如同上述Oracle Big Data Appliance的例子,早已大量使用open source。
封閉的系統,除非能做到像Apple那樣,才有辦法存活。但世界上有幾個Apple? 幾乎所有的大公司,連Microsoft和Apple在內,也都積極使用和貢獻open source,但台灣有些公司還在想要如何保護。現在連硬體都得要開源,像是Arduino和Raspberry Pi這類產品,已經招來大量應用開發者成為社群,逐步侵占工業電腦的市場。甚至像UC Berkeley的RISC-V這樣的開源CPU越來越進步,效能接近ARM,可以讓開發者自行客製化指令集,社群積極開發工具組,越來越有吸引力﹑。
可惜台灣大多數既有的產業並不見得重視這塊,部刀ˋ到開放的好處。我們邀請業界來贊助學校的課程,有些人一劈頭就問,你們培育出來的人才,有多少人會來我公司嗎? 我們做產學合作,政府和業界劈頭就問,要產出什麼專利,產出的結果要歸誰?業界不願積極贊助開源的教育研究,那教授和學生自然就做他們自己喜歡做的研究了,所以產學落差日益加大這件事並不意外,政府也管不了,業界再大聲疾呼也無用,要就自己來跟學校合作
台灣業界最大的一個迷思,就是誤以為開源的東西沒有價值。這點我前幾天已經論過,有興趣者請參考 (註11)。我們看到很多機會,只要夠厲害,就能夠找到商機,而且know-how可以搞到博大精深,加大技術門檻。如果發展出門檻高的技術,不只是技術有價值,人才也是國家重要的資源,技術和人才都是世界一流的大公司都在積極爭取的。
這是一條可長可久的路,等待更多有眼光的企業家和有智慧勇氣的年輕人來探索。有興趣的話,我這個看過風景的人,可以找嚮導來帶領大家入門尋寶。
(註1)http://www-03.ibm.com/linux/redhat.html
(註2)http://www.forbes.com/sites/janakirammsv/2015/11/11/a-closer-look-at-microsoft-and-red-hat-partnership/
(註3)https://www.oracle.com/engineered-systems/big-data-appliance/index.html
(註4) http://technews.tw/2015/11/13/nokia-7/
(註5)http://buzzorange.com/techorange/2015/11/12/coding-2/
(註6)http://vmfive.com/
(註7)https://www.facebook.com/notes/洪士灝/本立而道生-不要低估技術門檻/1058810250816783
(註8)https://www.facebook.com/weifenl/posts/871591229603778?fref=nf&pnref=story
(註9)https://zh.wikipedia.org/wiki/Android
(註10)https://www.mbed.com/en/
(註11)http://buzzorange.com/techorange/2015/11/18/open-sources/

2015年11月6日 星期五

大數據分析與高效率異質運算

在萬物聯網的時代,人機互動頻繁,機器與機器之間以高頻率合縱連橫,大數據分析成為提升智慧和生產力的重要工具。在很多場合中,運算不再只是為了滿足傳統需求或是取代人力,而是為了增進使用者經驗、預測物理世界的行為、建構擬真的電腦世界、探尋未知的知識、賦予人類新的能力。許多以往只存在於科幻電影的情節,可能會隨著運算能力的成長而逐漸出現在我們眼前。

然而,由於數據之大、分析之複雜,要率先開發出上述的應用,必須仰仗高效率的運算能力。在這樣的情況下,史無前例地,異質運算已不再是超級電腦和少數科學家的秘密武器,而是開發者用以挖掘大數據金礦的新銳工具。誰能夠善用多核心處理機、計算叢集、GPU、FPGA、硬體加速器,誰就有可能領先群倫,率先在新領域上建立灘頭堡。以往我們在超級電腦上所鑽研和使用的技術,大量地被用來加速大數據的分析,懂得如何駕馭這些技術與工具的專家,也應運成為炙手可熱的人才。

在這八個小時的課程中,我們將擇要解說大數據分析與高效率異質運算的基本概念,介紹具代表性的軟硬體的架構與技術,最後做若干個案的探討。這是一個進化迅速的領域,我們希望藉由本課程的內容來澄清和增進這個領域所需的運算思維、連通概念與實務,作為入門的階梯。

1. 大數據分析的基本概念
2. Apache Hadoop開源碼計畫
3. 高效率異質運算
4. 連通大數據與異質運算
5. 個案探討

(以上是準備中的短期課程的課綱)

2015年11月5日 星期四

開源系統軟體的教學與研究計畫

這是我接下來幾年在技術和學術上想努力推動的目標,希望有共同興趣的學界、業界朋友有機會能一起來打拼。目前,我已與台大徐慰中教授、成大黃敬群教授有了一些初步的討論和共識,我也很歡迎對上述構想有興趣的教授、長官、朋友們提出建議和參與行動。我正在徵求對於開源系統軟體有興趣的(全職或兼職)研究助理和行政助理,有意者請與我聯絡。

注意到,這裡談的是「系統軟體」,而不是一般的開源碼計畫,目標不是創造新的開源碼計畫,而是探究如何善用、改造、特殊化既有的開源系統軟體去創造高品質的系統和應用。

【開源系統軟體的教學與研究計畫】

開源軟體(open-source software),對於資訊科技的發展扮演非常重要的角色。尤其在系統軟體的領域,開源碼計畫更是遍地開花。90年代以Linux作業系統為核心開始集結各種開源碼軟體,顛覆商用軟體壟斷的世界,乃至於有00年代的雲端運算的普及 -- Android手機作業環境和OpenStack伺服器作業環境均採用了大量的開源碼。

近年,更有許多專為物聯網和大數據應用設計的開源系統軟體計畫,例如ARM推出給物聯網使用的mbed平台(註一),用於大數據儲存與分析的Hadoop(註二)。作為使用這些系統與中介軟體的一般應用開發人員,或許只需要略為了解其原理,搞清楚程式設計介面(API),應該不會太難上手。但是要如何針對應用的需求和系統的特性進行效能調校(performance tuning)、客製化(customization)、特殊化(specialization),則必須深入理解系統的工作原理和實地耕耘相關的系統軟體。

放眼國內業界,很多的高階、前瞻的資訊科技研發項目,都需要上述具備足夠能力來發揮與開拓開源系統軟體的潛力和價值。能夠好好調校Hadoop,善用新的系統架構,產生十倍以上的效能,或是解決十倍大的問題,以千萬等級的設備達成他人億元設備所不能達成的功能,這樣的機會隨處可見,如果國內有更多兼通理論與實務的系統人才,那麼台灣會有更多的機會將長年投注於硬體產業所產生的優勢轉型提升至系統層次,例如專為某類型大數據應用特殊化的大數據專用系統(big data appliance)。

但問題是,我們該如何訓練這類兼通理論與實務的系統人才呢? 在資工系的「作業系統」「計算機結構」這兩門課程中教授了不少系統的工作原理,但大多數的學生不容易將原理加以運用;到了業界後,也不大容易透過零碎的訓練課程和單一的工作經驗來整合出完整的系統理論與實務能力。

因此,我想利用「開源系統軟體」作為主題和媒介,展開一系列的教學和研究活動。我希望能邀集到國內通曉開源系統軟體的專家學者,到我下學期開設的【開源系統軟體概論與實務】課程中教授重要領域中具代表性的開源系統軟體,一方面探討這些軟體幕後的原理和設計的方法,一方面要求修課學生瞭解與實地接觸這些開源碼計畫,帶領學生們探討這些計畫的未來發展方向,並且鼓勵學生在期末專題中提出可行的研究計畫。

同時,我想這也是很多學校和業界所注重的領域,因此我希望盡量將課程和研究的資源與學界和業界分享,並且也希望業界來幫忙推展開源系統軟體的教學與研究。我希望利用這幾年的時間與大家一起來深耕開源系統軟體的領域,厚植技術開發與學術研究的基礎,基於開源碼的精神,打造出一個以貢獻和互助為宗旨的技術交流和分享平台,再以此平台培育優秀系統人才以及幫助業界開拓未來。

目前構想中的一學期(18周)的課程概要如下,課程內容可能需要進一步做取捨或修改,如果內容太多,無法割捨,只好考慮開成上下學期兩門課。我們的下一步則是規劃一個【為期兩到三周的暑期密集訓練課程】,如果進度順利的話,將在明年暑假提供給學界和業界參與。講課的部分,錄下來上網應該沒問題,但課程的重點是實做的部分,這也是系統人才不易培養的原因,我希望有辦法設計出容易上手又有深度的實作課程,加上開源硬體,看看能否解決這個問題。

【課程概述】

開源系統軟體的重要性,如上述,不再贅述。

由於重要的開源系統軟體很多,我們將選擇IoT與Big Data領域為當前的重點,挑選具代表性的軟體,製作教學模組。每一模組針對特定領域,教導學生學會使用該領域的代表性軟體,同時鼓勵學生深入探索該領域其他的開源系統軟體,訓練學生舉一反三,進而引導學生思考如何研究改進開源系統軟體。學習使用、多方探索、研究改進,是成為高手的三部曲。我們希望以這門課程帶領學生入門,也希望藉此建構強而有力的開源系統軟體社群,吸引更多高手來教與學,共同來提升臺灣的開源系統軟體的水準。

【課程目標】

在於讓研究所與大學部高年級修課同學:(1) 瞭解開源系統軟體的背景技術知識 (2)  學習使用開源系統軟體開發應用 (3)探索相關的開源系統軟體 (4) 探討如何改進開源系統軟體

【課程大綱】

1.  Introduction to Open-Source Software
1.1 History and concept of open-source software
1.2 Use of open-source software
1.3 Value of open-source software

2. Open-source development tools
2.1 Project and version control system (github)
2.2 Compiler tools (gcc, LLVM)
2.3 Performance analysis tools (perf, Oprofile, valgrind)

3. Open Source Hardware
3.1 Arduino
3.2 Raspberry Pi/Banana Pi
3.3 RISC-V

4.  Open-source Operating Systems
4.1 Linux kernel
4.2 Linux application development
4.3 Android
4.4 Real-time OS
4.5 ARM mbed
5. Open-Source Virtualization Software
5.1 KVM
5.2 QEMU
5.3 Docker

6.  Network Services and Security
6.1 HTTP servers
6.2 WebKit
6.3 OpenSSL
6.4 OpenStack

7. Software Defined Network
7.1 OpenFlow
7.2 Network Function Virtualization
7.3 Software Defined Storage

8. Distributed Systems
8.1 Apache Hadoop and MapReduce
8.2 Apache Spark
8.3  Apache Kafka

9. Machine Learning
9.1 Support Vector Machine
9.2 Caffe Deep Neural Network
9.3 Apache Mahout

10. Project Presentation and Demo
成果發表會

(註一) ARM mbed OS, https://www.mbed.com/en/development/software/mbed-os/
(註二) Apache Hadoop Homepage, https://hadoop.apache.org/

2015年10月19日 星期一

大數據小秘密

我上週五(2015-10-16)去中山女中給的演講,題目「大數據小秘密」是主辦單位中山女中的老師訂的,學生自由報名參加。結果大概是因為題目定的好,所以演講廳坐滿300人,有老師告訴我她的學生報不到名。

我這場演講主要是告訴學生們我所看到電腦對世界造成的重大改變,以及未來大數據時代將會造成更大的變革,因此我們來探討學生們現在與未來應該學些什麼?要如何自力救濟?如何建立能夠面對未來變革的能力?

投影片在此,歡迎載明出處後分享,分享投影片時請勿斷章取義:https://www.dropbox.com/s/ldf7jh93fvav9zn/2015-10-16%20talk%20at%20CSGHS.pdf?dl=0

演講摘要:(基本上是投影片去掉圖片之後的文字內容)

早期的電腦,只是照著人給的程式去處理資料,稱不上有很高的智慧;早期的儲存,只是存放計算用的資料,用來做些重複性質的工作;早期的網路,只是在電腦之間運送電腦程式所需的資料,相當無聊。現在怎麼看,都覺得當年的電腦很呆板、很冰冷、很無聊,沒什麼智慧。

台灣的資訊科技業,從仿製、組裝、到設計硬體,主要是以代工設計和製造業為主,例如:系統廠:幫客戶做系統(廣達、華碩),晶片廠:幫客戶做晶片(聯發科技、台積電)。但是在韓國、中國加入競爭後,硬體的價值越來越低,生存不易。

資訊科技研發競賽是非常激烈的,每18個月,處理機上的電晶體數目變2倍(摩爾定律),結果就是:舊的硬體不值錢,必須持續砸錢做研發,必須找到重要的新應用。

然而當電腦、儲存、網路的能力超過人類基本的需求時,有趣的事情就誕生了…電腦拿來作為各式各樣的用途,而且幾乎無時無所不在,記錄下了各種人類活動的資訊,所以大數據就誕生了!

包羅萬象的大數據,充斥著各種資訊,如果能夠拿來參考,進一步分析其內容,就有可能匯集眾人的智慧、發掘出新的智慧有了大數據,我們能做什麼更有趣的事呢?Use your imagination!

目前已經開發的領域,只是一小部分!電腦、儲存、網路的能力都還在快速成長,大數據還會快速變大!我們回頭看十年前的電腦應用,可能會覺得很無聊,如果十年後看今天的大數據應用,可能也會覺得很無趣!

資訊科技早已改變世界
- 自動化的趨勢改變了工作的形式
  -- 自動化生產與機器人取代藍領勞工
  -- 自動化分析取代白領階級
- 網路化的趨勢改變了人際的關係
  -- 網路大幅縮短資訊傳播的成本與時間
  -- 人與人之間的溝通變得頻繁且多元
- 全球化的趨勢因為資訊科技而加速
  -- 人才與商業行為突破地區與國家的界線
  -- 資訊科技成為國家競爭力的重要關鍵
- 智慧化的趨勢將進一步改變教育與社會

妳如何知道未來的世界會如何?妳現在所學的基本核心能力,是否足以讓妳適應未來?妳所嚮往的領域、所具備的專業,是否能夠不被電腦取代?

傳統的教育思維,或許符合舊時代的社會環境和產業,但能讓妳們面對現在和未來的需要嗎?考試引導教學為了分數,注重記憶知識與解題招式,但面對新時代,問題出現了:電腦比妳更會背書、更會解題;學生等人教、不懂得自我學習、搜尋知識;學生不注重創意的培養、創新的訓練、不實際動手、動腦解決新問題。

舉幾個例子,IBM運用大數據技術開發出Watson,它背了很多書,能聽、看、說,也能分析,在2011年打敗兩位Jeopardy!的冠軍對手,IBM還將這樣的技術用於醫療、商業、工業上的應用。Wolframe Alpha可以解很多的數學問題,很複雜的積分式子,它很快就能得到答案,所以人類重要工作的是把方程式列出來,而不是花時間去解方程式。

科技對人類來說,是好的嗎?「水可載舟,亦可覆舟」 -- 關鍵在於如何用它,以及誰掌握它。前者的重點在於「計算思維」:各行各業的人都需要其無可被電腦取代的專業,同時具備與電腦合作的計算思維(Computational Thinking);後者則是「資訊科技的民主化」:避免資訊科技被掌握於少數人手中,要被免被用於壓迫人。

大數據時代的教育思維:
- 不是為了學位,而是為了建立專長
- 不要和電腦比記憶和套公式
  -- 要擁有電腦無法取代的能力,或是懂得運用電腦
  -- 學程式設計是了解電腦運作的基本概念
  -- 懂得自我學習才不會落伍有能力做電腦不會的創意、創新
  -- 能實際動手、動腦解決問題健全的人格與公民教育
- 不是教條式的教育,而是提昇人民的素養
  -- 人民可藉由各類管道發聲、影響和約束權力者
  -- 對社會的貢獻可以是自發性、多元性的。

台灣當前的「十二年國民基本教育科技領域課程綱要草案」已有加入資訊課程的規劃。學習coding,不是教文書處理,而是學習計算思維、邏輯、應用能力。至於何時實施?可能會遇到師資、教材、設備的問題,民眾的意見也不一,所以妳們應該是遇不到了… 那麼妳們就不學了嗎?

學習coding,不是學「照著做」,而是啟發邏輯思維、動手做,學習「開發創意」和「解決問題」。從小學,學到家了,遇到困難會自學,會善用網路資源,會到學校找人請益,不用擔心「學校沒教」的這種事!這樣的人才,能做一些那種循著「正常」管道一路被考試引導、被告知下一步該做什麼的「傳統好學生」所做不到的事。

現在有很多的公開的學習資源,以及新的學習方式,可以自力救濟!對於想學的人來說,「沒人教」不再是藉口。自學有成的人比比皆是,而且具備自學能力的人更能適應未來。

在競爭激烈的資訊科技業,例如Google這類的公司,你的天賦,不需要一張大學文憑來證明。公司要的你展現你的技能,而不是知識;使用邏輯思考來學,而且統計超級重要;在工作上證明你的毅力。從業界的看法,如果真的要念大學,要鑽研於技能。

然而國人重視文憑的傳統,衍生出許多問題,也在當前面臨了許多考驗。我認為主要原因是傳統的文憑和考試,過度重視記憶性的東西,即便是解題,多半也是解考古題,這樣的能力很容易被電腦取代。我們可結合大數據時代的眾多公開資源,遂行多元化、開放式的教育,同時培養和認證學生的:
- 通識素養:語文、公民、數理、生活
- 核心能力:理解、表達、邏輯、分析
- 專業能力:提早讓學生認識專業與其學習路徑

通識素養很重要,所以大家從小學到中學,大多是學通識,但有沒有成為素養,那就要問各位自己了。如果只是為了考試,那大概很難內化成為素養。

核心能力如同內功,專心練內功的人,如果要展現內功的功用,應該要有足夠的資質,加上用心去學習外用的招式,否則常會被譏笑「百無一用是書生」。

專業能力的學習,一開始透過練外功招式,比較容易拿出去用,但如果只學基本招式,沒有精益求精,發明新招,也沒有內外兼修,跨越領域,那也是不夠專業,建立專業,是需要大量的時間的

我的建議是:文憑不是無用,但不要只靠文憑,要看自己的資質和興趣決定要練哪些內功和外功,扎實的建立能力和專業,才是最重要的。要踏實追尋個人目標,需要好好打基礎和自我的鍛鍊。

以資訊科技為例,所謂「十萬小時」「十年磨一劍」,想把資訊科技學到出師,沒有大量的學習是不夠的,許多國外在大學時代創業成功的例子,都是當事人在小時候把學習電腦科技當成是訓練鋼琴家、職業圍棋手的志業,因此他們在大學時代就有創業的企圖心和能力。很多的資訊課程,在技術的部分,不需要高深的數物化的知識,因此可以像語言和圍棋般及早學習。至於理論的部份,放在後面再教,往往會因為學生的求知慾而提高學習興趣。

最後,我想告訴各位,大數據時代的小秘密,就是妳們即將面對很大的變革。但好消息是,妳們還來得及準備,而且有很多方法。我提倡資訊教育和數位學習,不是為了資訊產業,也不是基於個人的本位主義,而是因為傳統教育已無法滿足新時代的需求。各行各業迫切需要能自學與活用科技的人才。未來的高階人才,很難由缺乏想像力的傳統教育產生,因為我希望下一代要不要被我們這代制約,而是設法成為更具開創性、身心更健全的人透過適性、多元的學習,開啟自我潛能開發,成為跨領域的專家的可能性。

2015年10月14日 星期三

關於資訊教育課綱

剛剛透過朋友們的分享,看到今年八月提出的「十二年國民基本教育科技領域課程綱要草案」(https://goo.gl/G53sR9),看了之後,可以理解為什麼幾位正在教青少年程式設計的朋友對這個草案很不滿意。

「過猶不及」是朋友們主要的批評。原本在中學中幾乎沒有什麼科技和資訊教育,一下子就要端出大餐出來餵飽學生,會不會揠苗助長?教得不好,會不會反而讓學生失去興趣?

我約略在兩年前(2013年11月)受託看過草案(https://goo.gl/Z9fdVm),給過一點意見,那時我特別強調說中小學的資訊教育的重點在於computational thinking和project-based learning,提升學生運用科技、邏輯思維、與問題解決等能力,絕對不是要提早教大學資訊系的東西。

我還花了一些力氣與其他領域的學者溝通,說中小學的資訊教育有其必要性,學生從小建立起運用科技、邏輯思維、與問題解決等能力,對於他們以後要鑽研任何學術都如虎添翼(我講的其實就是CS+X的觀念),所以絕對不是要跟他們搶學生。

雖然我承諾會幫忙,但2013年之後並沒被找去參與這個課綱的討論,所以之後發生了什麼事就不得而知了。

2013年的版本,希望在小學時就引入視覺化coding的概念,基本上類似MIT所提出的Scratch;而國中必修課的內容則強調基礎概念和動手作,草案提到:「了解程式語言基本概念,應用簡單的抽象化概念撰寫程式以解決簡單問題。」「應用視覺化程式設計軟體,呈現人機互動和應用,以解決生活或學習問題。」(當時我心理想的是採用HTML5);到了高中的必修課,才開始教進階的概念,應用資料結構與演算法、以及模組化與系統化設計的概念設計程式(Java或Python都可以,反正重要的是概念)。

然而今天看到的這個2015年的課綱草案,在內容上已經與2013年版的差異甚多,在精神上也有頗大的差別。

在精神上,2015版把資訊教育延後到國中(七年級)才教,但是大幅增加國中的教學內容:國中三年每年都有一堂必修的「資訊科技」,每週兩小時,總共6學分。到了高中,還有一堂2學分的必修課,以及4學分的選修課。必修課的份量頗重的,所以我們必須回過頭檢視是否有「過猶不及」的問題。

在內容上,或許是後來擬訂草案的時候,希望較為具體敘述該教授的內容,然而草案中用了一大堆大學的計算機概論、程式設計、資料結構、演算法等課程中的專有名詞,讓人覺得包山包海,國中三學期有辦法教完嗎?2015年的版本的國中必修課內容列表在第18~20頁,其中的第19頁還列舉了演算法和結構化程式設計這些比較沈重的東西。

教青少年寫程式,並不是一件簡單的事情。這並不像是普通的課程,老師在上面講講就算了,一開始必須投入相當大的人力從旁輔導初學者,而且對於那些對電腦不感興趣的人,在課程設計上最好是循循善誘。同時,因為大多數電腦程式語言是英文的,可能還要考慮學生的英文能力,不然就得採用全中文的介面。我想,如果要達成2015草案的構想,教材、師資、學生的學習能力都會是很大的挑戰。

還好,這還是個草案,我覺得設計課綱的學者,或許可以說說他們對於教材和師資的規劃,以及在某些學校試辦教學,用實驗結果告訴我們這樣的安排是否可行。不然,我們強迫中學生修這些必修課,就如同自已以前被逼著背化學元素表和化學式,到現在通通忘光光,有很大的意義嗎?

我個人還是認為,computational thinking是中小學資訊教育中最重要的元素,透過寫程式練習動手做、驗證所學,學習與電腦打交道,也是重要的元素,但是程式設計的技巧,書本中巧妙的演算法和資料結構,並不是絕對必要的,除非是學生在解決實際問題時會用到,這就是為什麼要project-based learning:讓學生在解決問題的時候主動去學這些,而不是一直跟學生說,先學下來,以後會有用的。現在可以學的東西太多了,隨手可得的知識也多,不需要把知識硬塞到學生腦袋裡。

我自己雖然進高中之前就開始無師自通,自學程式設計,但是我覺得把那些大學教科書中樣板的資料結構和演算法拿到國中來教,對於那些不感興趣、日後不做程式設計的學生沒有什麼意義,應該讓他們知道什麼是資料結構和演算法就行了,不必教一堆我們預見學生會為了考試而死背的東西。例如教各種不同的sorting演算法的原意是好的,但死背它就沒有意義了,所以不要貪多嚼不爛。

我覺得最好是教學生如何用coding去解決生活中或是其他學科所遇到的問題,以範例來導引,再請學生舉一反三。至於幕後的道理、效能優化的技巧,淺嘗即止就好,讓學生自己去探索,或是由選修課來補充。

至於資訊科技的教師,則必須有妥適的規劃。我想,很多學校並沒有資訊教師,一時也無法培養出足夠的教師,但我想國內有不少有經驗的程式設計師、甚至資訊系的研究生、大學生,在接受特訓之後,可到學校擔任講師和助教,暫時來解決師資不足的問題。

喔,話說如果未來的中小學生都懂得computational thinking,那麼生得太早沒機會學電腦的人怎麼辦?其實,這些課程如果中學生都學得會的話,那麼不懂的人不妨少看點電視,花點時間學學,應該不會太難吧?

後記:

剛剛有課綱委員跟我說,他們最近又翻修過一次,這週五會有新版本。他們也是希望不要教太深,例如演算法應該可以教得很有趣,只不過課綱沒辦法放太多字,只能有標題(不知道這個規定的道理何在?)所以不容易在課綱中解釋清楚。

我說,還是希望課綱中多加點說明,避免教科書的作者誤會,最重要的還是這些科目的評鑑(考試)的方式,也應該要好好思考一下,連帶做出說明,不然也有可能在執行時發生問題。

另外,我同意這些內容,如果有充裕時間、理想的師資和助教、完善的設備,課程應該可以教得很有趣,例如我們帶學生去北一女教過,知道課程的設計必須要夠有趣,而且師生比不能太高,否則學生很容易就卡關、迷失,然後因為立即的挫折感而失去興趣。

各位有任何意見或建議,也可以在底下留言,課綱委員看得到的 :)

2015年10月9日 星期五

學校特色與大數據分析

引用自報導:『清大累積15年數據統計,發現繁星推薦、個人申請入學的學生,學業成績排名都比指考入學的學生優異,且指考生學科成績「二一」及休退學比率都最高,推翻各界對甄選生「學習不完整」想像。』(註)

我個人一向是鼓勵高中教學適性化,同意入學管道多元化,以及反對走回頭路將學測延後... 這些我個人由個人觀察、質性分析、推理所得的想法,如果能夠有實證資料來佐證,很好。

我也很贊成每個大學要建立學校的特色,正如同我希望每個高中也應該嘗試要建立特色,如此每位學生才會有特色。有特色,才會有較扎實的自信心,才會較主動為自己負責,而不是一輩子都活在他人所給予的框架中。

學校要有特色的話,就是自行決定要如何收學生,要如何教學生,政府和家長不要過度干預。校長本身要有理念,要能夠領導學校,不是奉上級的旨意辦學,不是只會用考試成績分類學生和要求老師。因此,我們需要更多有理念、有擔當的校長。

但報導中倒數第二段記者寫到「大數據分析」,讓我很納悶... 我想,哪來的「大」數據?清華大學部每年新生約1500人,15年來也不過22500筆資料,能大到哪裡去呢?假設每份資料存放的是歷年修課成績,就算每位學生大學修100門課(!),代碼加上分數,算8個byte好了,那每筆記錄不到1KB,所以總共只有22.5MB的資料。有人能告訴我,哪裡算錯了嗎?

單純為了這篇報導所述的結果,分析這樣大小的資料,用一般統計的方法就可以做,我想是用不到大數據分析的技術。不過,我倒是希望這些資料能夠成為open data,給大家來分析和驗證,甚至做進一步研究資料之間的關連性,但如何去名化,確保學生隱私,則有其挑戰性,要先想清楚。

補充:

我文末只是想趁此釐清大數據的觀念,無意說清大的不是,因為這話可能是記者寫的,或者指的是資料放在提供做大數據分析的平台。

1. 大數據有其不大嚴謹、各家自行的定義(請參考https://zh.wikipedia.org/wiki/大數據),但總不能差太多。就像雲端運算,總不能說只要把資料放在連網的伺服器上就是最新的雲端運算,那麼就會像李家同教授『原來,我早就在「雲端」』(http://erdos.csie.ncnu.edu.tw/~rctlee/article/981107.htm)這篇文章中,說他『查了一 下雜誌,發現所謂雲端科技,無非就是將所有的資料都送到網路去處理』。得到聽起來怪怪的結論。

2. 現在大部份大數據產業中的公司,都繼續使用3V:量(Volume,資料大小)、速(Velocity,資料輸入輸出的速度)與多變(Variety,多樣性)來描述大數據。(請參考https://zh.wikipedia.org/wiki/大數據)

所以並不是只要把數據不經過取樣全部拿來分析,就算大數據分析。有何難哉?少量的數據,以三十年前的技術就可以做了,何必扯到大數據?我去過中研院統計所演講過,我知道統計學的專家未必願意說自己在做大數據分析。

3. 通常我們談的大數據,是「原始資料」的大小,各位如果想知道數據之間的關連性,那麼在分析N筆原始資料的過程中,有可能產生N平方,甚至N的多次方的中間資料,但即便這些資料再多,通常也不算是大數據。

資料探勘(data mining)常常在找資料之間的關聯性,但data mining的專家未必願意說自己在做大數據分析。DNA排序也是一個例子。搜集到的原始資料不多,但運算過程中產生的資料量很大,我很少聽到做DNA排序的人說他們做大數據分析。

為了觀察資料之間的相關性,可以試著把關係轉成圖形,再轉成大矩陣運算的做法。但這樣的作法,早在幾十年前就有,算的時間長一些,所以需要超級電腦,如果這些都算,那全天下所有做High-Performance Computing的地方都可說是在做大數據分析,而我可說我在20年前就是大數據分析的專家了。

4. 資料如果開放,可集眾人之力來分析,應該發揮更多用處,所以我才提到open data(但open data未必是big data,這也是常見的迷思)。我個人更有興趣的是去觀察資料之間的相關性,分析學生的修課行為,給新來的修課的建議等等。這也是我一再說,資訊科技會改變很多事情,尤其是教育。

5. 我發現似乎有些朋友把big data analytic和deep data analytic混為一談。實際上,「大」和「深」是不同的面相,在學理上應該要區分清楚。例如我們做deep learning,不見得要用很多的數據才能做,如果模型深度夠高,也可以做得好,但是如果有大數據的話,應該會更好,至於好多少就要看狀況了。這時候因為在有限的運算能力和等待時間的限制下,研究者不可能又要深又要大,必須有所取捨,因此應該就大和深這兩個面相分別研究和綜合去探討解決方案的優劣。

6. 因為大數據取得不易,而且所需的設備成本高,所以大多數人做的比較像是deep data analytic,但是套上了big data analytic的名字,看起來比較時髦。實際上,只要能把問題解決,是不是big data,名稱是什麼,並不重要,只是我們做學術的,稍微講究一點,希望把概念和名相講清楚。

(註)http://udn.com/news/story/6925/1232877

2015年9月23日 星期三

深耕自由系統軟體

我們提出一個以自由的系統軟體為基礎做效能優化的計畫,重點不是要創造全新的自由軟體,而是「善用」自由系統軟體去解決電腦系統面的問題。

我認為,過去在推動自由軟體時有個盲點:只重視產出新專案的件數,而且多半還是以應用軟體為主。結果雖非全然無用,但國內有多少好用的應用軟體是源自於自由軟體計畫呢?

執行面的問題,出在學校教授被要求要生產論文,而花費很多時間教學生以軟體工程的規範去寫軟體,需要寫文件和測試,根本不划算。光是要學生用英文寫好文件,以及與國際接軌,就是一大挑戰,到底是教資訊還是教英文?非常花時間,不如做理論去。

所以我自己在經營自由系統軟體研發時,傾向於以下的作法:

(1) 學生要先學會「使用」和「瞭解」核心的自由系統軟體,例如Linux和OpenStack裡面的好東西。沒有使用,怎麼會深刻瞭解呢?而且這些核心的東西,到很多地方都用得上,學了不會浪費時間。

(2) 「研究」重要的自由系統軟體,例如KVM, QEMU, Hadoop, Spark, OpenXXX之類的東西,看看其中有哪些效能問題,或是功能不足之處,或是架構的改良。這當然必須考量人力、時間、資源的限制,尋求業界的支持,而且最好是有個夠大的團隊和夠專業的人才。

(3) 如果研究有成,希望能夠改良既有的自由系統軟體,或是加入新元素,「回饋」自由軟體社群;或是以自由系統軟體為基礎,打造創新性的產品。這些是我們所樂見的目標,並非申請專利和發表論文,請長官不要用錯誤的KPI來評鑑計畫。

我想,這是值得深耕的領域,而如此按部就班地去做,應該會有好的成果。即使政府部門不贊助,我們也渴望與產業界好好地共同來經營這塊。有錢出錢,有力出力,希望能做出傲人成績,去改變論文掛帥、KPI評鑑的弊病,也為下一代鋪路。

軟硬並用,加速應用

這篇大致上源自於我剛剛對於某科技公司邀約的回覆,他們有企圖心想在嵌入式系統上加速電腦視覺,希望突破成本、體積、熱功耗散、系統設計、軟體開發上的問題,所以想找我去聊聊。

我幾年前有去過該公司講課,覺得該公司是國內少數願意投注在研發的公司,只不過處理機的研發需要大量人才以及長時間的深耕,有其高門檻。

想以類似deep neural network之類的方式做較為複雜的電腦視覺和學習,例如Google Brain在做的事情,需要頗大的資料和運算資源,如果可以在單機上完成,那就會太完美了。

然而考慮實際的狀況,真正的瓶頸,往往在於功耗。無論是embedded systems還是 data centers,大多是如此。改善運算效率的方式很多,但沒有超級特效藥。

舉個不倫不類的比喻,如果說目前machine learning、big data、IoT是顯學,那系統設計則可說是密宗。這兩者搭配起來,會很有威力,但是顯密要合作並不容易,雙修則更難。

例如,用多核心來跑平行化過的程式,效能可能比單核心多1~2個數量級;如果用上GPU、好好優化的話,可能再加一個數量級上去;如果願意設計專用 的硬體加速器,有可能再加上1~2個數量級。

但這些效能提昇的可能性,與應用高度相關。所以對於某些應用,例如Bitcoin挖 礦,比的就是效率,為了提高投資報酬率,到後來大家都用ASIC,或許有比普通桌 機高1000x以上的效率。可參考[1][2]。

Bitcoin挖礦這類的應用,可說是特例:(1) 程式可以大幅平行化,幾乎有用不 完的平行度 -- 每筆資料的運算幾乎完全獨立,少有相依性,所以平行化的難度 低、效益高。(2) 每筆資料所需的運算,基本上是計算量高、複雜度低的hash function,所以用ASIC實作的難度低。(3) 這種能夠直接賺到錢的東西,很多人 蜂擁投入,所以研發費用可以快速分攤回收。(4) 因為挖礦的本質屬競爭型,速 度慢就挖不到,所以在競爭激烈的情況下,設備效率的進展很快。

但並非每個應用都具備上述四大特性,所以說Bitcoin挖礦是特例。

對於某些應用,即便將核心計算部份做成ASIC,單機的效率還是不夠用,這時只好用多台機器並用,組成computing cluster。這個時候必須額外負擔網路的成本,這時的技術層次有更高了。傳統的data center並非針對特定應用設計,所以要自 己建這個cluster才行,例如SpiNNaker計畫[3]嘗試建構的人腦模擬器,但他們還是沒有用上ASIC。

然而對於某些應用,即便將上述所有技術都用上,可能還是不夠力,這時大概只能寄望於未來的新科技。

很多年以來,無論是真的不夠力,或是不願投資,人們習慣把希望寄託在未來的計 算晶片,因為Moore's Law告訴我們10年後的電腦應該會比現在快100倍,所以只要 等到時間到了,自然水到渠成。

可是在今天這個大家談論Moore's Law是否會終結的年代,把希望放在未來,不見 得是好的賭注。當然Moore's Law有可能再延續幾年,有人在發展新的運算技術 (例如量子計算),但越來越多的人已經很認命地在研究如何使用以前只有搞超級電腦的人才在乎的異質計算和平行處理。

我一直說這有硬體基礎的台灣,是有機會做軟硬體整合設計,主動在效能和效率上有所突破。但這些突破,必須仔細分析應用面,大概沒辦法用一些原則概說。所以我鼓勵跨領域團隊研究,比較有突破的機會。

[1] https://www.bitcoinmining.com/bitcoin-mining-hardware/
[2] https://en.bitcoin.it/wiki/Mining_hardware_comparison
[3] http://www.artificialbrains.com/spinnaker

2015年9月22日 星期二

談Microkernel

我這學期會請蘇文鈺和Jim Huang (Jserv)兩位成大教授來我的「系統研究專題」課上談談他們在系統研究上的專業,時間和內容會再公布。此外我還會設法邀請其他的教授來幫忙,讓修課同學知道系統研究的學問之豐富有趣。

誰說上課只能在課堂上?Jserv 常常在臉書上講演作業系統的專業新知,使得學生和我大開眼界,也努力自學來充實自己。例如Jserv這篇,讓我回顧作業系統的發展以及最新趨勢,我在看了之後,記錄以下自己的想法,在臉書上向黃教授提出報告。

關於microkernel vs monolithic kernel的辯論,我覺得終究還是要考量 performance, application, security三者的trade-offs(這剛好也是我們實驗室命名的緣由)。

為了安全性而犧牲一些效能,或是為了效能而提高一些風險,到底哪個比較明智?很難講,我想必須針對每個應用做個案探討。

對於個人電腦,即便處理機效能和虛擬化技術大幅進步,trusted computing的概念始終沒有普遍化,為什麼呢?當然原因之一可能是主流的作業系統不大可能說自己不夠安全而引刀自宮,讓自己從monolithic kernel變成microkernel。但個人電腦的使用者對此沒有強烈地需求,是根本的原因。

在伺服器上,由於安全性出問題通常還是倚賴專人控管、人為處理,所以microkernel的安全性優勢還是往往被忽視,除非應用服務是極其重要和不可中斷的,才會考慮換掉Linux改用安全性較佳的OS。但是經過千錘百鍊的Linux Kernel,以及許多靠著Linux維生的開發者和管理員,在技術上和政治上讓換掉Linux這件事成為少數。

與金流、機密有關的專用電腦設備,例如銀行ATM、商場POS機、FBI的系統,往往選擇專用的OS,但是否一定要是microkernel呢?這也難講,因為專人開發的專用的OS,如果開發得好,有不錯的安全度,而且不給使用者亂裝額外應用,外人也不大清楚OS的內部,所以安全性的風險通常很低。當然還是有內神通外鬼的情況,以及駭客入侵,但層出不窮的監守自盜和攻擊方法,豈是microkernel就防得了的?

我想目前比較需要辯論的問題在於:與金流、機密有關,需要強化安全性,卻無專人可隨時控管的大規模電腦佈署上,例如手機和IoT裝置,要如何確認這些裝置的安全狀態?

已推出手機付費服務的Apple Pay,手機上跑的iOS,雖然源自於microkernel的Mach,但不被承認是純粹的microkernel,因為它的file systems, networking stacks, process and memory management functions都放在kernel裡面,頂多只能算是混種、介於兩者之間的hybrid kernel。

效能當然是Apple的主要考量之一。如果iOS改成純粹的microkernel,但是iPhone跑起來卡卡的,還會深受使用者的喜愛嗎?所以Apple把microkernel的Mach改成混種的OSX和iOS,以強化效能。

話說電腦進步至今,單核心的效能成長趨緩,很難再有重大突破,所以我不認為microkernel的效能弱點,在強調效能功耗效率的行動裝置上有辦法被降低到被忽視的程度,因此我不認為Apple會把那些在kernel裡面的模組移到user space。

Google的作法剛好與Apple相反,在設計Android架構的時候,他試圖解決Linux作為monolithic kernel最令人詬病的3rd party device drivers不安全的問題,設立了一個介於user space和kernel之間的hardware abstraction layer (HAL)來擺放drivers,算是有些效法microkernel的精神,同時讓廠商有規避Linux kernel的GPL的作法。但是為了效能,不少廠商還是會把一些功能放在kernel中。

類似的辯論可以延伸到virtual machines v.s. docker containers。就隔離性而言,VM比較好,但container的效率和速度較高。再次,我們看到performance-security的trade-offs,必須要看應用面的需求。

對於眾人注目的IoT裝置以及SDN/NFV設備,我覺得Muen separation kernel  (SK)的說法是有些吸引力的。例如四軸直升機,如果被駭客入侵,飛去攻擊特定目標,那該如何是好?又例如有些網路設備乾脆就跑OpenFlow軟體來支援SDN,但如果控制軟體被駭,網路被綁架了怎麼辦?

很多這類型的裝置會使用Linux作為控制用途,以通訊業者的術語,就是control plane的部份,但這部份並不會一直在運作,因為理想的狀況是,一旦透過control plane設定好設備的功能之後,除非有異常狀況發生,否則這部份就可以在一旁休息,所以犧牲一點效能換取較高的安全性,應該是可以的。

相對於control plane的data plane的部份,做的是資料處理的功能,可以獨立出來在microkernel, container, 或是VM中進行,看看何者效能、效率、安全性、應用開發友善度較為符合需求。而Muen SK的構想,頗適用於網路設備上做NFV。這是個頗有趣的研究題目。

當然Trusted Computing (TC)的作法很多,這只是提供一個參考範例。幾乎每個處理機大廠都會有獨門的TC建置方式,但通常只有大內高手能真正搞清楚。以目前IoT和big data發展的趨勢看來,我想將來會有越來越多的地方需要很多這類大內高手。

2015年9月21日 星期一

「系統研究專題」第二堂課概要 (2015.09.21)

在今天的課堂上,我們舉一些簡單的例子來讓大家體會系統和應用上很容易出現的效能問題,然後陸續介紹一些技術出場。

"Compiler"首先出場,他可以幫我們解決一些常見的問題,所以幾十年前動手寫組合語言的事情,今天大家不要輕易嘗試,因為compiler通常會做得比你好。但是,這也有例外的,而且例外才值錢。你如果有辦法做得比compiler好,那就厲害了。

"System-level performance analysis"是compiler目前還不大會擅長的部分,因為compiler光是看程式碼,很難知道程式何時會遇到cache misses, TLB misses, page faults,更不知道遇到I/O和網路事件時需要多久時間。系統性的效能問題,往往要綜觀全局、有足夠的資訊才能分析周到。

"Performance tools"來幫忙了。像Intel VTune或AMD CodeXL這類效能工具,可以利用處理機內建的performance monitoring unit (PMU)來提供很多效能相關事件的資訊,作業系統中更是到處都有資源使用的紀錄,懂得分析這類資料,就有機會發現效能瓶頸和改進方案。

100% Utilization和Saturation有什麼差別?其中之一是善用資源,把資源剛剛好全部用掉,另一個是在資源不足的情況下,要求系統做過多的工作,所以飽和了,系統的反應時間(response time)越來越長,造成quality of service (QoS)的問題。兩個差別很大,要如何看出來?

"Performance analysis methodology"是科學家也是藝術家,請大家從做中學,透過作業和專題,去體驗這個,順便複習一下computer architecture和operating systems課程中所學過的東西。

"Virtual platform"是我們帶領大家分析hardware-software interactions和設計先進系統的重要技術。頂尖的大公司才會用這樣的技術來模擬正在設計中的軟硬體,以便達成系統層級軟硬體共同優化,但是這樣的工具外面拿不到,我們必須自己做。

"HSAemu+performance models"是我們幫異質系統架構做出來的效能模擬virtual platform。這週的實驗,請大家用這個工具跑幾個簡單的OpenCL程式,初步體驗一下如何用virtual platform來分析效能。

"Automatic design space exploration"是學會用virtual platform做效能分析最大的功用之一,在許多design parameters所構成的百千萬的設計點集合中,找到最好的點,會很花時間,有什麼好方法可以加速呢?

"Parallel processing"在此時可以派上用場。如何用平行處理加速virtual platform、performance modeling、design space exploration,都是值得研究的議題。

不過,大家應該發現我們已經在課堂上提到很多東西,包括:
Linux kernel and device drivers
Virtual machines and virtualization
Parallel and distributed programming
Heterogeneous computing and GPGPU
Reconfigurable computing and FPGA
Machine learning and CNN
Cloud and IoT

這些技術,做系統研究的常常會遇到,請大家跟他們多認識、作好朋友,而我們在課堂上會陸續以top-down的方式介紹給大家。但是大家不要等,因為我們沒有時間教細節,大家要想辦法自己學(投影片和網路上有很多參考資料),或是去修相關的課。為了要成為厲害的系統研究人才,大家加油吧。

2015年9月20日 星期日

寫程式到底要不要天份和熱情?

看到這篇標題為「寫程式不需要天份,也不需要熱情」(http://blog.turn.tw/?p=2683)的文章,覺得還頗有趣的。我很同意作者要破除「深植人心的刻板印象」的心意,想先談破除迷思這個部份,至於寫程式的部份,則有待討論,文末再談。

有時會看到這類經由聳動標題鼓勵讀者思考的文章,有的是作者刻意,有的是媒體加料的。我想最重要的是內容要言之有物,讀者要能思辨。我就常常藉這些機會思辨,用寫文章來澄清思緒,改變自己對事情的刻板印象。

如果我們把這篇文章的標題改為「寫文章不需要天份,也不需要熱情」,似乎也可以論證。馬上想到,一大堆記者天天寫文章,有天份和熱情嗎?(最近有人諷刺記者,說小時不讀書,長大變記者)。

寫一篇四平八穩的文章,不見得需要天份,倒是比較需要努力,但是才氣縱橫的文章,則是沒天份不行。熱情的作家比比皆是,但有影響力的名家不多。而我們從小背國父、蔣公的文章,請問他們有寫作天份,有天天想寫作的熱情嗎?名家和文章的影響力,與很多其他的因素相關,包括政治和機運,在此不一一列舉,所以這問題沒有標準答案,而答案要看你想寫何種文章而定。

我們還可以把題目換成「造東西」,但「造房子」「造汽車」「造飛機」「造火箭」同樣都是造東西,那個需要天份和熱情?講清楚之後,答案可能大不同。如果我們籠統地說「寫程式」,不問清楚是寫什麼程式,那要怎麼談呢?

因此,要思辨這類問題,關鍵往往在於深入追究文字的定義與內涵。一般人總是習慣接受主流的籠統概念,但卻不見得抓得住其具體內容和範疇,所以拿一個籠統概念套上另一個籠統概念。

傳統教育比較不鼓勵思辨,而且特別喜歡看大師如何扼要地回答「大哉問」。很多人特別愛摘錄大師嘉言錄,但不見得知道其微言大義。很多大師自己好像也不願多費唇舌講清楚,只好讓後人自己去揣測「道可道、非常道」的意思了。

我個人提倡在中小學教程式寫作,其中許多好處之一,就是「訓練學生清楚正確表達想法」。目前的作文訓練,很多只是教學生像大師般在短短的篇幅中籠統地說大道理,不夠清楚,也不見得正確。而數學和理化的訓練,則是機械式的解題,解答的式子能有幾行?算不上什麼表達想法的訓練。

承接以上的脈絡,我們來談「寫程式需不需要天份和熱情」這個命題時,首先需要更進一步講清楚「寫程式」的目標,才有辦法深談這件事。例如我簡單將寫程式的目標,分為以下三類分別做討論:

(1)寫程式來解決特定非電腦領域的應用問題,需要的是解決問題的天份和熱情。這類工作只要程式的邏輯正確,能力得以解問題、創新應用,那麼程式寫得好不好,不是重點。如果程式或演算法寫不夠好,找(2)的人來改;系統不夠強,找(3)的人來一起解決。

(2)寫程式來發展電腦領域內的軟體,這種人,常常是在所謂純軟體公司工作,一天到晚與電腦接觸,時時要面對不斷累積、越來越複雜的電腦軟體,常常要學習新的軟體語言、介面、架構,如果沒有天份,那麼可能難以理解複雜的部份,如果沒有熱情,恐怕不易堅持下去。

(3)寫程式來研究和發展電腦系統,這種人,例如在Google/Facebook/IBM/Intel/Apple/Oracle的系統研發部門,最重要的是搞清楚各類與電腦系統相關的技術,改進現有的技術,而他們用來利用電腦來管理、分析和設計新的電腦系統的東西,都是程式,所以他們需要懂得寫程式,但未必是程式高手。

這樣討論就清楚些了,不是嗎?如果大家都把話講清楚,雞同鴨講的事情應該會減少些。

我個人很不喜歡「以寫程式能力來判斷是否為強者」以及「為了寫程式而寫程式」的作法。過度強調這些,的確是造成社會刻板印象的根源之一。因為學習寫程式的人有很多在做(1)和(3)的工作,需要的遠遠不只寫程式的能力,所以不應該特別突顯(2)的狀況,或是以為只有(2)才是王道。

然而,做任何學習和工作最好要具備起碼的天份和熱情,只是所需的專業和程度多寡不同而已。所以說「寫程式不需要天份,也不需要熱情」這句話是有瑕疵的,拿來破除迷思可以,但請不要籠統地抓住這句話到處去宣揚。

總之,想學寫程式,多一項能力,也多了邏輯思考和清楚表達的訓練,是一件好事。至於學了之後要做什麼,那就有太多的選項,最好的方法,就是先入門來學,才能確切分辨以上所講的事。

2015年8月7日 星期五

台大資工系重回理工組第二志願

國立臺灣大學電機工程學系 416.40 (錄取名額 44)
國立臺灣大學材料科學與工程學系 409.20 (錄取名額 12)
國立臺灣大學資訊工程學系 405.20 (錄取名額 25)
國立交通大學電機工程學系甲組 402.60 (錄取名額 4)
國立清華大學電機工程學系甲組 399.90 (錄取名額 4)
國立臺灣大學物理學系 399.50 (錄取名額 20)
國立臺灣大學機械工程學系 399.40 (錄取名額 23)

以上是第二類組無加權計分錄取分數的排序,台大資訊工程系的排名今年升到第三。假使今天台大資工系和材料系一樣只錄取12名,很可能會升到第二志願。順便一提,假使今年排第四、五的系收20名的話,我猜大概會排到五名之外,所以這樣幕後有蹊蹺的排名的意義性其實不大。

我不鼓勵高中同學人云亦云式地填志願序,你如果不喜歡寫程式碼,那麼最好不要來念資工系,否則會念得很辛苦。我今天幫一位大二的學生簽「退學申請書」,因為他念了之後發現自己很不喜歡資訊系所學的東西,所以他重考了,今年要去念中央警官學校,我和系主任都祝福他。

因此當有人問我他的小孩要念電機還是資訊的時候,我說,先請你的小孩搞清楚電機和資訊是什麼再說吧,排名不重要,喜歡念什麼比較重要。我倒是可以分享我對於資訊科技前景的看法,但那只是個人看法。

我之前告訴就朋友們,資工會越來越紅,幾年後熱門的程度超越電機都有可能。事實上,這件事在美國早就發生了,只是資工在台灣電子業榮景的陰影下,一直沒有好好發展起來,但是這幾年會是台灣資訊產業的機會和轉捩點。如果還發展不起來,那我只好說國外還有很多好機會了。

補充:

進到台大其他科系但是想念資工的學生,可以選雙主修,或是到資工系修課。所以就技術上來說,也不見得全部都是迷信台大,不過實際上辛苦準備考試的高中生們不見得知道那麼多就是了。

我每年都有幾個非資工系的研究生,我觀察他們的狀況,覺得只要有興趣,願意努力,應該做得到的。

現在很多系所都要用到資工的技能。以數學和物理系系為例,他們用了很多GPU來做高效能計算,在做這些研究時也都學習到一些如何寫好程式的技能。

現在有些新興領域新創公司有資訊人才的需求,但是懂得跨領域的學生難找,要撿現成的不容易,所以學校想推跨領域CS+X的作法,但實際上要從高層推動和執行是個大問題,不如我們有興趣的老師們自己組跨領域團隊來做比較快。

最後再補幾段,希望可以減少誤入歧途的學生。

資工的屬性是「快速創新」- 因為電腦擅長於快速解決重複性的問題,而且軟體工程的重點之一就是重複使用(reuse)已經開發好的軟體,所以一個新開創的領域裡,低處可被撿拾的果實(low-hanging fruits)很快就會沒了,後來的人就必須設法跳高、爬高,或是與人合作,往更高處找果實。

- 對於有興趣的人來說,資工的屬性,提供了非常愉悅而且有終身意義的奮鬥和行動,可以樂此不疲,志不在於賺錢,卻因為不斷的提升自己而自然在這個領域優遊自在。在台灣這種人應該是少數,不知有資訊領域裡面有沒有超過5%是這種人。

- 對於能力強的人來說,資工的屬性,是成為少數頂尖專業人士而展現才能的機會。我的台大電機系的系友們,大多數屬於這類人。無論是電機還是資訊,不管有沒有興趣,他們都能成為特定領域中的佼佼者。他們也不用特別奮鬥,就能學得比人快,跳得比夠別人高,甚至賺得比別人多,但他們對於所屬的領域並沒有投入太多的感情。這類人只要能把自己和家人搞定,念任何科系都行。

- 對於想賺錢的人來說,資工的屬性,提供了許多創新,甚至是破壞性創新的機會。不過過去在台灣念資工的人,很少搞破壞性創新。不少人只想靠著電子業的榮景趁年輕時拼個十年拿到買房的本錢,接下來就想辦法留在中階主管的層次混吃待退。現在,電子業衰退,正是檢查潮水退後誰在裸泳的時候,而資訊科技仍然不斷在發展,真的想靠創新賺錢的人,還是很有機會的。

- 對於想謀個穩定工作的人來說,資工的屬性,代表著不斷有工作的需求出現,在各行各業逐漸被電腦所取代的狀況下,源頭的資訊科技,在可見的未來,工作的產生還是比流失來得多,因此似乎比較有安穩。但真的是這樣嗎?如果沒有興趣,那麼為了工作時常要學新東西,能力不足有可能被新人取代的壓力,是划算的代價嗎?

所以我很贊同那位離開資工去學做警大的學生。假使對資工沒有興趣,以大學或研究所學位作為工作保障的想法,根本不切實際。偏偏在輿論大肆報導特例的情況下,連台大的一堆學生也擔心工作的問題,讓我覺得啼笑皆非。能夠上得了台大,怎麼還對自己的能力那麼沒有信心?如果對能力沒有信心又不喜歡念資工的話,還是考慮早點轉行比較好。如果有能力又喜歡資工的話,恭喜你,也建議你不要過度擔心,這個領域有很多適合你發展的空間。

由於補充再補充,我可能重新整理過再發一篇。

2015年7月28日 星期二

需要改變的科技人才培育模式

這兩天在台大辦了一場SDN工作坊,昨天在臉書上貼了一些照片,順便因為助理說報名人數太多,經費有點不足而感嘆。我說:

『美中不足的是廠商贊助意願不足,這個活動的花費,會影響到我們後續在系統軟體的推廣活動經費。我跟四家廠商聊過贊助事宜,很花時間,在談的時候他們都說這樣的活動很重要,但是需要回去想想,然後就沒有下文了。廠商如果連花個三萬元贊助這樣的活動都不願意,那麼有什麼立場天天高喊缺人才,有什麼資格說學校不重視產學?』

『請大家告訴大家,要支持產學、培養高階實務人才最好的方法,就是直接來支持和贊助相關的教學、研究、服務。如果連起碼的廠商贊助都沒有,那我們拿什麼去告訴學生國內廠商非常需要這個技術和人才,如何去跟國際一流企業競爭?我相信廠商不是不願意,而是沒有習慣去預留產學合作和贊助經費,但習慣是可以養成,產學要進步,不能老是出一張嘴或是撿現成便宜。』

由於只是順便一提,所以寫得很簡短,沒想到後來發生了 兩件事:(1)當場有新創公司的朋友來找我,跟我說他們願意捐款。(2)某廠商朋友晚上打電話來抱歉,說是公司內部作業程序的問題。

我覺得很有趣,資本額小的新創公司,覺得義不容辭,而資本額大的廠商,似乎是九牛難拔一毛。

這就是我所謂習慣的問題。在台灣,大公司佔了很大的便宜。學生畢業後慣於找大公司,大公司慣於接收學校產出的人才,與前瞻研究相關的產學合作或是教育訓練活動,往往是「醉翁之意不在酒」,著眼點放在:(a)建立與大牌教授的關係 (b)提高公司在學校的知名度,但科技業在雇人的時候,很多是不大在乎學生在學校所受技術的訓練和研究題目。

為什麼呢?因為台灣先前所謂的科技產業,大家現在都聽說了,叫做科技代工產業,研發的層次不高,因此在這樣的舊時代中,學校教些基本的東西就好,業界要的只是兩個東西: (i)新鮮的肝 (ii) 會照著SOP把事情做好的腦,而且最好是C/P值最高的肝和腦,能夠時常加班在最短的時間內做好長官交代的任務,例如說很快地把別人剛推出的新產品用便宜的方法複製出來。

例如SDN這種東西,在傳統台廠的想法中,只是要一些懂操作的IT的人員,或者是等著像做PC一樣等著標準解決方案出來,再來做一些簡單的客製化就行了,比較進階的研發項目,像是軟硬體統合設計或是3S整合,對大多數台廠來說,還是等國外先做成產品再來以「快老二」的方式追趕就行,所以現在還不急。

業界不急,那學界急不急?政府怎麼做?

第一,學界不急於與業界合作,因為根據過去多年的經驗,學界人士可以完全不靠業界合作而「蓬勃」發展,反正我就帶著學生做理論研究、發表學術論文,集滿點數之後就可以升等,何必跟你辛苦地要錢做產學?

第二,政府自己沒專業能力決定科技發展方向和審查業界向政府提出的經費補助案,所以政府得找教授來審查。找誰呢?當然是找那些論文等身的大師。如果大師跟你募款,請問你給不給?不給面子的話,大家走著瞧吧。

第三,什麼題目紅,業界和學界就跟政府要錢成立專案做研發,所以熟門熟路的人都非常會看風向,也得累積人脈。雲端、巨量資料、物聯網、4G、5G,這些名詞火紅的時候,跟著喊就有機會分食大餅,至於實際的研發成果就以後再說了,反正三五年後又有新議題要跟。

因此,學界被詬病不夠務實,也其來有自,那麼產業界怎麼會對學界有信心呢?所以就落入了惡性循環。這樣傳統的作法,讓台灣的科技業界始終侷限在代工產業裡,而且必須勤奮努力做快老二才能生存。過去嚐過甜頭的廠商,拼命想複製這樣作法,還覺得這就是台灣的宿命。而台灣的學界一直在做學術論文,難以與業界實務接軌。

反倒是新創公司的朋友們,才知道人才培育的重要性,願意將資源投注在人才和科技研發上。看到新創公司的企圖心,以及台灣的人才素質,我並不覺得台灣做不出真正的研發和創新的技術。一個健全的科技生態系,需要各種型態的公司和人才,所以我並不是說每個人都要去做新創,而是希望業界能夠擺脫舊觀念的束縛。

有實質的高科技研發需求,才會落實前瞻的產學合作,才會產生真正向上提昇的synergy。不過,高科技研發本來就是高風險的投資,所以沒有安全的道路,可能不大適合想要小確幸的人。我剛剛對旁邊的年輕教授說,走這條路是艱辛的,也是個賭注,就像去做新創公司一樣,沒有保證成功的,要有些創業的熱情 -- 或許有創業熱情的年輕人,加上有創業熱情的教授,會是比較能夠突破既有框架的作法 -- 支持這些有熱情又肯努力的人,是我們在現階段能夠有所作為的事情之一。

2015年7月9日 星期四

軟體定義網路SDN跨領域工作坊+黑客松

這是我之前預告過,我們「教育部資通訊系統軟體資源中心」將在七月底辦的「軟體定義網路SDN跨領域工作坊+黑客松」,現在正式開放報名。在台大(7/27-28)和成大(7/30-31)各一場,每場為期兩天內容豐富的課程,費用全免,優先提供給教師和學生,也歡迎業界人士報名,詳細內容請至網站:
http://pas.csie.ntu.edu.tw/SDN2015Workshop/

黑客松的題目已經有人提出一些題目,但既然是hack,我們保持開放的態度,讓參加的學員自由盡情發揮。我們也歡迎有人自告奮勇出來帶黑客松,或是出題目和建議給學員參考。

軟體技術早已不知不覺地深入到我們的四周,取代了原先硬體為主的產品設計思維。軟體定義網路(Software Defined Network)是其中的一環,這種革命性的網路技術,讓網路在設計、建置、管理與使用上更具有彈性和通用性。事實上,軟體在可見的未來將會定義更多的技術標準和應用,是業界極具潛力的發展方向。

歡迎分享此訊息。