如果要找一個詞來說明程式的價值,那就是「自動化」;機器雖然愚笨,但不會疲憊,能讓人類的生產力得到解放。我期待的程式教育不只是教導技能,而是教導學生在該不滿的時候就不滿,也教導學生懂得叛逆、而且知道還有「自己動手」這條途徑。
聽說今年開始,程式設計將會納入國中與高中課程。我自己靠寫程式吃了十多年的飯,贊成學程式這種事情是可以早點開始的。
話說,我還不知道現在的孩子們在上的是些怎樣的程式課程;不過,好像什麼東西進入台灣的正規教育之後,都似乎會讓人有點擔心就是了。
程式的價值
對我來說,如果要找一個詞來說明程式的價值,那就是「自動化」。
程式就是一種介於人機之間,人類看得懂、而且可以轉換成機器也看得懂的指令,讓機器可以重複執行人類所指派的工作。機器雖然愚笨,但是忠實、而且不會疲憊,人類的生產力因此得到解放。
寫程式就像學騎腳踏車一樣;當你跨上了腳踏車、而且不再摔倒之後,就會發現可以用比較輕鬆的力氣,到達你想要的地方。
同樣的道理,你會了一點程式之後,就可以用比較輕鬆的力氣,完成重複的資料處理。
這個說法其實來自Steve Jobs。他說,動物界中最有效率的是禿鷹,只要花一點點的力氣,就可以飛好幾英哩;但是人類只要跨上腳踏車,效率就是禿鷹的好幾倍;所以,計算機就是「思想的腳踏車」。
早期Apple給開發商的標語:「Wheels for the Mind」(思想的腳踏車)。
小的時候就開始學程式,也就該跟小的時候就學腳踏車一樣:愈小就接觸,愈不會一開始就產生排斥、也比較不會有害怕摔倒的恐懼。
學程式是為了「不耐煩」
那麼,假如用職業教育的角度來看程式教育,用「業界到底需要多少軟體工程師」、「App Store或Google Play上有多少程式其實根本就沒有人在用」,「每年有多少技術死亡」來看應不應該教程式,我覺得很奇怪。
你是因為想要成為環法賽車手、想變成下一個
Peter Sagan、還是想要參加下坡賽或競輪,才開始騎腳踏車的嗎?
還是說,即使你不把這項技能變成職業,也可以在生活中享受其便利、得到許多跟功利無關的樂趣?還是可以假日去河濱腳踏車道散散心、動一動,讓身體變得更好?
我所期待的程式教育,是要養成某種性格,這種性格叫做「不耐煩」。
你要能察覺到「生活中有大量事物是重複的」,這些重複的事物佔用了你的時間;而所謂時間,就是人類對於死亡不斷逼近的感受。你不想要在死亡之前,都被這些重複的事物消耗殆盡;所以你不滿足、打算開始動手反抗生活。
你不需要知道機器底層是怎麼運作,不需要知道什麼是暫存器、什麼是指令集、或是前人累積了哪些高效率的演算法,就可以學會從多個不同網站定時抓取資料,然後合成你想要的報表;你也可以一次完成上百張圖片或影片的轉檔,然後就有時間可以做其他事情,像是,嗯,騎腳踏車。
在做這些事情之前,你需要的第一個能力,就是發現有哪些事情還是完全手工、還沒有機器介入;還有,就是「認同不耐煩其實是一種優點」,因為不耐煩才是讓人類進步的動力。
工具讓你不再無助
瞭解機器的底層運作、還有各種寫程式的典範,都讓你日後可以寫出更好的程式;但那是你真的決定要踏上職業之路以後,才需要知道的事情。
而把程式當成專業之後,對於「耐心」又要有兩種極端的見解:你對軟體品質、不斷的學習、以及怎樣避免自己的大意粗心,要保持高度的耐心;但是對於沒有自動化的事物,得要高度的不耐煩。
如果程式不是你的職業,你只需要知道什麼地方應該要有程式的幫助,然後讓更專業的人來接手;很多時候,你不需要精通某個工具,但至少要知道工具的存在。
偶而,有些程式你也可以自己來,就不會在這個到處都是科技的二十一世紀這麼無助。
程式就是種帶有那麼點叛逆精神,又可以在不傷害別人的前提下,讓自己過得更好的玩意;甚至是某種「我們一定有更輕鬆的方法」的信仰。
我所期待的程式教育,是一套價值:
效率來自善用工具,而不是壓榨他人;產能來自善用工具,而不是加班。
讓自己幸福不需要犧牲他人,要成全他人也不需要損害自己。就算你不能創造多偉大的工具,一點點小工具都可以讓你把自己照顧好。
不滿是好事:就是因為不滿,所以才可以創造更大的幸福;我們應該學會對已經存在的工具保持感激,但我們同時也相信,還會有更方便的工具。
「價值觀」怎麼教、怎麼打分數?
只是我還真不知道,怎樣在學校教這樣的東西。
我所期待的程式教育,不是一種系統化知識、不是升學科目,而是一種感受;包括事物沒有自動化之前的痛苦,以及用了工具解決問題之後的幸福。但是,我們沒辦法對感受打成績。
我所期待的程式教育,不只是在教導技能,也不是讓學生在多少的時間裡頭裡頭寫完幾道程式題目、或是怎樣做出一套系統出來;而是教導學生在該不滿的時候就該不滿,教導學生懂得叛逆、而且知道還有「自己動手」這條途徑。