精選文章

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

July 06, 2014 17:16


轉錄自 Inside (http://www.inside.com.tw/2014/05/20/dont-learn-to-code-learn-to-think)

 

近年來,程式設計在全球帶起一股風潮,寫程式不再是男性專屬,而是不分男女老幼的全民運動。讀者是否也發現身邊越來越多朋友加入寫程式的行列,甚至開始自學寫程式呢?

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 以及與塔台的通訊系統。再更高一點,太空中的衛星正遵循軌道圍繞著地球,提供氣象資訊與即時衛星影像。

軟體正在吃掉全世界。但這一切都還只是開始,在人們意識到這件事之前,大家早已穿戴起科技產品、用電腦程式控管家中門禁,並在不久的將來讓機器人清掃環境、乘坐在無人駕駛車裡通勤、居住在虛擬實境裡。

剛剛提到的所有科技都是由軟體驅動,在生活中的每個層面,大家都被程式碼環繞,而未來程式碼的數量只會不斷增加,所以電腦科學和寫程式與每個人的生活都有緊密連結。

 

什麼是電腦科學?

200px-Lambda_lc.svg

根據維基百科定義,電腦科學是系統性研究訊息與計算的理論基礎,以及研究它們在電腦系統中如何實作與應用的實用技術學科。以下是幾個電腦科學相關概念解釋:

  1. 問題解決(Problem solving)透過學習演算法,像是 divide and conquer、 recursion、heuristics、greedy search、 randomized algorithms 等,幫助你解決問題。
  2. 邏輯(Logic)使用精準和正式的方法去思考,包括 abstraction、 boolean logic、number theory、set theory 等理 論,幫助你更嚴謹的解決問題。
  3. 數據(Data)你會開始接觸資訊理論並開始提出類似「什麼是資訊?」、「如 何呈現資訊?」等這類問題。
  4. 系統 Systems如何設計並建立一套複雜的系統且同時滿足一連串的要求和限制 呢?系統工程幾乎在所有的商業模式中都是是相當重要和基本 的。
  5. 思考(Thinking)理解人類心智的最好方式便是複製,像是人工智慧 AI、自然語 言處理等是走在最前端的科技,其不止牽涉電腦科學,同時還有 生物學、心理學、哲學和數學。

注意到了嗎?上面完全沒有提到跟寫程式相關的詞彙,這是因為寫程式只是實現電腦運算的一種工具,寫程式並不包含在電腦科學的概念宗旨裡。

電腦科學不只是跟電腦相關,就如同天文學不只是望遠鏡、生物學不只是顯微鏡、化學不只是燒杯試管一般。科學是與工具無關的。

——Michael Fellows and Ian Parberry

事實證明,比起電腦,我們更倚賴另一種運算工具:大腦!而電腦科學的目標正是要教導我們以一種全新、普世且能被廣泛應用的方式思考。當科技變得越來越普及時,這種全新的思考方式將會變得跟物理、數學、生物、歷史等學科一樣重要。

總而言之,光是思考是不夠的,我們必須知道如何應用。在物理領域,我們以磁鐵、棱鏡進行實驗;在生物領域,我們以培養皿、試管進行觀察;在電腦科學領域,我們學習寫程式。

什麼是程式設計?

screen

程式設計,或說是寫程式,是指如何對電腦下指令以完成某些動作。如果從來沒寫過程式,您大概曾經在 App 中點擊過某些按鈕,這些 App 正是由許多程式碼組成,透過程式碼告訴電腦如何展示介面、要在哪裡取得數據以及如何回應使用者的點擊。

程式設計完全是基於上述電腦科學的原則,剛剛談到的邏輯、演算法、系統工程等能用來建構任何事情,從您正用來閱讀本文的瀏覽器到飛機上的自動駕駛程式都可以。即使程式設計牽涉到許多數學與結構,但這同時也相當能激盪創意的實作:用一條條的程式碼,就能把想法化為真實存在的產品。

學習程式設計能為你帶來不少好處,以下 Yevgeniy Brikman 提出三點:

  1. DIY如果你會寫程式,你就能建立專屬於自己的成品,從最簡單的開 始,例如用 Excel 表格計算自己的稅務資訊,更難一點點, 建立自己的網站、開發自己公司的 App 甚至打造一款手機遊戲 與朋友共享。
  2. 故障排除一旦你開發了 App,便會發現要開發其他 App 也沒那麼難 了。一旦你不再害怕電腦——未知的部分——你就朝著成為技術支 援專家前進一步。當科技接觸生活中的每個部分,了解並且探索 如何操作它就變得跟學習如何閱讀一樣重要。
  3. 職涯
    學習電腦科學的目標不是為了成為專業工程師,如同我們從小在 校園裡學習數學、物理、化學一樣。不過如果發現自己對電腦科 學有興趣的話,不難發現軟體工程是現在成長最為快速、高薪的 工作選項之一。

 

把電腦科學和程式設計結合在一起

010101

最後讓我們再總結一下:

  1. 電腦科學是一種新的思考方式,其中的概念對身處在充滿科技環境中的每個人相當有用。
  2. 程式設計是學習電腦科學相當重要的一環,用於將電腦科學的思維付諸實行。然而程式設計本身並不該被視為學習終極目標。