【專家文】學程式跟學運算思維有甚麼差別? - 太陽實驗室郭彥谷
還記得2018創立太陽實驗室時,跟夥伴討論時,他說:「我們要教的是運算思維,不教程式。」那時候,跟家長講我們不是教程式的機構,而是教運算思維,很少家長知道什麼是運算思維,常常還需要解釋運算思維是什麼?花了不少時間說明,想想當初應該辦一些講座演講,應該可以省下一些時間。
家長聽完後,有問到:「那為什麼不學程式就好?聽起來這樣也可以學運算思維啊?」難道程式當中學變數、學函式不是在學運算思維嗎?其實當下,我也有點困惑,再看了許多國外的文獻,甚至去拜訪學者請益,不斷討論思考後,了解當中的關係,有種豁然開朗的感覺,重點不在於學不學、教不教程式,而是教學的方式。
在講教學的方式之前,需要先釐清運算思維與程式之間有什麼關係?簡單講,運算思維是一個系統化解決問題的思考方法,而透過程式只是其中一種透過電腦來解決問題的表現方式,一個是思考方法,一個是表現方式,思考方法是凌駕在表現方式之上;更進一步,當具備運算思維思考方法時,是不是要透過電腦來解決問題,就不一定了。了解兩者間的從屬關係後,再回到前面所提到的教學方式的影響。
以前大學時代學習程式,一步步學著變數、函式呼叫、迴圈、條件式等,不斷地寫程式,漸漸地會寫一些程式,拆解、模式、抽象化、演算法這些名詞,在過程中也都常聽到,都是思考規劃程式時要用到的觀念,理所當然地認為,這些就是跟程式有關,怎樣透過程式來解決問題,改善人類生活,也是我大學時代的志向吧?壓根沒想到,怎樣把寫程式的思考方式,應用在其他方面,甚至是人生處世上,經過多年的社會磨練後,才開始知道這樣的思考方式,是可以幫助面對一個問題時,系統化有依據地去嘗試提出解決方法,也就是後來廣為人知的「運算思維」。
這樣的思維,是可以從小培養起的,而且未必完全透過程式coding才能學會,因為運算思維Computational Thinking(CT)是種高階跨學科的思考方式,可以經由插電與不插電的方式去學習,我建議透過多樣的管道,讓孩子熟悉如何運用運算思維的四大元素,學習了解情境,分析問題,習慣這樣的思考方式。
以下分別介紹運算思維四大元素以及實際教學操作方式,不管是老師在學校,或是家長在家裡,會不會電腦,都可以帶著小朋友去練習運算思維的思考方式,以及這些觀念跟程式學習之間的關係。
運算思維Computational Thinking 四大元素
1.拆解Decomposition
面對複雜的問題,如果能夠拆解成較小的問題,逐一克服,這是一種較容易的處理方法,也是運算思維四大元素之一。在引導孩子學習的過程,可以先從他們生活周遭的事物著手,比方寫下刷牙的步驟、準備早餐的步驟,透過這些熟悉的事物來練習,不用特別學習相關知識,可以幫助他們專注在分析拆解能力的培養。逐步可以開始嘗試越來越複雜的問題拆解,比方寫作文,多位數的乘法,甚至是歷史事件,這些都是不用程式來學習拆解。
同時可以透過code.org上的許多免費資源,讓孩子逐漸從資訊科學Computer Science(CS)的角度去學習應用問題拆解。
2.模式識別Pattern recognition
模式識別是我家小朋友最喜歡的一件事,當然,他們並不知道自己正在學模式識別,對他們而言,就是「大家來找碴」,看著一堆類似的圖形,仔細去找出相似與相異的點;看著逐漸變化的圖形或數字,去推斷接下來圖形的樣貌或是數值,從這當中,去培養觀察力與推理的能力。找出規律性,像是嘗試排出讀書計劃表,都是訓練模式識別思考方式的好方法。
在程式上學習時,在觀察問題時找出相同的模式,透過呼叫函式或是迴圈的方式,有效提高程式的執行效率,這些都是模式識別的實際應用。
3.抽象化Abstraction
抽象化這名詞,對於小朋友來說,真的是個很「抽象」的字,但是如果從英文來看,Abstract本身除了抽象,還有摘要的意思,用白話來說就是「抓重點」,要進行這樣的練習,可以配合前面提到的模式識別,不同的是,除了找出相似的共通點外,更進一步從這些共通點,去創造出新的角色。像是孩子們喜歡的超級英雄,可以挑選幾位超級英雄,讓他們去觀察思考,超級英雄們的共通點,之後要求利用這些共通點,去創造一個自己的超級英雄,這是抽象化思考的練習;另外像是學習聽完一段話、看完一篇文章後,要求用幾句話講出重點,也是很好的練習,甚至是未來在職場上也常常需要這種能力。
在程式學習上,抽象化的概念常常被應用,像是變數的宣告,甚至是物件導向程式中,物件的描述,都是抽象化的實際應用。
4.演算法Algorithm
演算法就是把步驟講清楚,一步步寫好,讓任何人都可以根據寫出來的演算法,順利做出相同的結果,做演算法的練習,常常會應用到前面講得幾個元素,像是拆解步驟,找出模式,進而描述作法,一開始還是先從孩子容易想像的生活周遭著手,像是前面提到的刷牙,當拆解出每個步驟後,可以帶著討論哪些步驟是可以調動的,不會對結果有影響,哪些是一定要做?哪些是有先後順序的動作,這都是培養演算法設計的能力。
在程式學習上,好的演算法可以讓執行效率提高許多,將步驟一步步寫出來是最基本的,如何簡化步驟並且得到想要的結果,便需要演算法設計。
簡單地說明運算思維,並且提出透過日常生活的點點滴滴,讓孩子從他們身邊可以具體想像的事物為出發點去進行運算思維四大元素的思考練習,逐漸培養系統化思考的習慣,逐步從具體事物發展到抽象形而上的問題,進而透過程式語言去實際應用。是不是有種「天下道理,一旦悟道後,其實都是相同的道理」的感覺?如果在教學時,能夠跨學科的提點當中的共通性,不光是單科目單點式的學習,就更能蹴類旁通,打通思考的任督二脈,更了解自己現在在學什麼?以及實際的應用與價值。
希望透過這樣的介紹,讓大家了解運算思維與實際解決問題方法的關係,也許當了解這些後,未來在教授或是學習程式語言,都有進一步的領悟,不再只是冷冰冰的電腦語言,而是跟生活各項問題息息相關的系統解決方式。
擁有超過 10 年軟體科技 / 互聯網 / 區塊鏈業界經驗的科技人,同時也是 Google Education 認證教師,廣達文教基金會董事與博理基金會主任研究員。 2018年,受命研究歐美運算思維教育後,決心將更好的運算思維資訊教育帶來台灣,因此創立太陽實驗室,從兩三人的小工作室,一路帶領,逐漸成立成熟的教學行銷與設計團隊,穩定開課。 期盼帶給更多家長學生,完整的運算思維學習歷程,讓人人想法有創意,做事有邏輯,表達有條理。