July 6, 2017

[CS50] Week 0 Scratch - 課程筆記與作業

*此課程筆記是依據 CS50x 2017 版本(也就是哈佛大學 2016 秋季班的 CS50)所寫。

可能有些人不清楚如何在線上註冊 CS50,所以我大概講解帶過。

在 edX 上註冊帳號之後,還要到 Introduction Computer Science Harvardx CS50x 課程頁面上註冊加入課程,目前最新的課程內容是 CS50x 2017。課程本身是免費的,如果希望在修完課程後可以拿到證書,才要繳交費用。

稍微看一下他們的 FAQs,裡面有說到你一開始上課的時候不需要決定要不要拿證書,可以在完成所有作業及課程後才申請。所有作業都要 70% 以上才可以申請到證書。但是你可以繳交很多次作業,他們只會記錄你最後交的作業成績。

我猜測 CS50x 是指放在 edX 的課程,而 CS50 是指哈佛的課程,其實兩個是一樣的,只是時間上會有半年的差異,通常他們只錄製秋季班的課程(春季班應該也會有 CS50 但是沒有錄製),然後在隔年才放到 edX 上,因為影片需要時間剪接上字幕,還有一些其他的教學材料的準備,所以才會有半年的時間差。

註冊完課程之後,在 Dashboard 裡會看到這個畫面,點進去就可以進入課程。


進入課程後的畫面大概是這樣:


點進每一週的連結就可以看到課程內容、課程筆記、上課的投影片等等:

如果要交作業,就要點進 Problem Set 0,裡面有作業要求以及如何繳交作業。依照上面的步驟繳交,還需要允許 CS50.me 連到自己的 GitHub 帳號,CS50.me 是他們的評分系統。(補充:近期 CS50 有改版,今天 (Aug/1st/2017) 到 Problem Set 0 看,繳交作業的程序已經跟我下面的截圖不同)

本來以為如果要改作業需要收費,但我交完 Problem Set 0 之後並沒有收到收費要求,兩個星期後才會知道我的作業的成績。在 FAQs 裡面有提到,如果一直看不到自己的作業成績,可能是 CS50.me 裡面沒有跟 edX 的帳號連結在一起,所以要記得設定一下才可以看到自己的作業成績。

所有課程內容也都可以在 CS50.tv 看到,包含歷年的課程內容(右上角可選擇不同年份),有老師上課的影音檔、英文字幕檔、投影片、課程筆記等等。

以上就是一些基本的註冊、交作業流程跟頁面講解。

--
聽 David J. Malan上課有一種在聽演講的感覺,他上課非常有熱情然後上得滿頭大汗,與台下的學生也互動良好,攝影跟剪接更是沒話說,專業等級的攝影跟剪接技術,edX 上的影片播放器還可以選不同模式觀看。不過 Malan 教授的語速蠻快的,對於英文非母語的人來說可能會聽起來吃力一點,影片都有英文字幕,聽不懂可以開啟字幕,如果需要的話也可以調慢影片速度。

其實他們本來就有超詳細的課程筆記了(第零週筆記),覺得我好像也不是很需要寫筆記 XD
不過每個人寫的筆記內容一定都不一樣,而我認為的重點對別人來說可能不是重點,反之亦然。加上原本課程內容以英文為主,對英文苦手來說可能有難度,所以就大概寫一下重點,幫助有需要的人了解課程,也加深自己的印象。

第零週的課程內容幾乎在胡立老師的 初心者的計概與 coding 火球術 都有上過,胡立老師也說過他當時會開那門課是受到 CS50 的啟發,所以第零週應該是 CS50 中唯一一堂我可以輕鬆愉快上完的課 XD

說了很多廢話,以下是我自己的筆記整理:

1. 上 CS50 這門課最重要的是跟自己比賽。
課程開始不久,Malan 教授講了這段話:

「在這個課程的最後,最重要的不是你與其他同學的差異,而是你在 Week 0 跟 Week 11 之間的差異。」(翻譯可能不精準還請見諒)

上課的最終目的不是要比其他人厲害,而是要讓自己在課程結束的時候有收穫,自己進步才是最終的目的。應該是 Malan 教授想讓哈佛學生知道競爭並不是上這堂課的目的,畢竟哈佛裡有那麼多厲害的學生,總是要爭取第一名實在太累了。我覺得這對在網路上獨自修課的我而言也是重要的動力,希望自己能堅持下去,在課程結束的時候能感受到收穫的喜悅。

2. 解決問題 (problem solving) 才是學習 CS50 的重點。
假設遇到的問題是 inputs,解決問題的答案是 outputs,那麼在中間的黑色盒子通常是用來解決問題的演算法 (algorithms),也是 CS50 要探索跟學習的重點。


3. 二進位 (binary)。
演算法雖然是重點,但還是需要了解電腦是如何儲存跟表示資料。

電腦只能理解 0 跟 1,也就是二進位;而人類通常是使用 0 到 9 的十進位。電腦用來儲存一個單位的 0 或 1 稱為一個 bit,而八個 bits 稱為一個 byte。

4. ASCII 和 RGB。
電腦除了可以表示數字之外,還可以表示英文字母和顏色。除了把電腦拿來當計算機用之外,人們在 1960 年代左右開始使用 ASCII 編碼系統,讓電腦利用數字來儲存字母。

不過 ASCII 是以英文為主的編碼系統,對其他語言不友善,所以現在大多使用可以顯示更多字母的 Unicode 編碼系統。

除了數字跟字母之外,電腦也能顯示顏色,RGB (red, green, blue) 是電腦顯示顏色的系統,利用三個數字代表不同程度的紅色、綠色、藍色,進而合成一個顏色。

RGB 的三個數字在電腦上通常是 24 bits 的大小(一個數字的大小是 8 bits,因為是 2 的 8 次方,所以總數是 256。由 0 到 255 代表那個顏色的紅色、綠色、藍色含量)。如果很靠近電腦螢幕,可以看到很小的點,也叫做像素 (pixel),每個像素都是由 RGB 構成,像素集合在一起就變成螢幕上看到的文字或圖片。

5. 演算法的日常應用。
了解電腦如何儲存跟表示資訊之後,Malan 教授用一個非常有趣的例子來示範演算法在日常的應用。演算法簡單來說就是用來解決問題的一串指令。

1) 在這麼大的課堂上,要解決的其中一個問題就是如何計算有幾個學生出席。最基本的方法當然是一個、一個算,但很花時間。兩個、兩個算可以減少一半時間,但還是要花不少時間。 Malan 教授用了這個方法:

0 他要課堂裡的所有學生站起來,並把自己想成數字 1。
1 跟旁邊也站著的學生組成一組,然後把兩個人的數字相加。
2 其中一個人坐下。如果你是站著的那個人,回到步驟 1。

如果此方法沒有出現 bug,最後站著的那個學生的數字應該就是課堂學生的總數。(不過課堂上出現了 bug  XDD)

他讓學生幫他計算課堂裡的學生總數,而不是他自己慢慢數,就好像電腦裡有很多 CPUs,可以同時處理許多資料,每個學生的大腦都是課堂上的 CPUs。每當一半的學生坐下時,就減掉一半的資料量,跟自己慢慢數相比之下是非常有效率的方法,也是非常有趣的方法。

2) 除了剛才利用學生的大腦當作 CPUs 資源來加快處理問題外,Malan 教授示範另外一個只有他自己,也同樣可以快速將資訊量減半的演算法。示範的例子是在電話簿上找 Mike Smith,這就是他這個課程蠻有名的撕電話簿例子 XD

比起慢慢的從頭開始一頁一頁的找 Mike Smith,利用不斷的將電話簿切分成一半,把資訊量減半來解決問題會加快許多。所以把所有步驟都寫下來就變成這樣:

步驟裡的動作 (actions) 其實就像是函式 (functions):

步驟裡的條件 (conditions) 是下決定的決策點 (decision points):

步驟裡的布林表式 (Boolean expression) 的答案(布林表式只會有 True 或 False 兩種答案),則是用來幫助條件 (conditions) 做出判斷:

步驟裡面的「回到步驟 2」,則是迴圈 (loop) 的概念:


6. 分析演算法的效率。
在剛才的電話簿例子中,可以從頭開始一頁一頁的找 Mike Smith、兩頁兩頁的找,或是用剛才的演算法不斷的把電話簿切分一半。

這三個演算法之間的效率差距,當問題的資訊量不大時或許不會感覺到太大的不同,但當資訊量巨大時,就可以看出之間的差距。Malan 教授說 CS50 就是要教如何寫出正確又有效率的演算法。

課程後半段是講解 Scratch,我就沒有再寫筆記了。

--
因為之前上胡立老師的 初心者的計概與 coding 火球術 最後作業就是要用 Scratch 寫小遊戲,所以我就用之前的作業交這次的 Problem Set 0。如果對我的 Scratch 小遊戲有興趣可以看我之前寫的:用Scratch做小遊戲 - Little Tank 2,或是直接連接到 Scratch 上的 Little Tank 2

之所以是 Little Tank 2 是因為在那之前有個比較陽春的版本:用 Scratch 做小遊戲 - Little Tank 1,Scratch 上的 Little Tank 1

我的作業僅供參考,如果你也要交 CS50x 的作業,千萬不要拿我的作業繳交,他們會發現的 XD 作業還是要自己做過才有學習效果。

--
補充:我的 Scratch 作業不到兩個星期就看到成績了。

登入 CS50.me 之後,點進 View Gradebook 裡面:

然後就看到成績了~


以上就是有點囉嗦的第零週課程筆記與作業,如果有錯還請指正。


No comments:

Post a Comment