不要學習代碼,要學會思考

作者: Yevgeniy Brikman  發布時間: 2015-03-21 16:37  閱讀: 17725 次  推薦: 48   [收藏]  

  英文原文:Don't learn to code, learn to think

  譯/賴信濤

  這是一個人人都在學習編程的時代:Code.org請了比爾·蓋茨,馬克·扎克伯格和克里斯·波什等這些名人,來告訴你,每個人都可以編程;CoderDojo’s在各個國家悄然興起;在英國,編程已經是各個年級學生的正式課程

  我認為這里有個誤區。別誤會我——如果每個人都會一些編程知識,這個世界當然會變得更好——但是學會寫代碼不應該是我們的目標。計算機和程序只是一個工具,是一種達到某種目的的方法。

  真正的目標應該是學會思考的方式。換句話說,我們應該嘗試教授計算機科學,而不是教著寫代碼。在本文中,我將介紹兩者的不同,以及為什么后者是當下學編程浪潮成功的關鍵。

  如果你喜歡視頻的解釋,我強烈推薦Simon Peyton Jones的TED,Teaching Creative Computer Science。這和本文的論點不謀而合。

  看完之后,依然想看文字的版本么?好的。讓我們先從一個關鍵的問題開始吧:為什么你要學習編程或計算機科學呢?

  回答這個問題之前,我們先賣個關子。

  歡迎來到真實的世界

red pill 300x150 不要學習代碼,要學會思考

  現在,你可能正在用Chrome或者Firefox瀏覽器在看這篇文章,運行在Windows或者OS X操作系統上,用的一臺筆記本或者臺式機。我猜你今天還花了一些時間查看電子郵件,刷Facebook,或者在Youtube上看視頻了。如今,人們的生活越來越依賴于計算機:醫療記錄存放在了數據庫中;簡歷放在LinkedIn上;使用Google或者Facebook來推銷你的產品;用Amazon來買東西;在網上報稅;在線管理你銀行的賬戶;甚至還涉足了比特幣

  現在,從屏幕上移開你的眼睛:在你的口袋,包包,或者旁邊的桌子上,可能就有一部智能手機。它裝有GPS,攝像頭,觸摸屏,還有成千上萬的應用。如果你現在在客廳,你可能還有一臺聯網的LCD電視,一臺DVR,DVD播放器,蘋果TV,XBox,或者PlayStation。你每天看的電影,聽的音樂,玩的游戲,就封裝在這些設備顯卡和聲卡中。

  軟件正在占領這個世界,但這還只是個開始。不知不覺中,你就穿著各種可穿戴設備用計算機來鎖門,用機器人來運貨打掃房間。擁有你自己的電子技術,經營自己的生產廠,生活在虛擬的世界中,乘自動駕駛的汽車去旅行,甚至飛向太空

  代碼無處不在

Another Matrix Code v2 0 by luttman23 300x240 不要學習代碼,要學會思考

  毫無疑問,以上我所描述的技術的源動力是軟件。你生活的每一個方面,都被代碼所包圍。大量的代碼會讓未來變得美好。

  但是,僅僅是一項技術非常普遍不能成為你在學校學習它的理由。就像我們乘坐飛機,但是考飛機駕照并不在從幼兒園到12年級的課程中。

  然而,飛行的原理卻是課程的一部分:

  1. 物理學和數學讓你明白重力、彈性元件、壓力、速度、摩擦和攀升等方面的知識。
  2. 生物學讓你明白人體在高海拔、低氧、極端寒冷等情況下的反應。
  3. 歷史解釋了飛機的發明,進化,以及其在旅行、商業和戰爭中扮演的角色。

  從中學畢業的時候,你就已經知道了飛機是什么,它是如何工作的,如何安全乘坐飛機。通識類課程,像物理學,數學,歷史,教會你如何思考各種各樣的問題,包括飛機;與之形成對比的是教會你是用工具的課程,像教你如何駕駛一種特定類型的飛機。

  什么是計算機科學?

  計算機科學是一門研究計算的學科:就是說,如何表述和處理信息。以下是一些你會學到的概念:

  1. 解決問題:你將會學習算法——就是通用的一些方法,像是分治算法、遞歸、遺傳算法、貪心算法——幫助你建模,分解,解決各種各樣的問題。
  2. 邏輯:你將開始使用精密又正式的方法思考問題,像是抽象,邏輯代數,數論和集合論,來用嚴密的邏輯解決問題。
  3. 數據:你將會接觸到信息論,并開始思考什么是信息?如何表述?如何對真實的世界建模?
  4. 系統:如何設計與構建復雜的系統,來實現一系列的需求?系統工程是一個幾乎在各個領域都涉及到的重要的主題。
  5. 思考:了解人類大腦最好的方式,是試著去復制它。像人工智能、機器學習、計算機視覺、自然語言處理這些話題,不僅僅在計算機科學領域,同時在數學,生物,物理,哲學等方面都是最前沿的科學。

  注意,上面的清單中并沒有提到代碼或者編程,因為它們只是實現計算的工具:它們本身并不是計算機科學。

計算機科學并不是關于計算機的科學,就像天文學不是關于望遠鏡的科學,生物學不是關于顯微鏡的,滑雪不是關于燒杯和試管。科學并不是研究工具的。——Michael Fellows和Parberry

  什么是編程?

ScreenShot2014 05 19at2 300x178 不要學習代碼,要學會思考

  編程,或寫代碼,就是指示計算機來執行哪一些指令。如果你從未寫過代碼,也可能通過操作應用程序來和計算機交互。其實在內部,這個應用程序也是通過代碼來告訴計算機顯示什么,在哪里檢索數據,以及對于你的點擊操作做出什么回應。

  所有的編程都是建立在我們上面討論的計算機科學的原理上的。值得注意的是,同一組概念——邏輯、算法、數據、系統工程——可以用來構建任何軟件,小到你現在閱讀這篇文章用的這個瀏覽器,大到飛機上的自動駕駛軟件。盡管會涉及到一些數學和架構的知識,但這卻是極富創造性的活動:你將想法變成現實,一次一行代碼。

  將編程作為學習計算機科學的一部分有以下的好處:

  1. DIY:如果你會編程了,你就可以制作一些東西。可以從最簡單的開始:做一個能給旅游照片批量重命名的腳本,或者寫一個Excel公式幫自己計算稅務;然后,開始發燒級別的:給你自己的文件系統寫一個瀏覽器;給你們公司做一個app;或者寫一個能夠和朋友一起玩的游戲。
  2. 解決問題:一旦你親手做了幾個app,弄清楚其他的就簡單多了。一旦你不再害怕計算機——未知的領域——你就會成為技術達人。隨著技術已經關系到我們生活的每個部分,掌握它們就會變得和學會閱讀一樣重要。
  3. 事業:我們學習計算機科學的目標不是成為職業的程序員。我們都學了數學,物理,化學,但是我們并沒有都成為這方面的專家。然而,如果你對這方面有激情的話,軟件工程師也是一份評價高薪資高進步快的職業。

  綜合考慮

binary Language 300x225 不要學習代碼,要學會思考

  簡要重述:

  1. 計算機科學是一種新的思考方式。在這個技術時代,其中的概念對每一個人都很有幫助。
  2. 編程是學習計算機科學重要的一部分,以實現這些新的思考方式。然而,編程本身并不是目標。

  混淆這兩個觀點,就導致了現在學習編程熱潮的圈子的一些問題。Slate 發布了一篇文章,《也許并不是每一個人都需要學編程》;Atlantic寫了一篇《新聞學院應該要求記者寫代碼嗎?不》;Jeff Atwood寫了《請不要學習寫代碼》,其中提出了一個精辟的問題:

“如果邁克爾·布隆伯格(紐約市市長,譯者注)是一個專業的Java程序員,他能更好的領導一個美國的大城市么?”

  當然,這個問法是錯誤的。這就表示這些活動的目標是學習代碼,而不是學習思考的方式。如果連Jeff Atwood這樣經驗豐富的程序員都搞錯了,那么普通人更分不清楚了。問題應該這樣問:

如果通過學習解決問題的方法,訓練嚴密的邏輯來提高自己的能力,那么邁克爾·布隆伯格(或者其他人)能工作的更好嗎?

  我相信,答案是顯而易見的。而且隨著科技的發展,答案會越來越清晰。這就是為什么,我們要把教學重點放在計算機科學上,而不是代碼。

  如何開始?

HwYWwfsh 213x300 不要學習代碼,要學會思考

  好消息是,你不必等Code.org來宣布你已經開始學習計算機科學了。事實上,這是最容易學習的一個主題,你只需一臺電腦和一根網線。我想,現在你正在閱讀本文,那么很可能你兩者都有了。

  這里,分享一些好的資源:

  University courses

  1. Coursera
  2. Udacity
  3. MIT OpenCourseWare
  4. Stanford Engineering Everywhere
  5. Academic Earth

  Online tutorials

  1. Khan Academy
  2. Treehouse
  3. MIT Scratch
  4. Codecademy
  5. Code School

  Communities and clubs

  1. CoderDojo
  2. Girls Who Code
  3. Girl Develop It
  4. Code.org
  5. Coding meetup Groups
48
5
 
標簽:程序員 編程
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()