人人都該學寫代碼的反思:我們更該學習的是"電腦思維"
Photo Credit: 電影「實習大叔」劇照
近年來,程序設計在全球掀起一股熱潮,寫代碼不再是男性專屬,而是不分男女老幼的全民運動了。
Yipit 創辦人曾說:「coding 不是程序員的專利,每個人都要學習寫代碼」,例如在全球各地舉辦的 Rails Girls 工作坊,就幫助許多女性進入 Ruby 以及 Rails 的程序世界。
除了擺脫過去寫代碼是男性專屬的既定印象,寫代碼的年齡層也有年輕化的趨勢,像是 Rails Girls 創辦人推出教小朋友寫代碼的繪本、英國小學生使用 iPad 學習寫代碼等新聞屢見不鮮。
此外美國非營利機構 Code.org 曾找來多位科技名人如 Bill Gates、Mark Zuckerberg 以及體育界和政界明星拍攝短片,倡導每個人都該學習寫代碼,呼吁社會該更加重視軟件教育以解決工程師稀缺的問題。(來自愛爾蘭 CoderDojo 則是鼓勵年輕人與小朋友寫代碼的非營利組織,他們分布在全球的多個城市)
然而,面對這股全民寫代碼的浪潮,曾任 TripAdvisor 軟件工程師、現任 LinkedIn 資深軟件工程師的 Yevgeniy Brikman 發表「」一文,他認為大家在學習寫代碼的同時,更重要的是學習電腦科學的思維模式。
大家對程序設計多少有點理解是好事,但寫代碼不該成為最終的學習目標。寫代碼是一種工具,是達成目標的方法。那么真正的目標是什么呢?Yevgeniy Brikman 認為,讓大家學會全新的思考模式才是真正的目標,我們該試著學習電腦科學而不只是寫代碼。
接下來,將會解釋兩者的差異,并解釋為何學習電腦科學更為重要。
歡迎來到真實世界
首先,或許很多人會想問:無論是程序設計或電腦科學,到底跟我有什么關系呢?為什么我該關心?
事實上,在閱讀本文時,你可能正使用 Chrome 或 Firefox 瀏覽器,用的是 Windows 或 OS X 系統。并且你今天大概花了一些時間收發 email、瀏覽微博動態或在優酷上看了幾個熱門視頻。現代人的生活與電腦緊密連結:醫療記錄、稅務記錄、個人履歷等等,各種想得到的服務幾乎都能在電腦上操作。
而你使用的智能手機,使用了 GPS 定位,配備相機、觸控屏還有許多其他的 APP 應用。此外你每天接觸的電視節目、電影、音樂、游戲等等都與電腦繪圖和數位音效處理緊密相關。
出門在外你可能會使用 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
事實證明,比起電腦,我們更倚賴另一種運算工具:大腦!而電腦科學的目標正是要教導我們以一種全新、普世且能被廣泛應用的方式思考。當科技變得越來越普及時,這種全新的思考方式將會變得跟物理、數學、生物、歷史等學科一樣重要。
總而言之,光是思考是不夠的,我們必須知道如何應用。在物理領域,我們以磁鐵、棱鏡進行實驗;在生物領域,我們以培養皿、試管進行觀察;在電腦科學領域,我們學習寫代碼。
#p#
什么是程序設計?
程序設計,或說是寫代碼,是指對電腦下指令以讓其完成某項特定的動作。如果從來沒寫過代碼,您大概曾經在 App 中點擊過某些按鈕,這些 App 正是由許多程序代碼組成,透過程序代碼告訴電腦如何展示界面、要在哪里取得數據以及如何回應使用者的點擊。
程序設計完全是基于上述電腦科學的原則,剛剛談到的邏輯、演算法、系統工程等能用來建構任何事情,從你正用來閱讀本文的瀏覽器到飛機上的自動駕駛程式都可以。即使程序設計牽涉到許多數學與結構,但這同時也相當能激蕩創意的實作。用一條條的代碼,把想法化為真實存在的產品。
學習程序設計能為你帶來不少好處,以下 Yevgeniy Brikman 提出三點:
1、DIY
如果你會寫代碼,你就能建立專屬于自己的產品,從最簡單的開始,例如用 Excel 表格計算自己的稅務問題。更難一點, 建立自己的網站、開發自己公司的 App 甚至打造一款手機游戲與朋友共享。
2、故障排除
一旦你開發了 App,便會發現要開發其他 App 也沒那么難了。一旦你不再害怕電腦未知的部分,你就朝著成為技術專家又前進了一步。當科技滲透生活的各個部分,去了解并且探索。如何操作它,就變得跟學習如何閱讀一樣重要。
3、職業生涯
學習電腦科學的目標不是為了成為專業工程師,如同我們從小在校園里學習數學、物理、化學一樣。不過如果發現自己對電腦科學有興趣的話,不難發現軟件工程是現在成長最為快速、高薪的工作選項之一。
把電腦科學和程序設計結合在一起
最后讓我們再總結一下:
電腦科學是一種新的思考方式,其中的概念對處在充滿科技環境中的每個人都相當有用。
程序設計是學習電腦科學相當重要的一環,用于將電腦科學的思維付諸實行。然而,程序設計本身并不該被視為學習終極目標。
如何開始第一步
身處在這個時代,幸運的是我們手邊有許多資源能從馬上開始自學電腦科學!事實上,這可能是最好入門的學科了,你只需要一臺電腦就夠了,正在閱讀本文的讀者大概都具備了這兩項基本條件了!LOL~
透過以下學習平臺,大家今天就能開始上電腦科學的第一課:
大學課程
線上課程
社團與組織
原文鏈接:http://www.inside.com.tw/2014/05/20/dont-learn-to-code-learn-to-think