遠見雜誌 2016/04 的專題〈22 億人玩程式,擁抱跨界力〉一連數篇專文,提到許多驚人的趨勢:
因此,如〈資訊科技教育、課綱制訂與後續發展〉一文所述,台灣當局也動了起來。
不過,我們的政府,除了不落人後的心態,南橘北枳的習氣也叫人擔心。
我就忍不住調侃:
很快的,市面上就會有給國中生的程式設計補習班了。
⋯⋯其實現在早就有給國小的 Lego Scratch 才藝班⋯⋯
許多有志之士紛紛為文。像蘇文鈺教授在〈資訊科學納入大學通識課程,可能嗎?〉提到:
我恐怕,跟著美國人的教育政策,學到的若只是皮毛,最後還是一樣補習班或才藝班滿天飛,孩子們多了更多東西要補,豈不悲哀?但是,衡諸過去的台灣經驗,只要列入課綱,考試要考,升學必須,利之所趨,豈有不大補特補呢?家長觀念不改,教育單位政策不能慎重,恐怕台灣的競爭力會每下愈況啊!
為什麼我說過我怕資訊科學被納入通識課程呢?原因就在此,我們太擅長把一樣東西當作教條,「廣泛」施行,從教學效率上來看,這沒什麼錯,但是這卻會違反資訊作為「科學」二字的含義。
洪士灝教授也為文提到:
這是目前教育上常見到共同問題,所以我不希望在資訊教育中教得太複雜,希望多一些實作類的專題,讓學生多些自由發揮的空間,也就是所謂的 project-based learning 的概念。同時,還希望利用資訊教育,把其他學科的東西帶進來活用,培養跨領域的概念。
這是國外大學當前在推所謂的「基石(cornerstone)課程」的概念,資訊系不見得要和傳統課程那樣按部就班由程式語言學起,然後是演算法、物件導向、自動機、系統程式、作業系統、計算機結構等等,而是先告訴學生資訊技術可以解決哪些有趣的問題,以及如何實際利用工具解決問題,再告訴他們裡面有哪些複雜的問題會在以後哪些課程中教到。
另一篇文章〈資訊通識教育與計算思維怎麼教?〉也提到:
會寫程式不代表一定懂計算思維,反過來說,懂運算思維不見得會寫好程式。所以,我並不是說不要教程式設計,而是不希望過於強調程式設計,因而框限了學習內容和未來的發展性。
在這類較中肯的意見中,運算思維 (computational thinking) 是個反覆出現的關鍵詞。
四大核心
「運算思維」,聽起來既神祕,又抽象。滿容易震懾外行人的。
其實並沒有太神祕複雜。網路搜尋一下,很容易找到解釋:
- Wikipedia 條目:Computational thinking
- 某程式設計學苑介紹文:程式初學者的失落之鑰 – “Computational Thinking”
- Kids Coding Studio 介紹文:什麼是運算思維?如何培養運算思維?
- 某教室介紹文:程式設計 ⇒ 運算思維 ⇒ 數位素養
從這些資訊中,可看到目前公認的運算思維四大核心是:
- Decomposition:拆解、分解。
- Pattern recognition:模式識別、規律尋求。
- Abstraction:抽象化。
- Algorithms:演算法、演算法則。
近親
其實「運算思維」沒有太神祕複雜,也不全然是計算機領域的專利。像 decomposition 原則,在專案管理領域的 WBS、企劃寫作的 MECE,都有類似的觀念;像 pattern recognition 原則,是任何解題活動都會運用的歸納法及假設法;像 abstraction 原則,更是所有系統化學問一致強調的心法。
其實「運算思維」沒有太神祕複雜,甚至在近親的數學領域也都有,像經典級的 How to Solve It(中譯本:《怎樣解題》),或是像《德國一流大學教你數學家的 22 個思考工具》這本,都有許多論述。
以 George Pólya 的經典 How to Solve It 為例,它的「啟發術小辭典」列了這些解題思維:
- Analogy
- Generalization
- Induction
- Variation of the Problem
- Auxiliary Problem (subproblem/subgoal)
- Pattern recognition
- Pattern matching
- Reduction
- Specialization
- Decomposing and Recombining (Divide and conquer)
- Working backward
- Draw a Figure
- Auxiliary Elements (extension)
你看,是不是早已把現在很潮的「運算思維」四大核心涵蓋在內了?
再以《德國一流大學教你數學家的 22 個思考工具》列的 22 項法寶為例:
- 類比原則
- 富比尼原理
- 奇偶原理
- 狄利克雷原理
- 排容原理
- 相反原則
- 歸納原則
- 一般化原則
- 特殊化原則
- 變化原則
- 不變性原理
- 單向變化原則
- 無窮遞減法則
- 對稱原理
- 極值原理
- 遞迴原理
- 步步逼近原則
- 著色原理
- 隨機化原則
- 轉換觀點原則
- 模組化原則
- 蠻力原則
你看,是不是在實踐層次,也和現在很潮的「運算思維」四大核心高度呼應?
所以,數學教育好好落實,其實也已經在打穩「運算思維」的基礎。
只是傳統數學教學被炫麗解題花招綁架了,導致數學教育失靈。
只要第一線教育現場不重視根本思維,那麼,再多一個程式設計課,就會提升下一代素質嗎……?
最大分野
運算思維,目前公認有四大核心。
嚴格來說,運算思維與其他領域(非 STEM 領域尤然)最大分野,就是 algorithm(演算法)了。
不過,這又是另一篇長文才能探討的了。
(其實小學數學的長除法、輾轉相除法、因數分解,就是一種演算法⋯⋯)
語文素養
最近,為了教小孩數學解題思維,重拾高中時代指定讀物 How to Solve It(當年我用的是張憶壽教授的譯本,而不是現在市面上通行的天下文化譯本),尋求好的引導方法。
突然發現,這本奇書,何止數學會用到,語文的 literacy capability、電腦的 computational thinking,也都會用到這本書的思維心法。
談數學的書,也會重視 literacy capability?會不會扯太遠了?
證據在此,請看看以下的解題提示表,不折不扣的 literacy capability 應用:
這本書也提倡:在解題的各個環節,要善加運用所謂的「啟發式問句」自我提問。譬如說,在「了解問題」方面,可以如此提問:
- What are you asked to find or show?
- Can you restate the problem in your own words?
- Can you think of a picture or a diagram that might help you understand the problem?
- Is there enough information to enable you to find a solution?
- Do you understand all the words used in stating the problem?
- Do you need to ask a question to get the answer?
看出來了嗎?像語文學習的 literacy capability,像《如何閱讀一本書》講的「主動閱讀」,不也正是要主動思索探究這類問題嗎?
許多領域,核心原則是共通的。
學苟知本,六經皆我註腳。
底子
其實,好好把語文及數學的底子打好,更重要。
不過,不是成天搞背誦、蒐集解題花招,而是踏實聚焦在 How to Solve It 這類王道的議題探索及解題思維上。
解題思維穩了,以後要進軍其他範疇,都容易許多。否則,再多的科目,再多的考試,也只是花拳繡腿。
(謎之音:連修辭格都要背誦的語文教育,是什麼樣的語文教育呀⋯⋯)
真的準備好了嗎?
搜尋,排序,陣列,不是不能教,而是看怎麼教。
如果用冼鏡光當年 PC Magazine 連載文章所用的引導方法,或是我愛用的既有知識或現實世界類比方法,其實是辦得到的。像當年我教大學生迴圈時,就是用國中數學的等差級數、等比級數為引子。先備知識,是很重要的學習遷移資源。
數學教育好好落實,其實也已經在打穩「運算思維」的基礎。只是傳統數學教學被炫麗解題花招綁架了,導致數學教育失靈。
只要第一線教育現場不重視根本思維,那麼,再多一個程式設計課,就會提升下一代素質嗎⋯⋯?
切記洪教授諄諄提醒的:「不要教太難、教學時間要足夠、課程要設計好、師資要準備好,要做的話就要有充分的資源來做,不然會做不好。」