媽啊,我也完成哈佛課程了!跟大家談談 Harvard CS50 的體驗(附課程連結)

這文章是典形的標題黨,雁橋的確花了兩個月時間完成 Harvard 提供的一個涵授課程 CS50 (Introduction of Computer Science) 。這是備受各方認同的電腦入門班,當然哈佛提供的比起中學深入得多,對於文科學生是有點難的。

即便如此,純文科出身的我也努力的完成了 12 個星期的課程,包括超過 20 小時的影片(實際上看了超過 30 小時)還有 50 小時以上的 Coding 時間,想分享一下自己的學習體驗。

從純文科到會寫 Python ,學習與電腦溝通

先要跟大家談談為什麼作為一個文字工作者要跑去學 Computer Science :因為我想賺進更多錢。

人都接近 30 歲了,自然為前途多想一想,雖然說香港的「IT 狗」人工低是出了名的,但某些行業例如數據工程師仍然有很大的需求,多一樣謀生技能也令將來走得更順……吧?

因為這樣,我開始學起了 Python ,自己買了幾本入門的書在寫程式,也製作了幾個爬蟲機械人抓資料,後來發現自己雜亂無章的學習效率實在太低,而且很難控制自己的進度,就上網找找有沒有相關的免費課程,就找到了 edX 平台與哈佛每年提供的課程: CS50 。

CS50 是哈佛大學為所有學系提供的通識課程,全名是 Introduction to Computer Science ,希望讓每一類學生都認識到計算機科學是怎麼一回事,起步點亦比較低,只要你聽得懂英文上課就沒什麼問題,講師 David J. Malan 的英文口音很棒,也是一個學習英文聆聽的機會。

CS50 的上課地點在哈佛的 Sanders Theatre ,如果你是 CS50 AP 的學生可以選擇到現場上 Live ,而所有影片都會放上 Youtube。

這是怎樣的一個課程?Youtube 影片、閱讀 + 超大量的功課

CS50 雖然是涵授課程,但絕對不輕鬆。整個課程有 12 個星期(由 Week0 開始,真的很附合 CS 的標準),每個星期有接近 2 個小時的 Lecture 、補充影片、補充閱讀材料和不同的 Problem Set(記憶中只有兩個星期沒功課)。

Computer Science 課程有一個好處,就是所有功課都可以自動批改(畢竟程式有 Bug 一跑就知道…),每一個學生都可以利用 cs50.io 在一個 Linux VM (虛擬機器)上面編程,把他們出的問題寫成程式碼,有時是替程式碼 Debug / 修改設計,所有的功課會有一段幾分鐘的 Walkthrough ,但你必須要動腦筋把程式寫出來。

David 在 Week 1 已經提到 CS50 的答案在網上可以隨便找得到,而每年都有學生嘗試 Copy & Paste 敷衍了事,當中大部份這樣做的學生都被系統抓出來,並取消了成績,畢竟是自主學習的一部份,這方面還要出貓是相當不智的一件事。

雁橋可以告訴你,如果你是完全沒有編程知識,頭 4 個星期的功課你會做得相當想死。在 IDE 中會瘋狂彈出 Error (有時忘記打 ; 或是 { ,有時是打錯了 “” 和 ”),更大的機會是程式跑得動,卻達成不了目標。當親自嘗試過寫程式之後,會發現程式語言比起人類「愚笨」得多,差之毫厘就變成另一個版本,從而理解每天 debug 的 Programmer 脾氣的原因。

過程中,你也會接觸到 Linux 的基本操作,但真的只足夠操作無 GUI 的 Raspberry Pi3 。

編程 (Coding) 是什麼?就是學習解決問題!

根據 David 在 Week0 的說法,CS50 過去有 73% 的學生是從來沒讀過 CS 相關課程,但他們會努力讓所有人跟得上。他們強調這是給所有人上的電腦課程,因為電腦科學的本質就是 Problem Solving (解難),他用一個簡單的說法:當你把一些問題放進一個框框,然後框框就會輸出答案,而框框中間的魔法就是 Algorithm (運算法),課程從 2 進制、 2  位元(Binary) 開始介紹電腦思考的方式,再教授各種不同的編程/計算技巧。

在 Week 4 學到運算時間 (Big O 、Small O ) 的時侯,就完全明白為什麼電腦需要那麼快了。即使現時手機處理器時脈亦達到 2GHz 或更快,但記憶體和時間都有限的,當處理複雜問題的時侯一個更好的資料處理方式可以合理的克服物理限制。

現在回想,每一個 Problem Set 都是一些刻意設計過的「迷題」,除了在教材之外,還需要大量閱讀才足以解決一些迷。總覺得教職員是刻意不告訴你關鍵,而你突然想通把程式寫好的時侯,那種開心是難以言喻的!

他媽的 C 語言…讓你從最底層開始認識電腦

另一個 CS50 的特點就是 cs50.io 支援 C 語言,早期的幾份功課亦是用這種笨拙的方式完成。為什麼呢?因為 David 希望學生更了解 Data Structure 、Stack 與 Heap 的概念,也希望每一位明白電腦背後是在做什麼。

就以 Mario.c 為例吧,雁橋花了接近 2 個小時才把它完成,但只是一個很簡單的小程式:先輸入需要的層數(23 層以下),電腦會為你打印出一個上升的階梯,就像是 Super Mario Bro 裡面的水管一樣,在 Python 我們會這樣寫:

level = int(input("Please enter a number"))

if level >0 or level < 23:
    for i in range(level):
        print((level - i) * " " + (i + 1) * "#")


即使超懶的不把 level 限定在「數字」也可以過關,而 C 我寫了一大串:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
int n;
do{
printf(“Height:”);
n = get_int();
}

while (n< 0 || n > 23);

int row,space,hash;
space = n – 2;
for(row =0; row< n;row ++){
for ( space = n-row-1 ; space > 0;space– ){
printf(” “);
}
for (hash = 0; hash < row+2 ;hash++){
printf(“#”);
}
printf(“\n”);
}

}

簡單來說,習慣 Python 之後回頭學 C 真的是一種折磨!

雁橋曰:香港政府要推行 STEM 教育,先從基礎入手

這幾年香港政府都在強調 STEM 教育,而今年特別喜歡提初創 (Startup)或是科技創新企業。在香港科技業界工作,知道這一行還是有不少人材,只是一個產業更需要一種氣氛,一種每個人都懂得科學、數學、電腦的社會,而 CS50 的精神亦由此起。

雁橋大學讀《論語》時有一句很深刻:「力不足者,中道而廢,今女畫」,意思是想做一件事但沒有能力的,最少也可以做一半,而畫了界線的人是不會進步。香港學生喜歡用「文科生」、「商科生」、「理科生」去界定自己,他們沒有想像過自己的潛力可以有多大,

說起來有趣,有一次 CS50 在 Facebook 討論區點名,很多學生都是來自中東、埃及、東歐、東南亞,而香港 + 台灣包括我就只有 3 位而已,真是相當奇怪!香港人如此喜歡名牌(哈佛,是哈佛啊!),也喜歡小便宜(免費,是免費的啊!),為什麼家長不鼓勵學生去修讀呢?

更進一步想香港的老師只需要跟高中生說網上有這個課程,鼓勵他們自主學習,也會令社會大大改變了。相信我的每一位讀者都會比我聰明,課程真的不會太難,只是要花時間想通而已。有興趣可以點這裡到 edX 上課,同時網上有各類型不同的課程,也值得大家工餘時學習啊!

這只是雁橋的一個起步,我仍然在讀 Data Science 相關的網上課程,亦學習如何做一個偽.IT 人,下次跟大家談談 Raspberry Pi。

如果你喜歡雁橋的文章,請 Like 我的 Facebook Page 留意我的最新動態

雁橋

足跡踏遍 40 + 國家的旅遊者,旅人中年發現愛上科技與編程,戒酒後更喜歡咖啡香氣,希望以文字令世界變得更加美好。

發表迴響

%d 位部落客按了讚: