人人都該學寫程式的反思:也許我們更該學習的是「電腦思維」

近年來,程式設計在全球帶起一股 風潮 ,寫程式不再是男性專屬,而是不分男女老幼的全民運動。讀者是否也發現身邊越來越多朋友加入寫程式的行列,甚至開始自學寫程式呢?
Yipit 創辦人曾說:「coding 不是工程師的專利,每個人都要學習程式語言」,例如在全球各地舉辦的 Rails Girls 工作坊 ,就幫助許多女性進入 Ruby 以及 Rails 的程式世界。除了擺脫過去寫程式是男性專屬的既定印象,寫程式的年齡層也有年輕化的趨勢,像是 Rails Girls 創辦人推出 教小朋友寫程式的繪本 、 英國小學生使用 iPad 學習寫程式 等新聞屢見不鮮。
此外美國非營利機構 Code.org 曾找來多位科技名人如 Bill Gates、Mark Zuckerberg 以及體育界和政界明星拍攝短片,倡導每個人都該學習寫程式,呼籲社會該更加重視程式教育以解決工程師短缺問題。來自愛爾蘭 CoderDojo 則是鼓勵年輕人與小朋友寫程式的非營利組織,據點分布於全球多個城市。
然而,面對這股全民寫程式的浪潮,曾任 TripAdvisor 軟體工程師、現任 LinkedIn 資深軟體工程師的 Yevgeniy Brikman 在其個人部落格發表「Don't learn to code. Learn to think.」一文,認為這股鼓吹大家學習寫程式的風潮有點誤導大眾,他認為大家在學習寫程式的同時,更重要的是學習電腦科學的思維模式。
大家對程式設計多少有點理解是好事,但寫程式不該成為最終的學習目標。寫程式是一種工具,是達成目標的方法。那麼真正的目標是什麼呢?Yevgeniy Brikman 認為,讓大家學會全新的思考模式才是真正的目標,我們該試著學習電腦科學而不只是寫程式。接下來,將會解釋兩者的差異,並解釋為何學習電腦科學更為重要。
首先,或許很多人會想問:「無論是程式設計或電腦科學,到底跟我有什麼關係?為什麼我該關心?」
事實上,在閱讀本文時,您可能正使用 Chrome 或 Firefox 瀏覽器開啟網頁,裝置則是採用 Windows 或 OS X 系統。而您今天大概花了一些時間收發 email、瀏覽朋友的 Facebook 動態或在 Youtube 看了幾個熱門影片。現代人的生活與電腦緊密連結:醫療記錄、稅務記錄、個人履歷等等,各種想得到的服務幾乎都能在電腦上操作。
而現在可能拿在您的手上、放在口袋或手邊的智慧型手機,使用了 GPS 定位,配備相機、觸控螢幕還有許多應用程式。此外您每天接觸的電視節目、電影、音樂、遊戲等等都與電腦繪圖和數位音效處理緊密相關。
出門在外您可能會使用 Google Map 尋找路線,現在甚至有 Google 無人駕駛車行駛於一般道路。而飛機則有自動駕駛、甚至在高空中也有 Wifi 以及與塔台的通訊系統。再更高一點,太空中的衛星正遵循軌道圍繞著地球,提供氣象資訊與即時衛星影像。
軟體正在吃掉全世界。但這一切都還只是開始,在人們意識到這件事之前,大家早已穿戴起科技產品、用電腦程式控管家中門禁,並在不久的將來讓機器人清掃環境、乘坐在無人駕駛車裡通勤、居住在虛擬實境裡。
剛剛提到的所有科技都是由軟體驅動,在生活中的每個層面,大家都被程式碼環繞,而未來程式碼的數量只會不斷增加,所以電腦科學和寫程式與每個人的生活都有緊密連結。
根據維基百科定義,電腦科學是系統性研究訊息與計算的理論基礎,以及研究它們在電腦系統中如何實作與應用的實用技術學科。以下是幾個電腦科學相關概念解釋:
注意到了嗎?上面完全沒有提到跟寫程式相關的詞彙,這是因為寫程式只是實現電腦運算的一種工具,寫程式並不包含在電腦科學的概念宗旨裡。
電腦科學不只是跟電腦相關,就如同天文學不只是望遠鏡、生物學不只是顯微鏡、化學不只是燒杯試管一般。科學是與工具無關的。
——Michael Fellows and Ian Parberry
事實證明,比起電腦,我們更倚賴另一種運算工具:大腦!而電腦科學的目標正是要教導我們以一種全新、普世且能被廣泛應用的方式思考。當科技變得越來越普及時,這種全新的思考方式將會變得跟物理、數學、生物、歷史等學科一樣重要。
總而言之,光是思考是不夠的,我們必須知道如何應用。在物理領域,我們以磁鐵、棱鏡進行實驗;在生物領域,我們以培養皿、試管進行觀察;在電腦科學領域,我們學習寫程式。
程式設計,或說是寫程式,是指如何對電腦下指令以完成某些動作。如果從來沒寫過程式,您大概曾經在 App 中點擊過某些按鈕,這些 App 正是由許多程式碼組成,透過程式碼告訴電腦如何展示介面、要在哪裡取得數據以及如何回應使用者的點擊。
程式設計完全是基於上述電腦科學的原則,剛剛談到的邏輯、演算法、系統工程等能用來建構任何事情,從您正用來閱讀本文的瀏覽器到飛機上的自動駕駛程式都可以。即使程式設計牽涉到許多數學與結構,但這同時也相當能激盪創意的實作:用一條條的程式碼,就能把想法化為真實存在的產品。
學習程式設計能為你帶來不少好處,以下 Yevgeniy Brikman 提出三點:
最後讓我們再總結一下:
身處在這個時代,幸運的是我們手邊有許多資源能從今天開始自學電腦科學!事實上,這可能是最好入門的學科了,你只需要一台電腦和網路就夠,正在閱讀本文的讀者大概都具備了這兩項基本條件了!
透過以下學習平台,大家今天就能開始上電腦科學的第一課: