我在南大的七年

這是第二個歪打正著,按理來說,研究語言技巧並不是程式設計師最佳的時間投入方法。所以現在我可能不會去做這件事情,會認為有更好的時間投入途徑。但當時就一頭扎了進去。為什麼說也是正著呢?因為雖然這也許不是最佳的投入時間的辦法,但總歸比什麼都不專注要強得多,至少這么一深入,對語言的缺陷和陷阱有了更深刻的認識、也鍛鍊了對代碼的親切感、跟蹤調試的耐心。

所以後來我在部落格上總結自己學習編程中走過的彎路,孟岩先生說到,是不是彎路,不是那么容易界定的。

的確,也許真的有更好的路,但事前真的很難判斷哪條路是最優的,我們能做到的,是把一條路走透了、走深了,只要不是一條太不靠譜的路,深入的過程中總會有很多的收穫。只要不是太頑固,善於反省,總有一天也會逐漸意識到越來越靠譜的路。

除了發表第一篇技術文章之外,大二我還用業餘時間做了一些技術翻譯,寒假裡我坐在家裡每天晚上翻譯半章《effective c++》,當然,後來我把譯稿提交給出版社的編輯時被告知文筆還顯生硬。

同一時間,我繼續啃n多c++以及底層知識的書,一段時間我的書架上全是這類書,根本不像數學系的學生。非典那陣子,把飯錢都拿來買了書,為什麼買得這么瘋,也是因為受父親的一個影響,他告訴我買書不用心疼,因為是長遠投資,收益遠遠大於這點金錢投入。那段時間我邊看邊寫一些代碼玩,有模仿windows核心編程的小程式,也有嘗試並失敗的小遊戲,也有拿來對宿舍玩的遊戲檔案分析的工具,還有為上機考試寫的庫,總之玩得不亦樂乎;不像很多知名的程式設計師在學校裡面就寫了被廣為使用的工具,那個時候我完全沒有這個意識,也不知道什麼是開源,自己自娛自樂而已,所以沒有系統訓練編碼量和編碼素養,比較盲目。

大二下半年還發生了一件重要的事情,我在csdn上開了一個部落格,開始寫學習c++和編程的過程中的一些總結。這個部落格我一直寫到今天,伴隨了我整個7年的學習和成長,回過頭去看就像時光機一樣,能夠看到一路過來我都關注了些什麼東西,是怎么想的,以及對一些事情的看法是怎么改變的。這些東西如果不記錄下來,就會逐漸忘掉,也就無法參照過去的自己,對未來提供更好的借鑑了。所以我一直把記錄當做一個很重要的工具。另外我也通過這個部落格認識了很多朋友,得到了很多的幫助。

後來,學校提供了轉繫到軟體學院的機會,我立即報名了。後來的兩年在軟體學院度過。但其實反正我也是自己安排時間,所以無甚區別。

大三大四發生了幾件重要的事情:一是榮耀先生邀我合譯《imperfect c++》,我很樂意的接了下來,可沒想到這本書比我想像得要密度大得多,六百頁,而且排版也很密,我給自己安排了每天6、7頁紙的量,大概花了半年多譯完。中間有一段時間停滯,榮耀先生給我鼓勁,告訴我一個重要的方法:如果覺得做不下去了,就硬著頭皮堅持做,然後就類似於麻木了,適應了,那種望而卻步的感覺會逐漸自動退去。驚人的簡單,但事實就是如此,硬著頭皮,過了那個情緒上最艱難的時候,也就適應了。這本書譯完之後,還是有不少的收穫,但我總覺得對性格上的磨練才是最有價值的收穫。

二是我開始看英文版的書。之前,由於高中不靠譜的英語教育的原因,我恨死了英語,大二的校內四級課程還掛了科,直到大四才補考。但對技術本身的熱愛壓過了對英語的反感,我還是硬把一整本影印版啃下來了,而且津津有味,這本書就是jeffrey richter的《applied .net framework programming》。這個事情的重要性在於,後來我就不再反感和恐懼英語了,這是其一,其二是我開始意識到英文世界的技術資料有多么豐富,所以雖然本身看上去不是一個太起眼的事件,但卻是我獲取信息方式的一個tipping point,一旦熟練掌握了語言這個平台,背後就是一扇大門,通向一個海量的信息源,後來我的信息獲取絕大多數便來自於英文,其中尤數wikipedia和英文版的書為多。另外還有一個收益後面會提到。