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


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

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月19日 星期四

厚積而薄發

林偉棻教授這篇是非常值得分享的文章。我幾天前評論當前的新創氛圍時說到「本立而道生」,與林老師的見解類似。林老師是我台大電機、密西根大學的系友,她在Apple工作過一陣子後回到台灣貢獻社會。

在個人學問和德行上,「博觀而約取,厚積而薄發」是相當重要的內斂修持之道。廣博地觀察世間人事物,在深究學問時要懂得收斂和聚焦;深厚地耕耘、有系統地累積實力,卻只是淡泊淺易地分享心得。

當然,有人看蘇軾的言行,似乎很高調,哪有什麼「厚積而薄發」?我三不五時在臉書部落格上發表意見,在有道者面前,恐怕是「膚淺卻猛發」。或許是學養不夠,值此關鍵時刻,孔子說:「不得中行而與之,必也狂狷乎」,只好拋磚引玉、丟人現眼,或許能吸引那些真正「厚積而薄發」的有道之士出來現身說法。

現在教育的問題很大,但如果我是學生的話,為了自己的前途,難道只把問題推給教育當局,就不好好學了嗎?或是人云亦云,馬馬虎虎學學,就一窩蜂跟著人家說教育無用、學位無用、大環境不好,趕緊去找鐵飯碗、金飯碗、搞創業?沒有打好基礎,沒有想清楚就這樣做,有其危險性。

我提倡多元,但沒有鼓勵學生們抄短線,或是像無頭蒼蠅般亂鑽。除非有蟑螂般的本事,像前幾天課上討論的CockroachDB開源資料庫系統(註)有那麼強大的存活能力(survivability),能夠利用全分散處理的架構,不需要首腦(master)也可以存活,自行復原。

多元即是博觀,專業即是約取,厚積即是立本,有了這些基礎,對未來的道路就可以看得更清楚,才有薄發或爆發的資糧和空間。蘇軾這段罵得很好:

『然今之人者,學未成而急於用,腹含半經,便輕用於世也。不憂己學之不足,徒懼未能有用之時。故學之未精,便輕用其力,以致事不成,而人輕之也。』

這段蘇軾用來罵自己身邊得志小人的話,也很適合在今天罵那些「腹含半經」卻因緣際會而掌握權力的門神和跳樑小丑,以及提醒那些半吊子、不學無術卻想一步登天的年輕人,也讓我們多些自我反省。

眼光放遠來看,思考如何在超過40年的歲月中在高科技職場上持盈保泰,還是尋覓哪裡有穩如泰山的位置,還是設法撈一票後抽身?我大膽預測,不會自學、缺乏適應力、沒有獨到眼光,一招兩式靠著機運晉升管理階層的人,會在不久的未來迅速被取代。有能力的人,雖然嶄露頭角的時刻較晚,但在重要時刻會有用武之地。

「博觀而約取,厚積而薄發」這句話,雖然古老,卻也是在快速變遷社會的現代知識分子可細水長流的中道路線。

(註)https://github.com/cockroachdb/cockroach

2015年11月18日 星期三

新世代的FPGA

剛剛看到一篇關於IBM剛剛發表在SC15的論文,使用FPGA來加速big data storage和middleware的報導(註),剛好佐證了我們正在做的研究的意義性。

傳統的FPGA的用法,有很多限制,真的要用FPGA加速應用,必須有突破傳統的程式發展典範與框架(programming paradigm and framework)、編譯器技術與runtime support、計算機系統架構、設計與除錯工具等等。

我們也和IBM有些淵源。故事要回到四年前,IBM Austin Research Lab在2011~2013年間與我們合作FPGA加速的技術,那時IBM合作的夥伴是Altera,IBM把FPGA放在Power CPU的旁邊,讓FPGA可以直接存取主記憶體,在當時是很威的設計。全世界沒有幾台原型機,特別運一台到南港給我們做研究。

後來,IBM一連串改組,FPGA加速計畫不知何去何從,南港的伺服器部門大部分轉給聯想。但我們仍舊繼續這方面的研究,沒有金援,就自己湊錢買有點貴而且代理廠商不大懂得支援的FPGA加速卡。

我們在去年發表一篇關於程式發展典範與框架的論文,有興趣者可參考:
MobileFBP: Designing portable reconfigurable applications
for heterogeneous systems, Journal of Systems Architecture (2014).

前幾天才獲得通知,說我們投稿到FPGA 2016 Conference的最新研究成果被接受了,所以明年二月底有機會去北加州(Monterey),現在開始也可以多談談新的研究內容。

論文題目是: A Platform-Oblivious Approach for Heterogeneous Computing: a Case Study with Monte Carlo-based Radiation Simulation, to appear in FPGA 2016.

我們正在做的研究目標類似文中這段所描述的:IBM Systems Group developers will create solution stacks for POWER-based servers, storage and middleware systems with Xilinx FPGA accelerators for data center architectures such as OpenStack, Docker, and Spark.

期許我們的研究能與世界同步,徵求人才中。

 (註)http://www.anandtech.com/show/9790/ibm-xilinx-sc15-collaborating-for-better-powerfpga-system-integration

本立而道生 - 不要低估技術門檻

奇群公司的募集群眾資金研發的「貓臉辨識餵食器」,說是低估硬體開發的難度而難產, 向群眾道歉(註)。在此我不想就細節評論這件個案,但我想藉此提醒想創業的人,不要低估系統開發的難度。
現在有太多創業競賽過度強調包裝,甚至主辦單位還特別找人來教參賽隊伍如何把作品「投售」(pitch)給評審。當一天評審下來,忙著拆包裝找技術涵量,發現許多團隊根本不考慮系統面的問題,包括硬體成本、效能、耗電量、網路費用、即時性、例外處理等等實務面上的問題,而且問題不小。
某次擔任某個競賽評審時,我問主辦單位能不能讓大獎從缺,因為作品內涵不夠,但主辦者面有難色。後來知道,不只獎金一定要發出去,而且還要輔導和推銷得獎團隊去創業,這是上級長官交付的任務。有趣的是,媒體人士擔任的評審比學界多,主導了得獎作品的評分,而從結果中發現,他們大多無視於技術面上的問題和難度。
想起一句老話:「君子務本,本立而道生」。本是什麼?想要得什麼道?可能在創業時要思考清楚,業也是有分善業與惡業的。
(註) http://www.bnext.com.tw/article/view/id/37988

2015年11月17日 星期二

開源(open source)的大趨勢

今天我們「系統研究專題」課堂上談了開源(open source)的大趨勢。除了開源程式碼已經成為主流之外,資料、硬體也逐漸搭上開源的列車,原因是甚麼呢?

難道開放和分享,是人類的天性嗎? 不要鬧了,果真如此,那我們為什麼有很多東西不願跟他人分享? 為什麼有私人財產、私人企業? 為什麼文章要有著作權,發明要有專利、智財權?

如果有機會請有錢的人、企業家,做點「拔一毛以利天下」的事,看看他們做不做? 我不是批判他們,而是說「開源」這件事,並不是人類的天性,而是基於利益考量下的產物。

坦白說,我喜歡開源的精神和支持開源的做法,但我一直覺得Richard Stallman的Free Software的理念陳義過高、無法落實。就我的觀察,開源多多少少有其利益考量,並不見得是義舉。

首先,貢獻開源程式碼、資料、硬體設計者,以下簡稱「開源者」,往往可以因此展現能力、獲得好名聲、交到好朋友,不必要到處請託,也有機會讓大人物看到長才,一步登天。開源者的知識和能力,對於想使用開放資源的族群和公司,是寶貴的資產。

其次,開放的資源,往往只是起點,好的開源計畫會吸引好人才一起進來開發,讓好的更好。好計畫加上好團隊,再加上有眼光的企業家,大概就成功了一大半。這是為什麼有些開源計畫能夠快速創業、成功吸引投資的原因。

再者,基於開源的產品,比較容易獲得客戶和使用者的支持和信任,所以推廣容易。雖說資源本身是免費,但使用者的支持和信任,以及衍生而出的回饋與品牌形象是無價的,而這些無價的東西往往可以用某些方式創造出價值。

最後,擁有大量使用者的開源技術,由於使用者的回饋和幫助修正,使得開源技術的穩定度和成熟度隨著時間而增加。反過來說,「閉源」(closed source)技術的維護與更新,需要持續投注人力,需要在自家訓練新人,技術可能因為人才流失而無法維護,不穩定的因素較高。

會在課堂上講這些,是因為學生懵懵懂懂,而業界對於開源的觀念也有其侷限性。我被業者嗆過很多次,說技術如果開源,東西都被看光光,怎麼賺錢?

近年來,靠著「閉源」技術賺錢的公司,逐漸踢到了鐵板。有些公司靠著老字號金字招牌,還可以哄騙那些不懂技術的客戶。然而,諸如「買IBM的伺服器就不怕被老闆罵」的思維已逐漸淡化,連IBM都把低階伺服器部門賣給聯想,微軟開始與開源的Linux合作,要不是踢到鐵板,怎會如此?

因為敵不過開源技術的大趨勢,廠商踢到鐵板,只是早晚的問題而已。當然,專利和智財權,是開放資源的敵人,但只要能用開放資源賺錢,負擔合理的專利、智財費用,也還過得去。

相較之下,如果一昧保護,自我設限,可能會搞到產品沒有人理會,技術一文不值。有一些開源技術,來自於失去競爭力的產品,但這類技術本身也日落西山,為時已晚,沒甚麼看頭。

我在課堂上帶著學生看了一些近期的開源計畫的案例,來佐證以上所述。這些案例,包括:

1. Google的Open Source Projects網頁上列出的17個計劃簡介。(https://developers.google.com/open-source/projects)

Google號稱公開了20,000,000行程式碼,900個開源碼計畫,而網頁所列的這17個代表性計畫,都是我所謂「廣義的開源系統軟體」,包括作業系統、程式庫、引擎、程式框架、程式語言編譯器、開發工具,都是提供給應用開發者使用的軟體。由此可見開源系統軟體的重要性。

2. 2014年度最佳十大新鮮開源碼計畫("The top 10 rookie open source projects", http://www.infoworld.com/article/2875439/open-source-software/the-top-10-rookie-open-source-projects.html)

不是只有大公司才能做出好的開源計畫,這裡由媒體選出的十大新人獎,當然不見得一定是最佳的,不過很有參考價值。同學們可以看看程式高手怎麼樣從有系統地解決自己身邊的問題開始,藉由分享和交流成果,獲得贊助,逐漸壯大成為世界級的計畫,有的也成為商業模式。

3. RISC-V所提出的開放式的處理機架構標準 (http://riscv.org/)

Intel和ARM這兩家公司,藉由他們所定義的處理機架構(instruction set architecture),來占據處理機的市場。但這些二十多年前就訂出來的架構,究竟還能風光到幾時?

如果今天有個拋棄一切舊架構包袱、砍掉重練的開放式處理機架構標準,而且有個高品質的社群提供開源的硬體碼和系統軟體,在效能上能夠與ARM和x86並駕齊驅,可以讓我們整個系統的軟硬體都是開源的,不只能夠節省成本,而且在系統設計上將會有無比的彈性以及軟硬體相互優化的空間。

好了,短短三節課,我們沒辦法講太多細節,只能讓各位瞭解整個大趨勢,但我們已經帶各位入門參觀了。這個大觀園裡,有數不清的好東西,還有很多好人,不要因為門票是免費的,就以為沒有看頭,就不進來玩。

我們下周會挑個重點領域來多講些技術,在那之前,各位不妨抽空自己探索一番。如果能好好花時間去看懂以上提到的計畫案例,那應該會有不少收穫。

數學與計算模擬

對我來說,數學是很好玩的東西,小學開始拿著數學百科全書自學,幻想有朝一日能發明某個偉大的定理。但到高中後遇到電腦,到大學後搞懂「混沌」(chaos),瞭解很多東西只是戲論,不需要執著和拘泥於其中。

數學,撇開純粹理論性的研究,在實際應用上,作為科學研究法則之一的「analytical method」,好處是可以推導出公式解(exact solution),但缺點是很難幫複雜系統推出公式解,所以在工程應用上受到相當大的限制,這時往往得靠電腦來輔助。

過度重視數學分析和要求公式解的結果,會忽略了其他的科學研究和工程設計的訓練。科學方法重視:觀察 、解說 、預測 、確認、評估、發表(參考維基百科),而我們的科學教育在資源有限的情況下,只能讓學生被動地去學習科學知識、推導公式、用公式解題。

除了用數學理論和電腦做數值分析之外,實驗(experiment)是第二種科學研究法則,計算模擬(simulation)是第三種,而近年來,資料分析科學(data analytic)成為第四種重要的科學研究法則。學習用其他方式研究科學和工程,不是退步,而是進步。對我而言,與其在公式解上鑽牛角尖,我寧可多去學習多種科學研究方法,或是如何將數學導入實務研究。

我上週與台大數學系和物理系做計算物理研究(computational physics)的兩位教授餐敘,他們認為國內一向不夠重視計算模擬,因為台灣早年根本沒有高效能的計算設備,發展極為緩慢,在教學研究上還是以理論和實驗的流派為主,但現在雖然高效能計算日益普及,應該重新來思考這個問題。

我覺得模擬器的使用,會逐步被放到中小學。與其說是模擬器,不如說是「模型的建構、逼真度的驗證、用以預測結果、解構模擬對象」的科學研究方法的訓練。資料科學,也是如此。真正的科學研究者,探索的是真理,不拘泥於研究方法,沒必要堅持流派。

2015年11月15日 星期日

複雜系統的自造者

剛剛,我用一分鐘之內瀏覽完一篇Yahoo!機器學習研究團隊的貼文(註)後,嘆了一口氣,也鬆了一口氣。

能一分鐘看完,是因為這篇所講的,剛好就是我上週雇到一位研究助理所要做的事:請他去整合和研發出一套能用GPU加速Hadoop/Spark的系統。因為我們已經做過一些研究(例如Hadoop接上GPU,也裝過Caffe/OpenCL),所以我想這套系統應該可以在幾個月內建置出來,主要還是因為人員的訓練需要花時間。(想來工作嗎?)

嘆一口氣,是因為「想做的東西已經被做出來了,而且幾乎和我想得一模一樣」,所以感嘆我們的進度緩慢:一年前就想做的事,因為資源、人力不足,到現在才有比較足夠的能量來用力動手做。

鬆一口氣,也是因為「想做的東西已經被做出來了,而且幾乎和我想得一模一樣」,那證明我們沒想錯方向,所謂「英雄所見略同」。往好處想,我們就可以省點事,只要搞懂人家的東西,有辦法在人家做好的東西上面堆東西就好。

例如,在上面加上Google最新的開源碼機器學習軟體TensorFlow,或是用FPGA來加速如何?

坦白說,我在國內演講、談論這類想法時,最後不少聽眾總是以「你講得很對,但我們還是等等好了」的態度結束對話。我可以體諒這些聽眾們肩上的包袱,所以當面也沒想對他們個人說什麼,但很不客氣地在此說一聲,就是因為這樣不思進取的文化,把產業給拖垮了。

幾個月前,某家大公司的老闆與我談完後,說他很少遇到有這樣想法的學界人士,很欣賞我們的做法,交代手下要找我合作,但之後與他派來的手下談沒兩下,我就傻眼了。跟我說他們公司在雲端產業上做了很多研發工作,但每當我要切入技術面做深入討論時,他就顧左右而言他。

已經有多次了,我發現有不少大公司的中階主管,只會從國外廠商那邊道聽塗說,知道很多專有名詞,知道供給與需求的現況,但根本不懂系統軟體的技術面,也不懂如何創新研發。之後那家公司沒再連絡,我相信老闆的企圖心,但不知中階主管是如何對老闆回報?

我猜,草草了結的可能原因有三。第一,他不在狀況內,似乎有聽,但我不知他是否有懂;第二,他自己本身應該已經有一大堆工作和責任,大概會選擇跳過這種短期無法收割的研發,老闆如果問起,可能就隨便打發掉,反正我跟他又不熟;第三,老闆日理萬機,極有可能想不起來這檔事,我這個人又不喜歡勉強別人,不會主動去提醒他。

但是沒關係,反正國內還是有識貨的公司,資源雖然不多,還好這裡面用到的全都是開源碼軟體,不需要花大筆錢買,我們可以靠自己來努力,讓自己跟上時代,這也就是目前我所謂推動「開源系統軟體」的想法。我們靠自己來做點東西,就像自造者一樣(maker),有機會做出令人刮目相看的東西。

不過,要學這類效能導向的系統技術,不像學純軟體,必須要有個像樣的系統,光是在建置實驗環境上就很傷腦筋。我們最近好不容易拼湊出一個麻雀雖小、五臟俱全的運算叢集,花了很大力氣去湊錢,還得幫設備找空間,很麻煩的。

我們自己建一個以100Gbps Ethernet為骨幹網路的叢集,接上儲存、計算兩用的端點,有大磁碟空間、大記憶體、GPU,上面用KVM和Docker Container跑Hadoop、Spark、Caffe,還特別找廠商來教學生使用高速網卡做RDMA。

雖然人家Yahoo!和Google用上萬台伺服器做的事,我們沒有資源做,但我們可以思考如何善用幾十台伺服器來做研發。一個全高的機櫃可以放進16台3U的機器,最多可以放入總量2PB的硬碟、32TB的記憶體、128TFLOP的GPU。

知道嗎?十年前最快的超級電腦,也不沒有這麼強,現在世界排名第500名的高速電腦,也不見得比較好用。如果能好好發揮這樣的機能,就有很多機會做出很不錯的事,機器學習只是其中之一。

不過,要發揮機能,說的比做的簡單,有多少人做得到呢?就是一般人做不到,才有趣,才要學!我們以自造者的思維來研發創新,自己建系統、瞭解系統、提早把未來的應用發展出來,這是我目前想做的前瞻研發計畫以及想推廣的活動。

人才和教育訓練是最重要的,有意者參加我們的團隊和活動,無論是有心自我學習、有志於前瞻研發、想接觸最新科技,或是關懷學術產業發展單位,我們都熱忱歡迎。

(註)網址:http://yahoohadoop.tumblr.com/post/129872361846/large-scale-distributed-deep-learning-on-hadoop

程式語言

剛剛在臉書上與朋友談論到程式語言。

C/C++對我們做系統研究是很重要的,不過對於某類開發者來說,則強調利用scripting language來使用現成的工具做應用,求新求快。我們應該不能說這些程式語言有高下,但有些人像是入了某個宗派,一昧說自家的好,別家的不好。

說自家的好處,也無可厚非,只不過針對語言的使用情境應該要分辨清楚,而不是以偏概全地說,學某某語言才是王道。我想東西只要有用,都有其重要性,況且程式語言只是個工具,學生要能舉一反三,無論學生先學C、Java還是Python,重點都在於計算思維,如果真的懂了,第二種語言只是一碟小菜。

但教者和學者要知道語言與應用的關聯性,各種語言有其最佳的用途。學生如果不會C的話,進我的實驗室或是到業界從事與系統相關的研發工作時就會有問題。當然,這不代表學生不能先學Python再學C,也不代表他不能花時間學 Python或其他,而這個例子,當然不代表所有資訊產業。

不過,所謂「由奢返簡難」,由scripting language入門者,在遇到較低階的語言時,比較常有適應不良的情況。而設計應用軟體的,用很多友善的圖形介面工具,如果突然來做系統軟體,也常常適應不良。這是習慣問題,並不是改不了,如果當時學習得法,不是硬記的,問題應該不大。如果是硬背的,那當然就麻煩大了。

以下專談系統軟體人才的訓練:

我們發現大多數學生到了研究所,對於系統軟體所需具備的程式能力還欠缺許多,而過去系統廠大多只希望受過訓練的學生去幫系統寫驅動程式,所以學生們也不願積極學。所以我最近在推動的開源系統軟體,也有一部分的原因,是基於這些問題。然而有太多系統商等著要揀現成人才,卻不願贊助人才培育,只會大喊人才不夠。

我人微言輕,平時指導幾位學生,或是跟朋友們分享我認為系統軟體的重要性,而教育的決策,需要更多人一起來影響。例如,廠商若認為系統軟體很重要,不妨多提供一些高級研發的工作機會,或是直接提供資源贊助做系統軟體教學研究的老師。

我隨時歡迎關心人才培育的業界朋友來提供意見和資源,當意見是好的,資源也到位的時候,那麼對的事情就可能發生;但如果沒有直接給予資源,可能意見再好也沒有用。培育菁英系統人才是很耗資源的,需要有先進的設備和足夠的經費,我們才能多做些貢獻。

未來的金飯碗?

這所謂的12大金飯碗,有一個共同的需求:「善用大量計算解決問題的技術」。過去用作軍事、先進科學研究的計算技術,未來會結合大數據,同時低價化普及化到各種民間用途。

我不同意「金飯碗」的標題,因為容易誤導,而且原文用的是「顛覆性」(disruptive)領域。這些領域,之所以會被顛覆,共通的原因和過去那些被顛覆的領域一樣,往往是因為「新計算科技的性價比」遠遠超過舊的,所以被大量採用,取代舊科技的市場。

要顛覆舊的模式,談何容易?腦袋裡面只有舊想法的人,很容易就被顛覆了。以追逐「鐵飯碗」的想法去求「金飯碗」,恐怕會什麼都沒有。

2015年11月14日 星期六

搞清楚狀況再發言,很難嗎?

的確很難,以我自己為例,看到某些東西時心有所感,就會想記錄下來,若不如此,好比船過水無痕,那個心境已不在,沒有寫的動力。

此外,有些時事性的討論,如果不在第一時間加入,幾天後就沒人看了,當然會想在第一時間發表自己的意見。

然而,轉念一想,如果寫下的東西只是為了「逞一時之快」,而那個「心境已不在」似乎說明了感觸並不是值得收藏,那麼寫與不寫真的有差嗎?如果必須要在第一時間之後所發表的意見就沒有人看,那麼發表的東西真的有很大的意義嗎?

克服以上的慣性,並不容易。

而且現在的媒體報導,品質越來越難以掌握,看到媒體報導時,我都得三思:報導是否真實?論述是否合理?幕後是否隱藏特定動機?

舉例來說,前天各大媒體大肆報導李登輝前總統到成功大學演講的過程中,遭到陸生嗆話,於是有大批鄉民藉此高聲謾罵對岸,結果發現這個新聞報導的內容與現實差距甚大。(參考:http://buzzorange.com/2015/11/13/china-student-and-the-fact-of-these-news/)附帶一提,我不認為任何的政治訴求,可以高過於對事實的認定。

時代在改變,很多新的東西不是我們當年的樣貌,複雜的東西也不見得可以想當然耳。因為媒體品質低落,我們不能照單全收,只好在看的時候小心求證,但低劣的東西看多了,我們也容易在不知不覺中自以為是、以偏概全、過度放大自己。

例如有一篇網路文章,貼出小學三年級的數學試卷上老師批改內容,理直氣壯地罵教育、罵老師,殊不知自己完全在狀況外,不懂甚麼是「概算」。(參考:http://ww.thefundaily.com/cat65/node712910/24253)附帶一提,對於工程設計來說,概算非常重要,在構思時通常是在腦中或紙筆概算。(概算是否應該在三年級教,考題設計好不好,則是另外的問題。)

所以,我的原則是「不為惡」,評論已獲證實的事、分享無傷大雅的事,盡可能對事不對人,除非「人」已經成為「事」中重要且不可分割的一部份。因為對人造成的傷害,並不是更正內容就可以輕鬆了事的。

我的做法是,把想法記錄下來,但發言內容如果有狀況不明之處,需要進一步查證和釐清的話,則先不公開。除非內容有時效性,則我會盡可能標示狀況不明之處,以「假設語氣」和「弱化修飾詞」給意見。

我知道,這樣一來,我的文章的時效性不夠,內容不夠勁爆,但我想我寫文章最重要的是對自己負責,而不是取悅讀者,更沒有必要隨媒體起舞和瞎攪和。

望多一些本土廠商能夠拿出吸引員工的故事和實質作法

貼這篇(http://buzzorange.com/2015/04/09/costco-salary/)不是幫推Costco,而是希望多一些本土廠商能夠拿出吸引員工的故事和實質作法。

我上週去Costo,結帳時發現帳單有問題,分心看帳單時把皮夾忘在櫃檯,結帳半分鐘後到客服區訊問帳單時,發現工作人員把皮夾送來,而且訓練有素、很有效率幫我解決帳單問題,這讓我覺得工作人員素質頗佳,因此對這個故事是有切身感受的。

至於報導標題說桃花運什麼的,我就不知道了,因為沒個人經驗,內文也沒說什麼,恐怕又是標題殺人法。

臉書動態時報與臉書網誌

我兩年多沒用臉書網誌了,因為不好用。最近注意到臉書網誌與之兩年前的有些不同,所以試用了一下,做了點實驗,使用上還算方便,但是...

為什麼今天上午貼出同樣的內容,約莫四小時後,發在臉書動態時報上的收到290個讚,與同時貼出去的臉書網誌所收到的82個讚相比,大約是3.5倍?如果算分享的次數的話,大約是15比1,差距更大...

我想到幾個可能性:
(1)臉書的演算法比較優先推動態時報?
(2)臉友比較喜歡看動態時報?
(3)臉友的閱讀的習慣造成臉書優先秀動態時報?
(4)臉友看動態時報時比較樂意於給讚?
(5)比較喜歡看動態時報的臉友比較樂意給讚?
(6)臉友看網誌時比較不喜歡給讚?
(7)比較喜歡看網誌的臉友時比較不喜歡給讚?

以上的可能性,還可以排列組合出更多的可能性;如果我在臉書工作,可以取得更多資料,寫些簡單的程式,透過大數據分析,或許不需要太多時間,就可以完整回答這個問題 -- 大數據可以回答很多社會人文心理面的問題,前提是要有資料。

不過,我雖然沒有足夠資料,但根據我這個小實驗的結果,如果目標是提高點閱率的話,不要選擇放網誌,而且放網誌似乎沒有特別的好處,還是很難搜尋 -- 除非內容有多張圖表,非用網誌不可。

結論:臉書網誌功能對我來說仍然是雞肋。

2015年11月11日 星期三

悅讀程式

我說過寫程式像是寫文章,但仔細想想,我們很多人學習寫程式的方法,和學習寫文章所採用的過程,似乎有很大的差別。(網誌上的圖片,是從書架上找到的,我高中一年級時讀過的兩本原文書,放在這裡紀念我那段學習程式設計的歲月。)
大部分人如何學習寫程式?從寫Hello World!開始,一路學習程式語言的語法、控制結構、資料結構、演算法等等,但即便是資訊系的學生,除了課本中的範例程式、習題解答、程式競賽題庫之外,究竟看過多少別人寫的程式碼?
少得可憐。
學寫文章可就麻煩多了。我們從小先學會聽話、說話,然後才學認字讀文章,過一段時間後才開始學寫文章,這是自然的過程。如果沒有讀過幾篇文章,光是研究文法、修辭學、背成語辭典,可能成為好作家嗎?沒看過小說,可能成為小說家嗎?
不大可能。
很多作家每天還是大量閱讀別人的作品,欣賞和學習別人的才華。日常所讀的文章,多半比自己所寫的多得多。藝術家、建築師也不是整天埋頭苦幹,常常要去看過別人的作品。
但為什麼我們不是這樣學寫程式?為什麼覺得參加程式競賽得獎才是程式高手?
因為「急就章」。想要再最短時間內獲得一項技能的「認證」,最有效率的方式,就是針對認證所考驗的項目做準備,不考的就不準備。因此,學生會先去搞清楚,程式競賽考什麼?程式設計課期末考什麼?碩士班入學考什麼?程式技能檢定考什麼?某公司面試考什麼?
但急就章訓練出來的,問題很大。就拿進到研究所的學生來說,看不懂別人的程式碼,寫出很爛的程式碼的,不會用程式開發工具的,比比皆是。我們為了要做系統研發,不得不花很多時間訓練學生去看別人寫的程式碼,但不少學生視為畏途,甚至會排拒,以為要寫出屬於自己的程式才是神人。
對這類同學,我想我幫不了忙。
我想,急就章的作法很多,不是只有程式設計。國內學英文的方式,也有文章讀得太少的問題,和學程式設計的過程類似。台灣學生學習英文時,偏重於文法、單字、成語,很多學生除了課文之外,沒讀過幾篇文章,於是常常有些成績還不錯的學生用英文所寫出的論文,讓我目瞪口呆,欲哭無淚。
那麼,想扎實地學,學好後證明自己的能力,該怎麼做呢?
這裡有個簡單的方法:從大量「閱讀」開源程式碼開始訓練自己,到達能夠「悅讀」高品質的開源程式碼,進而對重要的開源程式碼計畫做出「貢獻」。
舉例來說,幾週前,大學沒畢業的黃敬群教授(jserv),帶著的一位剛從台大電機系大學部升碩士班的學生,到奧地利發表他們利用這個暑假對Linux/Xenomai開源碼所做的貢獻。沒有期刊論文點數,貢獻不被台灣的學術界承認,但這趟旅程獲得業界的贊助。
在國外,數不清的優秀軟體人才,熱心參與開源碼計畫,匯聚成高品質的社群和人脈;歷經千錘百鍊的開源碼計畫,擁有許多精益求精的程式碼,開再多課也講不完。
既然講不完,學校只是帶領入門而已,修行在個人。
我在2000年離開學校到矽谷的SUN公司工作時,看到身邊很多同事整天盯著螢幕看程式碼,有一天我忍不住問一位資深的同事,為什麼這樣做?他露出不可思議的表情後說,找別人最新釋出的程式碼來看,已經是習慣,也是興趣,沒事就會如此做,而且他們會以程式碼論英雄。說著說著,一邊指著螢幕上的程式碼,開始評論起作者的寫作風格。
此後,我不敢自稱為軟體工程師,因為我知道我看過的軟體程式碼太少。但是因為工作需要,我必須分析幾個大型軟體的效能,想辦法找出瓶頸加以改善,包括當時最精良的作業系統Solaris,網頁伺服器iPlanet Web Server和Apache HTTP Server,以及幫通訊加密的NSS和OpenSSL,也用了開源碼解決不少工作上的需求。
幸好,我廣結善緣,周遭這些同事幫了我很大的忙,公司裡面厲害的人太多,我也從他們身上學到許多。也因此,我始終還是不敢自稱為程式專家,因為和這些同事的程度差太多了,追都追不上,還好我另有專長。
十年前回國後,莫名地接到了要開一門新課「Linux Kernel and Device Drivers」的任務,我這個非程式專家,花了很多時間了解Linux kernel的原理和程式碼。為了教「平行與分散式程式設計」,我也得學Hadoop、CUDA、OpenCL等新出來的東西,但我在教學相長、樂在其中的同時,我發現很多學生是不看程式碼、不懂得自學的。
因此,我想鼓勵想自學的朋友一起來悅讀開源碼系統軟體。
挑選系統軟體,有幾個原因:第一,世界上非常多開源碼計畫,我不想太發散,我們必須先聚焦在特定領域上;第二,系統軟體與台灣的產業高度相關,可培養產業轉型所需的軟實力,又不會距離太遠;第三,這是我個人的研究專長和興趣。
因此,我稍早說我這幾年想推動開源碼系統軟體,除了這些軟體本身的重要性之外,還有其更廣泛的教育意義:希望讓我們的學生和業界朋友,一起來多讀一些高品質的程式碼,研討大型的軟體專案的架構和運作方式,來提升自己的眼界。由此入門,逐漸能充分運用和賞析別人的作品,應該比較有機會成為高段的軟體設計師。
我希望多成立一些愛好開源碼系統軟體的社群,藉由賞析和討論這些重要的開源碼來促進軟體人才的跨國交流和合作,希望大家能一起來提升國內系統軟體研發的水準。不然,我們很難有世界級的軟體人才。
話說,學程式設計和學英文,可能相輔相成,這是我個人經驗談。
我自己因為高一時迷上了電腦,嫌當時中文翻譯的書太少,時常到重慶南路的書店站著原文書,也省吃儉用買了不少書回家看,不知不覺中增進了英文閱讀能力。隨後我發現,學校英文考卷上的閱讀測驗和作文,對我來說都不是甚麼大問題。
延伸上述個人的經驗,我提出幾個臆測:(1)多讀優質的開源碼,有助於英文的學習。(2)程式設計的訓練,有助於英文寫作。(3)英文能力的提升,有助於理解高階的程式碼 (4)英文能力和程式能力的提升,有助於與國外交流以及走上國際舞台。
話已經說在前頭,這只是我一時興起的臆測,是否適合每個人,請自行判斷。但現在隨手可得的電子書、程式碼教學、線上課程這麼多,如果師父帶進門之後,因為不懂得大量閱讀而學藝不精的話,恐怕要怪自己了。

2015年11月8日 星期日

台大電機高材生在矽谷被開除又如何?

這篇【一時魯不代表一世魯!台大電機高材生在矽谷被開除後的反思】(http://buzzorange.com/techorange/2015/11/06/i-got-fired-in-sv/)值得年輕朋友參考。

美國的公司很現實,你的才能對公司有幫助,公司就會付出相當的代價雇用你。反過來說,工作能力不符合公司的期望,被解雇是常見的事,管你是台大電機還是柏克萊畢業的。

我猜,作者被解雇的原因應該是「程式能力不足」。這個推論來自於作者的自我嘲諷式的說:「唯一小小的障礙,就是我想成為軟體工程師,可是我還不會寫程式 。 」

「寫好程式」這個技能,往往不是隨隨便便可以取得的。寫程式像作文,即便天資聰穎,也需要幾年的學習;文章要言之有物,更要能夠連結到個人的生命經驗或專業領域,也需要一段時間。

然而作者在柏克萊讀書時可能輕忽了學習程式的難度,他說:「在柏克萊讀書的一年之中,從開學第一個禮拜就開始跟這些新創公司面試,明明知道會被拒絕還是硬著頭皮上。每次的面試我都會準備一大堆問題, 把自己當然投資人一樣東問西問。技術,團隊, 商業模式。 我知道內行人一定覺得這樣很可笑 不過對我而言,每次的學習都如同取經般重要。 一年內我面試了超過一百家公司,過程的坎坷暫時省略, 最後拿到了五份聘書,加入了這家我覺得團隊技術都很棒的公司。」

看到這段描述,我只能說:「Good luck!」,因為作者顯然很有學習的動力,也非常有毅力,而且相當自信,因此當我遇到這類想法的優秀同學、同事、學生時,除了支持的話之外,不想多說些甚麼,他們多半也聽不進去,因為這是他們相信的成功之道。

只是我個人認為,如果想要去一家軟體公司,最好還是先想辦法把寫程式的功力鍛鍊到某個程度比較好。很多東西要靠自學,需要動手做過,我寧可把去一百家公司應徵的時間,拿來充實程式技能,這是比較務實的做法。

作者之所以選擇在一年內面試了超過一百家公司,幕後的思維可能源自於幼年時期的訓練,因為他說:「從小到大,通常都是人家丟給我一道題, 我把它解出來,然後解不出來就抄旁邊的。作業如此,選科系如此,價值觀如此,一路高雄中學台大電機柏克萊亦是如此。」

在一年內參加超過一百家公司的面試,等於是多方蒐集考試題目,搞清楚這些題目的解答,不管是否真懂,就能通過面試,等於是一條捷徑。我想,這其實不只是作者個人的想法,也是許多台灣學生們共同的想法。

資工系畢業的學生不大會寫程式,早就不是新聞了,因為他們努力的目標,一直就是通過某項考試,而不是充實就業能力;而他們似乎相信,只要進到某個場域,同樣的做法依然可讓他們過關斬將。(不然呢?)

如此有毅力,也真的拿到了聘書,但真正的問題此時才開始。有些人看似一帆風順,其實內部充滿了問題,如同在不肥沃的土壤上揠苗助長出來的植物般,看似長得快、爬得高,但不具特色、沒有方向、外強中乾、心靈空虛,承載不了大事業。

以上只是觀感,不是對作者的批評。我相當欣賞作者的反省能力以及文章後段的感悟。沒有失敗,不大會反省,也難以進步。經過一番風雨,我想作者的再出發應該會有新的感受和收獲,而這個失敗則是其人生重要的轉機。

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年11月4日 星期三

在人生十字路口上做研究

有位素未謀面的台大電機低我24屆的學弟來信,說「目前人生正在一個非常艱難的十字路口,盼望能夠向一些師長們請教,藉由一些指引和建議來幫助自己做出最好的決定」。我想,他所遇到的問題,可能也是不少年輕朋友會遇到的,所以把遇到的狀況和我的想法分享在這裡,讓在類似處境的朋友們做參考,同時也歡迎各位先進給一些建議。

他目前正在美國某一流大學就讀博士班的第二年,但在研究上遲遲沒有太多進展。他說「由於不太能適應老師的研究模式以及帶領學生的態度,這段時間以來比較像是為了應付老師並給予研究進度,比較沒有自由去發揮,過得並不是很開心,開始思考是不是有更好更適合自己的地方可以選擇。就在前一陣子,跟老師講開了所有心中的想法,決定做到這學期為止,下學期慢慢思考是否要轉換去其他的實驗室,或是就拿到碩士學位出去工作(美國或台灣)」。

除了跟指導老師相處的問題之外,他說「在這一年半摸索(實驗室的研究領域)下來,會覺得這個領域的問題都還滿開放也還算有趣,但並不是很確定自己是否能夠有心作很長期的研究。聽到許多前輩或是網路上的文章會說,作研究要有長期抗戰的準備,也有長久保有恆心與毅力,並且未來工作可能也是要繼續從事研究,才能真正發揮博士的價值。」

他也有相當程度的反省,說「我想我可能就是台灣教育制度底下,那一類只會考試達到目標上好學校,但是十分缺乏自己想法只會隨波逐流的人吧,一直都不是很明確知道自己想要從事怎麼樣性質的工作。在做研究這方面,我相信如果有投注大量心力下去,應該還是會有些成果,最後拿到博士學位,但是在這上面需要的時間成本真的太高,而且我不希望自己只是為了拿到博士學位,而過著自己不想要的生活。因為個人家庭因素的關係(家人的健康跟經濟因素,以及正在遠距離交往的女友),可能無法忍受待在美國太長的時間,因此心中打算大概三五年內就會想要回台灣。」

他忠實地寫出想法和自省,也讓我有所感觸,因此我特別多花一些時間,除了回答他信中特別詢問的三個問題之外,連帶著寫出一些個人的心得。這些大哉問,沒有標準答案,除了分析一些客觀條件之外,我多談了個人層次的東西,並非推銷個人理念,而是希望每個人在潛心思慮後,能建立一套有個人特色、屬於自己的立身處世之道。

Q1. 我第一個想要請教老師的問題是,如果拿到美國博士的學位,立刻回台灣的業界工作,是否優勢有限,不如直接拿完碩士去業界累積經驗呢?(對於學界或是當教授並沒有太大的興趣)

A1. 我想,回台灣的業界工作,先知道台灣業界的狀況。以我個人的所見所聞,台灣目前的業界比較需要「即戰力」,如果你的專長不足以對公司在短期間產生重要的貢獻,公司大概不會想以高薪僱用你,這個跟你的學位在哪裡拿的,應該沒有太大的關係,主要是業界的文化。所以,以剛拿到博士學位的人來說,除非你擁有某家公司極缺乏的關鍵技能,才比較有可能高薪被僱用。

如果在美國拿到博士或碩士後,只是去小公司做個一、兩年技術研發工作之類的經驗,當然對於回台灣工作有些許的加值作用,但我不確定這樣的工作經驗是否有決定性的差異,因為待在小公司也不見得能夠擴展太多的視野,而一、兩年的歷練實在太短,很難真正取得關鍵性的技術。當然,國外一流大學的碩博士學歷,在日常生活中聽起來還是很不錯的就是了,只是業界中低階層的工作,比較注重的是工作能力,不是學歷。

不過呢,在美國大公司工作過五年,被上司賞識拔擢過、完成重要使命、見過世面的人,是有差別的,而且從言談舉止中是可以看得出來。以我個人的經驗來說,進大公司與一流的人才共事,以開發一流技術、超越世界級的競爭對手為目標,執行跨團隊的計畫,而且在做出一些成績的同時開發自己的潛能,這樣的經驗是非常寶貴的。

這樣的經驗給我多少優勢呢? 我想,對我來說最大的優勢,可能是比別人多了一些選擇工作的權利吧? 我十年前選擇回國教書,台大資工系之所以僱用我這個沒發表過期刊論文的人,大概是因為我的業界經驗;而我這十年間之所以可以做些層次還算不錯的產學研究,不斷有公司以高薪挖角回業界工作,也應該是拜業界經驗之賜。

其次,由於當年博士班與業界訓練的經驗融合在一起,讓我學習到如何在某些領域不斷超越自己,學習高處不勝寒的環境中挑戰自己,即使回台灣教書之後沒有充足的資源,就算平日只能教學校裡的菜鳥低空飛行,但過往的經驗,仍舊使我可以回到那個高度去眺望世界。

但飛得高,不見得會賺錢。如果要純粹論功利的話,拿完碩士去業界累積經驗,對於心中並不大嚮往達到以上我那個不知所云的高高度的人來說,或許是最省事的辦法。道理很簡單,像你這樣有資質在美國一流大學拿博士,但對於在學校當教授沒興趣的人,通常很容易就可以在業界成為中流砥柱,提早三五年開始職涯,自然是不會錯的做法。就算後悔了,之後再回學校拿博士,也不會太難吧?

反過來說,多花五年拿了博士,再花五年去業界歷練,過了十年之後,台灣變成甚麼樣子? 台灣業界的需求是甚麼? 誰知道呢。如果找不到像樣的工作,賺不到預期中的黃金屋,那該如何面對自己和家人?什麼個人的高度又有什麼意義?所以說,如果純粹從物質層面來思考,念博士像是不大划算的賭注。我當年如果沒有念博士,現在可能早就賺夠,成為科技新貴、住豪宅、開名車,但我並不特別羨慕那些,因為我還頗認同這個一路跌跌撞撞走到現在的我。(請參考我對第三個問題的回答。)

另外,就我的觀察,台灣的社會和業界可能會改變很大,我猜測是朝我樂見的方向發展,但有很多不確定的因素。我個人很主觀的看法是,雖然現在國內缺乏尖端人才或是浪費人才的現象時有所聞,但業界遲早會需要有實力的人,因為台灣人夠聰明,總有人會找到出路。而這條出路很清楚,不是靠著天然資源,也不是靠著賣土地、賣勞力,是靠著腦力。

這好比三十年前很多優秀人才出國,留在國外發展居多,一則認為回到台灣無用武之地,一則不看好台灣當時風雨飄搖的環境,但那些少數回國的人,以及留在國內沒有出國的人,後來發展得挺好的。所謂三十年河東、三十年河西,台灣這十多年看起來在很多方面一直在退步,但或許這種種的教訓也是足漸累積再起的能量,未來有更大的進步空間。

但未來台灣的產業究竟會如何?該選擇哪個專業領域比較好? 我想這剛好也就是您第二題想問的,所以請參考我對第二題的回答。究竟該如何看待這些世局變動和個人的生涯規劃?我在第三題的回答中略述我的想法。

Q2. 第二個問題是,是否要在一開始確定自己有興趣的領域是非常困難的事情,往往需要做些賭注?這段時間下來,我會認為一個能夠給予引導並正確帶領學生的老師才 是決定博士班是否具有價值的關鍵,研究的領域或是題目倒是其次,只要自己不會太排斥就可以了?

A2. 說難聽一點,大多數的資工系大學部剛畢業的學生,對於資工系的專業認識還不大夠,對於業界的生態也似懂非懂的,在選擇研究所專業領域時,像是瞎子摸象。憑著懵懵懂懂的印象去做選擇,有點憑運氣,但有時候興趣是可以培養的,所以在選擇興趣時或許也不必太過計較利害得失。認真嘗試過,如果真的不感興趣,那就換個興趣吧,可以平常心看待。

理想上如此,但一般人為什麼不能平常心看待呢?因為當我們把興趣賦予價值的時候,興趣就不再是純粹心理面上的興趣,而連結到維持生計和事業發展上,往往必須做出某種程度的妥協,這也就是你說的「只要自己不會太排斥就可以了」。我想,人生中時常會出現這樣需要妥協的局面,真正要平常心看待的,可能就是這些妥協了。逐漸提高自己的能力和視野,在面對需要妥協的局面時,能夠悠然面對,是何等的境界?當然我們一開始不會如此心安理得,必須訴諸於外在的因素,但我想說的是,隨著生命經驗的豐富,我們學習如何調適自己、面對未知、安住於心,這才是大課題。

離題遠了,回來談談小課題吧。資工系的領域很廣,而且變化快速。學生如果本身的視野有限,又沒有對特定領域絕對的喜好,選擇一位自己能夠欣賞和信任的教授,也是一個好做法。當然,在選擇指導教授時,同時也考慮到教授的風格和領域。

如果未來想去學界,那麼選擇的範圍大很多,但正如你所說,教授能否給予引導並正確帶領學生的老師,才是決定博士班是否具有價值的關鍵。因此,成天在外忙碌的大牌教授未必是最佳人選,剛剛進學校的菜鳥助理教授也未必不好。

如果未來想去業界,那麼選擇教授的風格和領域也是頗重要的。有些教授時常有產學合作計畫,那麼做這類型計畫所受的訓練,自然比較可能符合未來業界的需要。雖然說領域可以畢業之後再轉,但是通常不大容易。譬如做演算法研究的博士,不大容易轉行做系統,反之亦然。不過可以設法擴大領域,或是做跨領域的研究就是了。

Q3. 第三個問題是,是否「研究」這個工作只真正適合那些能夠有恆心毅力與熱情的人呢?(關於念博士的問題,我也看了許多網路上的資源(Quora或是老師網誌上的文章)但感覺有些更根本或是心理層面上的問題,始終沒有獲得解答)

或許是家庭背景的關係,也是經過了一些華人守舊觀念的思想,在這邊的日子常常會覺得,如果能夠趕快工作有了穩定的收入,結婚並成家立業,還能賺錢孝順父母,就是很大的滿足了,往往會一直羨慕著那些已經去工作的同學們,進而常常覺得自己在這邊念博士班,追尋著一個好像不是自己真正想要的目標,心態上往往很難調適。如果跟別人說,因為覺得在這邊太累了,想要回台灣好好找個工作就好,可能又很怕會被當作草莓族,說是無法吃苦。該如何找到真正適合自己的志業跟生活,並跳脫那些刻板的思維呢?

A3. 所謂「樂極而生悲,苦盡而甘來」,追根究底,大環境的變遷、個人外顯的成就,如果所造成的,也不過就是人對於自然的輪迴變化所生的感受而已,那麼撇開生存之所需,所謂的恆心、毅力與熱情,他們的意義和原動力在哪裡?

如果所謂的恆心和毅力,只是幼年培養和訓練出來的習慣,那也不過就是一些內化之後的框架和束縛而已。不是說這樣的框架不好,因為你這二十年的恆心和毅力,讓你進入台大電機系,乃至於跟著你到美國一流學校做研究。但是,不明白其意義與原動力,恆心和毅力,也只能帶你到現在這個境界了,而且不只如此,他們也有可能成為你未來人生中的束縛。

如果恆心和毅力的原動力來自於「熱情」,而你能夠確知這股熱情是取之不盡、用之不竭的,那麼你就能夠樂在其中,而恆心和毅力的意義性就昇華成為貫徹與發揚這個熱情,根本不用談甚麼責任、義務。

雖說道理可能很簡單,但人生是非常複雜的,「找到熱情」和「明心見性」一樣困難。來得快、去得也快的熱情,是不足以承載人生的。取之不盡、用之不竭的熱情,能夠讓心中時時充滿希望和溫暖,但未必是狂野奔放的。諸葛亮有句名言:「非澹泊無以明志,非寧靜無以致遠」,隱約描述了他的熱情。

對於你這第三個問題,我覺得,與其說「研究」這個工作只適合那些能夠有恆心毅力與熱情的人,不如說高境界的熱情、恆心、毅力,往往是有能力深刻品嘗和研究人生的人才能體悟到的。同時,我也認為,與其說你在一個目前人生正在一個非常艱難的十字路口,不如說你正在尋求突破自己,真正開始思考如何找到那個真正的自己。

不要怕失敗,被人家當成草莓族又如何? 真正重要的是你有沒有料... 有沒有好好認識你自己、研究你自己、欣賞你自己? 我想,這也是生命中很重要的課題,不妨把握這在這個十字路口上的機會,多做些研究。

2015年11月3日 星期二

把握新創的機會

話說前年VMFive剛成立的時候,幾位創辦人來我,我大力推介給實驗室學生,但同學們似乎是興趣缺缺,後來VMFive大放異彩,獲得資助,廣徵人才,但大多數學生似乎還是寧可跟隨學長的腳步,去一些路人皆知的公司。

同一年,葉丙成教授想創業,我推介給學生,還跟葉教授一起開課培育能翻轉教育的人才,但還是很難找到願意投入新創事業的資工人才,後來葉教授獲得鴻海投資1.8億台幣, 成立了BoniO。

我去年幫Appier諮商,後來也是大力推介給實驗室學生,終於有一位學生畢業後去這家我很看好的新創公司工作,看看Appier獲得7.5億元的B輪資金,大部分憑藉著公司經營者的眼光和公司的技術研發能力。

今年另外有一位學生畢業後創業去了,在NTU Garage和幾位志同道合的朋友開創了Himelight,我日前也推介過,公司目前發展得很不錯,希望未來會大發利市。

坦白說,我願意大力推介的新創公司不多,從以前到現在也不過就推介過這幾家... 當然好的公司不只這幾家,但即便我說再多,一般同學普遍還是對新創公司有所疑慮,覺得進大公司比較安全。

當然,這些年新創成為風氣,但新創公司良莠不齊,也是個問題。但我有我的判準 -- 沒有真正創新企圖心的,技術含量嚴重不足的,包裝華麗但商業模式矛盾的,只能依賴政府補助的,我一概不推。

只不過我窮酸教書匠一個,沒有錢投資,我也不是那種手中握有大筆創業基金的大長官,對於這些我所看好的新創公司,幫不了什麼大忙,實在有點遺憾。所幸他們都很爭氣,沒有讓我跌破眼鏡。我認為自己看新創公司的眼光還不錯,大概是35年來不斷關注資訊科技,目前人不在產業界,手上沒有股票的緣故 -- 所謂「旁觀者清」,大概就是這個道理吧。

這些都是軟體公司。誰說台灣只能做硬體和代工? 山不轉路轉,最黑暗的時代也是最光明的時代。躬逢其盛,希望年輕人能把握良機,但也要慎選公司,在在都在考驗你們的勇氣和智慧。

2015年11月1日 星期日

出考題

評論: http://buzzorange.com/vidaorange/2015/04/27/mandarin-examination-papers-for-5-grade/

我出的考題也常常令學生或考生跌破眼鏡 ;-) 我好幾年前就開始這樣做,如果問我原因的話,我的回答可能與這位老師類似。還好,對我來說,頂多是修課學生不滿,教學評鑑分數受影響而已,沒有被家長或補習班指責過。

據說,坊間流傳,台大資工的研究所考試的某些科目考的東西「難以預期」,背考古題不大有用。我想,這正是一些老師和我所希望傳遞的訊息:不要死背書,要會活用知識。(不過,出這類題目真的辛苦許多。)

有些學生說,看到考卷上出現課本裡沒看過的題目,而且題目敘述超過一整頁的時候,腦袋就呆住了。我想,很多學生可能沒有受過這樣的訓練。當然,為了不讓「用功背書、悟性不高」的學生過度受挫折,我通常還是會出一些基本題就是了。

如果每位老師都願意這樣出題,我想應該可以改變一些讀死書的風氣,只可惜研究所距離中小學太遠,一般學生和家長還是會先想著解決眼前的考試再說,很少有老師甘冒大不諱做這種吃力不討好的事。

2015年10月30日 星期五

如何建構一套CP值很高的處理big data所需的硬體?

要建構一套CP值很高的處理big data所需的硬體,還真是有點難搞,這時候會說「有錢真好」:)

以下整理一下這幾天討論的技術問題,括號裡是有關教學的註解。

Q1. 要採用HD還是SSD呢?

A1. 看容量和應用而定... 現在SSD與一般HD的價差約4倍,但throughput可能有四倍,而且access latency就不用比了,所以如果你的access pattern非常random,還是買SSD吧... 當然SSD有穩定性的問題,就靠RAID去解決了,真的是重要的資料,還是多放幾處比較好。

(這些有關於市場行情、硬體規格知識,常去討論版、多看一些相關的資料就知道了。)

Q2. 系統的架構重不重要?

A2. 系統架構上有個重點是disk controller有多少頻寬。頻寬不夠,再多SSD也没用。例如我正在搞的這台,有3個12Gbps的控制器,20個硬碟插槽,一個做法是放16個硬碟,加上RAID6,8T x (16-2) = 112T的空間,剩下的4個放SSD作為cache。一來SSD cache壞了也無所謂,二來這樣硬碟可以不必又貴又耗電的高速企業級硬碟。

(這些case-by-case的know-how,需要做一些個案研究,做額外的思考,最好是培養出think different的能力。)

Q3. 如何讓效能更好?

A3. 如果儲存系統的部分效能不夠的話,還可採用高速PCIe SSD,還可以放1T的主記憶體做file caching。計算的部分,多一些CPU核心當然有幫助,但要贏過別人的話,可能要靠GPU和硬體加速器,還有又硬又軟的FPGA。一台不夠的話,就多買幾台,用高速網路串起來,現在已經有100Gbps的Ethernet。當然,還有很多高階技術,族繁不及備載,有些需要錢,有些有錢也買不到。

(有些高階技術,說的容易,做起來難,因為技術不見得成熟,有些問題要先驅者自己設法解決,需要一些hacking。有些需要產學合作,拿到一般人拿不到的東西。)

Q4. 還有甚麼要注意的?

A4. 硬體層次的秘密,大概在以上就講完了,沒什麼太難的概念。重點還是在軟體,秘密在於:1. 要知道應用的需求和分析其效能瓶頸 2. 要懂得軟硬體之間的搭配和互動關係 3. 制定高CP值的硬體規格 4. 軟體的優化。沒有注意這些,即使花很多錢買高檔設備,結果可能也是枉然。大部分HPC和Big Data的使用者,一開始都不懂這些,需要特訓。

(大部分資工系大學畢業生並沒有足夠的背景,所以我們實驗室的研究生們,近來時大都必須接受這類特訓。沒有足夠的時間做扎實的訓練,是做不出什麼好結果的。)

Q5. 那要怎麼搞定軟硬體?

A5. 上述的秘密,其實都不是什麼秘密,只是因為一般人搞不清楚整個系統軟硬體的運作,計算機結構、作業系統、程式設計都分開學,學了之後又不會將這些知識融會貫通,才變成秘密。沒有融會貫通的話,就會看到不斷出現的新硬體、新軟體,以及看不懂、學不完的招式。

(學校的價值,不是像一般人吵來吵去說理論重要,還是實務重要,真正該做的是提供學生融會貫通的方法、場域、機會。)

Q6. 所以照以上這樣說,這也不是甚麼了不起的學問?

A6. 天下本來就沒有什麼學問是真的了不起的,「人」才是最重要的。雖然如此,但這些know-how也不能說不是秘密,因為就算我把這些要點都說清楚了,一般人可能還是有聽沒有懂,而且就算懂了道理,實務上可能兜不起來。就像背了獨孤九劍的總訣,沒有悟性,不會活用,也是枉然。

(做學問是來提昇個人境界的,學生要想融會貫通,不能只仰仗老師來教,自己要多學、多想,找問題來挑戰自己。)

2015年10月22日 星期四

造飛機和做火箭

這位先生做了1:5的F-16(註),讓我聯想到三十年前的台大火箭社。當年,有一群來自電機、機械、化工系,對高科技充滿熱情的大學生,在社團裡製作控制器、打磨火箭機體、研製火藥,想做的就是類似這位荷蘭的先生所做的事。我想,如果有足夠的資源,以我們當年社團的人才,應該也有機會做出有模有樣的東西。

但可惜國家不懂得培養人才,沒有支持和輔導社團活動,讓我們處處碰壁:不准公然使用無線電,購買化學材料要管制,好不容易做出火箭後,卻不准在北海岸試射。當然,當時還是戒嚴時期,這些禁制令有其道理,但如今回憶起,覺得人民的創造力和國家的競爭力似乎就在很多有形和無形的禁制令下變得乏善可陳,格局越做越小。

Dream Bigger.

(註)http://www.buzzhand.com/post_865948.html

2015年10月21日 星期三

還認為房市不會跌?

一年前,長輩朋友們還不認為房市會跌,動不動就勸我最好要進場買房。年輕的讀者們可能不知道,像我這把年紀、收入還可以的無殼蝸牛,常常就得面對長輩的責難,以及朋友的勸勉,但是他們完全忽視我認為房地產有可能貶值的看法,感覺上是這些有產階級的長輩朋友在霸凌我這無產階級的不肖份子。

其中最常聽到的說法,就是買蛋黃區中的蛋黃區,也就是大安區,是最保值的。還有說政府一定會出來護航的,因為有這麼多人的身家財產都在房地產上。更有一種我聽不大懂的說法:「反正買給自己住的,漲跌沒有關係」。因此,無論我再怎麼算給說他們聽,說人民的平均薪水與房價不成比例,大多數人民買不起房子,而且租房遠比買房划算,他們似乎都聽不進去,只是一直跳針以上述「經驗法則」勸我一定要買房,否則以後會後悔。

看看今天這則報導,大安區的房價跌最多,跌幅達到15%(註),所以蛋黃中的蛋黃又如何?看看這些年下來,政府和財團的作為,有的亂花錢有的猛賺黑心錢,在經濟、民生、教育上有多大的建樹?政府本身的債務黑洞,加上將來少子化的勞動力衰退的問題,房市一旦崩盤,政府未來還有多少能力去幫房地產護航?我其實很沒有把握二十年後能拿到多少的退休金...

如果我去年在大安區買一棟30坪的房子,那麼到了今天,這棟房子可能已經貶值了大約450萬元。或者說,如果我去年忍住不買,現在來買,我可以省下450萬元。這點錢對過去在房地產上賺大錢的人沒差,但對我這種受薪階級,如果一個月存4萬元,一年存50萬元,那450萬元大約相當於我十年的儲蓄總額。人生有幾個十年?所以我根本不相信「反正買給自己住的,漲跌沒有關係」這種自欺欺人的說法。

我曾說這整個臺灣社會一直在弱智化,就是因為歪理和偏見充斥,不會獨立思考而盲從的人多,造成即便是有思辨能力的個人,也必須花很大的力氣才能抵禦弱智的風潮。房地產是一例,土豪的炫富是一例,讀書考試是一例,學者的傲慢也是一例,自我設限的產業經營又是一例。明明有條條大路可通羅馬,偏偏一窩蜂要去擠破頭走那時過境遷、幾乎走不通的路...

在這個不可理喻的世界中,浮現出的是貪瞋癡的人性。貪圖財富逸樂,討厭落於人後,日復一日的過著癡迷的日子... 再度想起我在2007年寫下的幾句話,或許這些經歷才是人生中真正的見聞學思:

五光十色的社會現象中,也蘊藏多元深層的文化。
快速變遷的物質文明中,正激盪傳統思潮的價值。
錯綜複雜的人我關係中,好考驗從容不惑的胸襟。
妄想迭起的慾望人生中,來修養不汲不求的品格。
競爭計較的叢林法則中,多感懷點滴辛勤的付出。
物慾橫流的奢華年代中,學觀照真實永恆的自我。

(註)聯合報(2015-10-21),「蛋黃區重跌!大安區一坪跌15萬元」,http://money.udn.com/money/story/5641/1262782

建中青年社的獨立宣言

以一位建中校友的身份,我支持建中青年社的獨立宣言行動。

建中青年CKPOTPOURRI
致讀者與社會大眾:
本刊《建中青年》長期由建中青年社編輯,自九十七期起不再受臺北市立建國高級中學審查內容,但由於一四一期發行時該校學務處要求審稿,本刊為落實編輯自主,故不再以該校校刊名義出版。
往後《建中青年》皆為建中青年社發行之獨立刊物,在成立社團法人或類似組織之前,由指導老師負責監督。所有合作、採訪、稿務、業務、捐款等事宜請直接聯絡建中青年社信箱,臺北市立建國高級中學不負責此刊物相關業務。
電子信箱:contact@ckpotpourri.com
郵遞信箱:100臺北市南海路56號(請務必註明建中青年社收)
《建中青年》一四二期主編林冠廷
《建中青年》一四三期主編林政穎
建中青年社指導老師朱宥勳
或許有人會覺得這樣的行動有些過分,但容我略微解釋我的看法。「建中青年」的重要特色,是它代表著許多建中人所共感的「狂狷」精神,而這樣的精神與校方審稿的做法迥然不同,所謂「道不同,不相為謀」,如果校方執意要審稿,則建中青年社脫離校方而自謀出路,在我看來是符合狂狷精神的必然作法。

什麼是「狂狷」呢?子曰:「不得中行而與之,必也狂狷乎。狂者進取,狷者有所不為也。」在動盪混濁的世道,要走中道很難,尤其當昏君小人當道的年代,狂者能夠挺身而出、勇於進取、力挽狂瀾,狷者能堅守原則、不與小人同流合污,都是這樣的時代所需要的。換句話說,就是有為有守的青年!

我想,無論校方是否基於善意,請尊重建中青年的傳統,讓學生社團為自己的刊物是否有為有守而負責任。刊出的內容,學生讀者自有公論,校方倒是不必如此戒慎恐懼。

2015年10月20日 星期二

閱讀和寫作的訓練

分享這篇【台灣人不惜花費幾萬塊錢學習寫作,但這完全在浪費時間和金錢】(註)給我家中正在考慮參加論文比賽的高一生。這篇由在台灣落地生根十年的外籍人士,直接了當寫出了台灣教育的問題,我想,他所說的不只適用於英文教學,也可以用於檢視國文教育。

我想,台灣教育中對於閱讀和寫作的訓練可說是相當制式化的,不只限制了學生的寫作空間,還弱化了學生往後的心智發展。我個人從小的作文隨便揮灑便可得高分,但直到出國留學,接受博士指導教授的訓練後,才真正受到啟蒙,文中比較能夠條理分明、言之有物。

本文作者說到寫作的訓練,重點有二: 不斷的閱讀好文章,以及不斷的寫作。但我想補充說,如果功利心太重,把閱讀和寫作便成了機械化的操作,例如學校為了鼓勵閱讀,頒獎給到圖書館借書最多的學生,但是在其他方面卻沒有給學生自由發展的空間以及適當的回饋,那還是不夠。

這也是為什麼作者提到,在大量的閱讀和寫作中,不要忘記心智的陶冶:

- 『閱讀、閱讀、閱讀,然後繼續讀更多... 讓自己向不同的文化敞開... 不要忘記寫作是心智的映射,若是心智漫無章法、缺乏訓練,就不可能產生有價值的成果。必須先充實心智,然後才能將心智貢獻於宇宙。』

- 『寫作是要透過模仿和練習,以及向文字的世界敞開心胸並且盡可能融會貫通,才能進步的,這是永無休止的過程,之所以迷人也正因永無止盡。』

以上摘錄的兩段,有些讀者很可能讀過就算了,錯過了文章的重點。

寫作與心智、心胸息息相關,文章有沒有靈魂、意境的高低、邏輯是否嚴謹,重頭戲都在於心智上。但我們一般人在求學過程中花多少時間在探索心靈、統合心智、擴大心胸上呢?

在我成長的那個時代,比現在糟糕許多,課本上選的經典文章必須是政治正確的,課餘能夠閱讀的文章十分有限,而且為了復興中華文化,作文還必須用毛筆寫,每篇作文後面都要歌頌領袖、心懷祖國才會得高分。

這樣的教育,讓學生很難有機會和時間發展個人獨特的想法 -- 這就是當時政府所希望的,大家安分守己,不要想太多。而教育機構和教師本身必須做為表率,更是保守,至今這樣的教育文化仍然烙印在這一代的家長和教師身上。即便現在的教育已非當年,但當年深刻的烙印,直接影響現在的社會文化,還間接影響這代的學生。

現在,藉由閱讀、思考和寫作,幫助我去除這些烙印,所謂水可載舟、亦可覆舟也。

補充:

我想,寫作也有很多境界的,如果所追求的境界不同,方式也會有所不同。Cole先生文中所分享的經驗,自然有其時空與個人喜好,適合有共鳴者拿來參考,但不必全盤接受,所以我本來沒有想多評論的。

如果真的要略加評論的話,我會說文章的前四段固然是作者本身的觀察,但是也符合我個人的觀察,只是作者並沒有點出其根本原因,所以我才在分享時補充一些我個人的看法。

注意到Cole先生從第五段開始寫道:「在我的經驗裡,寫作是主動學會的,而不是被別人給教會的。」從這裡開始,一直到後面給建議之前,中間的段落談的都是其個人經驗,而既然定位在個人經驗分享,就無所謂對與不對了,所以讀者可以當故事來看,也可以作為參考。而且他都說了「我倒不是認為任何有志寫作的人都應該拿這麼多書壓在自己身上」這樣的話,也表示他沒有堅持每個人都需如此。

關於作者給的建議,我基本上覺得「有熱情的、有條件的學生」可以嘗試看看。但是在現實上,除非是有至於念文學科系的,否則我們還是要兼顧專業的訓練。如何兼顧呢?那又是學問了。這個學問可能遠比專門追求寫作來得複雜,有機會的話我們再談。

作者有句話我不見得認同:「兩個星期沒寫就足夠讓寫作的肌肉萎縮了」,我想,不斷的寫作,有時候能夠讓當事人在境界上有所突破,但到了某個程度,或許應該停下來沈澱一下,重新再出發。有很多寫作者的心路歷程,如人飲水,冷暖自知,我想點到為止就好了。

(註)http://www.thenewslens.com/post/233880/

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月13日 星期二

只有高中畢業,竟在聯發科、工研院當顧問、成大教書?

【只有高中畢業,竟在聯發科、工研院當顧問,還讓成大破格錄取當老師?】(註)

文中的這位台灣土生土長的宅色夫教授,是我的好朋友,我在臉書提過多次了,也請他來台大講過課,他的實務能力以及教學熱忱時常令我讚嘆。

如果有一位專家,在實作上有超人的技藝,不斷研究最新的東西,一直推陳出新的創意,同時又樂於把所學所知以簡明扼要的方式分享和教導他人,即使沒有大學的學位和教授的頭銜,我也會非常尊重。

但不要故事只看一半就以此貶低學術的價值,產業界與學術界是可以互補的,前提是要夠努力,而且不要自我設限。但世人多半容易自滿、礙於框架,在學校時只在乎拿學位,到業界只在乎工作相關的事,到學界只在乎升等需要的學術貢獻,時常落入框架而不自知。

有些學界的新進教授問我要如何在當前的大環境下經營產學?我不好意思當面直接說得太直白,但基本上,如果沒有花比別人更多的時間務實去做研究,努力去了解產業界的實際情境和技術需求的話,難道要業界主動來配合你,來讀你的論文?固然獨尊學術論文的大環境相當不利於經營產學,但關鍵還是在於自己有沒有膽識和企圖心。如果只懂得唯唯諾諾的盲從於主流價值和追求小確幸,那麼還是不要強迫自己來做產學比較好。

也有部分的業界朋友太過自以為是,覺得自己有一技之長,就掉入本位主義的框架,大唱學術無用論;或是爬升到某個位階之後就喜歡被人捧,覺得自己的成功之路才是王道,學校教授懂什麼。我也不好意思當面說太多,因為他們大多已經聽不進去。我認識國內外一些厲害、很有成就的工程師,像宅色夫一樣,是樂於在專業上精進,樂於與人交流,樂於為社會貢獻,樂於到學校分享和提攜後進。

話說,台灣的學界和業界的確有不少的人才,但是否能有多一些貢獻者,少一些掠奪者?我想這是產學繁榮發展的關鍵。如果大多數掌握資源和利用資源的人才都是貢獻者,那就會共榮;如果大多數的人才都是掠奪者,那麼最後大家都是輸家。

(註)http://www.businessweekly.com.tw/KBlogArticle.aspx?ID=14184&path=c

2015年10月10日 星期六

「教育事業的資本論」:近期的新聞報導

我前幾天談了「教育事業的資本論」(https://www.facebook.com/shihhaohung/posts/1019635868078901),說足夠的資本是好好辦學的根本。其實現在很多大學出現的問題,都是沒有在資本上規劃好,或者是便宜行事的結果。以下有幾個近期的新聞報導,正好作為例子:

1.  『因為國內大學教授的薪資偏低,在這一兩年裡,已經有至少6位台大的教授被世界各國以5倍的高薪挖角... 今年,沙國又再度來台灣尋找人才,並且開出近千萬年薪的價格。』(http://udn.com/news/story/7314/1224069-台灣低薪無力擋?沙國千萬挖角台大教授)

這是因為全國的教授吃大鍋飯,某些領域的薪資與市場行情差太多,以致於失去競爭力,請不到、留不住一流教授。如果我們不想好好與國外競爭,不想徹底改革的話,就繼續漠視這樣的情況吧。

2. 『教育部和勞動部要求為兼任助理納保,讓學生失去工讀機會、教授沒有助理,考題只能出是非題不能出申論題。』(http://udn.com/news/story/9/1233825)

我想兼任助理納保是正確的方向,所以不大同意這篇報導中幾位教授的意見。但是這裡有兩個資本問題清楚擺在眼前,第一,因為學校的經費過低,要吸收納保所增加的成本自然很痛苦;第二,納保的保費算法對學校和學生很不利,但勞動部沒有配套措施。解決方法無他,就是提高經費或是增加學費,而不是走回頭路。

3. 『大學傳倒閉潮,大學教師恐有萬人失業,博士不吃香,全台博士生人數已連四年下滑到三萬人左右,連國內龍頭台大博士班也受衝擊,校方首次替優秀博士生「加薪」,每年提供六十個名額給直升博士班的學生,補貼月薪二萬四千元共三年、計八十六萬多元,盼逆勢吸引優秀人才讀博士班。 』(http://news.ltn.com.tw/news/life/paper/920894)

本來,教育的目的就是提昇學生對社會貢獻的能力,但「社會貢獻」如何評鑑?無論個科系如何吹捧自己,最終還是要檢視「工作機會」 -- 如果沒有工作機會,如何貢獻社會?所以應該在資本上有合理的歸劃,如果學界按照自己的想法培養出產業無法吸納的人才,當然會出現某些領域博士生出路不佳的問題。

至於博士生的薪資,也是以往長期被忽視的問題。博士生不像碩士生只要念兩年,而且博士生往往有經濟壓力,所以以往學校和外界只給微薄的獎助金,無法解決經濟壓力,博士生只好在外兼職,這樣跟國外大多數都是全職念博士的狀況相比,如何能有扎實的訓練?長期如此,博士生的平均水準自然會下滑。

總之,我認為大家要正視高等教育的資本問題,高等教育不是國民教育,本來就應該視為一種投資,不能唱高調,不能忽視供給需求的問題,也不能在薪資和學費上搞齊頭式平等,更不能廉價到品質不足,應該要務實才行。這個基調要正確,才能談對弱勢的補助等配套的問題,否則光是在乎公平性,想以低學費取悅民眾,結果就是扭曲了高等教育。

2015年10月9日 星期五

大數據分析與深度資料分析

我覺得很有趣,在最近的討論中,發現似乎有些朋友把大數據分析(big data analytic)和深度數據分析(deep data analytic)混為一談。實際上,「大」和「深」是不同的面相,在學理上應該要區分清楚。

例如我們做圖像辨識,不見得要用很多的數據才能做,如果模型深度夠高,也可以做得好,但是如果能拿到大數據的話,有可能會更好,至於好多少就要看狀況了。這時候因為在有限的運算能力和等待時間的限制下,研究者不可能又要深又要大,必須有所取捨,因此應該就「大」和「深」這兩個面相分別研究和綜合比較、探討解決方案的優劣。

有關「大數據」相關的研究,基本上談的是在可取得大數據的前提下,如何探索新的應用、分析方法、運算技術、科學理論,這個我在2013年有篇文章(http://hungsh-ntucsie.blogspot.tw/2013/04/big-data_18.html)略微說過了。後來應計算機中心的邀請,寫了一篇Big Data技術淺論(http://www.cc.ntu.edu.tw/chinese/epaper/0029/20140620_2904.html)

雖然迄今大數據仍然有其不大嚴謹的定義,大部份大數據產業中的公司,都繼續使用3V:量(Volume,資料大小)、速(Velocity,資料輸入輸出的速度)與多變(Variety,多樣性)來描述大數據。(請參考https://zh.wikipedia.org/wiki/大數據),其中資料的數量不能太低,否則即便運算耗時,也只能算是深度數據分析而已。

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

有關深度數據分析,可以看看資料探勘(data mining)和機器學習(machine learning)的研究者的作法,他們常常用深度的分析方法或是模型來找隱藏在資料之間的關聯性,但他們不見得會說自己在做大數據分析。有些專家會覺得用「小」數據就能解決問題才厲害呢!

還有一些早在大數據或深度數據分析之前就有的領域,例如高效能運算(high-performance computing),有的將原始資料轉成圖形,再轉成大矩陣運算的解法,有的運用複雜的模型進行精確的模擬,運算中途所產生的資料量很大,計算的時間長,所以很早就開始使用超級電腦來解題。但這些老問題,如果不符合3V定義,我們也不會說是在做大數據分析,不然我可說我在20年前就是大數據分析的專家了。

因為大數據取得不易,而且所需的設備成本高,所以大多數人做的比較像是深度數據分析,但是有些時候不經意或刻意套上了大數據的名字,可能是因為看起來比較時髦或響亮。實際上,只要能把問題解決,不見得一定要大數據,而名稱訂得響亮,頂多是用來騙騙外行人的。但我想我們做學術的,應該稍微講究一點,把概念和名相講清楚,讓朋友們不會輕易被唬弄。

學校特色與大數據分析

引用自報導:『清大累積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