用 Hedy 教人編程
學習編程既要學習編程邏輯,又要學習特定編程語言的語法。我在大學上第一堂編程課的時候,教的語言是 C++。第一個代碼例子是基本的 「Hello World」 程序,就像下面的例子。
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
老師直到幾節課後才會解釋大部分的代碼。我們的期望是,我們只需輸入代碼,並最終了解為什麼需要這些東西以及它們如何工作。
C++(以及其他類似的語言)的複雜語法是為什麼 Python 經常被建議作為一種更容易的編程教學語言。下面是 Python 中的同一個例子:
print("Hello World!")
雖然 Python 中的 「Hello World」 基礎例子要簡單得多,但它仍然有複雜而精確的語法規則。print
函數需要在字元串周圍加括弧和引號。這對於沒有編程經驗的人來說,還是會感到困惑。Python 比 C++ 少了 「我以後再解釋」 的語法問題,但還是有一些。
Hedy 是一種專門為編碼教學而設計的新語言,它通過在語言中將複雜性分成多個關卡來解決語法複雜性的問題。Hedy 沒有馬上提供語言的全部功能,而是採取循序漸進的方式,隨著學生在 Hedy 的學習的通關,慢慢變得更加複雜。隨著關卡的進展,該語言獲得了新的功能,最終變得更像 Python。目前有七個關卡,但更多的關卡正在計劃中。
在第 1 關,Hedy 程序除了列印(print
)一條語句(不需要引號或括弧),提出(ask
)一個問題,並回傳(echo
)一個答案外,不能做任何事情。第 1 關沒有變數,沒有循環,結構極精簡。回傳的工作原理幾乎和變數一樣,但只針對用戶的最後一個輸入。這可以讓學生對基本概念感到舒適,而不必一下子學習所有的東西。
這是一個第 1 關的 Hedy 「Hello World」 程序:
print Hello World
第 2 關引入了變數,但由於 print
函數沒有使用引號,可能會出現一些有趣的結果。如果用來存儲一個人的名字的變數是 name
,那麼就不可能列印輸出 Your name is [name]
,因為 name
的第一次使用(本意是字元串)和第二次使用(是變數)都被解釋為變數。如果將 name
設置為(is
) John Doe
,那麼 print Your name is name.
的輸出就會是 Your John Doe is John Doe
。雖然這聽起來很奇怪,但這是一個引入變數概念的好方法,這恰好是第 3 關中增加的一個功能。
第 3 關要求在字元串周圍加引號,這使得變數的功能就像在 Python 中一樣。現在可以輸出與變數相結合的字元串,做出複雜的語句,而不用擔心變數名和字元串中的單詞之間的衝突。這個級別取消了 「回傳」(echo
)函數,這看起來確實是一個可能會讓一些學習者感到沮喪的東西。他們應該使用變數,這是更好的代碼,但如果一個 ask
/echo
代碼塊變成無效語法,可能會讓人感到困惑。
第 4 關增加了基本的 if
/else
功能。學生可以從簡單的問/答代碼轉向複雜的交互。例如,一個問「你最喜歡的顏色是什麼?」的提示可以根據用戶輸入的內容接受不同的回復。如果他們輸入綠色,回答可以是「綠色!這也是我最喜歡的顏色。」如果他們輸入其他的東西,回復可以是不同的。if
/else
塊是一個基本的編程概念,Hedy 引入了這個概念,而不必擔心複雜的語法或過於精確的格式。
第 5 關有一個 repeat
函數,在現有的功能上增加了一個基本的循環。這個循環只能多次重複同一個命令,所以它沒有 Python 中的循環那麼強大,但它讓學生習慣了重複命令的一般概念。這是多介紹了一個編程概念,而不會用無謂的複雜來拖累。學生們可以先掌握概念的基礎知識,然後再繼續學習同一事物的更強大、更複雜的版本。
在第 6 關,Hedy 現在可以進行基本的數學計算。加法、減法、乘法和除法都支持,但更高級的數學功能不支持。不能使用指數、模數或其他任何 Python 和其他語言能處理的東西。目前,Hedy 還沒有更高關卡的產品增加更複雜的數學功能。
第 7 關引入了 Python 風格的縮進,這意味著 repeat
可以處理多行代碼。學生在這之前都是逐行處理代碼,但現在他們可以處理代碼塊。這個 Hedy 關卡與非教學型編程語言能做的事情相比還是有很大的差距,但它可以教會學生很多東西。
開始學習 Hedy 最簡單的方法是訪問 Hedy 網站上的 課程,目前有荷蘭語、英語、法語、德語、葡萄牙語和西班牙語。這樣一來,任何有網頁瀏覽器的人都可以進入學習過程。也可以從 GitHub 下載 Hedy,並從命令行運行解釋器,或者運行 Hedy 網站的本地副本及其互動式課程。基於網頁的版本更容易使用,但網頁版本和命令行版本都支持運行針對不同複雜程度的 Hedy 程序。
Hedy 永遠不會與 Python、C++ 或其他語言競爭,成為現實世界項目編碼的首選語言,但它是編碼教學的絕佳方式。作為學習過程的一部分,學生編寫的程序是真實的,甚至可能是複雜的。Hedy 可以促進學生的學習和創造力,而不會讓學生在學習過程中過早地被過多的信息所迷惑。就像數學課一樣,在進入微積分之前很久要從學習計數、相加等開始(這個過程需要數年時間),編程也不必一開始就對編程語言的語法問題「我稍後再解釋」、精確地遵循這些語法問題,才能產生哪怕是最基本的語言程序。
via: https://opensource.com/article/21/4/hedy-teach-code
作者:Joshua Allen Holm 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive