close

終於寫到最後一個學期的修課心得了,還沒看過前兩個學期心得的朋友,請看:第一學期心得第二學期心得

可能是因為已經上當兩個學期了,第三個學期在選課上也更為謹慎,基本上是參考網路上其他人分享的高評價課程去選的。所以這一篇不會像前兩篇一樣有很多激烈的批評點,單會以個人心得分析各課程的優點和缺點。

18741 - Computer Networks

個人在台灣的學校上過類似內容的課程,覺得其實沒有差很多,甚至很多範例插圖跟當初在台灣上課的時候看到的一模一樣(人物永遠叫Alice和Bob)。而計算機網路這門課,不管到哪個國家上,永遠都會有很多記憶的東西,其實某種程度看來不太像EECS領域的課程。

不知道是不是因為這堂課的老師是印度人,對於上課講解的東西很難吸收理解,多數時候是自己閱讀投影片學習的。不過這堂課的優點是每兩三個禮拜會有一個對課程內容的小考,是一個逼迫自己定期複習的好機會。小考的考點滿細的,很多時候解題的關鍵會藏在投影片的角落或是要靠上課影片的一句話推敲出來。

相較之下這堂課的期中考跟期末考個人覺得友善許多,雖然110分鐘要填約80個空格,但很多觀念小考都有出現過而且很多選擇題跟題組,相較於其他CMU的課,這堂幾乎不會有惡意考題。所以至少個人在這堂課沒有發生過考試寫不完,分數基本上也很靠近平均加一個標準差。

然而評分方式很特別,似乎是採雙制度取高的方式,例如總平均90分以上或是總平均大於班平均加一個標準差者,得A。但是後來因為平均一直沒有到90而且不知道班平均和標準差,最後pass/fail這堂課結束最後一學期。

最後是三次作業,第一次要用MATLAB實作Wifi Physical Layer的處理,個人不太會也很討厭用MATLAB,基本上是Google各種function和library的用法才寫完的。寫完之後也很難理解這對自己的未來有什麼幫助。

第二次是寫一個node間透過訊息傳遞讓每個node了解整個網路架構並計算node間的metric,可以用Java或C/C++寫,但是通過觀察starter code,發現C/C++的socket library沒有Java的那麼友善(大概是Java code三倍的行數),個人鼓勵用Java寫。但因為一個node相當於在一台機器上執行自己的程式,測試上很麻煩而且不會有sample I/O;加上助教也都是手動測試,所以最後這個作業出來的平均非常低,而且基本上很多東西也不知道為什麼會被扣分。

第三個是寫一個server處理HTTP request,同樣也鼓勵用Java寫。作業本身沒有太大的難度,就是要處理很多case。個人建議可以拿來練習software system design跟design pattern。

10601 - Machine Learning

上完之後對於常見的machine learning model會有初步的理解,也被強制複習了大學的機率跟一些線性代數。對於沒有Machine Learning基礎但是有興趣了解的人來說幫助很大,不過如果對於特定的Machine Learning Model想要有更深入的了解,就需要去ML(SCS底下一個系)去修更進階的課程。

因為是有一定年份的課程,給分上不太會有什麼爭議,所有的cutoff都是一開始就給定的,也會依照全班的表現用他們的神奇公式調分,這學期最後每個人基本上會被加上4分左右,但因為每學期考試難度不同,所以不好說,只知道調分量只會隨學期時間遞增或持平,不會有把先前調分量收回的情況。

作業的部分基本上都是手寫占40,programming占60(不太一定,這個數據是平均來說,越到後期手寫占比會越來越高),programming採online judge,部分作業會限制繳交次數上限10~30次,但是因為基本上都不難,只要推導出正確的公式在刻上去就會對了。個人沒有在一個作業用超過5次的submission。programming language可以選擇C++、Java、Python,好像也可以使用規定的一些線性代數library,不過我很懶得去學那些library怎麼用,用一些基本的array再自己刻內積、矩陣乘法的function還是可以完成作業。另外,programming的部分基本上都是手刻Machine Learning的演算法,所以不會有用framework的作業,想要培養使用framework的經驗的讀者,選課前可以仔細考慮。手寫的部分比較刁鑽,很多上課沒有明講需要自己思考的問題,建議找認識的一起修,討論起來比較方便。

考試的題目大部分都和作業或是模擬考相似,掌握考試範圍的重點基本上不會考差。但是有的時候會出現很惡意的題目,比方說有一題是想考normalization,但是他硬要出成哈利波特調魔藥這種東西,對於非英文母語人士來說,閱讀題目的時間會大增,而且看完還是不會寫。也就導致調分量從那次考試之後飆升的情況。

補充:雖然其中一個上課老師(M開頭)長的很像會在辦公室提供學生special credit,但其實是一個被當老師耽誤的奧斯卡潛力演員,曾經在課堂上朗讀小說、演機器人、打電動。雖然號稱跟課程內容有關,但我覺得只是他很想當演員但是沒有機會。小孩很可愛,希望不會被強迫在國小就學線性代數跟機率。

17637 - Web Application Development

很實用而且沒有對我造成什麼困擾的一堂課。使用Django架構開發後端,對於我這種網頁開發新手來說很友善的設計,個人覺得即使沒有學過網頁設計,只要會寫Python,很快就可以上手。不過前段的部分因為HTML/CSS/JavaScript在課程的著墨比較少,就需要靠自己多多練習了。

不過實用的部分可能只有課堂的example code,對於作業或是project都有很好的啟發。課堂時間在做什麼我已經不太記得了,只記得基本上都在揶揄校長(Farnam Jahanian),一個年薪70萬美金(底薪,不含獎金)的男人。發生過的事情例如在看image file的格式發現校長的照片是2015年拍的,老師馬上說難怪看起來這麼年輕。另外還有一個示範response的網頁,出現了What does Farnam need? He needs vaccine. Sorry Farnam. we're out of vaccine. 之類的句子(課程發生在2021 Spring疫苗施打初期)。不過校長本人也在畢業典禮上親口說他都知道常常會有人在課堂或是作業開他玩笑,他很高興自己可以替大家帶來歡樂。這可能也是校長工作的一部份了吧。

作業的部分基本上是圍繞著課程主題,所以沒什麼好說的。也沒有發生deadline內寫不完的情況,但是看到課堂常常發生明明已經出到作業6但有人作業4還沒交的情況,自己覺得有點意外。(作業1~3是一個主題,作業4~7是一個主題,同一個主題內的作業都是以前一個作業為基礎繼續發展,所以作業千萬不能拖)。好像只要在deadline後四天內交都不算遲交,不過累積的遲交天數會影響到選project demo時段的priority。(不過project是2~4人一組,所以其實只要找一個作業從沒有遲交過的人一組,還是可以優先選demo時間)

project的話不意外是自由發揮,沒有既定的評分標準,大概只有不能和作業主題一樣。所以為了感謝我的讀者,我來透露一點潛規則。前端的部分基本上有做、合理就好,做的太花俏他們也只會說你們前端做的很好看。功能部分,我覺得創意占了很大的比重,另外就是實作的時候用到的technology,用越多課堂沒教過的東西分數會越高。這很病態我知道,但是我們這組用ajax刻了一個聊天室,但是best project awards裡面的組別有人用Google Map API再拿作業的code來改,就best project awards了。另外就是security的部分,demo的時候會有一個TA負責對你的網站做一些ㄧ般的使用者不會做的事,例如拿空的購物車去結帳或是拿無效的email去註冊帳號,個人遇到一個比較經典的例子就是他會用browser inspector改一些form的內容,像我有一些form忘記在後端做validation,就讓他把購物網站商品的價錢改成負的了。簡單的說,要拿到高分,只要掌握創意、花俏的功能和package、security就可以了。至於best project awards是什麼呢,就是可以在最後一堂課跟全班展示你的作品,然後會有一個獎品(CMU白底紅字馬克杯)

簡單的說這堂課真的很實用,我也在demo的時候親口跟老師表示這是我在CMU上的九堂課裡面最有幫助、最實用的。主要是重新整理一下瀏覽器可以馬上看到做出來的成果,成就感會很高。而且很多創業都是從這種網頁設計開始的。所以如果有閒暇的credit,很鼓勵大家去上。

 

後記:這篇文相較於前兩篇,沒有提供附件展示我跟course staff吵架的drama point,所以打算做個CMU ECE到底值不值得的討論,不過因為我現在還沒確定畢業後的下一步,可能等到日後塵埃落定會再對這個主題做一個深入討論。以上,感謝大家收看。

arrow
arrow

    N.Hu 發表在 痞客邦 留言(0) 人氣()