交大電資四年修課心得

記錄一下在電工/電機/資工的修課心得以造福後人(?)

Bruce I-Le Wu
45 min readAug 17, 2018

Preface

四年真的好快,轉眼間我已經領完畢業證書、被交大踢出校門了。趁著暑假刷題刷到快崩潰之餘,發個修課心得累積一下人品,希望去美國後可以順利通過線上測驗、面試,找到明年的暑期實習。

年初的時候已經有寫過一篇通識修課心得了,這篇主要會Focus在電機、資工的相關課程;我修的課跨了不少領域,因為說真的,上完大一大二的必修課以後,我還不是很清楚自己到底要往哪個方向走,而大學本來就應該要去不斷地探索自己喜歡的是什麼,所以就決定每個領域的課都去修修看。但也在這邊先承認,我大一大二時蹺了不少課,所以有部分的上課心得,我能提供的資訊有限,但我會把我自修的方式也寫出來供參考,希望對看到這篇文章的學弟妹能有所幫助。

這篇文章會分成四個部分,如下:

Compulsory Subjects

Calculus (I)/(II) (微積分(I)/(II),Lecturer: 符麥克)

  • 修課年度:Fall Semester, 2014 / Spring Semester, 2015
  • 授課內容:…就微積分,有點難講==
  • 授課方式:板書推導 (英文授課)
  • 評分方式:作業+In-class Assignment+期中考+期末考+大會考
  • 其他:我對這門課的印象其實頗為薄弱,第一堂課聽了老師的課以後,覺得老師的奧地利腔好像有點重,聽了也不是太明白,所以就開始了一連串的蹺課之旅...這門課我能給的,大概只有如何自修吧:直接硬啃課本,跟著公式的推導去理解概念,再把後面的題目算一算,大概就能夠理解個七八成了,剩下的可能就得靠寫老師出的題目以及In-Class Assignment來加深印象,最後(I)(II)都有拿到A。In-class Assignment每周都會有,會有一題基本題跟進階題,基本題有很大的機率跟上禮拜的作業有87%像,所以作業如果有乖乖寫就不會有啥大問題,進階題的話就要看你當天的狀況了,不過可以盡量把自己的想法寫上去,就算沒有解出正確的答案,也會有部分分數。期中考跟期末考,作業唸完、考古題看一看,應該就行了。題外話,其實老師講中文講的很標準…有時候還可以用中文跟他溝通XD

Physics (I)/(II) (物理(I)/(II) 榮譽班,Lecturer: 許世英)

  • 修課年度:Fall Semester, 2014 / Spring Semester, 2015
  • 授課內容:(I): 第3~14章(力學、波),(II): 第19~24章(電、磁)
  • 授課方式:投影片搭配板書推導
  • 評分方式:作業 + 小考*4 + 期中考 + 期末考
  • 其他:不調分,也不會點名,但不去上課滿可惜的,因為老師講解講的還不賴。作業跟考試其實都還滿有難度的,但這些題目其實都頗具巧思,需要將微積分和物理觀念相結合;那時候我們都開玩笑地說如果解老師的考題沒有用到微積分,那一定是你解錯了XD 經過老師兩個學期的訓練,我對於物理這個領域也有了更多的了解(可是現在很多東西都忘光了QQ)。如果選了這門課,就好好學吧,這不會是一門涼課,但會是門可以學到東西的好課。如果想要考古題的話,(I)的話自己Google一下就有了,(II)的話可能就得問問看修過的人還有沒有留著了。

Physics Lab (I)/(II) (物理實驗(I)/(II))

  • 修課年度:Fall Semester, 2014 / Spring Semester, 2015
  • 授課內容:一些和普物相關的實驗
  • 授課方式:小考完後會講課,講完以後就開始做實驗
  • 評分方式:預報 + 實驗前小考 + 結報 + 期末考
  • 其他:物理實驗通常是兩個禮拜做一次;這門課其實我覺得還滿...不重要的,預報就抄一抄那本實驗講義,小考把講義看一看去考就行了(我都前一天才看...),結報的部份,我分數好像都滿高的,可能是因為以前高中做化學實驗時,化學老師對於結報有著滿高標準的要求,在經過這樣的訓練後,寫結報也就不是什麼難事了。我的結報已經傳給直屬了,所以也沒檔案可以提供,真要說技巧的話,大概就是多打點嘴砲吧(喂)。總而言之,是門不太需要用腦的課。

Intro. to Computer & Programming (計概,Lecturer: 胡毓智)

  • 修課年度:Fall Semester, 2014
  • 授課內容:從最基礎開始教起,I/O, Expression, Selection Statements, Loops, Arrays, Functions, Pointers, Strings, Structures等等。
  • 授課方式:投影片講解為主
  • 評分方式:Lab (每周) + 小考 + 期中考 + 期末考
  • 其他:老師英文相當標準,而且講解相當清楚,聽起來很舒服。老師最有名的話,應該就是"You can cut my class, but u can’t cut my lab hour",意思就是你上課不去沒關係,但你一定要乖乖上機。上機的話,每個禮拜會有大約4~5題,寫完就找TA Demo,如果有問題也可以直接向他們請教。考試的話會分成筆試(佔30%,不能看書)以及上機考(70%,可以看書),上機考內容和每周Lab的練習還滿相近的,所以考試前把之前Lab的題目多練習幾次,就不會有太大的問題。只要語法搞懂、邏輯正確,加上足夠的練習,這門課應該可以拿到高分。

Discrete Mathematics (離散數學,Lecturer: 黃問泙)

  • 修課年度:Fall Semester, 2014
  • 授課內容:Logic & Proofs, Basic Structures, Number Theory & Cryptography, Induction & Recursion, Counting, Advanced Counting Techniques, Relations, Graphs
  • 授課方式:投影片講解...吧(年代久遠,有點忘了)
  • 評分方式:作業 + 期中考*2 + 期末考
  • 其他:各位應該已經沒有辦法上到這門課了,因為老師已經退休了,所以這個心得大家就當笑話看看就好。離散數學對當時的我們來說,就是門玄學,很多觀念聽了、看了以後都不怎麼懂,一堆證明在紙上飛來飛去的,真的是讓人頭很痛。不得不說,我們大一上修的科目真的滿多的,這科又這麼難,有時候真的會滿想逃避不唸的,但是考前身體還是會很誠實地坐在書桌前開始挑燈夜戰(大一唯一一次通宵,不是獻給夜唱夜衝,而是獻給了離散的期末考...) 因為班上很多人蹺課、去上課的人很多都趴在桌面上睡覺、不然就是有同學(me)平時不上課只有下課時間會去交個作業被教授抓到...這些大概都讓教授很不高興,據說教授以前一個班級大概只會當1~2個人,結果那年怒當了班上4/9的學生,當完以後就享受退休生活去了...

Digital Circuit Design (數位電路設計,Lecturer: 單智君)

  • 修課年度:Fall Semester, 2014
  • 授課內容:Boolean Algebra, Logic Gates, Gate-Level Minimization, Combinational Logic, Synchronous Sequential Logic, Registers & Counters, Memory & Programmable Logic
  • 授課方式:投影片講解,老師會用畫筆在投影片上面畫記
  • 評分方式:期中考*2 + 期末考 + 作業*2
  • 其他:這門課主要是在教一些邏輯設計的東西,算是門重要的基礎課程。老師會把自己的講義、練習題印出來,然後在第一堂發給大家。每周都有小考,都不會太難,考的就是上個禮拜教的東西,所以只要認真複習,基本上不會有大問題。大考的話,每次分數都會破百,老師的意思大概是希望大家可以不用執著於自己不會寫的題目上,去選自己會寫的題目寫就行了。期中考的部份會有考古題,所以甭擔心;期末考的部份,我那時候把講義內容全部都弄懂、教其他同學的時候又把概念理解地更深刻,最後好像考了108吧(滿分120),所以沒有考古題也不用太驚慌。我覺得這門課還滿有趣的,因為有很多邏輯推導、並且能夠開始對一些電路有初步的認識與了解。我認為,如果可以確實理解這門課的內容、扎穩基礎,對於未來不管是數位電路實驗、計算機組織,還是VLSI,都會有不錯的幫助。

Linear Algebra (線性代數,Lecturer: 林源倍)

  • 修課年度:Spring Semester, 2015
  • 授課內容:就線代吧...Vector, Matrix, Subspace, Matrix Decomposition, Orthogonality之類的內容(詳細章節我也記不清楚了)
  • 授課方式:翻轉教學,上課前要先預習看老師的影片,在星期二兩小時的課程時間分組討論並解出老師出的作業,而星期五老師會檢討大家做答比較不理想的題目。(為英文授課)
  • 評分方式:每周上課寫作業 + 期中考 + 期末考
  • 其他:一言以蔽之,「線代不學好,老大徒傷悲」。老師那時在推動翻轉式教學,也就是說上課前要先聽完老師自己錄製的教學影片並消化吸收,小弟我那時候都自作聰明的不聽老師講解,只把影片裡面的公式推導抄一抄、想一想就去上課了。現在想起來其實有點後悔,很多觀念並不是看看公式推導就能明白箇中原由,有時候還是得靠老師講解,才能真正抓到觀念。

Object-Oriented Programming (物件導向程式設計,Lecturer: 荊宇泰)

  • 修課年度:Spring Semester, 2015
  • 授課內容:inheritance, overload, polymorphism, template等OO基本概念
  • 授課方式:投影片講解 (應該吧?) (英文授課)
  • 評分方式:每周Lab + 期中考 + 期末考
  • 其他:必須承認,我沒有花很多心力在這門課上,當初教些什麼,很多也忘的差不多了。第一堂課,待在一個人數爆滿的班級,教室很悶,老師的嗓音很平,英文有點…呃,我不好說,所以我就開始蹺課了。每周二的晚上會有Lab練習,在開始練習前助教會用中文講課,而且講得滿好的,所以我整學期都只靠寫Lab來練習OOP,連老師的講義都沒怎麼看,所以我對OOP的概念真的頗為陌生。(不得不提,那時候的助教真的很棒,各種耐心指導,也常常陪我們在電腦教室裡Debug,謝謝你們...) 建議大家還是乖乖去上課,就算不去上課,老師的投影片也要好好看,才不會像我現在一樣對於當初沒有好好學感到懊悔。

Circuit Theory (電路學,Lecturer: 蔡德明 )

  • 修課年度:Fall Semester, 2015
  • 授課內容:一開始會從DC Circuits講起,會帶過基本電路元件(電阻、電容、電感)的特性以及RLC電路,之後就會進入AC Circuits,會讓你了解弦波的特性(Phase)、交流電路如何分析、Frequency Response,學期末大概會講完Laplace Transform以及要如何將其運用在電路分析上。
  • 授課方式:投影片講解為主
  • 評分方式:考試*3(90%)+作業(10%)+Bonus (隨堂小考)
  • 其他:老師上課主要是講解投影片,偶爾會有隨堂小考當加分用。這門課每堂課都會傳簽到表,一學期最多只能七次沒來,超過的話就會被當掉,我覺得到了學期末會越來越忙,蹺課的Quota應該要留到那時候再用,所以在十二月底前我真的都沒蹺過課。我去上課的時候大部分時間都是自己看著電路學課本唸,沒怎麼在聽課,老師也不會管。考試的話,可以使用工程計算機,然後按虛數、解方程式的計算機內建功能記得要去熟悉一下,解題目時候會很好用。前面兩次考試其實滿簡單的(也有可能是因為那時候很認真地把電路學課本裡面的題目全部寫完了…),第三次因為準備起來比較倉促(同時有很多科目都要準備),我自己認為了不起大概就60分吧,但最後出來還是有A+,讓我覺得滿驚訝,所以大家如果有一次考爆了也別太灰心。老師雖然看起來很嚴肅,但其實人不錯,你去問他問題他也會想辦法跟你解釋,老師的中文不太輪轉,所以要跟老師討論建議還是用英文。這門課應該是我大二上修的最有成就感的一門課,有種我就是學電生的感覺!

Data Structure (資料結構,Lecturer: 王才沛)

  • 修課年度:Fall Semester, 2015
  • 授課內容:Complexity, Array, Stacks & Queues, Linked List, Trees, Hashing, Graphs, Sorting
  • 授課方式:投影片講解
  • 評分方式:作業*5 + 期中考 + 期末考
  • 其他:據說現在資結已經跟OOP合併成一門課了吧,那這個心得大家就隨便看看就好。老師上課速度不快,一張投影片有時候會講很久,上課風格的部份,只可意會不可言傳,有些人覺得很Ok,有些人覺得步調太慢不喜歡。到了學期末,蹺課人數也就越來越多了,但這門課並不會點名。作業的話,這學期的五個作業分別是實作Sparse Matrix (好像是用Linked List去做的樣子,有點忘了)、Permutation(用Stack)、Tree Traversal (left-child-right-child)、Polynomial Operations(用Binary Search Tree)、Graph (用Adjacency List,並用DFS/BFS去找Connected Component);偶爾會要Demo,助教很平易近人,可能叫妳解釋一下Code、問一些基本觀念,只要程式是自己寫的,一定回答得出來。我C++寫的真是世界爛,所以偶爾還是會向別人請教該怎麼寫,但基本上還是可以順利完成作業。

Differential Equations (微分方程,Lecturer: 蔡淳仁)

  • 修課年度:Fall Semester, 2015
  • 授課內容:First-Order/High-Order Differential Equation, Laplace Transform, Linear System of Differential Equation, Power Series, Fourier Series, Partial Differential Equation & Boundary Value Problems
  • 授課方式:投影片講解
  • 評分方式:小考*9(11取9,25%) + 期中考(35%) + 期末考(40%)
  • 其他:微分方程主要運用是各種模型的建構,講白話點就是各種方程式飛來飛去,然後想辦法搞出一個解,每次看課本真的是看的頭很痛,而且坦白講,我現在已經忘得差不多了。老師的聲音有點小,所以可能要坐前面幾排,才可以聽得比較清楚。我修的那學期總共有十一次小考,取九次高的,小考的題目只要每周有固定複習的話,應該可以輕鬆寫;沒記錯的話,幾乎都是星期三考小考,所以那天的出席率總會特別高,我通常也只有那天會去…。至於考試的準備,我是把課本啃過一遍、算算老師指定的作業、跟考古題打個照面就上場秀下限了,每次考試都只有5題,也就是說如果複習的時候稍稍偷懶跳過一些章節,很有可能20分就飛了,雖然很可惜,但也不用太擔心期末成績,因為期中期末考班平均大概都落在40分左右,所以老師最後會調不少分,只要不是班上倒數15%,應該就不會被當掉。

Digital Circuit Lab (數位電路實驗,Lecturer: 蔡淳仁)

  • 修課年度:Fall Semester, 2015
  • 授課內容:上課就講一些FPGA、RTL之類的東西吧…我都沒去上課,所以不太清楚教授在課堂上到底講了些什麼
  • 授課方式:上課投影片講解+上機時間(助教負責)
  • 評分方式:Lab*10 + 期中考 + Final Project
  • 其他:這門課雖然只有2學分,但是修起來卻像8學分…平心而論,我花在電子學、電路學加起來的時間都還沒有這門多,每個周末常常都要待在工程三館2樓那間討厭的實驗室燒電路板(可以理解成燒程式到板子上,或是字面上的意思:有一次我什麼都沒做,電路板上的排線就直接在我眼前起火燃燒...真的是嚇尿)。Lab難度可以說是循序漸進,一開始還算簡單,後面就越來越困難,內容大多是寫寫Verilog,然後燒到FPGA板上,讓板子有相對應的動作像是操控LCD、完成運算、或是使用特定Protocol和周邊裝置溝通;其實在修這門課之前,我沒什麼Verilog的基礎,老師第一堂課還拿如何學游泳來比喻,「最好的方式就是直接把不會游泳的人丟到水裡,他就會很快學會游泳...」,修這門課真的是修到快崩潰,真的很感謝這門課的助教,常常陪我們在實驗室待到很晚,也謝謝當初一起修這門課的同學願意互相討論、互相抱大腿(這門課是我大學所有課程抱別人大腿最多次的一門...)。期中考是上機考五題,跟Lab比起來我覺得還滿有難度的,我那時候寫個兩題,覺得剩下的大概是寫不出來了,所以就找助教來Demo提早閃人,之後公布期中考成績時,發現大部分的人也都只有寫出兩題。Final Project的部分,我們那屆的題目是Study of an FPU,老師會給一包Code(內有FPU的各個Component,總共有將近2000行),要自己去Trace,試著去做Simulation,並按照特定格式完成Final Report。聽說從我的下一屆開始,老師好像就把Final Project改成Final Exam,而且Lab有越來越難的趨勢,不過期中考期末考好像不太刁難,難度可能比Lab簡單一些。

Electronics (I) (電子學(一),Lecturer: 王毓駒)

  • 修課年度:Fall Semester, 2015
  • 授課內容:Semiconductors, pn Junction/Diode/BJT Circuits, MOSFET
  • 授課方式:投影片講解為主
  • 評分方式:期中考+期末考+小考+作業
  • 其他:老師是Caltech畢業的,以前曾經拿過物奧銀牌,相當厲害。我覺得老師上課其實上的很不錯,老師不會完全照著電子學課本的順序去講,而是自己做一些投影片來講解他認為重要的概念。最印象深刻的是有一周可能因為大家都很忙,加上老師從不點名,所以那天整間教室只有一個人在教室右後方睡覺,而且那個人好像是上一堂課的...老師還在FB上發了文留念(我也是看別人轉貼到班網才知道事情大條了),在這邊跟老師說聲抱歉了QQ 小考的部分,把作業都算過,分數應該可以全拿;期中期末考就看看考古題跟小考吧!在啃電子學課本時,如果有不懂的地方,可以搭配這份講義,相信你會有所收穫的。再強調一次,王老師真的很厲害,有一次我有個電路學的概念弄不太懂,所以就去找老師求救,老師聽完我的問題以後,立刻點出我的盲點所在,讓我相當佩服,所以如果有不懂的問題,可以盡量問老師,相信老師一定可以給你解答的。
特別加映:大家看到了老師的貼文都感到相當慚愧,紛紛表示星期四要出席捧場,結果那天,我們系還是只有我跟我室友出現...

Electronics Lab (I)/(II) (電子實驗(一)(二),Lecturer: 助教)

  • 修課年度:Fall Semester, 2015 / Spring Semester, 2016
  • 授課內容:電子學/電路學相關的實驗 & Arduino
  • 授課方式:課堂一開始大助講解實驗原理,之後就開始做實驗
  • 評分方式:每周小考+結報+期中專題+期末專題+期末考
  • 其他:電資班預設英文授課,那班的操我早有所耳聞,所以就換掉了,事後看來還真是個正確的決定,每周四晚上是他們的實驗時間,每當我凌晨一點多要睡覺的時候,房間總是只有我一人,因為室友們都還在ED320奮鬥…,電工系/電機系的電子實驗平時大約晚上8點半就能做完實驗,最晚了不起到晚上9點半,絕對沒有挑燈夜戰的情形。(I)的話基本上都在接電路,然後用示波器觀察波型、三用電表測量一些數值,絕大部分的實驗都是DC Circuits;期中專題是做一個Voltage Regulator(穩壓器),輸入為交流電,並要有四個輸出,分別是5~12V(利用可變電阻調整)、接地以及+/- 12V;期末專題是弄Audio System (Wired/Wireless),大家一起待在實驗室或是系K焊電路,不清楚的地方互相討論一下,應該不用花太多時間;期末考考的內容幾乎是電路學,電路學念好,進考場就能輕鬆屌虐一波。(II)的話前半部分會接一些Amplifier以及Frequency Response的電路,後半部分就是在弄Arduino,像是控制LED、七段顯示器、ADC以及一些有的的沒的,程式粗略的架構講義裡面都有,所以相當輕鬆;Final Project要做一個ECG System,可以測量人的生理訊號,成功在電腦跟示波器上看到自己的心電圖的時候,還滿有成就感的;期末考的話會考接電路跟Arduino,可是靠杯,我帶進去的ASUS筆電居然當機(再次印證了千古名言"華碩品質,以卵擊石"),期末考直接GG...
利用助教提供之Arduino程式進行濾波,所得到之心電訊號圖

Electronics (II) (電子學(二),Lecturer: 莊景德)

  • 修課年度:Spring Semester, 2016
  • 授課內容:Cascode Circuits, Differential Amplifier, Frequency Response, Feedback, CMOS Op-Amp
  • 授課方式:投影片搭配板書
  • 評分方式:期中考 + 期末考 + 作業
  • 其他:抱歉我真的很混…這個我真的講不出啥心得了,老師上課滿認真的,可是有時候推導過程滿冗長的,一恍神之後再回來就跟不太上了,所以我常常都在偷偷注意坐在旁邊別系的可愛妹子…嚴格來講,我上課的時候沒有太認真。準備期中期末考的話,我都聽OCW陳振芳教授的電子學(三)(順帶一提,陳教授人很好,我還有寄信去問他問題,他回了好長一封信給我幫助我釐清觀念),搭配考古題使用,這樣大概就沒什麼問題了,不過因為是英文班,修的人數不是太多,所以如果想拿A+,大概要班上前幾高才有機會。這門課好像也有要求缺席堂數不能少於多少比例,實際數字我忘記了,不過老師第一堂課應該會提就是了。

Probability (機率,Lecturer: 高榮鴻)

  • 修課年度:Spring Semester, 2016
  • 授課內容:Sample Space, Random Variables (Discrete, Continuous), Limit Theorems, Poisson Processes, Discrete-Time Markov Chains
  • 授課方式:板書為主
  • 評分方式:期中考*2 (各25%)+ 期末考 (30%) + 作業若干次
  • 其他:這門課真的是甜到蛀牙…認真說,機率其實是一門很重要的課程,在很多地方都會用上,包括機器學習、通訊、Robotics,其實都會用到。我那時候覺得自己看OCW(推薦葉丙成教授在Coursera開的Probability(I)(II))比較省時,所以都沒怎麼去上課,基本上看看OCW,搭配機率課本上面的題目練習,已是綽綽有餘;生活中有很多例子,其實都跟機率脫離不了關係,所以我認為機率應該是所有工程數學中,最有趣的一門課。

Signals & Systems (訊號與系統,Lecturer: 馮智豪)

  • 修課年度:Spring Semester, 2016
  • 授課內容:Signals, LTI Systems, Continuous/Discrete Time Transform (Fourier Series, Fourier Transform, Laplace Transform)
  • 授課方式:投影片講解為主
  • 評分方式:期中考+期末考+作業*4 + 程式作業*4
  • 其他:這門是英文授課,老師的英文沒什麼口音,所以句子的每個單字都可以聽得很清楚,可是當所有的英文詞彙全部組合在一起,你就會感到相當困惑...所以不瞞大家說,我其實都是抱陳永平教授大腿,聽老師的線上課程,如果沒有陳永平教授的話,我的訊號與系統大概是沒救了QQ
    程式作業主要是在跑模擬,要用Matlab,不過我那時候覺得Matlab太大包了,實在是不想裝在自己容量有限的SSD上,而且開個Matlab都要等世界久...所以我都直接用Octave(開源軟體),如果我沒記錯的話他跟Win 10好像有些相容性的問題,但是你可以使用線上版(直接打"octave online"應該就可以找到了)。我寫完作業以後,都會把程式碼丟給同學,叫他們幫我開Matlab測一下,印象中都沒什麼問題。

Complex Variables (複變函數,Lecturer: 林國瑞)

  • 修課年度:Spring Semester, 2016
  • 授課內容:Complex Numbers, Analytic Functions, Elementary Functions, Complex Integration, Complex Series, Residue Theory
  • 授課方式:老師有自己的講義(用手寫的),上課會在黑板上面講解
  • 評分方式:期中考*2 + 期末考 + 作業*6
  • 其他:我那時候覺得時間有限,慾望無窮,去上課太浪費時間了,OCW (一樣是聽陳永平教授的課)直接開個2倍速抄筆記比較經濟實惠,也可以騰出比較多時間。剛開學時,我還是有去上課的,老師講解講的很仔細,上課如果認真聽,回家好好寫作業,考試不會有太大的問題,學期末結算總成績時,也會全班平移調分。如果你是要往偏軟體的方向發展的話,這門課真的可以不用修,別浪費生命。

Elective Subjects

Computer Organization (計算機組織,Lecturer: 陳添福)

  • 修課年度:Spring Semester, 2016
  • 授課內容:Performance, Instructions, Arithmetic for Computers, Data Path & Control Path, Pipelining, Memory Hierarchy, Multiprocessors & Clusters
  • 授課方式:投影片講解為主
  • 評分方式:作業*6+期中考*2+期末考
  • 其他:老師講課講得非常好,而且人也很風趣,我可以很自豪地說我從來沒有蹺過這門課!我個人認為走電資相關領域的,都應該要修這門課。這門課一開始會先帶過基本的MIPS組語,之後開始介紹電腦的運算,包括ALU以及加減乘除的運作;接著進到第四章,會從最基礎的Single-Cycle CPU開始講起,之後開始加入Load/Store、Pipelining(會產生Hazard,需要進行額外處理),最後會講Branch Hazards、Exception之類的功能;第五章主要是在講Memory Hierarchy,Memory、Cache、VM等內容在這邊都會提到;最後一章是多核心處理,但因為到了學期末所剩時間有限,所以老師那邊就講得非常快。這門課總共有六次作業,都是用Verilog寫然後用ModelSim來跑模擬,第一次作業就是實作出簡單的32-bit ALU,之後的每一次作業,都會搭配老師的進度,加上新功能以及Component,讓CPU可以真正開始去運行一些指令(R-type/I-type/branch);第四次作業開始,則需要去改寫之前的Code弄出一個Pipeline CPU;到了最後一次作業,則是用前面的CPU來兜出一個Multi-Core Computing Environment,每次看到Compile沒有發生錯誤、而且Testbench跑出正確的結果時,心中真的是成就感滿滿,也讓我深刻體會到了何謂"Learning by doing."。
用一張圖說明Computer Organization到底在教什麼

Intro. to Operating Systems (作業系統概論,Lecturer: 張立平)

  • 修課年度:Fall Semester, 2016
  • 授課內容:System Structure, Processes, Threads, CPU Scheduling, Synchronization, Deadlock, Memory Management, File System, Disk, VM
  • 授課方式:投影片講解為主,偶爾會抽點人回答問題
  • 評分方式:期中考(25%)+期末考(35%)+作業*7(35%)+小考*5(5%)
  • 其他:老師口條清晰,講得還滿清楚的,這門課跟計算機組織可以說是相輔相成,學了以後可以讓你對於電腦的運作有更深的了解。作業次數不少,內容乍看之下雖然有些複雜,但是其實只要概念懂了,程式很快就能寫出來,而且這些作業對於理解OS概念也是相當有幫助。除了一開始因為對Linux系統還不是太熟悉、太久沒寫C,所以花比較多時間完成前面兩三次作業,之後就越來越順利,大概3小時之內就可以把作業搞定了。作業包括了實作簡易Shell、利用Multi-Process進行矩陣運算、用Pthread實作Parallel Quicksort、Multi-Threaded Quicksort with Thread Pool、Working Set Optimization(減少Process佔據的記憶體)、實作LRU/FIFO、File Finding Utility(實作"find"指令的部分功能)等等。我自己覺得,作業好像有越來越簡單的趨勢XD 如果對OS有興趣的話,之後可以修研究所開的OSDI看看,據說跟OSU一樣好玩(X

Automatic Control Systems (自動控制系統,Lecturer: 吳炳飛)

  • 修課年度:Fall Semester, 2016
  • 授課內容:主要是對一個系統去做Time-Domain/Root-Locus/Frequency-Domain Analysis,分析系統穩定度、準確度、反應時間
  • 授課方式:投影片講解為主,老師會在上面寫筆記講解
  • 評分方式:作業*10 + 小考*10 + 期中考 + 期末考
  • 其他:這是門我很喜歡的課(網路上也有老師幾年前錄的OCW),吳炳飛教授的名聲大家都知道,課程的workload真的不是太輕,每個禮拜都花了不少時間在唸這門課;我那時候還滿認真的,都是先預習過OCW(開2倍速)再去聽老師上課,真的是獲益良多。老師對於訊號處理、系統都有自己獨到的見解,並且可以用相當平易近人的方式讓學生理解重要概念。這門課有10次小考(每學期的次數可能不一樣),小考不會事先預告,如果有兩次小考0分的話,佔學期成績40%的小考部分就直接算0分(但是只要你有到現場,考卷上面寫個名字,就至少會有1分同情分XD),所以大家都不太會蹺課,我認為,老師的課堂堂精彩,蹺課真的很可惜。

Intro. to VLSI Design (積體電路設計導論,Lecturer: 李鎮宜)

  • 修課年度:Fall Semester, 2016
  • 授課內容:從最基礎的CMOS開始講起,介紹Layout、Logic Gates相關議題以及各種電路;期中考後會講Adders, Data Path, Arithmetic Operation要如何去設計、並介紹各種Memory Storage (RAM, ROM, CAM)以及做電路設計的相關Issue。
  • 授課方式:投影片講解為主
  • 評分方式:期中考+期末考+Lab*4(加分題)+Final Project
  • 其他:如果未來要走電路設計的話,Intro. to VLSI Design肯定是門重要的入門課,因為這門課會提到很多做電路設計的基本概念以及需要注意的重點。Lab的內容包含Hspice、Layout以及Verilog,算是為Final Project做一些準備(例如Lab 4就是要用NAND/NOR/XOR等邏輯閘設計許多Module如Half/Full Adder, Booth Encoder, Wallace Tree, Carry Look-ahead Adder,最後再組合成6-bit Multiplier & Accumulator,而這正是Final Project的題目);Final Project要根據Lab 4的設計,去刻spice檔以及畫Layout,最後會根據運算速度、功耗等項目來決定成績;畫Layout的過程真的是很崩潰,畫到像智障一樣,畫完後真是悲喜參半,喜的是跑DRC跟LVS沒噴Error,憂的是我居然為了這個東西浪費了那麼多生命...。很多人在選課的時候應該會注意到,電工系跟電機系都有開這門,那到底要修哪一個呢?That’s a good question. 我跟很多修過相關課程的同學討論過,我們的結論是修電機系開的VLSI也滿不錯的,VLSI 導論 + VLSI 實驗一起修,爽拿6學分,而且很容易拿高分,好GPA不刷嗎?不過之後就要併系了,也不知道課會怎麼開,大家就隨便參考看看吧~
VLSI Final Project, 看起來還滿療癒的(X

Intro. to AIC (類比積體電路導論,Lecturer: 洪崇智)

  • 修課年度:Fall Semester, 2016
  • 授課內容:Op Amp Circuits, Filters & Tuned Amplifiers, Signal Generators & Waveform-Shaping Circuits, Output Stage & Power Amplifiers
  • 授課方式:投影片為主,偶爾會在黑板上畫畫電路講解
  • 評分方式:期中考+期末考+作業
  • 其他:老師人很好,上課偶爾會打打嘴砲,講解也算滿清楚的,碰到一些特殊的電路,老師會直接畫在黑板上講解,整體來說,我還滿喜歡老師的教學風格的。老師偶爾也會關心學生,那時候是我們電資班的系主任,所以我跟我室友整學期幾乎都坐在第一排捧場,沒怎麼蹺課,但是另外一位同學很常蹺課,主任就會常常問我們他還好嗎之類的XD 考試的話還滿簡單的,上課好好上、作業算一算、投影片看懂都會有基本分,不過因為我後來決定不往電路方向發展了,所以我也不是很確定這門課對於往類比電路發展的人有多少幫助就是。

Digital Signal Processing (數位訊號處理,Lecturer: 王聖智)

  • 修課年度:Spring Semester, 2017
  • 授課內容:Discrete-Time Signals & Systems, Sampling, Z Transform, Transform Analysis of LTI System, Structures of Discrete-Time Systems, Discrete Fourier Transform (DFT), Fast Fourier Transform (FFT)
  • 授課方式:老師用自編講義上課,使用板書講解觀念
  • 評分方式:作業*7 + 期中考 + 期末考 (都是open book)
  • 其他:雖然我這門課修得不是太好(有可能是我大學修最爛的一門...),期中期末考都炸裂,可是老師真的講很好,也讓我一些在修訊號與系統感到困惑的地方豁然開朗。我個人認為,只要看到是「王聖智」教授開的課,各位都可以放心地選下去,老師真的是品質保證XD

Intro. to Image Processing (影像處理概論,Lecturer: 莊仁輝)

  • 修課年度:Spring Semester, 2017
  • 授課內容:Image Enhancement in the Spatial/Frequency Domain, Image Restoration & Reconstruction, Color Image Processing, Wavelet & Multi-resolution Processing, Image Compression
  • 授課方式:投影片講解為主
  • 評分方式:手寫作業*10 + 程式作業*2 + 期中考 + 期末考
  • 其他:老師人很好,下課去問問題會很努力地想解釋到你聽懂,可是有時候我聽了還是沒很懂…程式作業的部分其實滿簡單的,有兩個作業,一個是做些簡單的影像處理(Intensity Transformation,助教還直接幫你弄好環境,載個Visual Studio、編譯一下就可以直接用了,剩下要做的就只是寫寫幾行簡單的Code,感恩助教讚嘆助教),另外一個是實作Fourier Transform並分析結果,程式語言印象中好像沒有限制。考試的部份,改的還滿鬆的,聽認識的學長說,老師會跟助教講不要改那麼嚴XD 這門課研究所好像也有開,考卷就會是老師親自改了,授課內容據說是差不多的,供大家參考。

Innovative Intelligent Electronics Lab (智慧電子實驗,Lecturer: 温宏斌)

  • 修課年度:Spring Semester, 2017
  • 授課內容:Arduino, Raspberry Pi, Ameba, Linkit…
  • 授課方式:實驗、小專題競賽、工作坊、簡報大賽
  • 評分方式:實驗(20%)+小專題(20%)+工作坊(20%)+組隊參加通訊大賽或創新創業激勵計畫(40%)
  • 其他:當初看上一屆的學長修這門課,玩了不少炫泡的器材、參加不少場黑克松、爆了不少肝、也弄了不少作品,這些都讓我很心動,因為我覺得能把自己的想法動手實踐出來,是件很酷的事,加上有修這門課的電資學長都有女友,所以我隔年就選了(事實證明女友的部份是我想多了)。小專題的部分,第一個是用Arduino做一個小車,跑完有各種關卡的軌道,還算有趣;第二個Raspberry Pi的小專題,則是透過網路連線,在手機上面可以看到影像並進行遠端遙控。至於原本期待的黑克松,我修的那學期老師決定改變做法:參加工作坊學習相關的開發技術,然後大家回去各自發想Idea,隔兩周之後上台做Presentation(把Demo影片也放在PPT裡面)。另外,這門課會要求學生去參加比賽(通訊大賽、創新創業激勵計畫或是其他相關競賽),期末的時候也會有一個電梯簡報大賽,每一組要輪流上台報告準備拿去參加比賽的內容,並由班上同學票選前幾名,老師會自掏腰包提供獎品,而最重要的是,可以藉由上台報告的機會,得到班上同學和老師寶貴的建議。我自己認為,如果想要讓CV看起來更豐富的話,修這門課然後實際動手做出一些成品,是個不錯的選擇。

Graduate Courses

Machine Learning (機器學習,Lecturer: 王聖智)

  • 修課年度:Spring Semester, 2017 (電子所)
  • 授課內容:Probability Distribution, Linear Regression/Classification, Neural Network, Kernel Method, Mixture Model & EM, Sampling Methods, Latent Variables, Sequential Data, Combining Models, Deep Learning
  • 授課方式:投影片搭配板書,建議跟修過的學長姊要投影片並印出來,上課可以邊聽邊作筆記(不過上課速度頗快,所以有時候我會放棄作筆記)
  • 評分方式:作業*5 + 期末考(open book) + Final Project
  • 其他:我必須說,王聖智教授是我在交大碰到最厲害的教授,沒有之一。所有的數學概念透過老師精闢的講解,都能讓人茅塞頓開。老師第一門課的時候就有列出一些建議的課程,像是Random Processes以及Detection & Estimation (或稱Statistical Signal Processing),老師建議有這部分的基礎再來修ML,會有比較好的效果(不過其實班上很多同學都沒修過這兩門課)。修了以後,才真的體會到線代真的是世界重要,「線代不學好,老大徒傷悲」真的是最佳寫照。教授的Office Hour也可以多加利用,我都會利用Office Hour去瞻仰聖智大師的風采,很多你自己要看很久才能明白的數學式,老師都能用相當精闢的解釋讓你明白箇中原由。
  • Final Project:Final Project的部分,是要利用助教提供的Dataset,做出一個類似曾經風靡一時、微軟推出的"How old do I look?"的分類器,但是我們不用像微軟一樣那麼準確地估測出實際年齡,只要按照性別(男/女)、年齡區間(Child/Young/Adult/Elder)分成八大類即可。助教提供的資料其實有imbalanced data的問題,加上資料筆數也沒有那麼多,所以可能會需要用到Data Augmentation的技巧去增加一些資料量。據說很多組別都直接用Neural Network下去硬爆,很容易發生Overfitting,可能自己在做Validation的時候有著80%~90%的正確率,但是Demo時,正確率直接腰斬到不到50%。我們這組一開始就覺得這麼少的資料用NN去Train實在是不太妥當,所以選擇用其他方法:首先,先利用dlib的face detector去抓出照片中的人臉(有時候可能因為背景太多雜訊抓不到,我們會把圖片變成原本的兩倍大再抓),Crop下來以後做Face Alignment,讓兩隻眼睛都會位在同一條水平線上;接著,我們將抓出來的人臉Resize成120*120並做Histogram Equalization,藉此移除光線的影響;最後把圖像切成12*12等分,對每個大小為10*10的區域做LBP (Local Binary Pattern,可以有效提取Texture,詳見示意圖),將每個區域的LBP Vector串起來,就是這張圖片的Feature Vector了(註:我們在Final Project中使用的是Uniform LBP,所以最後的Vector Size是(59*12*12)*1)。在得到Feature Vector以後,我們使用Nu SVM當作Classification Model,最後的準確度大約落在58%,算是還不錯的結果。如果你對於這個Project有興趣,我把Dataset放到雲端硬碟了,有興趣的可以自己試著玩玩看,不過我手上沒有助教最後的Testing Data。
Workflow of Final Project
# of Data for Each Class
Example of LBP (source: pyimagesearch) (註: 我們在Final Project中使用的是Uniform LBP,所以Histogram看起來會和這個Example不一樣)
Performance Comparison between Different Models

Computer Architecture (計算機架構,Lecturer: 單智君)

  • 修課年度:Fall Semester, 2017 (資工所)
  • 授課內容:Memory Hierarchy Design, Pipelining, Instruction-Level Parallelism, Data-Level Parallelism, Thread-Level Parallelism
  • 授課方式:投影片講解為主
  • 評分方式:期中考 + 期末考 + Paper Presentation
  • 其他:這門課一開始的內容會和計算機組織有所重疊,但是會更深入地去講解各種架構的利弊,有時也會拿一些實際的例子來討論。這門課也有很大的一部分是在討論如何去增加指令平行度(從硬體或是從Compiler的角度切入,討論如何去做Scheduling以及相關的演算法如Tomasulo),也會介紹Thread-Level Parallelism(Centralized/Distributed Shared Memory),Data-Level Parallelism的部份因為這學期進度比較慢,所以最後一堂課才快速帶過。老師的講解算清楚,而且這門課也有OCW可以參考。到了接近學期末的時候,會有大約三周的時間,讓每組(2~3人)上台報Paper(從幾個跟計算機架構有關的大Conference挑選),不需實作,只要理解Paper的內容上台報告即可,整體而言還算輕鬆寫意。期中考、期末考可以寫寫資工系提供的考古題,投資報酬率還挺高的。

Parallel Programming (平行程式設計,Lecturer: 温宏斌)

  • 修課年度:Fall Semester, 2017 (電機所)
  • 授課內容:Pthread、OpenMP、MPI、CUDA
  • 授課方式:投影片講解
  • 評分方式:作業*2 + 期中考 + Final Project
  • 其他:老師講的不錯,不過一次要連續上三個小時的課,其實真的滿累的。上完這門課以後,你對於這幾種平行化的工具都會有進一步的認識。第一堂課的時候會有程式測驗,如果沒有通過的話就不給修這門課,題目發下來的那一刻真的頗慌,想說「幹如果我沒解出來,我就不能修這門課了...」,很多人寫一寫就放棄離開了;慶幸的是,班上沒有人在三小時內寫出來,所以助教就讓我們回去寫然後補交。事後看來,題目其實還滿簡單的,因為我回去以後決定砍掉重練,後來花了兩小時就把題目解掉了。這門課會提供工作站讓大家去測試,所以不用擔心自己電腦不夠力之類的,你的電腦只要可以開個MobaXterm ssh到工作站上就夠了XD 作業有兩次,會延續之前的程式測驗(Travelling Salesman Problem, TSP),分別使用Pthread以及OpenMP去做加速;Final Project的話,則是大家各自去發想題目,內容不會去限制,老師也會提供一些Idea供大家參考;比較可惜的應該是後面CUDA沒有相對應的作業,所以就比較沒去練習了(在這邊承認我是個很懶的人QQ),其他部分都很不錯,不過老師表示這門課的課程內容需要做些調整,所以應該會停開個幾年。

Stochastic Processes (隨機過程,Lecturer: 簡鳳村)

  • 修課年度:Fall Semester, 2017 (電子所)
  • 授課內容:Joint Gaussian, Detection(MAP, ML), Estimation(ML, Least Square, MMSE, Linear MMSE), Random Sequence, Random Processes
  • 授課方式:講義搭配黑板推導
  • 評分方式:期中考*2+期末考+作業
  • 其他:學期初,老師會稍微帶過線性代數(幹,又是你)以及機率的一些基本概念,算是幫大家做點複習,讓大家可以比較快進入狀況。在複習完後,會開始更深入地去討論Joint Gaussian,上完這部分之後應該差不多就會有第一次期中考了。第二次考試的範圍大概是Detection, Estimation以及一點點Random Sequence,期末考就看老師教到哪決定考到哪了。老師講課相當仔細,速度還滿慢的,大部分的人應該都可以跟的上,但也因為講課速度較慢,所以接近學期末時,沒有辦法順利講完原本預定的最後一章"Prediction & Kalman Filtering",滿可惜的。作業的部份算是有些難度,真的要仔細思考以後、並抱抱同學大腿,才比較能順利解出題目。期中考期末考只要把作業重新複習過,搭配老師提供的考古題,應該就不會太荒腔走板。

Computer Vision (電腦視覺,Lecturer: 邱維辰)

  • 修課年度:Spring Semester, 2018 (多媒體所)
  • 授課內容:一些傳統Computer Vision的基礎 + Deep Learning
  • 授課方式:投影片講解為主
  • 評分方式:作業*4 + 期末考
  • 其他:這門是英文授課,老師口條清晰,講課講得非常好,下課問老師問題也都會很耐心地回復,偶爾投影片裡面還會有有趣的圖片(例如女JK、老師自己的照片)。這門課一開始會從傳統的Computer Vision講起,後半部則會開始講一些Deep Learning的東西,整學期的內容包括Camera Model (一些成像的Geometry關係), Filters, Frequency, Edges, Interesting Points(SIFT就是在這一章提到的), Fitting Alignment, Stereo, Optical Flow, Machine Learning, Recognition, CNN, 以及最後一章Deep Learning(介紹各種模型如GAN/VAE)。作業的話只有四次,第一次作業是做簡單的Filtering以及Image Pyramid,第二次是用RANSAC演算法實作Image Stitching,第三次是Structure from Motion,第四次是用Bag of SIFT來完成Image Classification。程式語言不限,不過我想大部分的人應該都是用Python或Matlab吧,我會先把老師的講義看懂了以後才開始動手寫,通常不會花太多時間。這門課最可惜的部份,應該是沒有Final Project以及最後在講Deep Learning的時候,沒有相對應的作業以及工作站資源可供實作,其他部份我都覺得很不錯。如果你擔心上課講太快,有些地方聽不太懂,Udacity上面也有一門Computer Vision (課程講義連結),也可以參考看看。

Computational Intelligence & Application (計算型智慧與應用,Lecturer: 王才沛)

  • 修課年度:Spring Semester, 2018 (資工所)
  • 授課內容:Neural Network, Evolutionary Algorithm, Swarm Intelligence, Fuzzy Sustems
  • 授課方式:投影片講解
  • 評分方式:程式作業*3 (上面提到的4個Topic都會各出一個作業,4選3並挑其中一個口頭報告)+ Paper Presentation
  • 其他:這算是一門頗輕鬆的課,老師主要就是帶過上面提到的四個Topic的核心概念,讓你對這些領域有些基本的認識。我覺得這門課的程式作業還滿有趣的,老師會提供一些Data,讓你去實作;第一個作業有修過ML的大概都做過:手刻NN Classifier (很推薦這個網站,看完以後數學推導對你而言不再是問題);第二個作業是利用Evolutionary Algorithm去實作Clustering;第三個作業是模擬Ant Colony Algorithm;第四個作業我沒有寫,所以也不太清楚實際內容是什麼。程式作業沒有限定語言,肥宅如我當然是用我比較熟悉的Python來寫;必須承認,這門課我沒有花很多心力,最後也能賽到一個A,碩班的課給分比較甜真的不是都市傳說。

Self-Driving Cars (自主駕駛車技術,Lecturer: 王傑智)

  • 修課年度:Spring Semester, 2018 (電控所)
  • 授課內容:自動駕駛相關的課題,學期初主要是在講Sensor,後半學期會講一些Mobile Robotics的相關內容
  • 授課方式:投影片講解
  • 評分方式:作業*5 + 期中考 + Final Project
  • 其他:老師之前是在水果公司做Self-Driving,後來回來台灣,目前有在帶領工研院的團隊做自駕。在課堂中,老師會分享自己在矽谷的所見所聞以及老師對於Self-Driving產業的看法。講課部分,老師口頭表達能力還不錯,前半學期主要在講Sensor,因為老師認為了解Sensor的特性對於未來處理實際Data會有幫助;但是到了後半學期,因為老師想教的東西很多,所以很多章節都只有很快地帶過High-Level的概念,細節的推導,可能要自己看"Probabilistic Robotics"這本書。Final Project的話,老師在學期剩下一個月左右時要求每組提出Proposal,確定方向後,每周上課都要報告進度。我跟我組員一開始想說做點輕鬆的就好,就提了一個滿鳥的題目,結果老師一聽之後就馬上打槍了(想混水摸魚被抓到XD)。上完了這門課,對於Self-Driving這產業的確多了些了解,但比較可惜的部分應該是到了後半學期,有些內容(如各種Filters)沒有相對應的作業可以做練習,光是看完數學推導,我覺得還是不足以理解在實務面上要如何運用。

Suggestions

  • 上課不敢問問題沒關係,可以多去Office hour問教授。
  • 工程數學好好學,不管是線代、機率還是什麼的,那種課程之所以會是必修,都是有原因的,盡量不要蹺課,好好認真學,之後碰到更進階的科目會有更好的底子。
  • 修課之餘,可以多去和班上的大神請益,聽他們的想法,並試著接觸各個領域,透過實作來知道這些領域是否適合自己。
  • 善用CourseraUdacityedX去修一些自己有興趣的課(學校開課選擇有限,可是上這些網站看看,相信我,你會發現新世界)。
  • 多看Quora或是Medium,上面有很多專業的討論與文章。
  • 永遠抱持著一顆謙虛的心。

Summary

以上就是我在交大修的課,這四年應該也勉強算是有學到一些東西啦,希望這些心得可以幫助到未來的學弟妹,讓你們稍微了解到這些課到底在學些什麼,如果有什麼問題,也可以寄信給我,大guy4這樣,謝謝耐心看到這邊的你/妳!

--

--

Bruce I-Le Wu
Bruce I-Le Wu

Written by Bruce I-Le Wu

Senior Computer Vision Engineer @ NVIDIA | NCTU & U-Michigan Alumni | List of Articles on Medium: https://pse.is/ilewu | bruceilewu@gmail.com

Responses (3)