人人都該學寫程式的反思:也許我們更該學習的是「電腦思維」
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 以及與塔台的通訊系統。再更高一點,太空中的衛星正遵循軌道圍繞著地球,提供氣象資訊與即時衛星影像。
軟體正在吃掉全世界。但這一切都還只是開始,在人們意識到這件事之前,大家早已穿戴起科技產品、用電腦程式控管家中門禁,並在不久的將來讓機器人清掃環境、乘坐在無人駕駛車裡通勤、居住在虛擬實境裡。
剛剛提到的所有科技都是由軟體驅動,在生活中的每個層面,大家都被程式碼環繞,而未來程式碼的數量只會不斷增加,所以電腦科學和寫程式與每個人的生活都有緊密連結。
什麼是電腦科學?
根據維基百科定義,電腦科學是系統性研究訊息與計算的理論基礎,以及研究它們在電腦系統中如何實作與應用的實用技術學科。以下是幾個電腦科學相關概念解釋:
- 問題解決(Problem solving)透過學習演算法,像是 divide and conquer、 recursion、heuristics、greedy search、 randomized algorithms 等,幫助你解決問題。
- 邏輯(Logic)使用精準和正式的方法去思考,包括 abstraction、 boolean logic、number theory、set theory 等理 論,幫助你更嚴謹的解決問題。
- 數據(Data)你會開始接觸資訊理論並開始提出類似「什麼是資訊?」、「如 何呈現資訊?」等這類問題。
- 系統 Systems如何設計並建立一套複雜的系統且同時滿足一連串的要求和限制 呢?系統工程幾乎在所有的商業模式中都是是相當重要和基本 的。
- 思考(Thinking)理解人類心智的最好方式便是複製,像是人工智慧 AI、自然語 言處理等是走在最前端的科技,其不止牽涉電腦科學,同時還有 生物學、心理學、哲學和數學。
注意到了嗎?上面完全沒有提到跟寫程式相關的詞彙,這是因為寫程式只是實現電腦運算的一種工具,寫程式並不包含在電腦科學的概念宗旨裡。
電腦科學不只是跟電腦相關,就如同天文學不只是望遠鏡、生物學不只是顯微鏡、化學不只是燒杯試管一般。科學是與工具無關的。
——Michael Fellows and Ian Parberry
事實證明,比起電腦,我們更倚賴另一種運算工具:大腦!而電腦科學的目標正是要教導我們以一種全新、普世且能被廣泛應用的方式思考。當科技變得越來越普及時,這種全新的思考方式將會變得跟物理、數學、生物、歷史等學科一樣重要。
總而言之,光是思考是不夠的,我們必須知道如何應用。在物理領域,我們以磁鐵、棱鏡進行實驗;在生物領域,我們以培養皿、試管進行觀察;在電腦科學領域,我們學習寫程式。
什麼是程式設計?
程式設計,或說是寫程式,是指如何對電腦下指令以完成某些動作。如果從來沒寫過程式,您大概曾經在 App 中點擊過某些按鈕,這些 App 正是由許多程式碼組成,透過程式碼告訴電腦如何展示介面、要在哪裡取得數據以及如何回應使用者的點擊。
程式設計完全是基於上述電腦科學的原則,剛剛談到的邏輯、演算法、系統工程等能用來建構任何事情,從您正用來閱讀本文的瀏覽器到飛機上的自動駕駛程式都可以。即使程式設計牽涉到許多數學與結構,但這同時也相當能激盪創意的實作:用一條條的程式碼,就能把想法化為真實存在的產品。
學習程式設計能為你帶來不少好處,以下 Yevgeniy Brikman 提出三點:
- DIY如果你會寫程式,你就能建立專屬於自己的成品,從最簡單的開 始,例如用 Excel 表格計算自己的稅務資訊,更難一點點, 建立自己的網站、開發自己公司的 App 甚至打造一款手機遊戲 與朋友共享。
- 故障排除一旦你開發了 App,便會發現要開發其他 App 也沒那麼難 了。一旦你不再害怕電腦——未知的部分——你就朝著成為技術支 援專家前進一步。當科技接觸生活中的每個部分,了解並且探索 如何操作它就變得跟學習如何閱讀一樣重要。
- 職涯
學習電腦科學的目標不是為了成為專業工程師,如同我們從小在 校園裡學習數學、物理、化學一樣。不過如果發現自己對電腦科 學有興趣的話,不難發現軟體工程是現在成長最為快速、高薪的 工作選項之一。
把電腦科學和程式設計結合在一起
最後讓我們再總結一下:
- 電腦科學是一種新的思考方式,其中的概念對身處在充滿科技環境中的每個人相當有用。
- 程式設計是學習電腦科學相當重要的一環,用於將電腦科學的思維付諸實行。然而程式設計本身並不該被視為學習終極目標。