新!「文章導讀」頁上線!有系統、完整瀏覽本站文章!

2012年12月22日

Raspberry Pi 誕生的小故事

這裡有個關於催生出 Raspberry Pi 計畫的小故事。Eben Upton 本人對於從事資訊教育,一向抱有相當大的熱情。一個鄰居的小孩,知道 Eben 畢業於資訊相關科系,就跑來問他一些問題。
 
小孩:「聽說你懂電腦。」
Eben:「是的!有什麼我可以幫忙的嗎?」
小孩:「我想要學遊戲程式設計。」
Eben:「(眼睛發亮)好啊好啊!我這裡有幾本入門的書籍,你一定會有興趣的!嗯…你家的電腦是哪一種的?」
小孩:「Wii 跟 Xbox。」
Eben:「…(無言)」
 
Eben Upton 赫然發現,現在的小孩對於使用 Windows、Mac OS X 這類「圖形使用者介面(GUI, Graphic User Interface)」非常在行!他們知道要點哪個圖示,可以啟動遊戲。知道要輸入什麼網址,就能到達哪個社群網站,與不認識的人掏心掏肺聊上大半天。稍微好一點的,還會一點網頁設計技巧。但支撐現代科技的程式設計技巧,並沒有在這些孩子可塑性高的年紀,奠定紮實的基礎。更慘的,越來越少小朋友,對程式設計有興趣。
 
Eben 驚覺大事不妙!電腦是一種沒有人類寫程式,就是一堆廢鐵的東西。如果這一代的小孩,只喜歡上網打怪、跟網友聊八卦,而不去激發他們對於資訊科技的興趣,三十年後,等現在這批 30 ~ 50 歲的程式設計中堅份子退休,勢必引發技術斷層!他開始尋找,是什麼原因,造成下一代對程式設計興趣缺缺?
 

「圖像思考」摧毀造就「偉大程式設計師」的契機


他發現第一個原因是現在的作業系統操作介面「太好用」了!並且大量用「圖像」來操作、思考,小孩被動接受作業系統的圖像,久而久之就喪失以「文字」思考的能力。程式設計是一種需要以「文字」來描述一件任務,告訴電腦先做什麼、後做什麼的技術。圖像看久了的小朋友,要他們使用文字來描述抽象的問題,並予以解決,實在太難了。
 
因此,Eben 想到的解決之道是讓小孩子暴露在類似 20 年前,以命令列輸入指令,來操作電腦的環境。透過「指令」這種文字型工具來操控電腦,慢慢培養他們用「文字」敘事的能力。目前三大作業系統 Windows、Mac OS、Linux 中,只剩 Linux 還保有在 GUI 環境下,仍大量倚賴命令列來操作電腦的風格。加上 Linux 為開放式軟體,使用時不需繳交權利金給特定機構。因此,Eben Upton 第一個想到的,是打造一部以 Linux 為使用環境的電腦。
 
再則他發現,富裕如歐美國家,仍有 20% 左右的家戶,買不起一台電腦給小孩。或者,家裡已經有一台電腦,執行著 Windows 或 Mac OS。這種情況實在很難說服家長,再買一部安裝 Linux 的電腦,給小孩子把玩。於是,他計畫中的另一個部分,就是要打造一台便宜到人人都負擔得起的電腦,讓父母可以輕鬆買給小孩而沒有太大的負擔。這個想法的最後結果,就是各位看到一台 25 ~ 35 美元的 Raspberry Pi 主機板。
 
最後,他必須建議一種電腦語言,讓小孩子學起來不會太難,又能享受駕馭電腦系統的樂趣。這樣整個計畫推廣起來,才有個著力點。否則會變成父母買台 35 美元電腦,裡面安裝一堆遊戲與上網功能,讓小孩又回到打怪跟聊八卦的惡性循環中。幾經評估後,他覺得 Scratch 與 Python 這兩種語言不錯!
 

Scratch vs. Python


Scratch 是由麻省理工學院開發,用來訓練國小低年級孩童程式設計能力的一種電腦語言。它把程式設計的語法,以積木的方式表現出來。還提供很多可愛的卡通人物,讓孩童透過拼貼程式語法,來控制卡通人物。
 
clip_image002
圖:Scratch 語言的執行畫面(圖片來源:麻省理工學院 Scratch 計畫首頁)
 
透過拖放左手邊積木般的語法,小朋友可以學會電腦語言的三大文法:
◆ 「循序(Sequential)」:意指能將數十個指令依序排列,告訴電腦如何解決一個問題的能力。
◆ 「分支(Branching)」:意指能設下「判斷條件」,告訴電腦「如果 XXX,就做 OOO,不然就做 △△△」的能力。
◆ 「迴圈(Looping)」:意指能要求電腦「重複執行」某個動作,直到某個條件滿足或不滿足為止的能力。
 
小朋友會因為獲得控制卡通人物的「成就感」,驅使他/她想學更複雜的程式語法,讓卡通人物做出更豐富的動作。這種正向回饋,無形之中會把程式設計能力,深植小朋友的心中,達到潛移默化的效果。
 
等到孩子大約國小高年級或國中時,就讓他學 Python 這種語言。這種語言寫起來的感覺,已經很接近真正的程式設計了。Python 使用純文字來描述一個問題的解法。它提供很多好用的指令,讓其它語言需要數十行才能完成的動作,Python 只要一行就完成了。熟悉 Python 的學童,再去學任何電腦語言,都會覺得非常輕鬆自然。
 
clip_image004
圖:Python 語言的撰寫畫面(圖片來源:Python 官網)
 
此外,Raspberry Pi 基金會也特別為 Python 開發控制「輸出入針腳」好用的外掛指令,稱為「GPIO 函式庫」。所謂「GPIO」,是「General-Purpose Input/Output」英文的縮寫,翻成中文是「通用輸出入腳位」。GPIO 是 CPU 故意保留下來,不做任何用途,讓程式設計師可以透過程式,控制這些針腳電位的高低,來驅動額外的電路。如:讓 LED 燈發亮、馬達運轉…等等。所以就算您已經是成人,也可以透過 Python 語言,全方位控制您的 Raspberry Pi 主機板。
 
若您想用其它語言,如:C、C++、Java …,來控制 Raspberry Pi 主機板當然也可以,只不過您就無法享受 Raspberry Pi 基金會為大家準備的「好用 GPIO Python 函式庫」了。不過關於這點,喜好 Raspberry Pi 的網友們,陸陸續續發表支援各種語言的「GPIO 函式庫」。就我所知,目前已經有支援 C、C++、PHP、Java 等語言的函式庫了。您可以繼續使用習慣的電腦語言控制 Raspberry Pi,不必勉強自己學 Python。不過,Python 強大又好用,如果讀者不排斥多學一種電腦語言,我蠻鼓勵大家去學的。
 

Raspbian = Debian + Scratch + Python


綜合種種前因後果,Raspberry 基金會終於以 Broadcom BCM2835 為主晶片,做出 Raspberry Pi 這塊電路板。接著他們挑選 Debian 這套以「精簡、穩定」著稱的 Linux 作業系統,並預先安裝 Scratch 與 Python,改造出 Raspberry Pi 的官方作業系統「Raspbian」。名字是由「Raspberry」+「Debian」組合而來。如果您依照後面章節所述,把 Raspbian 安裝到 SD 卡中,插入 Raspberry Pi 主機板開機,您就會看到下列這幅畫面:
 
clip_image006
圖:Raspbian 作業系統開機畫面(圖片來源:RaspberryPi.org
 
如何?是不是覺得很棒呢?在 Raspbian 桌面的左側,已經預先建立 Scratch 與 Python 寫作環境 IDLE (後述)的圖示了。您只要用滑鼠對它們點擊兩下,就可以開始寫作 Scratch 或 Python 了。雖說 Scratch 與 Python 儼然是 Raspberry Pi 的「官方電腦語言」,但根據 Eben Upton 表示,他很歡迎程式設計師用任何語言來控制 Raspberry Pi。只不過基於推廣需要,他還是選定 Scratch 與 Python,作為推廣的重點。

沒有留言:

張貼留言