簡介

近日正逢大學指考分發,許多考生也忙著到處查資料,決定要念甚麼科系。選甚麼學校、科系是人生大事,別指望轉系,那是癡人說夢,一開始我們就要做出正確決定。於是我就想分享一下我的觀點,來說說為甚麼不推薦考生跟風填資工系,免得日後考生夜長惡夢多。

先說說我的背景,台大生機系畢業,大學時期有在資工系修課和做專題,正在就讀交大資工所。過去在四家軟體公司實習工作過,而現在在國家高速網路中心工讀。同時我有大量開源開發經驗,平常喜歡寫資工技術文,還有幾場公開演講。有興趣可以看看「我對資工的興趣產生」,描述我如何發覺自己對資工的熱忱。我的觀點來自於我對資工產業和學界的理解。

資工系基本上學甚麼

先來看看台大資工的必修

台大的必修

微積分、普化普物普生這些大一理工科系都長這樣,不用太在意。
大一上會教基本程式設計,大一下要修演算法與資料結構,學如何「有效率」的寫出一隻程式。

大二有三門課我覺得比較重要,演算法設計系統程式設計作業系統。剩下的數學就是學了有機會就能用到的工具,數位系統在學電路邏輯的基本設計。

演算法設計是大一下資料結構與演算法的延伸,會更詳細用數學去分析程式用不同計算方法,造成的計算時間和使用的記憶體差異。

平常寫的軟體稱為應用程式,通常是網頁、App、應用軟體,而系統程式教你怎樣在作業系統上去寫比較底層的程式,寫的程式會需要跟作業系統直接溝通。舉例來說,應用軟體要網路連線通常直接使用現成套件,而套件背後其實需要處理系統層級的網路連線、執行緒管理、通訊管理等工作。簡言之,應用軟體是寫給一般使用者,而系統程式設計可以想成是寫給程式設計師的程式。

現在市面上三大作業系統,分別為 Windows、macOS、Linux,沒有作業系統我們的電腦充其量只是一塊廢鐵罷了,作業系統的功用在於直接和硬體溝通並提供使用者一個方便的介面,作業系統將 CPU、記憶體、硬碟、網路這些硬體設備整合成一個使用介面,於是我們平常打開 Windows,不需要管硬體裝置但電腦也運行的井然有序,同時還可以在上面跑各種應用程式。作業系統這門課就是在學這些背後的原理。

大三我覺得最重要的是計算機結構計算機網路,剩下的自動機與形式語言簡單來說是去了解「計算」的本質是甚麼,是一個非常數學的課。

計算機網路在介紹為甚麼網際網路可以動,現在是就隨處可見的網路背後是怎樣的機制建立起來的。

計算機結構主要在介紹 CPU 背後的原理,概略來說就是為甚麼 Intel、AMD 的 CPU 能跑得起來,當我們有任務丟給 CPU 要計算時,CPU 背後的硬體跑了哪些流程,此外了解 CPU 背後的原理,對於我們寫程式也會很有幫助,就像我們要用工具時也會看一下說明書一樣。

有些同學可能會想說,會寫程式很吃香,確實如此,但如果只是基於這個原因不需要特別念資工系,因為可以看到資工系不是教你怎樣寫網站或寫 App,如果想來資工系學的話是鐵定學不到的,而且其實教授大概也不大會寫,如果對電腦背後的科學和工程原理不感興趣的話,念資工會十分沉悶無聊喔!

事實上很多科系都有開基礎程式設計,此外通常學校計算機中心都會開設通識課程,教怎樣寫網頁、寫 App、用程式做數值運算。另外想學應用程式開發的話,其實去線上課程平台或是程式補習班反而是最快速的方法呢!

擔心不懂電腦科學對未來很吃虧的話,可以考慮修資工系最重要的三門課,我統整為資料結構與演算法作業系統計算機組織,把這三門課都修了等於一窺電腦科學奧秘,關於這三門更詳細介紹可以參考我之前寫的「軟體工程師必修的三門課」。外系都可以修課或旁聽,所以你大可以主修其他系,然後將電腦科學當作輔助技能就好。

最後資工系的必修加總起來也才 50 幾學分,我真的覺得滿少的,大三下就沒必修,而我之前在生機系必修多達 70 幾,甚至到大四上還有必修。所以不會自己做課外學習或是探索其他領域的學生,實在不建議你選資工系,因為你大三下之後會有大把空閒時間,如果都拿來打電動或耍費豈不是大為不妙!

資工系還有學甚麼

除了基本必修以外,剩下就是選修,大學部選修基本上和研究所課程是相同的,意思是資工系的選修和資工所的選修是相同的一群課,也會和研究生一起修課。不過也不用擔心,我覺得資工的研究所等級課是所有理工中最簡單的,只要會寫程式一切好說。

資工專業領域很多,以下部分舉例:

  • 高效能運算:想盡各種辦法讓電腦算得更快,例如用更多 CPU 跑,或是讓 GPU 一起來幫忙計算,但更多計算裝置一起跑就會衍伸管理問題,之間的資料溝通效率也會降低。
  • 作業系統、分散系統:想辦法讓系統更有效率跑得更快,一種方式是讓很多個系統當作一個系統,稱作分散系統。
  • 程式語言:探討程式語言的設計,例如 Python 和 C++ 的差別。
  • 編譯器:編譯器怎樣可以讓編譯出來的程式跑得更快,例如讓某個程式在不改動原本程式碼情況下,從要花 1 分鐘變成只要 10 秒就可以跑完。同時也可以想辦法讓編譯器編譯更快,不過通常編譯時間和編譯出來的程式效率常常需要做權衡。
  • 電腦視覺:怎樣讓電腦像人類一樣可以有視覺,像是知道全景的不同的照片要怎樣拼接再一起,或是從好幾張照片還原 3D 物體模型。
  • 影像處理:如何去處理照片,例如 PhotoShop 背後是怎樣處理照片的。
  • 網路:無線網路、寬頻通訊、物聯網網路,這些都是研究怎樣讓網路通訊更加快速。
  • 計算機結構嵌入式系統系統晶片:研究怎樣讓硬體跑得更快,像是 Google 為了自家的深度學習服務,自己開發了 TPU,可以算得比 GPU 還快。
  • 人工智慧:背後包含機器學習和深度學習,概念很簡單,像是我們可以透過學習分辨貓跟狗差別,那我們也讓機器去學習,可能是去辨識顏色、形狀、大小等資訊,設計一套數學模型,讓電腦也可以判斷貓跟狗。
  • 自然語言處理:讓電腦可以辨識人類的語言,或是產生人類的語言,以前是透過機率統計,比方說「我喜歡」後面後面很大機率是接「你」。最近研究通常都是使用機器學習和深度學習方法。
  • 資訊安全:我們常常聽到軟體有「資安漏洞」,此外還包含程式病毒、木馬、竊聽、間諜程式等等,怎樣去發現和防堵,就是這門學問。
  • 人機介面互動:我們用的電腦、手機、智慧眼鏡、智慧手錶,這些都是「人機介面」,使用者體驗和使用者設計就是大大學問,例如確認按鈕通常放在右邊,取消鍵通常會用紅色,滑鼠不小心滑出選單會有幾秒的反悔時間等等,這些都是介面互動的一環。

此外還有很多領域,像是生醫資訊資料庫系統巨量資料電腦動畫穿戴式裝置雲端計算,我就不一一介紹了。基本要求就是一定要會寫程式,此外資工系的必修是電腦科學的基礎,一定要學好,否則這些應用領域都絕不可能學好。

資工系生活

有人分享念資工系過程中,參加系學會、到處玩、參加社團,過得輕鬆快活。我覺得那是萬中選一的人才,一般人是鐵定不可能這樣愜意。

事實上,資工伴隨著就是大量的寫程式,有句話說大學期間沒寫滿十萬行程式碼不是及格的資工人,十萬行是甚麼概念,一個厲害的工程師一天工作寫的程式碼大概是一百行左右,算算差不多也就是大學四年都認真寫程式可以辦到這個數量。每天從早寫到晚,甚至從半夜寫到隔天中午,這種事情都是稀鬆平常。不存在不會寫程式的資工系學生,你可以寫的差,但不能不會寫。

我觀察我周遭厲害的同學,學期間或暑假勢必會去業界實習,先累積業界經驗對於成長和日後就業都有幫助。此外也會做一些研究,假設想念研究所,或是想在某個領域成為專家,都需要經過研究對該領域更加了解。大家還是會參加社團或是出遊,只是剩下的大部分時間就是花在學習、工作和研究上。

如果是喜歡探索世界的人,也可以去不同領域走走看看,很多領域其實都需要和資工合作,例如生物醫學和資工就延伸出生醫資訊領域,而不管是物理系、化學系、大氣系、經濟系也都會需要用電腦做科學計算,此外像是土木系也有電腦輔助組,電腦科學更像是一個工具,適用於各行各業。

資工未來的出路

資工系學生的薪水行情跟會不會寫程式還有對專業領域的了解程度有非常大正相關,就像一個好的鋼琴演奏家的演奏費用遠比三流鋼琴家還高。一般新鮮人薪水可以從月薪 3、4 萬到年薪一兩百萬。

常見的出入有軟體工程師、硬體工程師、韌體工程師、資料科學家、資料工程師、網頁設計師、系統工程師,根據不同公司需求職務變化也很彈性,例如軟體工程師可能會需要懂自然語言處理或是影像處理,或是資料科學家除了要懂機器學習以外,可能還要有生物背景知識。

如果是去一般公司開發 App、網頁的話,大概就是月薪 3~6 萬。這也是絕大多數資工系學生畢業後的出入,再來就是去比較好的公司例如聯發科、台積電、微軟等,去開發系統程式、複雜軟體、硬體架構,大概可以拿到年薪一百萬,如果程度夠強去一些國內頂尖軟體公司當核心開發人員,有機會談到 150 萬,夠厲害的話,我也有聽到一畢業拿到兩百萬的。但能拿高薪的還是少數,我想大概只有所有資工學生中最頂尖的 10% 有機會拿到百萬以上吧。

所以如果你對資工有不切實際的幻想,以為現在資工很夯一定可以拿高薪就錯了。確實現在因為 AI 當紅,各種人工智慧的噱頭,導致資訊產業非常火熱,職缺確實比較多,但大部分的職缺都是技術性比較低的,相對的薪水就不怎樣。此外市場對於網頁、Android、IOS 的軟體工程師需求量很大,但大部分也都是技術需求比較低的職位,寫網站要找高手還是比較少見的,除非像是 Google、Facebook、Twitter 這類的網站才比較會需要非常厲害的人。其他薪水比較好的職缺通常是比較進階的專業領域,一方面這類需求較少,另一方面要達到能力要求也不容易。

所以念資工不會就當人生勝利族,還是要靠自己努力成為厲害的人才,才可能有比較較好的出入,如果因為資訊產業熱門而想選的考生,你可能要再考慮。此外我一直在想資訊產業說不定會泡沫化,主要是我認為人工智慧是炒作出來的議題,像是台大一堆研究所都在搞深度學習堪稱奇觀,現在感覺就不是特別需要一堆人研究深度學習,未來可能更不需要這麼多人投入。

結論

本文介紹資工系必修內容和資工各個領域在學甚麼,此外也說明大學過程的生活,以及未來就業情況。

其實念資工大部分是學習電腦科學,伴隨著要自己大量練習寫程式,你可以想想你對電腦怎樣動起來有興趣嗎?程式為甚麼可以跑得更快、瀏覽器為甚麼能渲染出網頁、Google 為甚麼能在短短幾秒從幾億資料找到答案、Alpha Go 是怎樣下圍棋的、聊天機器人是怎樣了解你的問題、皮克斯動畫怎樣用電腦算出動畫、NASA 怎樣用電腦控制火箭、Apple 為甚麼想要放棄 Intel 轉用 ARM?

還有太多太多有趣的問題了,這些問題都是資工系在探索的,但是如果上面的問題你都不感興趣了,那就別來唸資工系了吧。當然,你可以選擇興趣和職業分開,為了生活你可以選擇念資工,我想是鐵定能有個還不錯的生活,但是當職業就是興趣豈不是過得更加快樂?你可能有更好的選擇。