上一堂有趣的電腦課:哈佛大學的免費線上課程 Computer Science (CS50)

Summer Chang
6 min readAug 23, 2018

--

我是一個 PM ,大學沒有修過計算機概論的那一種。
程度大概是讀過幾本書、一些些影片,自學 HTML/CSS 這樣子的。因為希望可以更有效率和工程師溝通、更快回應需求方的提問,因此想補充相關知識,在這樣的背景下來學這堂課。

這是一堂基礎的課程(但當然不是很簡單的意思),核心概念不是教會你寫哪一種語言,而是給你程式跟電腦硬體之間的關聯,資料如何被儲存、讀取、運算等等的基礎概念。

真的要說的話,前半部會用的語言是 C ,但是講觀念的時候遠多於怎樣寫,作業也是偏向訓練思考的邏輯,所以基本上用的語言對自己來說實不實用不在討論範圍內,這堂課學的是從事網路相關產業的人該有的思維邏輯和基礎知識。

影片剪輯做得很好,還有字幕

綜合前幾堂課的作業和課程內容來說:
電腦是二進位的、用 0 和 1 來儲存資料大家可能都知道,但 0 和 1 當然不是直接用文字刻在那塊硬碟上,要怎樣能記憶資料、又能夠被覆寫?為何有人說硬碟不能摔?這可能是一般人沒想過的問題。

我覺得其中最有趣的部分是課堂的舉例和作業:
舉例來說,在以「演算法」為核心的課程裡,舉的例子是排序。

假如班上有 7 位同學,今天作業要依照分數由高至低排序,用口語的文字來說,你要怎樣做?

人類的可能做法是把所有的作業分成兩堆,一邊是還沒看過的,一邊是排好順序的,分數假如是 86、60、73、92、98、70、81 :

先比較最前面的兩個數(86、60),高的 86 放上面,低的 60 放下面,放進有順序的一堆裡;接著拿出第三個數字 73 ,小於 86、大於 60 ,因此排進中間;第四個 92 ,大於 86 ,因此取代它排在最上面……. 直到排完所有數字。

聽起來很合理、很迅速,但假如今天你要排序的位置,是一張成績登記表從高到低必須紙本手寫上去時,問題就來了。當「第一名的分數」在比較的過程中被更新了,你就必須把後面所有分數都往後移一個位置,擦掉再寫就會很辛苦。對記憶體來說就是如此。這種作法叫做 Insertion sort 。
而除此之外當然還有非常多作法(例如兩兩比較交換位置的 Bubble sort、分成兩半排序再合併的 Merge sort),每種作法需要的步驟當然不一樣多,最後回歸到哪種做法會使用到較少的步驟,也就是對程式來說有比較高的效能。類似的問題還有:

如果要在電話簿裡找一個人名,你要怎樣最快找到?

甚至 week 1 continued 的課程作業裡你就會被要求寫簡單的加密,作業連結在這,條件是跟使用者要原字串、接著符號不變動、大小寫不變動,剩餘的字依照使用者輸入的數字將字母往前推移(如果推移數字是 2 ,A 就變成 C 這樣),最後打印在螢幕上。

或是做一個找零錢的算法,客人的大鈔買小東西,你要怎樣總是給客人找出最少的零錢數?

內容的有趣之處大概就講到這邊,剩下就講 CS50 給的完整資源和免費課程哪裡看吧。

— — — — — — — — — — — — —

推薦的課程觀看處: edX 線上平台 ,最新版是 2018 (介紹影片在這)

課程一共有 11 週,像前面提到的有些課程會分成兩段長度講(才會有 week1 continued 這種項目出現) ,作業也都有小講解(Walkthrough)。唯一的缺點是英文課程(但我覺得不算是真的非常艱澀難懂,畢竟程式碼寫出來也是英文,習慣一下也是還可接受)

也有中文社團在討論:CS50 中文討論區
官方有英文社團:
CS50

如果真的很需要看中文翻譯版,可以到網路上蒐會有中文字幕的版本,只是就會比較舊這樣~

— — — — — — — — — — — — —

必須要大推的是他們提供寫作業的環境(用 edX 帳號可以直接登入使用)

這是我寫加密那一題啦,希望不要有寫錯被抓包糗糗

有資料夾,可以直接用下方的終端機去操作(也可以直接點),中間是編輯程式碼區,右側可以收合,是抓蟲用的。

我認為課程很貼心的部分是:分成 less comfortable 跟 more comfortable 兩種資源。例如有個 reference 網站,裡面介紹各種已經寫好的指令該怎樣用,解說部分的頁面右上角會有一個按鈕可以按,如果你比較不擅長、剛接觸,可以點 那個 less comfortable 的按鈕,解說會友善很多!是克服恐懼的良方。

右邊是 less comfortable 被勾起來的狀態(範例是 isalpha 這個指令)

作業也有分 less comfortable 跟 more comfortable 兩種程度,可以寫完 less 再挑戰進階,就不會覺得很有挫折感!

其他相關工具也都是完整到不行,大學教授都沒這麼認真:

help50:給你寫不出來時的提示。
check50 :幫你檢查作業,看有沒有通過作業要求。
style50:幫你檢查你寫程式有沒有縮排、有沒有寫漂亮的功能。

當然幫 debug 的方式也有很多種,課裡都有說明(而且他課程示範經常犯錯,人肉示範各種 debug 不過就是日常)。

而且老師非常會講課,不是從大神的角度教你,而是真的講基礎,讓人思考理解,總之很推啦,我在中文討論區裡找人一起開了讀書會(而且讀書會裡的成員都是工程師,寫了幾年程式再回頭捕基礎的),討論、一起寫作業覺得很有效,我們目前還沒讀完啦,如果有人也去上了也可以一起討論噢!

保證燒腦但是樂趣十足!

--

--

Summer Chang

PM 、狗派、常常睡不好的人、旅遊愛好者