Joseph Gentle 是 ShareJS 的作者,前 Google Wave 工程師。在程式設計經驗有 20 年,開課六七門,授課時長大約一千小時。本文是他在 2014 年所寫。
我程式設計的時間,已超過 20 年了。截至目前,我開的程式設計入門課,也有六七門了。傳授程式設計的總時間,大約也有 1000 小時了。下面這些話,沒有特別的前後順序,我對自己學員不止說過一次。
歡迎來程式設計。
程式設計真的很難
無論你是多麼擅長程式設計,能拖慢你腳步的唯一因素是你學習和解決問題的能力。隨著你的程式設計愈發提高,你更能體會我這句話了。程式設計還有個有趣的地方,永遠不會覺得枯燥。如果你覺得枯燥,那估計你在什麼地方做錯了,你應當對在寫的程式碼,做一下抽象,或者優化。
程式設計同樣也會是最讓你沮喪的事情之一
正常的程式設計經歷應該是這樣的:嘗試解決問題 → 受挫沮喪 → 再努力嘗試 → 回退一步 → 靈光乍現 → 最終搞定,程式正常執行。感覺受挫,這實在太正常不過了,不可能完全沒有受挫。(隨著你的技藝提高,你會挑戰更難的問題,這過程還是會遇到受挫。)挫折感讓提高解決問題帶來的滿足感。你得適應挫折感。
不管挫折感有多大,總會有解決方案的
隨著你的技藝提高,對擺脫困境,你會有更強更大的自信。挫折感越大,推倒你解決更難的問題。(如果問題太簡單,那就太沒趣啦。)
當我們還是小孩時,很多事情都做的很糟糕,只是我們沒注意到。
成年後,把事搞得很糟糕的機會並不多。擁抱這種感受,完全正常。你做的事情,並不是人人都有能力去做的。
你還得知道,練習程式設計的第 1 個小時,和第 10 個小時是截然不同的
與第 100 個小時更不一樣了。Dan Plan 的博主曾寫過一篇文章,說他在練習 1 萬小時,他的高爾夫球技極大提升。程式設計也是同樣的道理。(伯樂線上補充:谷歌大牛 Peter Norvig 的觀點也類似,請看他的文章《自學程式設計,十年磨一劍》。)
你是一個魔術師!
程式設計也是一種魔術。想想看,我們努力學習,從魔法書中汲取知識,然後製作符咒(從計算機書和網際網路學習,然後編寫程式)。魔術師可以教會魔術師如何施展魔法。我們程式設計師可以在現實也能做到這些,並且還能創造人人都能用的神奇裝置,比如:網際網路和行動電話。如果沒有我們的技能,不可能有這樣的裝置。
善用網際網路
在你學習程式設計的第一年中,你遇到的每個問題,很多在你之前的程式設計師,早就碰到了。並且網上已有記錄好的答案了。你使用搜尋引擎的效率越高,你會更高興。警告:如果你對網上搜到的程式碼段不理解,那就不要隨便就用。
不管何時程式設計,都要隨身帶著「百寶囊」
這些工具是我們幹活的訣竅。你要學的第一批東西(變數、迴圈等),就好比工具箱中的螺絲刀和錘子。在程式設計生涯中,這些工具是日常必需品。隨著經驗積累提升後,你開始學習使用更高階的工具(比如:樹、A*、valgrind、偵錯程式等),也許這些東西平常用的不多,但在解決特定問題時特別得勁。大多數程式設計領域(遊戲開發、Web開發、資料庫)都有各自領域問題及對應的解決方案。因此,你先前解決過的問題,以後遇到時,可以更加輕鬆應對了。
每個程式都是由程式碼組成
你可以在自己電腦上幾乎閱讀、修改、搗鼓所有東西,還有其他人已寫好的程式。說到電腦,它基本上就是一個超級大國,啥都有。
提高程式設計能力的最佳方式,就是多寫程式碼
保持做東西、寫程式碼!作為一個老師,我會盡我所能,把你帶入門。一旦你技藝達到一定程度後,假以時日,你能解決所有碰到的難題。堅持寫程式碼寫下去吧。畢竟李白都說過了:只要功夫深,鐵杵磨成針!
綜合前面 2 點,除了寫大量程式碼,還要讀大量程式碼
天外有天,人外有人,這世上比我們們聰明的程式設計師多的是。他們已經寫了很多程式碼了,或許你就在 GitHub 上就能看到。
據說程式設計師學的第 2 門程式語言是最難的
你在學習第 1 門程式語言時,塑造了你的程式設計思維方式(看我的嚴肅臉.jpg)。當你在學第 2 門語言時,你必須重新思考之前被定型的東西。(不能打破改變你思維模式的語言,不值得學習。)當你掌握第 2 門語言後,掌握其他新語言會更得心應手。任何一種必要的語言,我用一個週末基本就可以學的差不多。
沒有最好的程式語言!
在解決某些特定問題時,某些語言和工具的確由於其他的。當你學習了其他不同的語言時,那就不要把陳舊的程式設計思維,移植到新系統上。相反,要習慣用新思維來程式設計。
多玩,多犯傻踩坑!
程式設計好比一個巨型樂高模型,充滿了待解決的問題。多花些心思和時間,在這上面添磚加瓦,做些「玩具」程式。這比分派給你的任務會有趣多了。
工作之外,優秀的程式也會為自己程式設計
如果你真的擅長這一點,你就永遠不會發現自己失業了。
遇到問題卡住時,試試在紙上寫程式碼
我是認真在說,不是開玩笑。這種方式很神奇,並且是程式設計競賽中的標準實踐。為什麼這種方法有效果,我認為當不用考慮語法問題後,我們有更多腦力去解決實際問題。
我確信自己時不時地會冒出其他建議。但正如大多數建議,如果是真的很重要的建議,你自己也能想到的。
程式設計愉快 :D