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