在我的另外一篇文章:[心得] 十年程式自學之路有提及:學 scratch 這件事情。因為我覺得這件事情非常重要,因此特別再寫一篇文章好好講述背後的理由。
我的經歷
先從我自己開始談起吧!我的第一個程式語言是 VB.NET
還記得那個時候我也曾經上網找過許多文章,看看大家都推薦第一個語言應該要是什麼
那為什麼後來選了 VB.NET 呢?很簡單,因為 C 的語法我實在是看不懂
我實在是不知道那些 {}(); 等等奇怪的符號到底在幹嘛,對我來說就跟無字天書一樣
接著,我寫的第一個程式是:按下某個 button 時,出現一個文字
就是這麼簡單的一個小程式,程式碼大概就是:
function btn_click(){
text.show('Hello World')
}
可是,我心中超級感動
為什麼呢?因為我寫出了我人生中第一個程式,第一個可以動的程式
第一個,可以依照我的意思執行的程式
接著我就跟所有初學者一樣,買了本書然後看著範例寫程式
先開始學宣告變數、再來是符號(賦值、加減乘除之類的),之後是流程控制、迴圈
當我學到迴圈的時候,我就傻掉了,尤其是兩層的迴圈
我完全搞不懂他在幹嘛
相信我,如果你跟我一樣是個已經會寫程式的工程師,你很難理解(或是很難想起)這種感覺
因為你早就已經脫離那一段時期很久很久了
但以我的教學經驗,初學者會卡關的第一個點大概就是兩層迴圈,也就是最經典的案例:九九乘法表
後來我靠著上網 Google 別人的解釋跟自己花了點時間去領悟
隔了一兩個禮拜,我終於瞭解迴圈在幹嘛了!
故事講完了,重點呢?
在我上面這段歷程之中,我領悟了兩件事情
- 在學程式裡面,成就感很重要
- 其實難的不是迴圈,是語法
比起那些用 Terminal 執行,畫面是黑底白字的程式語言
我認為「看得到」是一個很重要的因素
為什麼呢?如果今天是黑底白字,你第一個做出來的範例可能是溫度換算、BMI 換算等等
可是像是 VB 這種可以很容易做出 GUI 介面的程式語言
以同樣的程度來說,寫出來的範例會更有感覺、更有成就感
因為成品更貼近他在日常生活中使用到的程式,或是可以純粹做個只有介面的假程式也很有成就感
這也是為什麼,從 HTML, CSS 入門也是一個不錯的選擇
因為他可以立刻看到自己做出什麼東西,才會有成就感!
你自己想想
寫出一個類似部落格畫面的網頁跟寫出一個黑底白字,輸入身高體重幫你換算 BMI 的小程式
哪一個會更有成就感?哪一個可以更容易跟朋友分享?
顯然就是第一個
針對第二點:難的不是迴圈,是語法
其實所有的程式語言都有許多概念是同樣的,包括:流程控制、迴圈、變數、函式等等
python 之所以會比 C 來的更適合初學者,我認為是在語法比較簡潔還有比較好執行
假設你今天為了學這些概念而從任何一個程式語言開始
就代表你必須先熟悉這個程式語言,例如說你從 python 開始
你就要知道 python 怎麼安裝,怎麼執行,語法是怎樣,冒號是做什麼用的等等
可是,如果你只想學流程控制、迴圈等等的概念,根本不必多學這些東西
其實用文字來表達就可以了,根本不需要用到程式碼
或是比起文字,其實圖像化的表達會更好
舉例來說:
for(var i=1; i<=9 ;i++){
for(var j=0; j<8; j++; {
}
}
這兩段其實是差不多的東西,可是下面的圖像式會更好理解
為什麼?因為它就像拼圖一樣,能夠讓你清楚的「看見」程式的結構
對初學者來說,程式碼的 {} 是看不到的,或是說,沒那麼快可以反應過來這是一個「區塊」
可是在 Scratch,由於獨特的拼圖設計,一眼就看出來了
總結
Scratch 獨特的「拼圖式」寫程式,能夠讓初學者完全擺脫「語法的束縛」
他只要在意什麼?只要在意程式流程是不是正確的,結果是不是正確的
而不必糾結在:「這邊要加分號嗎?這邊是不是有大括號?」
有許多人認為程式很難,都是認為「程式的語法很難」
但其實程式的概念每個人都有,只是沒有發覺罷了,因為很多細節的事情大腦都幫你做掉了
擺脫語法,才是學好程式的第一步
至少我是這樣認為的