編譯 / 陳翊煊
有沒有發現周遭的親朋好友突然都開始在學寫程式?其實寫程式早就已經不是專屬於男性或工程師的事情了,現在連微軟總裁比爾蓋茲 ( Bill Gates),臉書總裁馬克扎克柏格 ( Mark Zuckerberg ) 都在 Code.Org 上教人怎麼寫程式。
不過,大家這樣一窩蜂學寫程式究竟是不是件好事呢?
現在有了反面聲音出現,現任 LinkedIn 軟體工程師的 Yevgeniy Brikman 在他個人的部落格上發表「Don’t learn to code. Learn to think.」一文,他認為這樣缺乏思考方式、一味鼓吹大眾學習寫程式是盲目的行為,比學寫程式重要的是學習電腦科學背後的思考模式。
透過下面這篇文章,我們就來看看美國電腦科學家 Peter Norvig 是如果看待學習寫程式這檔事。
- 大家到底是急什麼?
每次走進書店總是會看到書架上擺著《24 小時內學會 Java 程式》 等等類似的書玲瑯滿目,有些教你如何寫 C、SQL、Ruby、 Algorithms,有些則是誇口在幾天或是幾小時內讓你學會。
如果你在亞馬遜網路書店上隨便輸入幾個關鍵字:「 自學、「小時」、「程式」,你會找到五百多本相關的書籍,而在這堆書裡頭十之八九是和寫程式有關的。如果把關鍵字填入一堆同義詞像是「學習」、「小時」,你還是一樣會得到相似的結果。
這個結果告訴你兩種可能性,一種可能是現在大家都開始急著想學寫程式,另一種可能是寫程式變得更簡單了。電腦科學教授 Matthias Felleisen 在他的書中 How to Design Programs 同意了這種說法,他說 「要寫很爛的程式很簡單,連笨蛋都做得。」
我們就來逐字分析一下 「24 小時自學 C++」 這種書名好了,讓我告訴你這書名是多荒謬的一件事。
自學: 你根本很難自己寫出什麼厲害的程式,你也沒辦法從錯誤中學習。你不會有時間和一位有經驗的程式專家體驗 C++ 環境裡的感覺。簡單來說,你不會有時間學到甚麼了不起的知識,書裡面大概也只能跟你說個概論,沒辦法清楚地跟你解釋較深的道理。
C++:在 24 小時之內也許你有辦法理解 C++ 的一些簡單語法,但說實在的你很難真正理解如何使用這個語言。簡單來說,如果你懂一些基礎的程式,也許你就能學會如何用 C++ 寫出一些簡單的程式,但如果要你說出 C++ 有哪些優缺點,你可能就腦袋一片空白了。
你現在心裡可能想說那怎麼辦? 電腦科學家 Alan Perlis 曾經說過:「 一個沒辦法影響你思考的語言沒有學習的價值。」 如果只是用既有的知識去解決眼前的難題,那就稱不上是學習了。
24 小時:時間完全不夠
- 你得花很多時間學習如何寫程式
發展任何領域的專長得至少花上十年,不論是下棋、寫歌曲、游泳還是成為一位神經心理學專家。其中的訣竅還是老話一句: 持續練習。而且不能單單重複一樣的動作,你還得挑戰自己,挑戰自己能力以外的事情。多嘗試,從錯誤中找出自己的弱點,然後想辦法改善自己的弱點,不斷重複這種自我挑戰的過程。
這條道路上沒有捷徑,就連莫札特這種音樂奇才也是花了 13 年才寫出世界級的交響樂。
也許成功的那天,不一定是你的第十年,而是你花的第 100,000 小時那一刻,又或者可能是其他不同單位的時間。法國知名攝影師 Henri Cartier-Bresson 曾經說過:「你剛開始拍的那一萬張照片會是你最糟的。」
真正的專長可能會花你一輩子的時間。 英國詩人 Samuel Johnson 曾經說過: 「任何領域的任何專長都是要花上一輩子的時間才能夠領悟,沒有甚麼更快的方法了。」 英國大詩人 Chaucer 就曾經抱怨過: 「人生太短,學習技藝的時間卻太長。」寫程式跟下棋、寫歌、游泳或是任何技能一樣都是需要長時間的練習,沒有人能確定你什麼時候能真的習得一項技能。
- 現在你還想學怎麼寫程式嗎?
以下是我的建議:
1. 確定你是真的有興趣的,別忘了你得在這上面花上 1 萬小時去鑽研。
2. 做中學,學中做,最好的學習方式就是放手去做。
「一個人如果想要在某一領域達到最好的表現,就不能只是透過既往的經歷延伸,而是要自發性的精益求精。(p.366)」
「有效的學習需要透過適當的難度來持續刺激」(p.20-21)……《 認知能力的實際面: 日常生活中的心理,數學與文化》 Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life 書中提供了一個很好的觀點。
3. 多與別的程式專家對話,去看看他們怎麼寫程式的。這會比你看書或上任何課程還來的有用。
4. 如果可以的話,去大學進修吧 (或是研究所),在大學進修不只能讓你的履歷表更好看一些,你也能夠對於所修習的領域更加了解,因為光是讀書根本就不夠用。
「電腦科學教育沒辦法讓每個人都成為程式專家,同樣的道理,研究刷子油漆的人不會馬上就變成畫圖天才。」新駭客字典 The New Hacker’s Dictionary 作者 Eric Raymond 說。他請過最厲害的程式專家只有高中畢業,可是他創作出很多很棒的軟體,他也有他自己的新聞團隊,他賺的錢多到他可以自己開一間夜店。
5. 你可以試著和其他程式專家一起研究計畫,當你做的是你最拿手的事情,那你可以測試自己領導的能力,但如果你做的不是你擅長的事情,那也沒關係,因為你可以從其他專家身上學到他們是如果應變的。
光是以上五點,書本根本很難提供你合適的教學。小的時候大家都讀過《十萬個為什麼》,但是我們的生活中還是有許多無法理解的事。就像小孩子剛出生的時候,你會急著去翻書研究怎樣抱小孩才是最合適的方法嗎? 當然不會!你一定是靠你的直覺和經驗,所以事實證明,實際的操作永遠會比書本裡的知識還來的重要。
下次進到書店,你就大膽去買那本《24 小時學會程式語言》 吧,你也許真的能學到什麼,但那改變不了你的人生,也不會對你的專業有所幫助。所以何不努力練習,在接下來的一兩年持續的挑戰自己,其實現在你就可以開始邁出那第一步。
( 資料來源: Peter Norvig ;圖片來源:Brendan C 、COSCUP CC Licensed)