Contents ...
udn網路城邦
大蟒蛇的小烏龜
2022/05/28 08:58
瀏覽1,045
迴響1
推薦24
引用0






大蟒蛇的小烏龜



每個人在快退休時,對自己往後的生活大概都會有些規劃吧?我就曾問自己:要過怎麼樣的退休生活呢?我的決定是:日子要儘量簡單、樸實和健康。具體的做法包括:〈一〉希望大部份時間能在台灣度過,因為自己在二十多歲出國唸書以來,在國外的歲月已比在故土生活的時日多太多了。退休後,不再有朝九晚五的工作和責任纏身,時間能夠自行支配,正該回過頭來,返回自小熟悉的鄉土,與親人、同學及朋友們多親近;〈二〉多親近台灣的山川景色和各地的風土人情;〈三〉維持快走運動的習慣,保持身心的健康;〈四〉保持看書、聽音樂和寫作的習慣;〈五〉希望能夠有機會回餽社會。

退休後,上面所列的前四項,我基本都做到了,倒是第五點,卻至今都未能付諸實行。回饋什麼給社會?想法又是源自何處呢?

在我學習電腦的年代,世上只有大型電腦,電腦程式碼需要先寫在一張張的程式碼表格(coding form)上,然後由打卡員(學生則自己)用打卡機將電腦碼打成卡片(一張卡片一個指令),然後將一大疊的卡片輸入讀卡機裡讓電腦編譯。若有任何錯誤(例如拼錯字或漏掉標點符號),就要先除錯和重打發現錯誤的卡片。即使編譯沒有問題,程式仍可能有邏輯上的錯誤(常見的邏輯錯誤就是程式不斷的執行,沒有終結和停止的時候,結果是印表機不斷的印空白或是垃圾文字出來,等到電腦室的作業員發現時,一大疊的報表紙已經被浪費掉了。犯了這種錯誤的學生,絕對會被電腦室的作業員罵到臭頭的)。在那個年代,電腦是讓人恐懼生畏的東西;寫電腦程式和除錯,是個費時、費神和考驗腦力、邏輯思維以及耐心面對挑戰的事情。

桌上型個人電腦是我在大學教書時,才開始在市面上出現的。它先是使用五點二五英吋的軟式磁碟(在使用比桌上型個人電腦更大的「mini(迷你)」電腦時,則使用了八英吋的軟式磁碟),後來才換成了三點五英吋的磁碟。

在這樣的時代背景之下,和我一起成長的這一代親友和同學們(也就是六、七十歲的阿伯和阿嬤們),懂電腦的人不多,普遍是對電腦懷有恐懼感,可躲就躲,能避則避。記得有一年我返台度假,發現幾位好友和表弟們,就是那種能不觸碰電腦就不觸碰電腦的典型。他們雖貴為總經理、董事長和政府的政務官,但他們對外的聯絡事宜,都是由秘書代勞的。我對他們開玩笑說,如果連我們往來的電子信件都要依賴秘書來操辦的話,我們還有什麼隱私可言呢?於是拉著他們跟我坐在電腦前,我上網為他們各申請了一個免費的電郵信箱,示範如何撰寫和收發電子信件,也教他們如何上網申請免費的部落格,如何設定、貼文,和附加照片及背景音樂等等,並請他們從此要用新申請的電郵信箱跟我聯絡(不可用公司的電郵信箱由秘書代勞打信),也要用部落格分享他們的生活和旅遊。他們在我「半強迫」的要求下,寫了幾封電郵後,好像也漸漸習慣了。

上面的這些經驗,使我不免想到,我的那些好友和表弟們都是受過高等教育而且事業有成的人士,對電腦都會有恐懼感,那麼,在我這一代的絕大多數人,是不是對電腦懂得更少,更容易有恐懼感呢?於是我覺得,等我退休後,若長住在故鄉,也許我可以到社區學院,義務為阿伯和阿嬤們講授一些與電腦有關的基本概念,並且學習和實際使用簡單的電腦語言,來寫一些簡單的程式和欣賞那產生如「奇跡」般奇妙有趣的結果。我甚至想,也許教小學生,乃至幼稚園大班的娃娃這些東西,也可能會很有意義呢,因為在他們這種年紀,充滿了好奇,而且容易接受新的東西。若是如此,那麼我應該使用什麼簡單易懂的電腦語言當工具呢?我應該使用什麼方式來教他們呢?

在漫長的職業生涯中,我在大學、專科和公司,總共教過不下十種寫電腦程式的電腦語言,到底哪一種電腦語言比較適合這種需要呢?我東想西想,覺得大蟒蛇(Python)應該是比較合適的,因為:〈一〉它不但是目前世上最多人使用的電腦語言(佔使用總人數的31.47%),而過去我最喜歡,並且教了許多年的 Java,如今僅排在第二位(佔使用總人數的19.14%); 〈二〉它的編譯軟體是免費的,可以自由下載使用;〈三〉它有個Library(函式庫)叫做小「烏龜(turtle)」,是為了引起小朋友們對電腦程式設計的興趣,所專門設計出來的 library。它的指令簡單易懂,可以在螢幕上輕鬆自在的畫出琳琅滿目的多彩圖畫,這應該是很有趣而又吸引人的事情。

它的簡單易學,我不妨在這兒舉個使用大蟒蛇的小烏龜來繪圖的實例(附圖一)。這個電腦程式總共僅有簡單的十一行,只要您略懂英文,就不難明白每行指令是在做什麼了。我簡單述說於下:

首先,它告訴大蟒蛇說:我要使用小烏龜了(from turtle import *)。

接著它說:畫筆的形狀是小烏龜(shape (" turtle"))。註:筆形可以有其他選擇,例如圓形、箭頭、三角形等等。

指令三說:筆劃是紅色,用黃色來填滿空間(color (red, yellow))。

指令四說:開始填色吧(begin_fill( ))。要填色到什麼時候呢?要一直到指令十(end_fill( ))才停止。您看它標明「開始填色(begin fill)」以及結束填色(end fill)」,也可看出端倪。

指令五說:真的,就一直畫吧,直到有人叫停(while True:)。

指令六到指令九是告訴小烏龜怎麼畫和何時停。
指令六forward(200) 說:小烏龜,向前爬行(畫線)兩百個像素(pixels)吧。
指令七說:然後你就向左調頭一百七十度(left(170))。

接著指令八(if abs(pos()) < 1:)和指令九(break)是查看現在是什麼情況?是要繼續畫還是要跳出框框?如果是繼續畫,就重複向前爬行兩百像素,然後向左調頭一百七十度;否則就跳到指令十。

指令十(end_fill( ))
如上所述,是停止填色。

指令十一: done ( )
工作完成。

電腦強而有力的一點,是它能快速不厭倦的重複運算而且不出錯,而我們在電腦程式中可以利用指令形成控制的機制,告訴電腦運算和執行到何時停止。指令八和九就是控制和決定何時停止執行的機制。在此我沒做詳細的解說,因為怕會佔太多篇幅。

退休後在台灣,我跟阿秋和表弟及朋友們談起,到社區學院義務教年長的人士,或是到小學教兒童,一些基本的電腦觀念和簡單的程式設計的可能性。

阿秋說:現在大概沒有人會對學習電腦程式設計有興趣啦!現在大多數的人們只對手機應用軟體的使用有興趣。

朋友和表弟也說,早些年,社區學院還有教一些電腦的應用軟體(例如微軟的文字處理),後來也教一些手機的應用軟體;年輕人對電腦遊戲和應用軟體的使用有興趣,對學習寫電腦程式大概不會感到興趣。

我想想,也是。其實進一步想,要到社區學院或是小學(甚至幼稚園)教大蟒蛇的小烏龜來學電腦概念和用電腦程式繪圖,也有其困難之處,因為每個人都需自備筆電才行。我知道,現在應該人人都有智慧型的手機,但有多少人擁有自己的筆電呢?這我就不得而知了。此外,我往返美國和台灣之間的時候也不固定。這也會造成教學的不便和困難。

雖然在新的年輕世代中,玩電腦的各種遊戲非常的盛行,許多人甚至沉迷其中而難以自拔。因為現在的電腦速度非常的快,記憶體容量極大,繪圖軟體功能強大複雜(過去一個人可以寫出一個遊戲的軟體,現在則需一個公司,包括遊戲設計、故事編劇、音樂、音效、宣傳、包裝、程式設計師等等龐大的團隊來完成)。玩電腦遊戲,因為聲光音效與人物和其他物件都非常的逼真,玩起來非常的過癮,不過,不知有多少人會偶而停下來想一想,花了那麼多的時間與精力來玩電腦遊戲,除了娛樂之外,還有什麼其他的收穫呢?有沒有人想過,自己玩得非常過癮的電腦遊戲,其實是由一組電腦程式設計師所寫下的電腦軟體呢?如果自己肯花時間和功夫,去學習一種電腦語言來寫電腦程式,也許就可能創造出一些屬於自己的,新的東西(也許是另一種電腦遊戲?)只要有寫電腦程式的才能,也許可以為自己尋到一份高薪的工作,如果自己有豐富的想像力和創造力,甚至也有可能為自己創造出事業和財富呢。

我的意思是:在痛快淋漓的玩電腦遊戲之餘,不妨也多一點好奇心,試著了解那些遊戲或是場景,是如何靠電腦指令和程式創造出來的?自己是否可以藉著學習電腦語言和創作電腦程式來窺探一些其中的奧妙呢?

【附註】
圖片一︰僅有十一個指令的電腦程式所產生的結果
圖片二︰小烏龜向前畫紅線200像素後,向左轉身170度
圖片三︰小烏龜畫完兩條紅線後,再向左轉身170度並填色
圖片四︰小烏龜畫完三條紅線後,向左轉身也填了黃色


僅有十一個指令的電腦程式所產生的結果。


小烏龜向前畫紅線200像素後,向左轉身170度。


小烏龜畫完兩條紅線後,再向左轉身170度並填色。


小烏龜畫完三條紅線後,向左轉身也填了黃色。

如果附圖引起您的興趣,不妨看看下面對十一行指令的簡單說明。首先要注意的是,這個電腦語言對英文字母的大寫或小寫是有不同的意義的,是有區別的(case sensitive)。在這個例子中的十一行指令中,True 這個字以大寫的 T 起頭,如果用了小寫的 t 就會造成程式的錯誤。除此之外,所有其他的每個字都是小寫。有些電腦語言對於大寫或是小寫是不在意,沒有區別的,例如在商用電腦語言 COBOL 裡,read 和 Read 以及 READ 的意思是完全相同的。較新的電腦語言(例如 Python、Java、c、c++ 等等)通常英文字母的大寫或小寫是有不同的意義的(case sensitive)。

指令一: from turtle import *
告訴「大蟒蛇(Python)說,我要使用烏龜(turtle)這個軟體了(就是從「大蟒蛇匯入烏龜這個Library(函式庫)」)。所謂的函式庫,有點像是做菜要使用食譜的概念。也就是告訴「大蟒蛇(Python)」這個電腦語言,下面我要使用「烏龜」這本「食譜」來繪圖了。

指令二: shape (" turtle")
表明畫筆是烏龜的形狀(繪圖完畢後,可以看到一隻小烏龜停止在終點)。其實除了烏龜這個形狀之外,還可以有一些別的選擇,例如︰箭頭、方形、三角形、圓圈和 classic等等。

指令三: color (red, yellow)
選擇畫筆的顏色為紅色,並且用黃色來填色。

指令四: begin_fill( )
好,下面就要開始填畫圖片了。

指令五: while True:
就依照下面在「框框」裡的指令(就是往右邊縮進的第六、七、八、九等四個指令)繪畫吧,直到我叫你離開「框框」為止。

指令六: forward(200)
把筆尖(小烏龜)向前畫兩百個像素(pixels)。

指令七: left(170)
然後把筆尖向左移動一百七十度。

指令八 if abs(pos()) < 1:
和指令九: break
檢查一下筆尖(小烏龜)現在的位置(pos),它的絕對值(abs)是否小於一?如果是的話,便跳出這個「框框」(換句話說,就是跳到第十個指令);如果不是的話,就回去執行第六至第八的指令(即把筆尖向前畫兩百個像素(pixels)、再把筆尖向左移動一百七十度……)。在這個「框框」裡,每畫兩百個像素後向左轉一百七十度,再向前畫兩百個像素,然後又向左轉一百七十度……這樣持續畫線及向左調轉筆尖的角度,線條越繪越多越密,到最後,整個平面幾乎都畫完了,沒有空間了(即筆尖所在位置的角度,它的絕對值都小於一了),此時就要跳出這個「框框」,到第十個指令。

指令十: end_fill( )
繪圖到此結束。

指令十一: done ( )
工作完成。

大蟒蛇的小烏龜 2022-05-28 http://www.ksnews.com.tw/upload/20220528-011.pdf



大蟒蛇的小烏龜 2022-05-28

         (2022-05-28 刊於更生日報副刊)   

【附記】

現在 YouTube 上也可以找到一些教人用小烏龜畫圖的視頻,因為我沒有觀賞,不知教學的效果如何?有興趣的人可以找來看看。

這篇短文刊出時,距離文稿寄出的日期,約四個月又三個星期。




Morning Has Broken




有誰推薦more
全站分類:心情隨筆 心情日記
自訂分類:不分類
上一則: 寒冬記事
下一則: 網路世界陷阱多
你可能會有興趣的文章:
迴響(1) :
1樓. Celine_確診紀錄
2022/05/29 18:41

耀星兄您好,偶然讀到您的格文,很有知識性,非常喜歡 ~~~ 微笑

不過學寫電腦程式的部份,還真要有興趣才行。我念碩士班那時會用不少統計軟體,號稱 SAS Queen. 寫博論時需要用一種 Gauss 軟體,我拿了一本 Fortran 的小書對照學習,自學後也夠用了。

但自從教書之後,只用 PPT 和 Excel 就能演示課程內容,我就不再有興趣學寫程式。最近看到年輕同事線上上課,桌電搭配平版、懸吊式麥克風加上集音設備,旁邊搭配小電風扇降溫增進效能、連錄影檔損壞還有辦法修好、、、實在自嘆不如,自己還是用傳統方法混到退休就好了 閃

謝謝 Celine 的回應和喜歡拙作。


過去我也使用過統計方面的軟體 SPSS 和 SAS。想起我大學時代要做統計的計算時,還得使用非常笨重的統計用機械(用手撥動數字,用手搖長柄旋轉的那種),若要到校外,提著那沉重的機器出門,可就要吃不少苦頭,所以在國外使用那些統計軟體,真是歡喜萬分。


寫電腦程式的確是需要興趣和適當的邏輯思維,否則就會受盡折磨。我曾教過一位教育系的女學生「電腦概論」,這門課需學電腦語言(BASIC)。當時「電腦概論」是每個大學生(包括體育系)的必修課。這位女學生在期中考時可以考得 80 分(因為尚未涉及電腦程式),等有電腦程式作業時,她連一個作業都交不出來,期末考更是一塌糊塗(因為有程式相關的考題),所以她的學期成績我給了一個 F。到了下個學期,她去修其他老師的課,還是得了一個 F。她第三次修這門課時,又來修我的課,我實在很同情她。在她的一張作業上,特別留字告訴她,即使她的程式作業不 work,還是請她務必交出來,這樣我還可以給她 partial credits。其實我是暗示她,只要她交出錯誤的程式作業,我就可以給她分數(若滿分是十分,我可以給她八分或是六分,決定權在我手上),倘若她什麼都沒交給我,我便沒法給任何分數。我是準備只要她交出任何東西,我都會設法讓她在修第三次時過關的。可惜她大概沒看懂我的暗示,她依舊沒交出任何程式作業,我在無奈之下,只好再次給她的學期成績一個 F。


FORTRAN 我也教過。其實我以前很喜歡教組合語言,這種比較低階的語言(僅在 0 與 1 的機器語言之上),過去是寫系統程式必須使用的語言。後來 c 和 c++ 語言出來後,因為它們也可以操弄 bits 和 bytes 了,因此寫系統程式也可以使用像 c 和 c++ 這樣的高階語言了。
☆耀星☆2022/05/29 21:07回覆
發表迴響

會員登入