(本文發表于《程序員》2007年第2期,發表時有刪節。)
用五年時間跨越鴻溝
——“大學未畢業程序員”的流水帳
禪宗說 學佛有漸修頓悟之分。說到“跨越鴻溝”,總讓人覺得像是習武之人一夜間打通任督二脈,霎時間神清氣爽身輕如燕,原本百思不得其解的大難題突然就迎刃而解。 這般境界著實令人神往,可惜我從參加工作以來五年有余,回想起來竟然沒有這么一個天人合一的頓悟時刻。遺憾之余,只能安慰自己說:這就是所謂“資質”吧。 沒有當下開悟的聰穎天資,所以也難以體會跨越鴻溝的愉悅了。
不過想想五年前的自己,卻也不是全無變化——不管技術、寫作還是待人接物,就 連頭頂冒出的幾根白發,都見證著自己的成長。不過最大的變化還是在自己心里:當年背著書包和無法完成的學業黯然離開校園的男孩,現在已經可以淡然地拿自己 這段經歷打趣了。能夠坦然面對自己心中最不堪回首的往事,這也算是跨過一道鴻溝了吧。
北京理工大學,我的母校,是一所有著嚴謹學風的高 校。在受她嚴格的理工科基礎訓練而獲益匪淺的同時,我終于也沒能達到她期望的標準。2001年,在學業還剩下一年尚未完成時,我不得不選擇了離開母校—— 以一個失敗者的身份。從那時候開始,我常常會做一個夢,夢見自己正在高三的教室里復習準備高考,一邊還鼓勵自己說“這次終于有機會把大學讀完了”。能夠順 理成章地拿到本科文憑的大多數人,恐怕是體會不到這種悵然若失的缺憾感的。
如果說夢中的缺憾感只是令人心緒不寧的話,白天需要面對的就是 更加現實的問題了:一個機械工程系的肄業生要如何找到一份工作來養活自己?雖然一直熱衷于編程,在學校里也有些小小的實踐經驗,但我實在沒有自信能靠這樣 的背景留在IT圈里。好在當時供職聯想的孟巖熱心相助、《程序員》雜志蔣濤總編不拘一格、再加上當時創刊剛一年的雜志正需要青壯勞力,我的提前退學反倒成 了因禍得福,早早地就給自己找到了一份工作。
這“因禍得福”之說并不純是發揚阿Q精神:雖說薪水不高加班不少,但《程序員》雜志編輯部仍 然是一個難得的優秀團隊;更重要的是,在這里可以接觸到前沿的技術和高端的視野,這對于正在渴求知識的我來說無疑是天賜良機。而且做雜志編輯還能近水樓臺 先得月地接觸到圖書出版機構,我的《重構》、《最后期限》、《與熊共舞》等幾本譯作都是在這段時間里完成的——對我而言,從事翻譯工作最大的受益者還是我 自己,因為翻譯的過程讓我真正將一本書讀得通通透透。試想一下,這些書籍都是Martin Fowler、Tom DeMarco等前輩的心血凝粹,能將它們讀懂又怎會不大有裨益?
但作為雜志編輯的一個缺陷也逐漸顯露出來:雖然能夠看到到很多技術文章 和案例分析,但畢竟沒有機會親手開發一個真正的軟件。每天只是高談闊論,畢竟站著說話不腰疼,一來二去就成了個眼高手低的毛病。就算自己嘗試寫些程序,但 一如溫伯格所說,不從事專業的軟件開發,就永遠只是業余選手,對于“專業”的問題終歸想不明白。況且媒介傳播——縱令是關于“軟件開發”的媒介傳播——與 軟件開發始終是兩碼事,所需的心理狀態和技能是截然不同的。于是在2003年初非典肆虐的日子里,我那顆程序員的心又開始躁動起來。要去做一些真正的軟 件,我才會知道軟件究竟應該怎么做,模模糊糊中這就是我對自己說的話。
想要去做真正的軟件也不是那么容易的,我的學歷問題仍然是求職路上 的攔路虎——我甚至不知道該如何在簡歷里寫自己的教育背景,只好含糊其詞地寫上“曾就讀于北京理工大學機械工程學院”。這樣一份簡歷鐵定入不了HR主管們 的法眼,我這樣告訴自己,所以還得另辟蹊徑。這時候一位老友,在BBS上認識的石一楹成了我的貴人:此人經驗豐富,技術精湛,做著某公司的技術總監和好幾 家公司的顧問,而且正好還在我素來向往的人間天堂杭州。于是幾番電話之后,我便定下了前往杭州的機票。
石一楹給我第二大的幫助——最大的 幫助自然是幫我在杭州找到一份工作——是教給我敏捷開發的理念。尚在北京時,我曾經通過電話問他:需要準備哪些背景知識。他既沒有叫我去學J2EE,也沒 有讓我補習SQL,只是要我把《解析極限編程》再讀一遍。(當然我是刻苦的好學生,我把整套XP叢書都買來重讀了一遍。)到了杭州以后,除了西湖的迷人風 光之外,他的工作方式同樣令我震驚:測試驅動、持續集成、故事卡、結對編程……這些似乎只有在書里、在老外的辦公室里才可能出現的東西,就這么活生生地出 現在我眼前。這讓我第一次產生了一種朦朧的感覺:我們也可以用正確的方式做優秀的軟件。
后來由于種種原因,這些敏捷的因素在我們的項目中 出現得越來越少。到最后,除了一套盡管談不上完備、但至少還頻繁執行的測試和時常進行的重構之外,我們的項目已經基本回到大家更熟悉的、“普通”的工作方 式了。這個現象引發了我的很多思考:為什么明明知道敏捷是更好的方式,我們卻無法做到呢?說來有趣,最后解開我這個疑惑的竟然是《壇經》中一段禪宗典故。
五祖弘忍座下大弟子神秀偈云:
身是菩提樹
心如明鏡臺
時時勤拂拭
勿使惹塵埃
更 多人記得的是六祖慧能與之針鋒相對的那一偈。但很多人似乎忘記,以一目不識丁的獦獠之身,能聽人頌《金剛經》而有所悟,六祖的根性不是常人能比的。這世上 有圣人能憑過人靈性而頓悟成佛,但更多凡夫俗子做不到這一點。這根性愚鈍的凡夫俗子,難道就不用修行、無須上進了么?別忘了,五祖讀了神秀的偈,也說“依 此偈修,免墮惡道;依此偈修,有大利益”呢。
于是我開始觀察,觀察身邊的同事,也觀察自己。我觀察到一個有趣的現象:很多同行(也包括我 自己)想要偷懶、想要逃避那些嚴格的紀律時常用兩個借口。其一曰“但求頓悟”——“Stallman/Linus/Gates……寫emacs /Linux/Basic……的時候做單元測試了嗎?”(所以我也不用做單元測試。)其二曰“不耐漸修”——“昨天就有一塊代碼沒有單元測試了。”(所以 今天這塊代碼不寫測試也不算太糟。)親愛的讀者,不妨和我一道來摸著胸口拷問一下自己,這是不是我們常用的兩套說詞?
回答其實很簡單:第 一我們不是Stallman/Linus/Gates,他們是天才而我們不是;第二我們的工作還得繼續做下去,而且我們希望把它做得出色。熵增加是宇宙的 定律,為了讓我們的程序、我們的項目、我們的團隊、我們的工作環境有序而不混亂,我們就必須不斷地向其中注入能量——既然還做不到“菩提本無樹,明鏡亦非 臺”,我們就必須“時時勤拂拭,勿使惹塵埃”。(兩年后,當我成為一名ThoughtWorker之后,我才真正明白了這件事。這是后話,暫且按下不 表。)
在杭州的日子里,除了與軟件開發的技術和經驗之外,我的另一大收獲是開始信佛。照著佛經所說“觀身如身,觀心如心”的修行方法,我 學會了如何去觀察——當然包括觀察別人、觀察外界,但更重要的是觀察自己。觀察自己的身體感受和心理活動,并時時調節身體與心理狀態,使自己身心平和安 定。(除了別的好處之外,這種練習讓我近兩年很少生病,偶染小恙也心知肚明該如何調理痊愈,這算是信佛之后的一個意外收獲。)就這樣帶著一些經驗、一些思 索和一些收獲,2004年,在離開學校正好三年的那一天,我再次撥通了蔣濤的電話。
這次回到北京、回到傳媒的原因有二。其一,我已經親眼 見到好的經驗能夠如何有效地幫助軟件開發,我希望創造條件讓更多好的經驗被傳遞給更多的人;其二,除了軟件開發之外,我仍然對麥克盧漢的大眾傳播理論懷著 一份向往——有些事,你知道自己不會一直去做,但如果沒有過足癮就會一直惦念。媒體工作于我,就是這樣的一件事。此時蔣濤的工作重心已經從《程序員》雜志 轉到了CSDN網站,我也就成了網站的技術主編——在Web 2.0熱潮到來之時為一個擁有超過100萬用戶的網站工作,誰又能說這不是一種幸運呢?
在 他的代表作《理解媒介》中,麥克盧漢提出了一個影響整個大眾傳播領域的理論:媒介即是內容。從一個非常狹窄的意義上來說,這就意味著經營媒體的重點不是制 造內容,而是打造一個傳播平臺,讓內容的生產者與消費者在這個平臺上互通有無、各取所需。在根源上,這正是我重新回到傳媒領域的原因:除了開發軟件、享受 編程的樂趣之外,我一直向往成為一名“技術傳播者”——通過我的工作讓更多人了解軟件開發的知識和最佳實踐,用我的思想去幫助別人獲得成功,這給我帶來的 滿足感絲毫不亞于解決一個技術難題。但與此同時,我也越來越清楚自己的個性并不適于從事媒體工作:對技術的熱愛使我無法中立地對待各種不同觀點,而“中 立”卻是媒體的一大要素;而且我喜歡解決具體問題勝于人際交往,這也決定了我無法成為一個優秀的記者或主編。就在不斷努力和認識自我的過程中,又是半年時 間過去了。Martin Fowler來了。
直到現在,每當被問到“最尷尬的事”時,我總會講這個故事。我們跟上海交大借了一間大教室, 我們拉出了醒目的橫幅和招貼,我們邀請了三百位客人和十多位知名專家,這全都是沖著Martin的面子。但就在講座開始前4個小時,Sidney Pinney(時任ThoughtWorks中國公司總經理)在電話里告訴我:“Martin因病不能來現場,我很抱歉……”盡管事后有各種關于我當時如 何鎮定自若的傳言,不過說實話,我腦子里冒出的第一個念頭是“趕快刮臺風全城戒嚴吧……”也許又是一次因禍得福,這樁倒霉事讓我和 ThoughtWorks一下子對彼此有了更多的認識。回到北京以后,郭曉(現任ThoughtWorks中國公司總經理)告訴我:也許我真正想做的是咨 詢。那么好吧,還能有比ThoughtWorks更讓我心儀的咨詢公司么?
但即便如此,當時的我其實也沒想到,自己究竟會有多么心儀 ThoughtWorks這家公司——也來不及想,唯一的想法就是“終于可以盡享編程的快樂了”。第一個項目對我來說熟稔多過生疏:卡片墻、大白板、圓桌 和隨意滑動的椅子、免費的可樂、兩人一臺電腦……正是我寤寐以求的工作環境啊。2006年春節剛過,公司又派我去印度參加了ThoughtWorks University的學習。拿到畢業證的那一刻,淚都幾乎要下來——好歹是張文憑啊,哪怕并不是真正的大學呢。
在 ThoughtWorks的時間稍長,特別是先后拜訪了印度班加羅爾和澳大利亞墨爾本兩處辦公室之后,我漸漸明白了一件事:這世界上的天才比我們通常想象 的要少得多,但凡人所能達到的成就卻也比我們通常想象的要偉大得多。沒錯,我的意思就是:ThoughtWorks并不是“天才幼兒園”,這里的800多 名員工都是有七情六欲、食人間煙火的凡人。這些凡人做出了令人刮目相看的事情、營造了令人向往的環境,僅僅是因為他們保持著自己向上的心。
拿 ThoughtWorkers常用的一個比喻,每個人都是一個熱氣球,在地心引力的作用下總想往下掉——累了,病了,心情不好了,打球受傷了……無數的理 由讓我們想躺在沙發上度過又一個無所事事的安閑夜晚。要讓氣球越飛越高,唯一的辦法就是不斷地給它加火。個人是如此,項目的運轉、企業的環境也莫不如此。 良好的項目不會自然而然地永遠良好下去,它要靠每個人不斷改進它的質量;振奮人心的工作環境不是從天而降的,它是靠每個人從一張貼紙、一個玩具開始積累出 來的。有些熱氣球飛得那么高,也許只是因為它們一直沒有放棄向上飛。
于是我真正釋然了。五年的時間,我已經走到了這里。盡管自己還是那么 微不足道——我學習新技術總是很笨,我到現在還不懂編譯原理,我的英文口語結結巴巴……但我知道自己會一直向上飛。哪怕只有一點點進步,只要每天都比前一 天更好一點點,我就不會再讓自己失望。不過生活總是這么充滿戲劇性:當我為自己的學歷問題擔憂時,其實從來沒有人因此歧視過我;而當我能夠坦然地拿這個話 題開玩笑時,卻著實被歧視了一把——因為沒有本科學歷,美國大使館根本不考慮給我發放工作簽證。在未來的若干年里,這也會是我的一個有趣談資吧。
回 想這五年來的經歷,曾經有過好多次的因禍得福、好多次的貴人相助。我很愿意說這是因為自己命好,不過另一種解釋也多少有些意思:每件事情的“意義”,其實 是我們在事后給它加上的;如果用平和的眼光看待已經發生的事實,用積極的態度迎接即將到來的明天,也許所有的塞翁失馬都可以變成焉知非福。是的,這似乎與 因果律不符,但宗教信仰原本就不同于因果律。我信所有的事情都是神祗的安排,所以我欣然接受。
但聽天命并非無須盡人力。神會給你祈求的一 切,前提是你知道自己想要什么。關于“發現自己的興趣和特長”,已經有無數人講過無數次,實在不必再作強調。我想說的是,僅僅知道“了解自己”的重要性還 是遠遠不夠的,我們需要做更細致的工作來真正了解自己。借助一些專業而全面的心理、性格測試,你可以找到自己的性格特質和缺陷;然后你可以制訂出具有可操 作性的計劃,充分發揮自己的長處,同時避免性格缺陷造成嚴重損失——舉例來說,假如你害怕演講,你不必費心(也不太可能)把自己培養成口若懸河的天才演說 家,但可以(并且應該)想辦法避免因為緊張而忘詞;而且你還可以發揮自己善于收集資料的特長來幫別人準備講稿,讓別人替你去演講。當然,最重要的還是自己 的感受:花一點時間讓自己靜下來,然后問自己到底喜歡什么、想要什么。做自己喜歡的事情更容易做出成績;而每天浪費8小時來做自己深惡痛絕的工作,不啻是 在慢性自殺。
盡管輟學這件事困擾了我數年,但我并不因此而憤恨——甚至有些感激。因為沒有文憑,讓我比別人少了一道可以依靠的墻,因此也 逼迫著我不斷努力前進,不敢須臾懈怠。雖說自認為已經跨過了這條鴻溝,但我并不想忘記那種害怕一覺醒來一無所有的危機感。就讓那個悵然若失的夢一直伴隨著 我吧,做一個“大學未畢業程序員”,我已經習慣了這種狀態,感覺還真不錯。