這幾天跟一群剛錄取資工研究所碩士班學生的「小朋友們」解釋我的研究方向,什麼是系統架構師、處理機架構設計的時候,想說怎麼會解釋半天,對方還懵懵懂懂呢?
我把對話的重點整理成以下的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. 同學,你考上台大研究所,很不容易,怎麼還這麼沒有自信?要知道「缺乏自信」是求職的大忌,而且我都已經要給你機會和幫助你了,難道要我保證你多久之內畢業嗎?
謝謝你來談,我們再聯絡,有自信再說。
從2010.03寫到現在,我只是想寫 -- 把我對社會、人文、科技、產業、教育的觀察和感想寫出來。每次寫出當下所思所想,似乎腦袋可以清淨一點、心靈可以輕爽些。文章大多先在臉書上與臉友分享,隨後再轉到這裡。臉書網址為:https://www.facebook.com/shihhaohung
2019年3月17日 星期日
大學生的專業技能學習
幾天前跟一位我的大學部專題生聊到他的近況,有些聊到的東西可以拿出來鼓勵同學們致力於學專業技能,而非盲目地讀書、考試、拿學位之後才發現世界根本不是自己想的那樣。
他並非資訊、電機本科生,大學成績也不怎麼樣,但是推甄上某頂尖大學的資工研究所,原因之一應該是他在大學幾年到過多家公司實習所累積的程式設計的實務經驗與能力;原因之二大概與他常於開源社群貢獻以及在個人部落格上分享心得有關。
他前一陣子到某家科技公司從事近乎全職的實習工作,薪資六字頭,只比全職工程師略少些。公司高層主管欣賞他,願意栽培他。所以他覺得好像不必去唸研究所,在公司也可以學到很多。
其實他走的是技職體系的路線,只是現在台灣絕大多數的學生都去唸大學,甚至覺得要拿到碩士學位才有好工作,所以反倒忽略了「工藝技術」的專業能力。多年前有很多一流學生讀台北工專,對業界有頗大的貢獻,但後來教育部把技職學校「升級」成大學,限縮了這條路。
剛好我上週才談過美國的狀況,許多資訊科技公司和情治單位都到高中和大學去招募資質極佳的人才,及早進到公司後自己來培育。據說Google台灣分公司也招募了不少大學生,做類似的事情。不過,這些人為了要有更好的發展,都會不斷學新東西。
其實在現代的軟體應用開發環境中,程式設計的工作有很大的部份是熟能生巧的「工藝技術」。站在巨人的肩膀上,利用最新的程式語言、程式庫、程式工具,發展出有產業價值的軟體,這種機會太多了。
反觀大學和研究所教的東西,很多是告訴學生「巨人」的運作原理、內部構造,以及如何讓巨人更大更強,所以有演算法、作業系統、計算結構等課程,原意是厚植學生的基礎,讓他們不只知其然,還要能知其所以然。
頂尖研究型大學資訊系的目標之一,是培育擁有紮實的學術基礎和足夠的實習經驗的學生,讓他們有能力做尖端的技術研發,幫業界改良或發展新型的巨人、提高業界的研發水準。具備這種專業能力的人,身價非常高。
可是一大堆教授為了升等,學生為了考試和學位,成天在這些知識中打轉了好幾年卻還是爬不到巨人的肩膀上,因為誤以為通過考試、拿到學位就行,所以反而困在巨人的肚子裡面!
我們都知道,醫學系的課程,除了講授知識之外,經常要實際操作、臨床考試,還要幾年的實習之後才能執業,並不是會讀書就好。厲害的醫生,時常還要吸收新知,才能站在巨人的肩膀上為人治病,道理也是相同。
所以,我給一些有才能也有心致力於培養專業能力的學生們的建議是:
1. 資訊系的學生,最好是學術和實務能力兼備,思考如何深化專業能力和嘗試做一些非資訊本科生不會做的高價值工作。
2. 非資訊本科的學生,如果對程式設計很有天份和興趣,可以透過各種自學、社群、實習的管道,學得某些業界需要的高價值軟體實務開發專長,也未嘗不可。
3. 無論本科與否,如果我們想說「學位不重要」這句話,就必須有辦法呈現出技能的水準出來,否則別人如何賞識和重用你呢?
4. 即便已經有了不錯的開始,還是要設法持續學習,因為新的東西不斷出現,舊的東西可能越來越不值錢。時常問自己,要學習研究什麼東西,讓自己得以呈現更專業、更出色的技能呢?
他並非資訊、電機本科生,大學成績也不怎麼樣,但是推甄上某頂尖大學的資工研究所,原因之一應該是他在大學幾年到過多家公司實習所累積的程式設計的實務經驗與能力;原因之二大概與他常於開源社群貢獻以及在個人部落格上分享心得有關。
他前一陣子到某家科技公司從事近乎全職的實習工作,薪資六字頭,只比全職工程師略少些。公司高層主管欣賞他,願意栽培他。所以他覺得好像不必去唸研究所,在公司也可以學到很多。
其實他走的是技職體系的路線,只是現在台灣絕大多數的學生都去唸大學,甚至覺得要拿到碩士學位才有好工作,所以反倒忽略了「工藝技術」的專業能力。多年前有很多一流學生讀台北工專,對業界有頗大的貢獻,但後來教育部把技職學校「升級」成大學,限縮了這條路。
剛好我上週才談過美國的狀況,許多資訊科技公司和情治單位都到高中和大學去招募資質極佳的人才,及早進到公司後自己來培育。據說Google台灣分公司也招募了不少大學生,做類似的事情。不過,這些人為了要有更好的發展,都會不斷學新東西。
其實在現代的軟體應用開發環境中,程式設計的工作有很大的部份是熟能生巧的「工藝技術」。站在巨人的肩膀上,利用最新的程式語言、程式庫、程式工具,發展出有產業價值的軟體,這種機會太多了。
反觀大學和研究所教的東西,很多是告訴學生「巨人」的運作原理、內部構造,以及如何讓巨人更大更強,所以有演算法、作業系統、計算結構等課程,原意是厚植學生的基礎,讓他們不只知其然,還要能知其所以然。
頂尖研究型大學資訊系的目標之一,是培育擁有紮實的學術基礎和足夠的實習經驗的學生,讓他們有能力做尖端的技術研發,幫業界改良或發展新型的巨人、提高業界的研發水準。具備這種專業能力的人,身價非常高。
可是一大堆教授為了升等,學生為了考試和學位,成天在這些知識中打轉了好幾年卻還是爬不到巨人的肩膀上,因為誤以為通過考試、拿到學位就行,所以反而困在巨人的肚子裡面!
我們都知道,醫學系的課程,除了講授知識之外,經常要實際操作、臨床考試,還要幾年的實習之後才能執業,並不是會讀書就好。厲害的醫生,時常還要吸收新知,才能站在巨人的肩膀上為人治病,道理也是相同。
所以,我給一些有才能也有心致力於培養專業能力的學生們的建議是:
1. 資訊系的學生,最好是學術和實務能力兼備,思考如何深化專業能力和嘗試做一些非資訊本科生不會做的高價值工作。
2. 非資訊本科的學生,如果對程式設計很有天份和興趣,可以透過各種自學、社群、實習的管道,學得某些業界需要的高價值軟體實務開發專長,也未嘗不可。
3. 無論本科與否,如果我們想說「學位不重要」這句話,就必須有辦法呈現出技能的水準出來,否則別人如何賞識和重用你呢?
4. 即便已經有了不錯的開始,還是要設法持續學習,因為新的東西不斷出現,舊的東西可能越來越不值錢。時常問自己,要學習研究什麼東西,讓自己得以呈現更專業、更出色的技能呢?
訂閱:
文章 (Atom)