2021年10月25日 星期一

Py(thon) Route直直行

Py(thon) Route直直行

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FBhttp://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/

Nov. 1, 2021
88x31.png[1]

歹路金拍走,不用驚,擱向前行(台語)。

108課綱之科技領綱

今年(2021)翰林出版社獨樹一格,在九上資訊科技科投入一顆強大的震撼彈:編入一章12節課的Python編程(我們暫借此詞語,因為通俗的程式設計(programming design)一詞太過形下而強調。「技法(skills)」。另一方面,運算思維(computational thinking)又太形上而有摸不著邊際之感)。有人一聽到國中生要學語法程式立刻心生疑問:新課綱不是規範第四教育階段(七到九年級)宜採積木式的視覺化程式設計工具(visualized programming tools)教學嗎?我們翻出科技領綱(https://reurl.cc/Krl7Rj ,第10頁)來細究它是怎麼說的:

中學的程式設計:包含程式設計的概念、實作及應用。「可」採用視覺化程式設計工具,並搭配演算法進行教學。

就字面上來說,「可」採不需等於「必」採,也就是說視覺工具是個建議值罷了。就教學面向來說,很難有一套學習法就能適用於所有的學生。畢竟教學實施的對象是「人」,而鍾鼎山林各有所好啊!
所以,重點似乎不在課綱規範什麼,反倒是我們要教哪些。
對筆者而言,我們備完課後所擬出的三點教學目標如下:
  1. 編程共創:網路是一個便於分享與交流的平台,利用它的分散多工的環境洽好適合異地協作編程來共同創作專案。
  2. Python體驗:在我們備完翰林版國九資訊科技第2章的從Scratch到Python後寫下《從軟體工具提升到資訊系統觀的12堂Python專題製作之旅:以1A2B為例》(https://reurl.cc/L7n0ax) 一文,接著就有同行前輩問道:上完這套Python課程模組後,能保證學生們都一定會寫程式嗎?這一問,勾起我們最深的信念:學習編程 ≠ 程式設計(精準來說是邏輯思考訓練),也不意味著人人將來都要成為程式設計師。所以,就如同芬蘭的孩童游泳課(https://reurl.cc/NZxoDn)一樣,設計各種遊戲來誘發小朋友不怕水,並能在水中潛水遊玩。因此,這短短的12節課並不是要教出未來的程式設計師,而是希望學生游藝於文字式編程之中。
  3. 雲端工具運用:共用、自動儲存、免安裝的輕量客戶端(thin client)操作,把所有非敏感性資料存在雲端上以便於隨時隨地(anytime anywhere)取用的概念對現行的學生是陌生而不熟悉的(就筆者近十年的教學經驗觀察)。雲端工具與平台的學習和程式專案的儲存,也是資訊科技的核心能力之一,尤其對於成長在這個網路世代的莘莘學子而言,這樣的雲端環境很可能就是他們畢業後的工作生態,尤其處在在世紀大疫情傳播感染的浩劫威脅之下。

編程基礎

縱觀各類程式語言(programming languages)的基礎結構,不外乎是循序(sequential)選擇(selective)重複(repititive)。然後才是模組化(modularized)程式,再結合陣列(array)資料結構(data structure)往下延伸。而Python亦然。換言之,初學程式設計要學的就是這些程式語言共通的原理、原則。

Python教學信念

筆者在某私立貴族私校任職期間,曾經教授過小六Scratch動畫設計(因為私校的勤管嚴教校風,資深資訊老師共商不宜教授遊戲設計)一年。上完一學期後,就有學生聽聞要續上Scratch而顯無奈。而翰林版教材中,七、八年級已上了整整兩年的Scratch了,學生們的倦怠感已然叢生,編程工具是該進化了~。

此外,當代能真正拿來開發應用軟體的程式語言仍以文字語法式為主。要嘛就升上10年級再接觸,要嘛就早早接受這必要之惡。

其實,程式語言也好,程式設計也罷,編程教育真正要訓練的是邏輯思維,程式只是表現想法的一個載體(carrier)──工具各有巧妙不同,教學存乎一心而已!

IDE(Integrated Development Environment)工具

編寫Python程式的免費Windows IDE甚多,在表1中我們將就幾個面向來分類它們的選用考量,並詳細說明我們最終採用Replit的演進過程。

表1:各種常見的Python IDE。

回顧上節我們擬定的三大教學目標:
  1. 編我共創 ColabReplit
  2. Python體驗 → ColabReplit、IDLE、Spyder、MS Visual Studio 2019、VS Code、Thonny
  3. 雲端工具運用 → ColabReplit、VS Code
很明顯地,三目標和7工具交集的結果是Colab和Replit。跟據我們實際教學的結果,因為學生端全數採用Google教育帳號登入,上兩次後竟發生圖1的Colab服務未開啟之窘境。經我們多方詢問與甞試後,推論出可能發生的問題來自本人雖身兼學校系管師,但並不是全校Google帳號管理者(super user)權限(permission)。Colab不是預設的Google應用程式(apps),再加上學生的年齡皆未滿18。因此,我們不敢冒然開放非預設的使用權限。


圖1:Colab服務未開啟。

最後,我們選用Replit這套老牌IDE工具。截至目前為止,至少在筆者教授的9個班約2xx人次中操作都很穩定。

學習路徑(learning routes)

請推薦Python教材、Python要怎麼學…?(本文不討論「學Python要做什麼、為什麼要學Python…」這類動機問題, 提供給有需要的讀者自行檢視自身的學習需求)優秀的航海士都備有詳盡的航海圖,出海航行時才不致迷航。以下我們將介紹幾條可行的學習路徑供讀者們參考與選擇---它們沒有最好,只有適不適合

  1. JS積木(圖2) Python:從JavaScript(JS)積木入門(https://makecode.microbit.org/#editor)可先不管文字式語法(syntax)的繁瑣規範。待有編程基礎後再進入Python的高階程式語言。
  2. JS積木 mP積木(圖3) Python:在JS積木和Python中插人micro Python(官方的正式名稱叫static pythonhttps://makecode.com/language。它是Pyhon語法的簡化版加上micro:bit開發版硬體控制程式的綜合體)為了方便起見,本文皆用mP來稱呼)做為中介的過渡站。在MakeCode平台上,mP的操作是拖曳出積木就會產生對應的語法程式,讓Python的初學者可以在進入純文字程式撰寫前有一稍稍的緩衝銜接。
  3. mP積木 Python:由mP積木自動產生語法程式的輔助開始熟悉mP的語法規則後,再進入Python的編程世界。
  4. Blockly積木 → Python此類較著名的Blockly積木工具有 Edu Blocks(https://app.edublocks.org/ )和Blockpy(https://think.cs.vt.edu/blockpy/blockpy/load )。其中,只有後者具積木和語法同時互轉的功能。
  5. Python:純文字語法的編程學習。
  6. 流程圖 Python:國內已出版百餘本各類程式語言專書的陳會安老師(https://tinyurl.com/yfk6ym82)所撰寫的「看流程圖寫Python」工具fChart(http://hueyanchen.byethost10.com/?i=1),是著眼於本國教育的地域性設計而成的「編程邏輯」訓練工具。筆者曾向大師請益,陳老師是這樣語重心長的說道:
台灣的編程教育最大的問題在哪?邏輯訓練。
外國的教育方式比較沒這方面的問題。因此,歐系(例如:芬蘭)的編程教學採語法視覺化;美系則採積木化。教學目標是把程式語言簡化成小孩比較容易理解的積木。
反觀台灣的現況卻非如此。所以,一昧的推廣Scratch是合適的嗎?
另一方面,就陳老師近年來的編程教學實務經驗,他觀察到:流程圖才是編程之母。積木不是。小朋友們拉完積木程式後,卻不一定懂程式背後的運算邏輯。

筆者自2017年推廣micro:bit編程到今(https://tinyurl.com/ygqm5rcu),也深此疑惑。如今巧遇大師解謎,也正將編程教學修正為:

想法 ---流程圖 → 程式

註1:我國國情是3~9年級推Scratch視覺化編程工具,10~12年級才進入文字式編程(目前有C/C++和Python兩派)。然而,MIT官方並未有Scratch自動產生C/C++或Python語法程的工具。因此,在編程的學習持續上一直有著很大的接軌落差存在。
註2:日前,筆者已將fChart流程圖的150個專案(https://github.com/fchart/fChartExamples2)全數做過一遍。它如何寫成Python程式碼的說明可參照筆者錄製的解說影片(https://youtu.be/bj6ZEub_nKg)。
註3:以fChart流程圖執行來訓練編程邏輯的展示如 https://youtu.be/-IJPXaCTUY8 所示。

圖2:MakeCode的JS積木編輯介面。

圖3:MakeCode的mP編輯介面。

教學法(teaching methods)

筆者以為,中學編程教學最大的挑戰是:由資訊專業走入通識教育。本來文法商…等等資訊非相關科系是一輩子也碰不到編程的。然而,自從科技以日進千里的躍進之後,編程思維竟儼然演進成未來公民必備的素養之一。因此,編程教學法就變成格外的重要了。本節將討論下列兩種常見的編程教學方式:

  1. 拆解法:教學者事先將程式做細部拆解。每次示範一小塊子功能。最後再組成完整的程式。
  2. 範例式(learning by examples):以小範例練習積累為主,不介紹深入的程式語法細節。強調從做中學習。

文字形語法常見錯誤類型

筆者就目前正在教授九年級Python程式設計12堂課的經驗,整理出下列幾種學生常見的語法錯誤類型:

1. 打錯字(typo):如圖4所示。該生將加權平均.6(60%)誤打成6,少了小數點。

圖4:打錯字。

2. 漏打字:如圖5所示,int()函式(function)只打了(),而沒打int。

圖5:漏打字。

3. 縮排(identation)問題:如圖6所示,Pyhon用空格(space)來標示程式區塊(block)。該縮的一定要縮;不該縮的不可亂縮。

圖6:縮排錯誤。

4. 函式與算式分不清:如圖7,print()是函式不是算式(expression)

圖7:函式 vs. 算式。

5. 變數名稱不一致:例如:average打成avergae。
6. ( )、[ ]未速配:Replit會有長方形的配對「提示」,但總有人會視而不見。
7. 語法規則還未進入長期記憶:例如:print('輸出字串')自動省略' '、print(字串1 + 字串2 + …)少打+…。

註:除了上述各類的程式錯誤外,現今國內資訊教育最大的困境在「打字」。筆者目前這批授課學生已九年級了,'、%、[ ]、數字鎖定鍵NumLock、倒退鍵、Del鍵、小寫i和小寫l不分、Ctrl+c、Ctrl+v…仍有不少學生很不熟悉,甚至找不到位於鍵盤何處而要舉手尋求協助。更嚴重的是,中/英打混合輸入時,全/半形不會控制。

英文菜菜子

現今的編程教育除了我國固有的邏輯缺陷(defects)與前述的語法障礙(barriers)之外,我們還有一個很嚴重語言依賴(dependency):非中文不可。筆者每回第一次上課示範的軟體界面只要是英文版的,馬上就「AI(會唉)」起來。這是來自心底對英文的恐懼(當然,有一部份是中文的慣性),也是政府宣示2030要邁向雙語國家的最大挑戰!
就編程英文而言,從圖8可以歸納出四個發生點:

  1. 英文UI(User Interface,使用者界面)
  2. 程式語言的英文語法。
  3. 程式行間的語法錯誤提示。
  4. 編譯錯誤訊息(error message)

圖8:編程英文發生處。

就筆者自己的學習經驗而言,語言的使用(usage)只是一種習慣,多聽、多看、多用自然就如呼吸般自然。單字看不懂、句子讀不會只是表層,內心深處是否想學才是最大的關鍵。