為什麼「自學」對程式學習很重要

「自學,就像孩子打開了一本書或課本。他會好奇地向下讀、自我理解、尋找答案。」

孩子是如何學習說話?

學習父母的詞彙,觀察父母的行為,然後使用這些詞彙,經過糾正之後,像是「你,我,他」的差別,發展出說話的能力。


孩子如何學習語文?

閱讀,猜測意思,克服不懂的詞彙,最後應用文字。
而我們的教育卻經常訓練孩子等在那裡,等著老師教,即使課本已在眼前,教第一課就不會往下看第二課,「餵養」成為習慣。


在程式能力的發展裡,自學為什麼非常重要!

因為孩子學程式也可以這樣:閱讀 (探索)、猜測意思 (實驗看看)、克服不懂的詞彙(在 Scratch 裡就是積木),最後應用 (積木)。
因為可能已經有人做好了一些元件(像是 Scratch 積木),當我們閱讀過他們以後,下次寫程式就可以拿來使用。這些元件,和語文中的詞彙是一樣的。有了自學能力,就知道有更好的方法來寫文章。


Coding For Fun 樂學科技

以興趣為出發點,誘導孩子探索學習,培養孩子真正的程式力!

廣告

如何建構孩子的「程式能力」

其實寫程式就是 Maker

(編按: 文中的「我」指的是 Coding For Fun 樂學科技 – 創辦人蔡淑玲)

從有興趣的主題出發、發現真實世界的問題,克服各種技術與知識上的困難,努力找出解答方案。 換句話說,maker 的培養沒有標準課程。你可以教會孩子許多工具、許多知識,但是不給孩子時間與空間來嘗試錯誤、思考,他/她很難成為 maker。

曾有孩子的朋友問我,學過了 C 和 java,學程式到底能做什麼? 這樣的學習者很多,因為他們被制式的課程帶著走,無法理解自己的需要與課程有什麼關聯,所以找不到應用點。

10959437_1612887872274404_4801812519465910128_n

另一方面,這兩種程式語言要寫出應用並不容易,課程教了一大堆語法與架構,學生找不到著力點。 既然是從小學習,方法不應該與大人學習方法相同。孩子應該從有興趣的應用下手,讓他持續嘗試,發現不足,然後再往下學習。

以我兒子最近的學習為例。 他在大學旁聽了資訊研究所的「雲端運算」,教授說「你們應該都寫過 socket 程式,這很基本。」他沒學過,於是回家 google 了一下,應用 python,兩天就寫出了一個以 socket 做溝通的應用程式。 有了這個基礎,加上他對於寫遊戲很有興趣,所以他開始構思如何製作多人線上遊戲。

前幾天他問我,「一個點到一條直線的最短距離」怎麼算?這是他高二上應該學習的數學課程,但我讓他跳過,直接學微積分。沒想到需求竟然產生了,有了學習動機,短短幾小時,他就運用程式寫了一個小工具,讓電腦算出「一個點到一條直線的最短距離」,而且是以動態的圖像來展示。

大多數的 maker,絕對不是養足了知識才開始動手,而是邊學邊動手,邊動手邊學程式能力也是這樣培養出來的,而這些學習的印記,絕對是帶得走的能力


 

何時開始學「程式設計」

就家長的觀點,「不要輸在起跑點」好像是學習的不二法門

在教學現場,低於這個年齡的孩子即使理解力很強,往往創造不出好的作品;依樣畫葫蘆的教學方式可以,但是看不出孩子的創造力。太早學習,也可能使得孩子自滿,讓後面的學習變得不順利,反而停滯不前。

學習程式設計的黃金期是10歲,也就是小學五年級的時候。
這個年紀的『創作力』,與『應用能力』俱足。

不僅是程式設計,像是英文、數學…,都是相同的問題。孩子因為早就會了,反而上課的專注力不夠。習慣了「不聽老師講」,日後的學習問題重重。為了彌補「不聽老師講」,只好做額外的補習。因為「投資」下去了,就只好一直「投資」下去;反而剝奪孩子探索、思考的空閒時間。其實,幫助孩子找到學習動力,才是最重要的。

1506584_1573677306195461_5692295895395718849_n

學程式是為了解決問題,在小學五年級之前,家長應培養孩子的『閱讀力』,與『英文的興趣』。

為什麼閱讀很重要?

為了解決問題,除了思考之外,其實理解問題是很重要的。如果孩子從小並沒有閱讀的習慣,很容易就直接跳進問題裡;並不是能力不夠,而是沒有耐心去理解問題,或是對於文字的理解有問題。

我常跟學生舉例:如果老闆要你解決問題 A, 你卻自顧自地做了功能 B, C, 和 D,雖然很努力,但是不符合對方需求只是浪費時間。

為什麼英文很重要?

幾乎第一手的技術資料都以英文撰寫,孩子未來要學新的事物,英文能力不可或缺。

但也不需要很早就學,而是讓孩子「不害怕」英文。當孩子對程式有興趣時,他將體會到英文的重要,有了學習動力,學英文就事半功倍。如果讓孩子在小小年紀就「害怕」英文,當然會阻礙孩子的學習。而害怕的產生,往往是來自「嚴厲」的老師與「背單字」的壓力,家長要特別注意。

有了好的英文能力,孩子有勇氣放眼世界,未來可以站到全世界的舞台,才能跳脫台灣低薪的夢靨。

小學五年級之前,要如何培養邏輯力?

可以玩玩網路上的程式遊戲,像是平板上的軟體 scratchjr(適合 5 – 7 歲), 或是 Code.org (適合 4 歲以上)。或是讓孩子玩玩桌遊,訓練孩子的思考力與邏輯力。

要讓孩子適度地玩電腦遊戲,完全不碰電腦的孩子,也很難在初學程式時顯現出應用力與創造力。

歡迎參考讓孩子快樂學程式一書。(編按: 本書由Coding For Fun 樂學科技創辦人蔡淑玲老師撰寫)

什麼是「運算思維」要如何培養?

讓我們面對複雜的問題,能夠理解問題本質、發展可能的解決辦法。然後使用電腦、人或兩者都可以理解的方式來呈現這些解決方案。(參考:BBC)

運算思維就是解決問題的方法

分成四個部分:

  1. 拆解(Decomposition):將複雜的問題或系統分解成更小、更易於管理的問題;
  2. 模式識別(Pattern Recognition):為了讓解決問題更有效率,將每個小問題分別檢視,思考之前是否有解過類似的問題;
  3. 抽象(Abstraction):只注意重要的細節,忽略不相關的資訊;
  4. 演算法(Algorithms ):設計簡單的步驟或規則來解決每個小問題。
最後,將這些簡單的步驟或規則寫成程式。
10978632_1610173715879153_2147952103565414460_n

程式是工具是實現「解決問題」的工具,程式語言本身並不涉及運算思維。

既然單純地學程式語言,無法增進運算思維,那麼要如何培養運算思維呢?

其實很簡單,ScratchEd 集合了資訊教育專家,經過多年的研討,設計了一套 Scratch 課程,讓學生在實作中,不知不覺地學會運算思維。這一套教材,也正是 Coding For Fun 課程的核心。

這套教材從三個方面來培養運算思維(參考:ScratchED):

如何培養運算思維 (Computational Thinking)

運算觀念

  • 序列(Sequence):對某一個任務,確定一系列的步驟
  • 迴圈(Loops):重複執行相同的序列
  • 平行(Parallelism):在同一時間讓許多事同時發生
  • 事件(Events):一件事引發另一件事的發生
  • 條件(Conditionals):根據條件做決定
  • 運算子(Operators):支援數學與邏輯的表達
  • 資料(Data):儲存資料、讀取資料與更新資料

實作

  • 反覆地增加(Being iteratively and Incrementally):發展了一點點,試試看,然後再發展一些
  • 測試與除錯(Testing and Debugging):確保事情能執行,發現錯誤並解決問題
  • 重複使用與混合(Reusing and Remixing):在現有的專案或想法上做點什麼
  • 抽象與模組化(Abstracting and Modularizing):探索整個問題與其他部分的連結

建立觀點

  • 表達(Expressing):了解「電腦運算」是一種創作的媒介,「我可以創造」
  • 連接(Connecting):體認到「與他人一起創造」和「為他人創造」的力量,「當我有機會接觸他人,我可以做不一樣的事!」
  • 質疑(Questioning):有能力對世界提出問題,「我可以(運用電腦運算)提問,並理解(電腦運算)世界!」

為什麼鼓勵孩子先學 Python,而不是 C、C++ 或 Java

 

根據學術刊物 “Communications of ACM” 2014 年7月調查顯示,Python超越Java成為美國大學課程中入門程式語言的主流
  • 10 所美國頂尖的電腦科學系,有 8 所採用 Python 作為入門語言
  • 39 所美國頂尖大學中也有 27 所,使用 Python 作為入門語言
  • 3 個熱門的線上課程提供者:Coursera、edX 和 Udacity,都提供 Python 課程
  • 相較於 Java 和 C++,Python 語法簡單多了,學習者幾乎可以立刻上手,而且Python也適用於商業應用

Coding For Fun 樂學科技 認為上面所陳述的事實只有一個,就是「Python 語法簡單多了」,這應該也是各大學採取 Python 作為教材的根本原因。目的是要先引起學習者對程式設計的『興趣』,而不是築起『初學者』的高牆

根據我們的經驗,學生後來也會自主學習 javascript、C++、Java 等等程式語言,一通百通,樂趣才是青少年拓展自主學習的最大動力。

從哪開始呢?

 

Coding For Fun 樂學科技專為青少年設計的「Python 程式設計初級班」。(詳見:106年樂學科技暑期開班資訊)

python-powered-w-200x80

如果孩子有學習程式的狂熱,或是高中以上至社會人士,可以從 Udacity 的「Intro to Computer Science」開始。

Screen Shot 2017-09-16 at 14.09.45


Udacity「Intro to Computer Science」CS101 課程簡介

這門課的全名是「Intro to Computer Science:Build a Search Engine & a Social Network」,由美國維吉尼亞大學的 Dave Evans 教授主講,他是麻省理工學院(MIT)的電腦科學博士,曾獲得維吉尼亞州大學教師的最高榮譽。課程內容包括電腦硬體、軟體、以及網路的運作方式。其中軟體的部分,以製作「搜尋引擎」為目標,使用 Python 程式語言作教學,帶領學生進入程式設計的殿堂。


進行方式:

如果學習目標並不在於拿到證書,請選擇「Access course materials」。這是免費的課程,但沒有修業證書與線上指導者。

如果想拿到證書,才選擇「Start free trial」。Udacity 會指派一位老師來協助您進行課程,並輔助學生完成證書所需要的「Social Network」專案 (註:需要付費)

這個課程有別於一般的課程,甚至與其他 MOOCs 的進行方式也很不一樣。

  • 課程分割成許多小單元,
  • 每個小單元以 1 ~ 6 分鐘的影片進行教學,
  • 中間穿插著許多的小測驗。

學生在瀏覽器中寫程式,「提交作業」(submit),執行結果馬上秀在右上角。如果答對了(Correct),進度表上的白點就會變成深藍色,學生可以自行檢視上課進度。遇到不會做的習題怎麼辦呢?只要點選「繼續回答」(Continue to Answer),老師會在影片中做詳細的解說。因為是線上課程,所以學生可以反覆點閱影片自我學習,適合學生在任何時間上網自學。

樂學科技圖片調改建議.005

自制力不夠怎麼辦?

建議每週至少有 3 小時的學習,可以切分為兩個時段,各為 1.5 小時。比方說固定為每週五與每週日晚上進行課程(幾點開始,幾點結束請訂清楚)。

就像上補習班一樣,時間到了,您就會出現在補習班等著上課。除非必要,不會缺席,甚至還要求補習班補課。

抱著這樣的態度,這個課程就會不知不覺上完了,供大家做參考。

透過 Scratch 發展創造力

(編按: 本文中的「我」指 Coding For Fun 樂學科技創辦人蔡淑玲老師)

在我的學生中,多數的Scratch作品都是做遊戲,或是小故事。我想介紹幾個學生的創作,顛覆一下大家的認知。列舉的作品是 2014年5~7月所開的Scratch初級班。也許未臻完美,畢竟這只是課程結束的期末作業,未經老師的修飾與指導。保證是原汁原味!

作品1: 這是去年暑假升國一學生,她利用Scratch寫出一個故事, 編劇、取鏡、角色樣樣都自己來。



 

作品2: 2014年暑假升國一學生作品的三部曲之一,她模仿了RPG遊戲,這是其中的動畫,另兩個則是遊戲。在這個作品中,把電影製作的幾個亮點也考慮進去囉:包括 NG 錄音(全家人合力錄音)、還有片尾動畫。千萬不要錯過觀賞喔。



 

作品3: 去年暑假升高一學生的作品,幽默感透過創意顯露無遺。



 

作品4: 這是去年暑假升小五學生的作品,他寫的是動畫,不是遊戲喔!



 

為了完成這些作品,學生都以非常驚人的耐心與毅力,努力完成。家長對孩子的深度投入都非常驚訝,多數人花了一天4~6小時,全力以赴。

千萬別誤會 Shalley 老師荼毒他們,畢竟這只是一門才藝課,對吧!? 他們完全是受到同儕激勵,在期末發表會的前一周看過別人的作品後,覺得“輸人不輸陣” 就拚了~而且我要誠實地說,Demo 之前,我完全沒看過!因為前一周都還是未完成品,甚至還沒開始做!(編按: Shalley老師為 Coding For Fun 樂學科技創辦人蔡淑玲老師)

這是 MIT 課程的特色之一: 同儕分享所展現的成果。藉由同儕的刺激與激勵,學生會互相激盪出火花。

而這個班級也因為有一些具備美術天分的孩子,讓大家一起提升了美感的層次。

其實好的程式設計,有一個很重要的部分是美感。想像一下,當你點選某個未經設計的網頁,通常你也不想久留。一個有設計感的人機介面,非常需要具備這種天分的人才投入。  

如果你的孩子有美術與設計天分,何不讓他/她來試一試!