CS50課後心得

yu
Sep 2, 2023

--

強烈推薦給所有非本科背景轉職者,必修這門課

圖片來自CS50官方臉書banner

為什麼選擇自修CS50?

其實早在轉職前就看到不少大大們的心得都會提到CS50,更不要說Huli大大也有線上課程專門在帶你念CS50,所以這門課早就在我的清單內,只是一直沒有去點開他…

轉職後,我在和後端同事的協作中,常聽到對方講二進位或是電腦術語,我常常一頭霧水,不知道對方在說什麼,或者討論到最後才發現我們講的是同一件事。雖然專案能夠順利進行,但為了不讓自己看起來那麼菜(外行)..我覺得還是得花時間去補一些基本觀念,於是在今年六月時,重啟了CS50的學習,希望能增進與同事之間的有效溝通。

需要多少時間

在選擇投入大量時間前,我會先評估:我能從這個過程中獲得什麼?需要多少時間來達成?基於我的個人狀況,下班後每天可用的時間約三小時,然而,CS50的每一堂課經常從兩小時起,因此我採用每週為單位來規劃我的學習進度。舉例來說,我會設定一週內完成一個章節以及相對應的作業。

所以,從開始學習CS50到完成整個課程,總共花了我約三個月的時間。

課程內容

每年課程內容都略有不同,我是學習2023版本的CS50,底下是各週的主題:

課後心得

其實在每堂課都會有所感觸,如果要真的列舉的話大概就是以下幾點:

  1. 深入淺出的學習:David的教學方式將一些艱澀的觀念講得非常好理解,蠻適合培訓班結業後或者入行後回來學習,有基本概念的前提下再搭配生動地講解,可以重新組織自己的學習拼圖,讓自己計算機科學概念更加完整。
  2. 低階語言的運作方式:前幾週都是用C語言來寫code,從最基本的型別定義、字串比較、指標、釋放記憶體,以上都要自己手動管理甚至另外引入library才有這個功能,相較之下真心覺得JavaScript這種高階語言方便到不行,可以讓開發者專注在邏輯上,不需要去理會電腦運行原理,但也有可能是因為我現在是網頁開發,使用目的不同,才會這麼認為。
  3. 重構再重構:每次新觀念的引入都會伴隨著先前課程案例的程式碼重構。透過手把手的教學方法讓你明白為何這樣改進是必要的,也解釋了為何這種改變是可行的,幫你建立重構的基本概念。
  4. 記憶體與傳值傳址:在學習JavaScript的過程中,「傳值」與「傳址」這兩個概念經常會讓人摸不著頭腦,甚至陷入一些困惑。但在CS50裡,這些觀念得到了很多的強調和解釋。特別是當我們用C語言去操作指標和管理記憶體的時候,這些概念就變得非常直觀。學習了這個部分後,對於JavaScript中相對模糊的傳值和傳址有了更清晰的理解,也更能預測和解決相關的問題。
  5. 演算法:課程中也帶到常見的演算法,如線性搜尋(Linear Search)、二分搜尋(Binary Search)、排序(Sorting)和遞迴(Recursion)。David巧妙地使用同一個案例 ,David使用同樣案例但不同演算法去解釋運行時間(Running Time)差異,他還提及到了演算法,Omega( Ω )時間函式的下限(Lower bound), Theta( θ ):演算法時間函式的上限與下限。
  6. 資料結構:常見的Queuq和Stacks就不多說了,之前一直搞不太懂的Linked Lists、tree、Hashing and Hash Tables終於弄懂了,如果你像我一樣看了好多次資料結構,但又有點迷迷糊糊的,強烈推薦來上這堂課,之前的困惑一掃而空。

--

--

yu

設計本科背景,前3D Lighting Artist,現為Web前端工程師。