Harvard CS50 學習筆記(0):進入Computer Science世界的優質免費課程介紹
本文的產生是想讓同樣也想窺探Computer Science世界的讀者們,可以在加入Harvard CS50之前對這個課程有基本的認識,雖然筆者目前也還沒完成這個課程,但在被同事推坑這個課程,也實際開始學習之後,覺得這個課程真的太太太值得上了!不僅讓筆者釐清多年來都無法搞懂的CS觀念,也像發現新大陸一樣了解到原來Computer Science可以用這麼有趣的方式教學,也在講師手把手的觀念及程式說明下再次體會寫程式的樂趣!
CS50的全名是Introduction to Computer Science,是哈佛大學每年都會開設的有關於Computer Science的通識課程。此課程希望可以讓學生可以培養對於演算法的思考方式以及如何有效地解決問題,並且標榜即使沒有寫程式的經驗,也可以加入這堂課程(甚至提到其實這堂課2/3的學生都是沒有接觸過Computer Science的人)。
筆者目前上的是2023年的CS50 https://cs50.harvard.edu/x/2023/
CS50廣受大家歡迎的原因是它有非常完善的課程機制及討論版,包含各種社群軟體的帳號,像是Facebook, Instagram, Twitter, LinkedIn, Reddit, TikTok(沒錯連TikTok都有XD)等,或是寫程式時最需要使用到的GitHub,可以說你想的到的都應有盡有,非常貼心!
在課程方面,則是在10+1週的課程中都設定一個主題(會在稍後的版面提到),提供以下教材,可參考下圖:
當週上課影片(含多種播放器形式和影片逐字稿,你沒看錯,真的是逐字稿XD)
當週課程簡報
當週課程Source Code(講師David J. Malan在課程中示範的範例程式碼)
與當週課程主題相關的較細節的CS背景知識影片
類似於助教課程的教學影片
Lab, Problem Set, Practice Problems 程式練習及作業
在官方課程頁面中,Lecture對應到上述的1~3點,Shorts對應到第4點,Section對應到第5點;第6點提到的Lab, Problem Set, Practice Problems三種程式練習和作業,是有申請edX課程帳號的學生才需要繳交的(因為註冊過程非常簡單,在CS50官方課程頁面也有詳細介紹,這邊就不多贅述),也就是說如果只是想稍微了解Computer Science的人,CS50也提供完全免費影片觀看;而有申請課程帳號,並且希望拿到課程證書的學生,需要繳交Lab及Problem Set,並上傳至CS50的作業區,Practice Problems則是提供學生額外練習的機會,可以自由選擇要不要練習。
在上傳作業之前官方也提供了check50
幫助學生可以在上傳作業之前測試自己的程式是否有問題,以及提供style50
建議學生可以如何更好的將自己寫的程式排版,並且在這一切完成之後透過submit50
上傳作業,上傳之後則有自動打分數的機制。筆者目前嘗試下來如果在check50
沒有遇到問題反饋,上傳之後都會得到滿分的作業分數。不得不說在作業練習方面CS50真的做得非常完善,在作業的問題描述上也都相當清楚,甚至在文字說明以外也有影片進行更深入的題目解說,有一些引導的提示讓學生可以根據提示完成作業,同時享受思考的樂趣!
讀到這邊讀者們可能會開始思考:「既然要交作業,是不是需要在自己的電腦上安裝環境呢?」答案是:「不需要!」
如同筆者前面說的一樣,CS50非常貼心,理解初學者在各種程式環境安裝的過程中可能會遇到的困難,為了避免在開始寫程式之前就受到這些安裝的技術障礙,CS50提供了由GitHub所開發的codespaces功能,只要有瀏覽器及GitHub帳號就能寫程式,不需要擔心環境設定和套件安裝等等的問題,且所提供的IDE是非常受到廣泛使用的Visual Studio Code,在介面的使用體驗上相當友善;而在上一段內容所提到的check50
, style50
, submit50
也都可以直接在下方的終端機介面執行。
不過筆者在發現CS50提供的程式環境時也同時思考,是否該直接使用這個環境,因為在課堂以外並不會有現成的環境可以使用,如何建立一個寫程式的環境在Computer Science中也是非常基礎的能力。
在這樣的考量下,筆者最後決定在進行作業撰寫時,因為有check50
, style50
, submit50
的使用需求,會在codespaces的環境撰寫;而在課程中講師所示範的範例等練習則是在自己電腦所建立的環境撰寫,另外也會一併的將繳交的作業在自己的環境執行一遍。在這邊將筆者自己的執行方式提供給讀者們,希望讀者們也都能找到最適合自己的學習方式!
經過上述的介紹,讀者們應該可以初步了解CS50是如何提供完善的資源,使世界各地的學生們即使沒有到現場上課,也能接受到很完整的課程內容,並且全部免費!
這邊也再花一點篇幅列出各週的課程主題:
Week 0: Scratch
Week 1: C
Week 2: Arrays
Week 3: Algorithms
Week 4: Memory
Week 5: Data Structures
Week 6: Python
Week 7: SQL
Week 8: HTML, CSS, JavaScripts
Week 9: Flask
Week 10: Emoji
以上總共列出了0~10週的課程主題,這裡也就是呼應到前面筆者說有10+1週的課程。在第0週講師是以MIT麻省理工學院所開發的Scratch進行小遊戲開發演示,在一步一步寫出小遊戲的過程中導入包含演算法的概念、函式的概念以及迴圈的概念等等,讓學生能透過有趣的方式了解Computer Science的基礎,並用最簡單且直觀的方式(Scratch)表現這些概念;而第1~10週則是進入有非常明確的課程主題教學,因為課程是叫作Introduction to Computer Science,自然不會講得非常深入,但筆者認為若是以初學者的角度學習,這堂課可以幫助學生打好非常穩固的Computer Science基礎。
在文章的最後,筆者也要大推授課講師David J. Malan,是整個CS50的靈魂人物,用非常生動且清楚的方式詮釋Computer Science的世界,講師在授課過程中的熱情讓學生(筆者本人XD)更受到啟發,在完成一週的課程之後又想繼續完成下一週的課程,希望閱讀到這邊的讀者也能透過本文的介紹,也有想開始學習的衝動,後續筆者也會持續分享每個主題的學習筆記,那就事不宜遲趕快跟著筆者一起進入Computer Science的世界吧!