如何學寫程式 Python 篇

單維彰的私人書摘

吳維漢 (2020) 如何學寫程式 Python 篇--學會用「數學思維」寫程式. 桃園市:中大出版中心, 2020/11. ISBN 978-986-5659-33-2

距離上一篇書摘或書評,居然超過了半年。 看起來我好像半年沒有讀書,這當然不是真的。 其實我讀了很多書,但是沒有一本真讀「完」了的, 大多是無疾而終,但有一本卻是「捨不得」讀完。 那麼,想必這半年我很忙,這似乎是真的; 但是卻也說不明白到底忙些什麼? 寫這篇書摘,倒像是要自我檢討這半年倒底做了什麼?

一月初,我臨時得知要接替一門吳維漢教授的課: 數學系大一必修的「基礎程式設計」。 這門課近年都由維漢主持,他還為此撰寫了本文標題的這一本教科書。 他提供教材(投影片和考題)給我,也替我指派了助教(有一學期的帶班經驗), 這門課就這樣匆匆開張了。 我基本上按照維漢安排的進度,逐章教完了這本書。 於是它成為我這半年唯一讀完的書。

維漢的用心就寫在副標題上

用「數學思維」學習程式設計。

他用短短的 17 頁完成第一章,非常迅速地進入 Python 園地, 讓學生很快就有「習題」可做。 這樣的進度可能稍微急了些,但是教師可以適度補充, 而且指派作業的時候,也可以放鬆一點。 維漢的基本安排是不錯的:讓學生盡快有實際的問題可以做。

然後就是這本書最獨特的一章了:第二章「基礎程式數學」。 維漢為學生複習國中、高中可用來設計程式的數學, 並以一系列的遊戲形式,示範數學思維如何實踐在程式設計上。 維漢設想的讀者,包括了高中學生和人文社會領域的學生, 所以他避開了涉及較多計算機科學、較高等數學的基本題型, 改以大量「遊戲式」的題目或任務,作為程式設計的動機。 這樣的安排,使這本書得以建立在較為基礎的國中數學上。

因為前述設計理念,我認為這本書可以用來啟蒙國、高中學生。 但是,若要照顧這些學生,可能需要額外協助學生建立較為「可親」的工作環境。

程式設計的「真諦」就在於「洞察」解決問題的方案, 可以化約為若干可重複執行的程序。 而這些重複執行的程序,基本上就以「迴圈」和「函式」的形式出現; 為了實踐上述重複,程式的執行順序必須有所抉擇,於是導引出「條件式」的需求。 維漢非常聰明地先談 for 迴圈,他用了兩章(第三、第四)來細細地解釋 for 迴圈, 並且不厭其煩地設計各式各樣的「遊戲」來練習 for 迴圈。 如此則將條件式與邏輯分岔推遲到第五章才登場。 因為迴圈僅需倚賴國中階段的「數列」知識,而較少邏輯推理的需求, 此舉應該會有效降低學習的坡度。

作為「啟蒙」教材,第四章可能太複雜了些。 因此,如果國、高中老師採用此教材,建議第四章可以擇要帶過, 早點進入第五章。這一章將會觸及正整數的算術分解,以及一種簡化了的質數篩檢 (簡化的意思是:效率較低,但是程式的邏輯較簡單,資料結構也很單純)。 在這些具體的任務中,學生有機會分辨採用 for 和採用 while 的不同時機。

處理完迴圈和邏輯分岔之後,維漢必須處理最基本的資料結構:串列(list)。 這就到了第六章,也差不多用完了一個學期的三學分時間。 於是這本書只好割捨了「函式」。 這樣一來,「運算思維」的三大技術性思考方法:迴圈、函式、物件, 只能完成一項。對於理工學院的大學生,這樣的內容似乎少了點兒。 這是個時間與內容的抉擇,於是我選擇略為刪減了第四章「多層 for 迴圈」的內容, 塞進去函式導向的思維方式(與技術)。 至於物件導向,只能一再以字串、串列的 operator overload 為例, 讓學生「欣賞」它的方便性,卻沒有機會讓學生嘗試自己設計一個類別/型態出來。

前面說過維漢將這本書的數學基礎保持在國中程度, 這僅是就技術層面而言的,當然不是指學生的成熟度。 如果這算是作者和讀者之間的約定,則他確實保持了這本書的承諾。 但是,做了太多的遊戲之後,有些讀者或許難以察覺程式設計有什麼「實用」價值? 在數學領域之內,除了數列的應用以外, 比較亮眼的「應用」可能只有「因數分解」以及「質數判斷」;它們仍在國中範圍內。 因為我的學生已經是數學系第二學期的程度, 所以我稍微將數學先備知識提升到矩陣和黎曼和。 我希望藉此讓學生體會程式設計在數學(乃至於理科)領域內的實用性, 但是我同時也擔心這樣做破壞了維漢苦心的設計, 也因此害得學生跟不上進度。

至於國、高中學生,因為本來也還沒到學習資料結構的時機, 而且學分數較低,我認為學會第五章就可以了,不必正式進入第六章。 雖然數學的技術性需求只有國中程度,但我估計還是高中生才能達到合適的成熟度; 至於國中生,可能只有一部分能夠試試看。

最後再來自省;回顧這半年,我到底做了什麼? 現在想來,似乎什麼也說不上來。 非常慚愧,沒有讀書,也沒有旅行,就連電影都沒看幾部。 我的時間,似乎全部分散在授課、備課、導師、與行政之中。 行政工作相當於 3 鐘點(因為學校准我減授 3 鐘點), 而我實際授課 8 鐘點(其中 3 個來自前述臨時的接替), 再加上大學部導師、服務學習導師、研究生導師和科技部研究計畫, 至少相當於 4 鐘點,我這學期的校內工作相當於 15 鐘點。 外加兩門遠距課程:「雲端學院」的《文化脈絡中的數學》, 以及大同高中的《微積分先修》。 再加上兩名「特殊選才」管道入學的新生, 我指導他們做一學期的獨立研讀。

5 月 12 日突然發生的「第三級警戒」或許是另一個好藉口, 它使得我每週似乎只能對付出六堂課的遠距教材, 再把行政和導師職責做完,就筋疲力盡了。 這個經驗值或許很誇張:我需要 6 比 1 的時間,才能產出一份非同步遠距教材。 似乎這些忙碌的原因都是解脫自己的理由, 但卻又都不是:它們全是自找的,也都是可以另有出路的。

回顧 2021 的前半年,讓我感到非常惶恐。 它似乎是我「失落的半年」。

[ 回上層 ]


Created: June 13, 2021
Last Revised:
© Copyright 2021 Wei-Chang Shann 單維彰     [Home Page]
shann@math.ncu.edu.tw