Huli's Blog

Learning by sharing

為什麼你應該從 Scratch 開始學程式

| Comments

在我的另外一篇文章:[心得] 十年程式自學之路有提及:學 scratch 這件事情。因為我覺得這件事情非常重要,因此特別再寫一篇文章好好講述背後的理由。

我的經歷

先從我自己開始談起吧!我的第一個程式語言是 VB.NET
還記得那個時候我也曾經上網找過許多文章,看看大家都推薦第一個語言應該要是什麼
那為什麼後來選了 VB.NET 呢?很簡單,因為 C 的語法我實在是看不懂
我實在是不知道那些 {}(); 等等奇怪的符號到底在幹嘛,對我來說就跟無字天書一樣

接著,我寫的第一個程式是:按下某個 button 時,出現一個文字
就是這麼簡單的一個小程式,程式碼大概就是:

function btn_click(){
  text.show('Hello World')
}

可是,我心中超級感動
為什麼呢?因為我寫出了我人生中第一個程式,第一個可以動的程式
第一個,可以依照我的意思執行的程式

接著我就跟所有初學者一樣,買了本書然後看著範例寫程式
先開始學宣告變數、再來是符號(賦值、加減乘除之類的),之後是流程控制、迴圈
當我學到迴圈的時候,我就傻掉了,尤其是兩層的迴圈
我完全搞不懂他在幹嘛
相信我,如果你跟我一樣是個已經會寫程式的工程師,你很難理解(或是很難想起)這種感覺
因為你早就已經脫離那一段時期很久很久了
但以我的教學經驗,初學者會卡關的第一個點大概就是兩層迴圈,也就是最經典的案例:九九乘法表

後來我靠著上網 Google 別人的解釋跟自己花了點時間去領悟
隔了一兩個禮拜,我終於瞭解迴圈在幹嘛了!

故事講完了,重點呢?

在我上面這段歷程之中,我領悟了兩件事情

  1. 在學程式裡面,成就感很重要
  2. 其實難的不是迴圈,是語法

比起那些用 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 獨特的「拼圖式」寫程式,能夠讓初學者完全擺脫「語法的束縛」
他只要在意什麼?只要在意程式流程是不是正確的,結果是不是正確的
而不必糾結在:「這邊要加分號嗎?這邊是不是有大括號?」

有許多人認為程式很難,都是認為「程式的語法很難」
但其實程式的概念每個人都有,只是沒有發覺罷了,因為很多細節的事情大腦都幫你做掉了
擺脫語法,才是學好程式的第一步
至少我是這樣認為的

Comments

comments powered by Disqus