會員中心

Scroll To Top
2022年05月28日

大蟒蛇的小烏龜 ◎黃耀星

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

日子要儘量簡單、樸實和健康。具體的做法包括:

〈一〉希望大部份時間能在台灣度過,因為自己在二十多歲出國唸書以來,在國外的歲月已比在故土生活的時日多太多了。退休後,不再有朝九晚五的工作和責任纏身,時間能夠自行支配,正該回過頭來,返回自小熟悉的鄉土,與親人、同學及朋友們多親近;〈二〉多親近台灣的山川景色和各地的風土人情;〈三〉維持快走運動的習慣,保持身心的健康;〈四〉保持看書、聽音樂和寫作的習慣;〈五〉希望能夠有機會回餽社會。

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

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

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

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

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

在漫長的職業生涯中,我在大學、專科和公司,總共教過不下十種寫電腦程式的電腦語言,到底哪一種電腦語言比較適合這種需要呢?我東想西想,覺得大蟒蛇(Python)應該是比較合適的,因為:〈一〉它不但是目前世上最多人使用的電腦語言(佔使用總人數的三一.四七%),而過去我最喜歡,並且教了許多年的 Java,如今僅排在第二位(佔使用總人數的一九.一四%); 〈二〉它的編譯軟體是免費的,可以自由下載使用;〈三〉它有個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度並填色

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