本文為翻譯初稿。更多精彩内容,敬請關注《高效能程式員的修煉》,人民郵電出版社。
在求職的時候,相信很多人都被問過這樣的問題,“你對自己未來5年的職業規劃是怎麼樣的?” 每當我被問起這個問題的時候,我的腦海裡總是浮現出Twisted Sister樂隊1984年拍攝的一段視訊裡的這個場景:一位老師對着他的學生大喊,“我想要你告訴我,不,是告訴全班同學,你究竟想要過怎樣的生活?”

譯者注:Twisted Sister是一支源自美國紐約的搖滾樂隊,成立于1970年代早期。後來經過将近10年的奮鬥,他們在80年代初取得了較大的突破。然而由于他們的叛逆形象和古怪行為,在他們最風光的時候,他們被美國政府看作是重金屬毒害青少年的一個典型例子,于1988年被迫解散。
你自然會想:我要變得很牛!或者至少成為一個很牛的程式員。盡管這個問題看起來并不像其他一些同樣老掉牙的問題那麼嚴肅(比如,“你覺得你最大的弱點是什麼?”),但很可能你還是覺得難以回答。也許有時候你表現得太牛了,不屑于回答這樣的問題。但要小心了,你可能會惹惱别人。
在我看來,這個問題同樣是一個相當嚴肅的問題,值得好好思考一番。不是為了應付面試官,而是為了你自己。
對于這個問題,大部分人都會選擇一個不痛不癢的答案來敷衍面試官。但它也确實引出了一個更為深層次的問題:一個軟體開發人員究竟該有怎樣的職業生涯?當然,我們選擇這一行是因為我們喜歡這行,并且幸運地得到了老天的眷顧,我們幹上了這一行。但你能在50歲的時候依然坐在電腦前敲代碼嗎?60歲呢?是以,我們得趁還年輕的時候好好思考一下這個問題:作為一個程式員,最完美的職業生涯應該是什麼樣的呢?
那我就來告訴你吧,基本上,這個世界上的程式員可以有8種境界:
1. 不朽的程式員
這是最高境界!雖然人已經走了,但是他的代碼卻依然活着。他成為計算機博物館中的一個永久收藏。其他為數衆多的程式員都在學習他的作品。他在生前可能得到過圖靈獎,或者發表了大量有影響力的論文,或者是發明了一些影響到計算機專業課程設定的基礎技術。他已經不僅僅隻是擁有一個維基百科的條目,事實上,有很多專門的網站來講述他的作品以及他生平的事迹。
在人的有生之年能夠達到這一境界的程式員屈指可數。
代表人物:Dijkstra、Knuth、Kay。
譯者注:Dijkstra是一名荷蘭的計算機科學家,他因發明了計算機程式設計語言而于1972年獲得了圖靈獎。Knuth是《計算機程式設計藝術》一書的作者,他被稱為算法分析之父。Kay是一名美國的計算機科學家,是面向對象程式設計、視窗圖形使用者界面設計的先驅者,他有一句名言是:“預測未來的最好辦法是創造未來。”
2. 成功的程式員
成功的程式員不僅擁有廣泛的知名度,同時還營運着一個不錯的公司,甚至控制了整個産業鍊。他們擁有絕對的自由,可以做着自己想做的事情。他們同時還有着把“自由”帶給廣大程式員同胞的夢想。
這一境界的程式員最受人羨慕。要到達這一境界,更多的是需要商業上的才能,而不是你的程式設計能力。
代表人物:比爾·蓋茨、Carmack、DHH。
譯者注:比爾·蓋茨是微軟公司的創始人,他是個電腦神童,13歲開始程式設計,20歲開始上司微軟;他同時也是個商業奇才,他利用自己的遠見卓識和精明的商業頭腦讓微軟名噪天下,把軟體做成了人們生活中不可或缺的東西,成就了今日的微軟帝國。Carmack是Id軟體公司的創始人,該公司主要從事電腦遊戲以及遊戲引擎的開發,作品有《半條命》、《反恐精英》、《毀滅戰士》等。DHH是一名丹麥的程式員,他建立了“Ruby on Rails”Web應用架構,并與人合寫了《Web開發靈活之道:應用Rails進行靈活Web開發》一書。
3. 知名程式員
進入這一境界的程式員也不錯,當然前提是,你得有一份不錯的工作。
這個境界的程式員雖然在圈子裡很有名,但是成為名人并不意味着你可以靠這個賺取收入并且養活自己。出名固然不錯,但成功更為關鍵。你可能在一家非常知名的大型技術公司工作,也可能在一家很有影響力的小公司,或者是在一個很有希望的創業團隊。不管怎麼樣,其他的程式員都或多或少地聽說過你,并且你對你所在的領域有着積極的影響。
4. 勝任的程式員
你作為一名軟體工程師非常成功,因為你的能力使你在工作中遊刃有餘。你從來不會為找一份滿意的工作而發愁。你的同僚也非常尊敬你。每一家你工作過的公司都因為你的加盟而在某些方面得到了提升。
但問題是:你接下來的方向在哪裡?
5. 普通程式員
這個境界的程式員能夠基本應付一般的程式設計工作。他們自己也很清楚,由于天資所限,他們很難成為傑出的程式員。
其實,天賦跟成功的關系并不大。如果你有敏銳的商業嗅覺和不錯的人際交往能力,你依然可以變得很成功。如果你是一個普通的程式員,但你還能靠這一行當過上不錯的生活,那已經說明你是很有才的,隻是你不必非得幹程式員這一行。
人貴自知之名。通常你的能力都會比你自認為的要低。缺乏天賦并不是什麼大不了的事情。要勇敢一點,發掘自己的特長,并且充分地加以發揮。
6. 業餘程式員
業餘程式員通常都熱衷于編碼。他們可能是一些很有前途的學生或實習生,也可能正在參與某些開源項目,或者利用個人閑暇時間開發一些“好玩的”應用程式或網站。從他們的代碼和創意可以看得出,他們是一群很有想法、充滿激情的人。
成為一名業餘程式員是件好事。這個境界的程式員可以通過自我提升,很快速地勝任程式員這個職業。
7. 低調的程式員
還有一些坊間流傳的比較有個性的程式員,比如JoeCoder,很有能力但是沒啥令世人矚目的成就。他們可能服務于某家大型公司。對于這些人來說,寫代碼僅僅是份工作而已,并非他們生活的全部。這沒什麼錯,挺好的!
8. 爛程式員
這個級别的程式員技能極其匮乏(已無境界可言),他們通常是因為某些陰差陽錯的原因才幹上這一行的。他們所做的任何事情都會給他們的同僚帶來痛苦和災難——當然可能也有一個例外,就是他們的同僚也是一幫差勁的程式員,差到連身邊全是一幫爛程式員都意識不到。
如果要給爛程式員下一個定義的話,那就是:沒有金剛鑽,卻偏偏攬了瓷器活。
應該承認,以上所有的這些境界定義得并不嚴謹。其實,不是所有的程式員在他們的職業生涯中都渴望相同的東西。思考一個程式員在他10年、20年、乃至30年、甚至一生的時間内所能達到的成就,是非常有意義的!想一想,你最崇拜哪個程式員?到底是他的什麼成就,使得你對他有如此的崇拜?
話說回來:你究竟想要過怎樣的生活?