遠見雜誌 2016/04 的專題〈22 億人玩程式,擁抱跨界力〉一連數篇專文,提到許多驚人的趨勢:

程式設計的趨勢

程式設計的趨勢

因此,如〈資訊科技教育、課綱制訂與後續發展〉一文所述,台灣當局也動了起來。

不過,我們的政府,除了不落人後的心態,南橘北枳的習氣也叫人擔心。

我就忍不住調侃:

很快的,市面上就會有給國中生的程式設計補習班了。

⋯⋯其實現在早就有給國小的 Lego Scratch 才藝班⋯⋯

許多有志之士紛紛為文。像蘇文鈺教授在〈資訊科學納入大學通識課程,可能嗎?〉提到:

我恐怕,跟著美國人的教育政策,學到的若只是皮毛,最後還是一樣補習班或才藝班滿天飛,孩子們多了更多東西要補,豈不悲哀?但是,衡諸過去的台灣經驗,只要列入課綱,考試要考,升學必須,利之所趨,豈有不大補特補呢?家長觀念不改,教育單位政策不能慎重,恐怕台灣的競爭力會每下愈況啊!

為什麼我說過我怕資訊科學被納入通識課程呢?原因就在此,我們太擅長把一樣東西當作教條,「廣泛」施行,從教學效率上來看,這沒什麼錯,但是這卻會違反資訊作為「科學」二字的含義。

洪士灝教授也為文提到:

這是目前教育上常見到共同問題,所以我不希望在資訊教育中教得太複雜,希望多一些實作類的專題,讓學生多些自由發揮的空間,也就是所謂的 project-based learning 的概念。同時,還希望利用資訊教育,把其他學科的東西帶進來活用,培養跨領域的概念。

這是國外大學當前在推所謂的「基石cornerstone)課程」的概念,資訊系不見得要和傳統課程那樣按部就班由程式語言學起,然後是演算法、物件導向、自動機、系統程式、作業系統、計算機結構等等,而是先告訴學生資訊技術可以解決哪些有趣的問題,以及如何實際利用工具解決問題,再告訴他們裡面有哪些複雜的問題會在以後哪些課程中教到。

另一篇文章〈資訊通識教育與計算思維怎麼教?〉也提到:

會寫程式不代表一定懂計算思維,反過來說,懂運算思維不見得會寫好程式。所以,我並不是說不要教程式設計,而是不希望過於強調程式設計,因而框限了學習內容和未來的發展性。

在這類較中肯的意見中,運算思維 (computational thinking) 是個反覆出現的關鍵詞。

四大核心

「運算思維」,聽起來既神祕,又抽象。滿容易震懾外行人的。

其實並沒有太神祕複雜。網路搜尋一下,很容易找到解釋:

從這些資訊中,可看到目前公認的運算思維四大核心是:

  1. Decomposition:拆解、分解。
  2. Pattern recognition:模式識別、規律尋求。
  3. Abstraction:抽象化。
  4. 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 項法寶為例:

  1. 類比原則
  2. 富比尼原理
  3. 奇偶原理
  4. 狄利克雷原理
  5. 排容原理
  6. 相反原則
  7. 歸納原則
  8. 一般化原則
  9. 特殊化原則
  10. 變化原則
  11. 不變性原理
  12. 單向變化原則
  13. 無窮遞減法則
  14. 對稱原理
  15. 極值原理
  16. 遞迴原理
  17. 步步逼近原則
  18. 著色原理
  19. 隨機化原則
  20. 轉換觀點原則
  21. 模組化原則
  22. 蠻力原則

你看,是不是在實踐層次,也和現在很潮的「運算思維」四大核心高度呼應?

所以,數學教育好好落實,其實也已經在打穩「運算思維」的基礎。

只是傳統數學教學被炫麗解題花招綁架了,導致數學教育失靈。

只要第一線教育現場不重視根本思維,那麼,再多一個程式設計課,就會提升下一代素質嗎……?

最大分野

運算思維,目前公認有四大核心。

嚴格來說,運算思維與其他領域(非 STEM 領域尤然)最大分野,就是 algorithm(演算法)了。

不過,這又是另一篇長文才能探討的了。

(其實小學數學的長除法、輾轉相除法、因數分解,就是一種演算法⋯⋯)

語文素養

最近,為了教小孩數學解題思維,重拾高中時代指定讀物 How to Solve It(當年我用的是張憶壽教授的譯本,而不是現在市面上通行的天下文化譯本),尋求好的引導方法。

突然發現,這本奇書,何止數學會用到,語文的 literacy capability、電腦的 computational thinking,也都會用到這本書的思維心法。

談數學的書,也會重視 literacy capability?會不會扯太遠了?

證據在此,請看看以下的解題提示表,不折不扣的 literacy capability 應用:

How to Solve It 解題提示表

How to Solve It 解題提示表

這本書也提倡:在解題的各個環節,要善加運用所謂的「啟發式問句」自我提問。譬如說,在「了解問題」方面,可以如此提問:

  • 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 連載文章所用的引導方法,或是我愛用的既有知識或現實世界類比方法,其實是辦得到的。像當年我教大學生迴圈時,就是用國中數學的等差級數、等比級數為引子。先備知識,是很重要的學習遷移資源。

數學教育好好落實,其實也已經在打穩「運算思維」的基礎。只是傳統數學教學被炫麗解題花招綁架了,導致數學教育失靈。

只要第一線教育現場不重視根本思維,那麼,再多一個程式設計課,就會提升下一代素質嗎⋯⋯?

切記洪教授諄諄提醒的:「不要教太難、教學時間要足夠、課程要設計好、師資要準備好,要做的話就要有充分的資源來做,不然會做不好。」

系列文章

❶ 運算思維其實一點也不神祕(上集)

演算法也有不神祕的一面(下集)