首頁 / 少年科技人雜誌 / 2015年6月號

慕課記 -- Nand2Tetris 這門課

慕課 MOOC 是什麼?

Massive open online course 簡稱 MOOC ,這是一個從 2008 年 Dave Cormier 提出來的新名詞,其內涵是運用網路技術讓大家可以共同學習一門課程,我們曾經在下列的程式人雜誌文章當中介紹過這個主題。

MOOC 這個名詞在台灣通常翻譯成『磨課師』,而在中國則翻譯成『慕課』,我本身比較喜歡『慕課』這個譯法。因為『慕課』感覺就像『很羨慕的來上課』的樣子,而『磨課師』則要由老師磨來磨去,聽起來就不太開心。

目前、全世界最大型的 MOOC 網站,應該是 CourseraUdacityedX 了,這三個網站的風格不太相同,其中的 Coursera 和 Udacity 源自於史丹佛大學 (Stanford University),而 edX 則來自麻省理工 MIT。

Coursera 是由史丹佛大學的計算機科學教授吳恩達 (Andrew Ng) 和 Daphne Koller 聯合創建的,目前台灣大學也有一些課程在 Coursera 開設,像是葉丙成老師的機率,還有呂世浩老師的秦始皇等等,都是相當受歡迎的課程。

令人心動的 From Nand to Tetris 課程

雖然我經常上這些網站看看資料和影片,但是卻從來沒有完整的修完過一門課程。 之前曾經聽說過真正修課和光是看看,會有很不一樣的感受,於是在看到下列這門非常讓我心動的課程之後,我決定要從頭到尾修完這門課。

為甚麼這門課會讓我心動呢? 原因是在一年前我就曾看到過下列這個網站,知道 nand2tetris 這門課程是教授學生如何從一個最基礎的 nand 邏輯閘開始,一路往上建構出所有基礎元件,像是 and, or, xor, not, MUX, DMUX, Adder, Memory 等等,接著建構出 CPU 與整台電腦,然後再學習如何在建構出這台電腦上的『組譯器、編譯器、作業系統』等等,最後在這個具備軟硬體的電腦上寫一個小型的方塊遊戲。

這樣的『神級課程』,又怎麼能讓學電腦技術的人不心動呢?

下圖顯示了 From Nand to Tetris 這門課程的架構,大約就是一路從上層的『編譯器與作業系統』開始,經過『虛擬機、組譯器、機器語言』,然後開始拆解整個硬體,從 CPU 一路拆解到邏輯閘。

圖、nand2tetris 整門課的基本架構

但是學習的時候,則是從下層邏輯閘一路建構上來,每一步都是透過寫程式的方式自己動手做,其中包含撰寫硬體描述語言 (HDL) ,組合語言 (ASM) 與高階語言 (java) 等等,真的是涵蓋非常完整的一門課。

當然,一門涵蓋這麼廣的課程必須要有所取捨, Nand2tetris 既然採用了簡化並實作的概念,就無法在理論上著墨太多,也無法在實作上採用太過深入的技巧,因此高深的理論和複雜的實作都被捨去了。

這種取向正好是我所最想要的,因為我本身從大學一路念到博士班,不知修過幾次『計算機結構』與『作業系統』的課程,但是卻沒有設計過任何一顆處理器和作業系統,於是課本上的那些理論根本就是空談,只知道電腦一直加快取就會讓速度變快,而且還很會計算電腦效能的數學公式,但是我卻一顆 CPU 都沒設計過,一個作業系統沒寫過。

所以在這幾年,我開始用 verilog 設計處理器,並且用 C, JavaScript 等語言撰寫『編譯器,組譯器,虛擬機』等等程式,還因此寫了以下列出的一本紙本書和一堆電子書,其實就是為了完成『從頭到尾』設計一台電腦的這個夢想,我將這個夢想稱為『開放電腦計劃』。

現在,有了 Nand2tetris ,基本上這個團隊已經完成了我的夢想,我只要好好的去上課把它學起來就行了,那我又怎麼能不花時間去把這門課修好呢?

開始修課吧!

您只要按下 From Nand to Tetris / Part I 這個連結,就可以進到課程首頁,您必須先申請 coursera 的賬號之後,才能開始選修課程,這門課是免費的,因此您只要登入後在頁面中按下 join for free 按鈕就可以開始上課了。

如果您的帳號設定是中文,那麼看到的課程名稱會是『從與非門到俄羅斯方塊 / 第1部分』,這個翻譯我覺得怪怪的,因此建議您還是到設定中選回英文設定會比較好。

這個 Part I 的課程共分成七部分,如下所示。

0. From Nand to Tetris
1. Boolean Functions
2. Boolean Arithmetic
3. Memory
4. Machine Language
5. Computer Architecture
6. Assembler

想必之後還會有 Part II 是從『虛擬機,編譯器,作業系統』到『方塊遊戲』的,如果您想先睹為快,那也可以連到下列 nand2tetris 的網址去看看。

Part II 應該會有下列主題。

7. VM I: Stack Arithmetic
8. VM II: Program Control
9. High-Level Language Project
10. Compiler I: Syntax Analysis Project
11. Compiler II: Code Generation Project
12. Operating System

現在,就讓我們一起來學習這門課程吧!


本文部份內容與大部份圖片修改自 維基百科 , 使用時請遵守 姓名標示、相同方式分享 授權。
編輯: 陳鍾誠 email: ccckmit@gmail.com