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


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

2019年5月14日 星期二

什麼是架構師(Architect)以及要如何養成?

之前被問到這個問題的時候很頭痛,因為一講就要講很久,而且對方如果底子不夠的話,恐怕會像鴨子聽雷。再說我不當工程師很久了,雖然見過各式各樣的架構師,但是總不好意思一直拿十多年前的職場經驗來吹噓,畢竟資訊科技產業進步很快,有些事情已然不同。
欣見這篇文章[1]談「從程序員到架構師」,也可以提供給上述提問者參考,省下我講解的時間。雖然這裡主要講的是建構優化雲端服務的軟體架構師,但是大同小異,尤其在非技術的部分,例如溝通、架構、抽象分析、決策等能力,則多半也適用於其他類別的架構師。有興趣的人理解架構師,或是想朝架構師發展的人可以大致瀏覽一下,以下是我的補充說明。

技能樹

有些人看到上述文章,可能會先被兩張「技能樹」圖片所震撼,一張是卓越的程序員(程式師)的技能樹,一張是架構師的技能樹,如作者所言,從程序員到架構師,是一個不斷經驗累積的過程,所以架構師不可能光是懂一堆高深的理論卻不懂得寫程式。然而各位如果比較這兩張技能樹,會發現有大不同,並不是單純靠累積經驗值就能升級的。

化學反應

因為經驗積累到後來,重點不在於「量的增加」而在於「質的躍昇」,所以不是說你學過越多的語言和演算法、用過很多的工具、做過很多的專案、寫程式碼的速度超快,就能蛻變升級成為架構師。過程中必須產生類似化學反應,才能將經驗和能力整合後提升到另一個層次。但這個類似化學反應的蛻變的關鍵和契機因人因領域而異,很難說明清楚,分享文中也沒有多講。我最後會談一下這件事,並且分享一下我的個人經驗給朋友們參考。

重質不重量

為什麼說學了很多東西、專案做得再多,未必能成為好的架構師呢?好比你拿了五個碩士學位,是否可折換一個博士呢? 當然不行,因為真正博士等級的訓練極為注重「質的躍昇」,看看學生是否能在融會貫通知識經驗之後做出優秀的原創作品。同理,發表十篇二流的論文是否等同於一篇一流論文?做了十個「快老二」的研發專案,是否相當於做出一個高技術門檻的原創作品?當然不是。

當事人本身要具備足夠的基礎,其次則是要有適合的環境以及良師益友,否則恐怕學再多也難以濟事。至於「質」要如何來認定呢?通常得透過實際戰果以及其他資深架構師的肯定來孚眾望,否則即使勉強掛上架構師的頭銜也是無用。

視野和典範

重質不重量的概念並不難懂,但實際上與當事人的視野有關。所謂「夏蟲不可語冰」,如果根本沒看過架構師,缺乏典範,那麼要如何評價一位架構師或是學習成為一位架構師呢?有些工程師長年賣力鑽研,成為某項技術項目的達人,但是技術達人並不見得具備架構師的能力。台灣的資訊電子業有不少的技術達人,但是在產業需要轉型提升的時候,需要構思前瞻和總體策略的時候,才會發現架構師的重要性。

架構師的光譜

架構師有許多種,有的偏軟體,有的偏硬體,但是大多數都要軟硬兼備的素養。分享文所談的雲端軟體架構師,比較偏向軟體技術,但是也要懂得系統架構和效能分析優化;台灣比較常見的是嵌入式系統的研發工作,過去的發展受限,往往停留在為硬體產品寫韌體(firmware)的層次,但是到了物聯網時代之後,就開始需要懂軟體的系統架構師來帶領方向。到了數據掛帥的今天,還要再加上AI和資訊安全的素養,又是另外的維度。

基本素養和專業能力

剛進入資訊科技領域的學生,由於從寫程式入門,往往過度熱衷於寫程式(或是完全排拒寫程式)以及沈迷於演算法。其實這些就像英文和數學一樣,是資訊科技人的基本素養,某些公司面試新進員工的時候,考驗程式寫作和演算法的功力,也是理所當然的事情。但是切莫以為基本素養就是專業能力,應聘資深工程師或架構師的時候,除了確認有基本素養之外,更加著重於專業能力。什麼是專業能力呢?請參考一下技能樹。基本上,資訊工程系課程中有不少有助於培養架構師的課程,不要傻傻的覺得會寫程式就行。有些東西在大學和研究所時期不好好打基礎,到了業界就難了,尤其是與系統和硬體相關的技術,需要有環境與良師益友,才會事半功倍。

環境與良師益友

回顧我自己在求學和擔任工程師的過程,感到頗為幸運地找到不錯的環境和良師益友。我高中參加電研社開始奠定寫程式的基礎,大學則是從電子電路、嵌入式系統到大型電腦都碰過,尤其是後來出國念博士班時專注研究大型平行電腦效能優化技術的時候,有機會鑽研最先進的軟硬體,是我個人蛻變的關鍵和契機;之後到矽谷Sun工作的那幾年,有幸在效能工程部門,與處理機設計部門、高階伺服器系統架構部門、網路儲存產品部門、 作業系統核心開發部門、資訊安全研究部門、Web軟體發展部門的資深架構師共同合作,不僅實際驗證我的技能,也透過他們對我的讚許讓我拿到成為架構師一員的門票。

架構師的發展機會

在我選擇回國家教書的時候,有幾位具備架構師資歷的同事也離開公司回到他們的祖國貢獻於科技業。好幾位回去中國發展的同事,獲得政府的挹注,後來發展得很不錯。相形之下,台灣資訊產業轉型提升的步調頗為緩慢,無論是產業或學術,鮮少人了解架構師的重要性,願意長期積累技術經驗成為架構師的人少得可憐,乃至於大多數人連架構師是什麼都不大清楚。但有趣的是,這幾年業界想轉型,三不五時就會有朋友要我推薦架構師 -- 各位可以找一下我之前的貼文就知道。

我分享以上這些個人經驗和看法,不是想往自己臉上貼金,只是想告訴學生們什麼是架構師以及如何把自己培養成架構師的歷程。當然,我不是什麼厲害的架構師,只是當年有幸從多位厲害的架構師身上學到一些皮毛而已,不過我認為我這點皮毛,在這個架構師罕見的學術環境,還是有點價值,也歡迎理解成為架構師的難度後仍想成為架構師的學子們一起來學習。

[1] https://mp.weixin.qq.com/s/CqRruULCJQCa5cbxVk66uA

2019年3月22日 星期五

跟新生的對談FAQ

這幾天跟一群剛錄取資工研究所碩士班學生的「小朋友們」解釋我的研究方向,什麼是系統架構師、處理機架構設計的時候,想說怎麼會解釋半天,對方還懵懵懂懂呢?

我把對話的重點整理成以下的FAQ,希望有助於新生釐清我的研究方向、周遭的現實、自我的學習目標。

Q. 所以架構師是做硬體的嗎?
A. 要懂系統或處理機架構,但是不見得要做硬體,常常做的是系統整體的效能優化,要去修改軟體。即使是設計處理機架構,也不是做到很細節的電路設計。

就像造101大樓(晶片)時,建築師(架構師)綜合案主的需求畫藍圖,搭配土木工程師(晶片設計師)去計算規劃工程細節。

Q. 要懂計算機結構嗎?
A. 要懂,否則怎麼當架構師?而且,你們老師可能沒有仔細教的課本(白算盤)的第七章多核心平行計算和附錄A的GPU會是重點。

但是整本書都背下來也沒有用,實際經驗很重要。我在SUN工作時參與多核心處理機架構設計和高階系統軟硬體效能優化工程,是台灣少數有實際經驗的教授。

Q. 要懂電路設計嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我大學唸電機系的,所以有加到分。這裡談的主要是邏輯設計和功耗的基本觀念,通常不會太深入,但是當年修過電路學、電子學、半導體、控制、訊號分析等課程,在某些案子中會派上用場。

Q. 要懂作業系統嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我在讀博士班的時候所做的研究題目不需要碰作業系統,但是基於個人的興趣,我很早就自學作業系統。在SUN工作的時候,為了優化大型系統的效能,有不少與作業系統相關的工作。要知道一個程式在存取檔案、傳輸網路資料的時候都要使用作業系統,完全不懂作業系統,怎麼做好大數據分析和物聯網?

Q. 要懂編譯器嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我們做效能優化的第一關,就是善用編譯器的優化功能。現代編譯器技術的重點在於針對處理機架構優化的後端(backend),以及即時監控應用的特性做動態優化(just-in-time dynamic optimization ),都是我們關切的議題。我們知道現代編譯器還有很多做不好的地方,尤其針對平行程式和多核心系統,還有很多研究議題。

是的,我修過編譯器,也研究過編譯器,在某些案子中會派上用場。

Q. 要懂平行程式設計嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我在二十多年前做的博士論文研究的是在大型平行電腦上實際優化高效能平行程式的時候所遇到的系統性問題,其間所訓練出來的能力,對於畢業後去SUN公司所從事大型多處理機系統優化的工作,有極大的幫助。

現在幾乎隨處可見多處理機系統,你的手機就有好幾個CPU核心,再加上更多的GPU核心,可是絕大多數的應用程式都沒有優化得很好,因為懂得寫好平行程式的人太少了。要做真的大數據分析,也要懂得平行程式的效能關鍵,但是真懂的人也少得很。

Q. 要懂機器學習嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我在唸書的時候修過三門AI的課,說真的對我的工作沒有什麼幫助,直到最近AI爆紅。

這次AI爆紅的關鍵在於深度學習,而深度學習之所以能成氣候,關鍵在於大數據、GPU和平行計算架構。我們一方面研究如何從系統設計和優化的觀點為深度學習提供更強大的算力,一方面研究如何用強大的深度學習來開創新局。我不是機器學習專家,我只是研究如何用我的專業讓機器學習變強。

Q. 要懂物聯網嗎?
A. 最好要懂,會加分,不懂也不是大問題。

你知道什麼是物聯網嗎?完整的物聯網系統包含我們身邊(自己的和別人的)各種能連網行動裝置、電信業者或商家的基地台、基地台上能夠做的工作,一路連到世界各地公用或私有的資料中心做大數據分析。

物流網的重點在於蒐集資訊、分析資訊、即時做出回應,在在都與系統有關。這陣子大廠紛紛推出智慧物聯網開發版,像是Edge TPU、Jetson Nano,把深度學習加速器放進低功率的處理機裡面,讓大家能做出更智慧的物聯網應用,但是你知道物聯網應用有哪些與效能相關的因素嗎?有能力分析嗎?

抱歉,以上兩個問題是很多業界工程師都不會的,我不是刻意刁難你,只是說明一件事:懂越多,機會越多。

對了,我大學時修過不少通訊網路相關的課,包括統計通訊、數位調變、衛星通訊,還跟李琳山教授做過包括語音合成的專題,雖然沒有直接派上用場,但是這些基礎讓我對於Internet和5G技術不會太陌生。

Q. 要懂資安嗎?
A. 最好要懂,會加分,不懂也不是大問題。

我剛進大學時不懂事,在台大計算機中心做了一些駭客的事,不過只是為自己增加了電腦的使用時間,沒有幹下其他壞事。我大三修課時期末專題報告,詳細探討了老師沒教、剛出來的RSA公鑰密碼技術(public-key cryptography )的論文,不過對於考試和拿學位沒多大用處。

但事隔十多年,我在SUN公司工作時,被找去幫助解決密碼加速器的效能問題,當年期末報告的基礎讓我在面對密碼專家時能夠氣閒神定,從容在短時間內解決軟硬體搭配不良效能問題,意外成為公司裡密碼加速器的專家。此後幾年,公司所開發的外掛密碼加速器、處理機內建的密碼加速器、作業系統和伺服器中對的加密技術,往往都來找我幫忙。

我不認為自己是傳統所謂的資安專家,但是我對於解決實際系統上的資安問題感興趣,尤其是越來越重要的資料隱私保護的問題。各家醫院、健保署裡面有很多資料,但是礙於法規很難拿出來放在一起做大數據分析,不解決這個問題的話,進步會很緩慢。

但是,不懂資安也沒關係,一則您所理解的資安可能不是我們在意的資安,一則我們還有很多其他不需要資安的研究議題。

.... (還有很多其他的問題就暫時不寫了,例如要不要懂C語言...)

Q. 如果以上那些「不懂也不是大問題」的都不懂,可以做架構師嗎?
A. 可以啊,如果人家很缺人,而且又沒有其他人跟你搶這個工作的話。

要認真說的話,這是跨領域的時代,融會貫通數個專業是一件好事,更何況是架構師這樣的工作。反過來說,你沒有身兼幾個專長,除非你在某個領域能做到最強,否則不要說能不能成大器,我會為你的前途感到憂心。將來面臨中年失業危機的時候不要怪我沒警告你。

Q. 那麼只懂xx和yy行嗎?
A. 我不知道,看你的事業運了。

排列組合太多了,未來很難預測,我自己的作法是多利用身邊的機會和資源、多跟大師學。

當年選擇研究平行電腦,因為有大師的指導,加上學校建置了全新的平行電腦,有此極為難得的機會。你看看和我年紀相仿的教授和工程師,有幾位在唸書的時候,能在大師的親自指導下研究超級電腦上平行程式的效能問題?(不用浪費時間找了,你在台灣找不到幾個的。)

Q. 那麼老師你懂這麼多東西嗎?怎麼學的?
A. 我這37年來,從高中開始,只要有機會就學,最好是跟大師學,學了東西就找機會用,最好是用於解決重要的實務問題,不斷學習和運用所學,自然就會學到不少東西。

雖然我不會什麼領域都專精,但是我往往可以跟領域專家溝通合作。「溝通合作」是架構師最重要的能力之一。

Q. 為什麼要學這麼多東西呢?
A. 傻孩子,為了做別人不會做的事,賺別人賺不了的錢啊!厲害的架構師,薪水可能比某些做一輩子的前端工程師高十倍還不止。

不過對我來說,最重要的是興趣。我喜歡學習和研究,所以我願意放棄業界高薪來做學校當教授,但這不表示我不關心業界做的事情,更不代表我要把自己關在象牙塔裡只發表學術論文就好。

我之所以學很多的東西,是希望用來幫助這個世界。沒有實際能力的話,只靠逢迎拍馬上去的那些政客和官員,以及那些靠運氣和苦力致富的老闆,對國家社會的發展是阻力還是助力呢?當你們這個世代在罵那些霸佔權位資源老人的時候,你們有足夠的能力當家做主、做得更好嗎?

當然你如果要說不擇手段趕快拿學位去卡位才是時下的王道,我也不想反駁你,因為這或許是在這個生病的社會中保全自己和家人的生存法則,而且我也曾是受害者。但我只能說,台大有個校訓:「敦品、勵學、愛國、愛人」,我還是要讓你知道有這件事情,你也許做得到。

Q. 要怎麼入門學習呢?
A. 如果努力上進的話,我們會好好帶你入門,給你環境和支持,不過我提供的是指導,修行得靠你自己去修課、找資料、實作、和同學討論、解決問題。我們也會有業界的協助,資源多得很。

Q. 我有興趣,但我不知道做不做得來?
A. 同學,你考上台大研究所,很不容易,怎麼還這麼沒有自信?要知道「缺乏自信」是求職的大忌,而且我都已經要給你機會和幫助你了,難道要我保證你多久之內畢業嗎?

謝謝你來談,我們再聯絡,有自信再說。

2019年3月17日 星期日

大學生的專業技能學習

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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