寫程式的第 “零” 步 — 先學會問問題!
有機會跟一些資訊老師或民間的電腦老師討論,其實很常發現在資訊教學的過程中,很多人都遺漏了一點:「如何引導孩子開始一個專案」
很多人常常誤會一件事情,認為學習程式設計是一件可以一步步照「SOP」進行的過程。
但是一個真正「夠格」的程式設計師,是具備「找出問題」並「解決問題」的能力,而不是只會死背活記SOP的。
台灣孩子的問題是什麼?不會定義問題!
如果你是父母或老師,你一定很常聽到:
「我不知道作文要怎麼寫!」
「我不知道這個報告要怎麼寫!」
而當你進一步問他:「是哪邊有問題呢?」
他們往往回答:
「全部!」「不知道!」
你可以發現,在台灣到處都有「標準答案」的教育環境下,學生已經習慣了等待「最佳解法」,當面對一個比較發散、需要創造的任務時,往往只能楞在一邊。
Top-Down 思維 — 分析問題、拆解問題、解決問題
依照我們過去的經驗,台灣的孩子的確常有以上提到的情形,而引導孩子突破這個僵局,就是我們老師的價值所在。
以最近開發的「APP創造營」為例,當我們在課程中指派學生一個計算BMI的小程式時,首先面對的就是學生不知道該如何從頭開始的問題。
第一次思考:「如何使用?」
一開始,我們會帶學生從使用者的觀點出發:
「如果你希望用APP算出自己的BMI指數,在你的想像中會是怎樣的操作方式呢?」
此時或許會有很多答案:
「我希望念出我的身高和體重,螢幕就會出現我的BMI指數」
「我想用打字的方式,先輸入體重、再輸入身高,按下確定後螢幕就會出現我的BMI指數」
這個階段會讓學生盡情的「發散」,試圖想像自己使用這個「還沒被開發出來」的APP的情境。
第二次思考:「長什麼樣子?」
接下來,我們會請學生思考:
「根據你提出的使用情境,你覺得這個APP會長什麼樣子?」
到了這個階段,整個APP的外觀(wireframe)已經有了草案。每個介面元件(component)對使用者的作用為何,也有了定義。
「拆解」&「實作」
最後,我們會發現每個元件(component)都應有各自己的行為(behavior),每個行為其實就是一個小小的功能。接下來學生要做的就是:
- 實作介面 & 布局元件
- 實作A元件的功能
- 實作B元件的功能
- 實作C元件的功能
- ….
- 測試 & 修改
- 驗收
小結
當然,在業界的開發流程更加複雜,但是不代表這些設計哲學不能被簡化、調適為適合孩子的思考高度。
在橘子蘋果的課程中,我們信奉著一句話:
「當問題被清楚陳述時,它已經被解決了一半」
— John Dewey, 美國哲學家和教育家
學習其實很簡單,先讓你的孩子從問對問題開始吧!