愛伊米

我在南大的七年

今天在討論組看到一個帖子,非常不錯,樓主是劉未鵬,他的個人部落格我之前也在部落格推薦裡提到過,不過現在似乎沒怎麼更新了。

把這篇帖子在這分享下~

我在南大的七年

正文

跨進南大校門的第一天,我知道,我自由了。

父親是個對新事物有強烈興趣的人,村裡第一臺電視機是他自己組裝的,當時全村人都跑過去看,電視機只能收到一個臺,CCTV。座機電話是第一個裝的。大哥大剛出現的時候,他也是第一個買來用的,那個時候的行動電話真是貴得離譜。

父親告訴我的第二件最重要的事情是:遇到任何問題,找書去就行。他在自己的專業中完全是自學的。在不屬於自己的專業中(後來買了電腦之後需要學習如何架設公司網站,如何網上營銷,如何進行電子財務管理,如何使用各種作圖軟體製圖等等)也全都是靠買書自學。

為什麼說到這兩件事情,因為這是對我一生影響最重大的兩個習慣。第一個習慣給了我學習新東西的強烈動機,有了熱忱和興趣,做事情就不覺得累,就自得其樂。第二個習慣則給了我學習任何新東西的方法——不會麼?查書去。(當然,學習一門專業並不完全透過看書就行,但這毫無疑問是至關重要的一個途徑。)

高三的時候,父親買了電腦,我立時對這個神奇的事物產生了強烈的興趣,每期的《電腦愛好者》和《電腦報》都會買來細細看,有時看到各種小工具、技巧還會摘抄下來,回去在自己家裡的機器上搗鼓。那個時候我並不知道這樣單純的興趣會把我引向一條專業的程式設計師道路。

高三時間變得越來越緊,分配給興趣的時間越來越少,但興趣的火花一直都沒有熄滅。

跨進南大校門的第一天,我知道,我自由了。

這個自由並不是說我可以做任何事情了,而是我得到了一個重要的決策的自由權,即關於如何利用我的時間。

高考的時候我報了計算機系,但分數差了幾分,失之交臂,被調到第二志願專業——資訊與計算科學。當時以為這個專業跟計算機相關的,結果發現是數學系,後來聽不少同學提到都上了同樣的當。

這裡出現了一個歪打正著的事情:我本意並不是上數學系,如果當時知道這個專業是數學系,我可能就不會填報了。但正是因為這個錯誤,我在數學系好歹也受了一些數學基本功的訓練(儘管這個訓練的基礎是大一上的不多的幾節數學分析課,以及每次臨考前宿舍哥們例行的“包夜”看書),回過頭來看這個基本功在後來還是幫了不少的忙,甚至有一陣子我對數學本身到了很感興趣的程度。不得不說,這段學習的經歷是很鍛鍊抽象和邏輯思維的。另一方面,困難如數學都學了,對其他學科就不覺得難,不會望而卻步。

這是我成長過程中的幸運之一。後面還會提到,還有好幾次更大的幸運。

大一上學期很快過去,應該是在大一下學期的時候,學校要開一門C++課程。我利用假期先把課本基本啃掉了,當時動機也很簡單,先啃掉,就不用上課了嘛。

另一件事情是我經常喜歡去逛書店,看到侯捷的《深入淺出MFC》上面很多人說這本書好,我當時也對C++有一些基礎認識和好感,所以就買下來啃了。一方面侯捷先生寫的書的確圖文並茂,深入淺出,有意思,另一方面理解一樣複雜的東西是個智力挑戰。所以看著看著倒是覺得興致盎然。卻不知就這麼和C++結下了不解之緣。

這是另一個歪打正著:為什麼說是“歪打”呢?因為MFC的設計也並不能說就是C++的Best Practice,另一方面若是以用為本的話也未必就要把MFC的原理摸個透。所以搞不好現在看來我就不會細看這本書。為什麼說是“正著”呢?因為理解一個費解的東西本身需要長時間投入注意力,無形中練了理解能力和思維體力(專注),另一方面雖然MFC不是最佳設計,但理解裡面的程式碼卻加強了對C++本身的認識,這是基本功;也加強了對C++的興趣,這是動力,後來這個動力驅使了我去看了大量的系統底層知識,從作業系統程式碼一直看到硬體體系結構。

大二發生了幾件重要的事情:一是我在程式設計師上發表了第一篇技術文章,是剖析Boost原始碼的。我已經不記得什麼時候、透過什麼途徑知道Boost這個庫的了,總之是知道了,然後也是由於受到侯捷先生原始碼剖析的影響,也去看原始碼,發現很難,越是難就越是覺得有趣,跟蹤程式碼到臨晨四點居然越看越精神了,後來火速寫了一篇原始碼剖析。發給《程式設計師》雜誌的技術主編孟巖先生,孟巖先生給了很大的鼓勵,於是我很來勁。後來一鼓作氣分析了N個庫,寫了一系列的文章,在網上隨處可以搜到這個系列。

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

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

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

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

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

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

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

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

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

大四快畢業的時候又發生了一件事情,微軟的Eric Jiang透過我的部落格找到我,推薦我去微軟面試,我隨隨便便就把粗糙的簡歷給發過去了,差點因為簡歷太粗糙被HR直接過濾掉。遠端電話面了兩輪,遠端coding一輪,然後記得就是飛到北京面試,住在北航招待所。北京的面試又面了好幾輪,有考察底層知識的、有考察C/C++的、。Net的,還有考察演算法的,編碼素養的。總之就是公認的基本功考察。最終我還是沒能透過面試。個人自己後來總結的結論是演算法基本功太差,連什麼是動態規劃都不知道,編碼素養也不夠。這部分也是因為本科的學習方法太業餘,什麼好玩幹什麼,倒不是說興趣驅動不好,只是缺乏系統的規劃,不清楚也不關心這個領域的藍圖,也弄不清什麼是重點。後來在讀研的時候惡補了一把演算法,好歹弄清了一些基本的概念和思考方法。編碼素養的問題也是到了讀研的時候才開始思考和學習,現在仍在學習。

另外,在本科階段,其實也浪費了很多時間,事實上是隻花了很小一部分時間來學習。之所以還多少學了點東西,完全是仰賴了專注的習慣。所以每當有人覺得我本科就做了不少事情的時候,我就會說其實我真的本科浪費了很多時間,另一方面也說明,要掌握一門專業知識,其實每天一點時間,專注、積累和持之以恆也就夠了。後來研究生階段才算真正開始惜時了,於是經歷了兩年密度很高的學習和思考,心智才成熟了不少。

大四的時候,和很多人一樣,我也考研,因為一來也很茫然,二來也希望能夠繼續有一個寬鬆的環境繼續沉浸在自己的興趣中。但四年來我都是自己安排時間,逃掉了無數的課,已經對模式化的做題考試產生了牴觸,所以考研的複習也沒怎麼認真準備,那年考研的數學題又偏難,一下慌了神,結果居然把一整頁題壓在稿紙下忘了做了,心理準備有多不充分可見一斑。考完數學我很沮喪,那麼大分值的題目沒做,數學肯定過不了了,接下來的專業課就沒去考了。後來想想其實還是應該去考一考,多少能為下一年積攢經驗。

後來就工作了,沒去成微軟。經同學張振推薦,就去了南京西門子。心裡的打算還是邊工作邊考研,為什麼考研,動因也簡單,我心理還沒準備好,本科只顧著埋頭學好玩的,也不看路,不知道自己想要什麼樣的工作,想做什麼樣的事情。去西門子之後更加覺得如此,覺得效率很低,做的事情也並不是我樂意的,每天還要在班車上浪費兩個小時,於是沒過多久就辭掉了工作。打算複習考研。那個時候大概還有半年多的時間才到考研,所以我中途不緊不慢地又翻譯了《Exceptional C++ Style》,佔用了不少時間,到最後時間很緊了,就剩兩三個月,我才開始認起真來,回想起來這是糟糕的時間管理。結果我不得不作了最壞的打算:頂多調劑去軟體學院讀研(我報的是計算機系),考慮到我反正是自己安排時間,差別應該不大。幸運的是,最終一分不差地過了線,算是蹭到了計算機系裡。雖然如此,還是覺得這種驚險不要發生的好,以後或者其他事情上就不會有這麼幸運了,及早準備總是很重要的。

讀研期間的兩年半,是我自己覺得心智年齡成長最迅速的一段時間。這裡也有幾個很幸運的事情。一個事情是我的導師陳家駿先生給了我很大的自主,於是我得以有時間安排一些重要的學習,這段時間對我來說很重要,我學習和思考了很多東西,為個人以後的發展作了很多準備,倒是沒幫導師做什麼事情。所以,碩士畢業離開的時候是既感激也愧疚。

另一個事情是認識同實驗室的師兄陳懷興,嚴格來說是他先來找我聊天,可見那個時候我仍然還是沒有意識到與人交流的重要性的,後來,建立了TopLanguage討論組之後越發意識到與他人交流的重要性,也開始主動尋找和參與交流,希望以後自己也能組織交流。陳懷興對演算法很有造詣,也是TopCoder上的常客和牛人,那個時候我也正在為以後的工作面試準備一些演算法基礎,所以經常找他討論,獲益很多。有一句話說:看一個人,只要看他讀的書和見的人。還是很有道理的,這兩者是一個人成長中最有價值的資訊來源。

研一下半年,女朋友找工作的時候需要用到營銷方面的知識,於是我去替她找書,偶遇《影響力》這本書,這本書打開了我的視野,讓我開始關注一個很有價值的領域:我們如何思考,如何正確地思考。這個領域有很多有意思和有價值的書,我利用近一年的時間,陸陸續續看了近40本相關的書,對思維的特點以及如何思考有了很多的瞭解,這些知識後來很大程度上使我更清晰地認識自己,和自己在學習和生活中面臨的各種問題。

也是研一下半年,我建立了一個Google Groups,起名TopLanguage,一開始的時候是因為平常沒人討論問題,憋得難受,希望有人能夠說兩句,無心插柳柳成蔭,後來這個討論組的交流越來越多,我也從中收益頗多,其中最大的收益有兩個:一是和人討論能夠激發自己進一步的思考,也促使自己更清晰地表述自己的觀點或問題。倒不是說別人就一定告訴你什麼新東西,而是討論對你自己的思維的刺激。二是交流中認識了不少朋友,後來快畢業的時候也受幫助頗多。我一直把TopLanguage的建立看作研究生階段做得最有意義的事情之一。

此外,我有意識地提前準備了英語,因為我相信如果想要去好的外企,口語不過關很可能成為一塊短板(當然,英語作為承載最多技術知識的平臺語言還有更大的價值),包括閱讀、書寫和口語。我想了一個方案,可以不用額外花時間來學習英語:閱讀的訓練蘊含在平時的英文技術資料的閱讀中,儘量讀英文的,一來英文資料更“一手”和全面,二來也順便練閱讀。書寫的訓練蘊含在去國外郵件列表發技術貼和自己寫的英文部落格文章中。口語的訓練則蘊含在平時的娛樂中——美劇,有一個暑假我幾乎天天開著Friends睡覺,另外學校有國外過來的團隊演講我不再錯過,而是主動參加,有一次還帶他們出去逛南京,說了一天英語,回頭在路上聽中文都像英文。雖然和外國友人交流的次數不多,但似乎對口語感覺的提高還挺大。後來在微軟亞洲研究院的面試最後一輪就是英語的,而且是偏技術的,好在提前準備了,所以畢竟還是順利地表達出了想表達的意思。

去微軟亞洲研究院面試,是因為幸運地認識了微軟亞洲研究院技術創新組專案主管鄒欣先生。鄒欣先生和他組織的團隊在那段時間寫了《程式設計之美》,書中有很多很有意思的題目,而我那段時間恰和陳懷興討論演算法,在討論組上也組織了專題的討論,有了一點粗淺的思考,於是和鄒欣先生郵件交流,由於對鄒欣先生的技術創新組做的事情很有興趣,所以找工作的時候便向他毛遂自薦。

承蒙鄒欣先生推薦,時隔三年,我再次獲得了去微軟面試的機會。這一次,由於研究生期間作了一些長遠準備,所以心裡有底了很多,也就比較冷靜了,由於當年知識體系的漏洞被我花功夫補了補,所以面試比較順利。面試的時候鄒欣先生更為詳細地介紹了技術創新組的工作,我更加感興趣了,所以儘管已經有另外幾個也不錯的選擇,但心裡還是迅速地做了決定。大約一週後,HR通知Offer,我毫不猶豫就接受了。

我想,雖然有很多人本科就明白自己想做什麼,我多花了兩年多,總還不算太晚。

原文:https://groups。google。com/g/pongba/c/5mvRct94KLA?pli=1