如何成為一名 Java 冠軍程序員?
距我上一篇非技術(shù)文章已經(jīng)有些時(shí)日。但一些程序員朋 友們一直在向我征求職業(yè)生涯的建議,現(xiàn)在我覺(jué)得是時(shí)候再寫一篇了。順帶提及,如果你有心思去看其他的東西——我已經(jīng)開(kāi)始在 Heinz’s Worst Recipes (海因茨最差食譜)上記錄我所烹飪過(guò)的那些慘不忍睹的食物。受我好吃的強(qiáng)烈欲望所致——這可以由我的腰圍證明,烹飪成為我的一大愛(ài)好。我遠(yuǎn)遠(yuǎn)不能成為一個(gè) 合格的廚子,因?yàn)槲覐膩?lái)不遵循食譜,由此我所烹飪的許多食物也以“黯然不可食”的狀態(tài)被拋棄掉,當(dāng)然有時(shí)候在做了足夠的嘗試、出了足夠多的問(wèn)題后也能遂我 所愿。在我的博客中,成功和失敗的例子都被記錄了。當(dāng)然,這和Java毫無(wú)瓜葛。
如何成為一名Java冠軍程序員?
幾個(gè)月前,我和的商務(wù)合作伙伴 Carl 以及我們的法國(guó)課程導(dǎo)師 Xavier 在巴黎的一家餐廳就餐。在談話中,我和 Carl 就我們年輕時(shí)使用的那些炫酷技術(shù)而談笑風(fēng)生。與此同時(shí),我注意到Xavier 沉默良久,于是我決定詢問(wèn)他的年齡。雖然不能確切的想起他的年齡,但我記得他與我年齡差距很大,和我第二個(gè)孩子的年齡相仿。這意味著,多少年來(lái),我和 Carl 同時(shí)有過(guò)的那些編程經(jīng)歷,對(duì)他來(lái)說(shuō)一文不值。
軟件工程師的職業(yè)生涯里,知識(shí)有一個(gè)三年的半衰期。這意味著三 年后,你所擁有的一半知識(shí)是毫無(wú)價(jià)值的。舉這樣一個(gè)例子,年紀(jì)越大,就越難看到有誰(shuí)能夠了解 TSR(內(nèi)存駐留程序 Terminate-Stay-Resident ),而找到曾經(jīng)寫過(guò)一個(gè) TSR 的人更是如同大海撈針。在 DOS 系統(tǒng)里,并不能讓多個(gè)程序同時(shí)運(yùn)行。因此,在我們需要一個(gè)后臺(tái)功能的時(shí)候,比如日歷或計(jì)算器,我們就會(huì)寫一個(gè)內(nèi)存駐留程序( Terminate-Stay-Resident program ),然后通過(guò)特定的組合鍵從另外一個(gè)程序中激活。
在這個(gè)行業(yè)里,知識(shí)的三年半衰期實(shí)際上是件極好的事情,這使你永遠(yuǎn)不會(huì)變成沉舟病樹(shù)。少年時(shí)期,人們警告我、反對(duì)我成為 一個(gè)程序員,認(rèn)為我將被迫持續(xù)學(xué)習(xí) 新東西,而我卻認(rèn)為我們的工作將因此而受益。首先,頭腦應(yīng)該保持新鮮和活躍。上次見(jiàn)到我祖母的時(shí)候,她已經(jīng)98歲高齡了,行走不便,但依然心如明鏡。她看 到我的 Macbook Pro 便說(shuō):“喲,這看起不錯(cuò),我也想買一個(gè)。”正是因?yàn)樗粩嗟貙W(xué)習(xí)新東西,使得她頭腦清醒。其次,忽略那些你并不是非常感興趣的技術(shù),因?yàn)椴痪弥笏鼈兙蜁?huì) 被取代。我舉一個(gè) Subversion 的例子。我過(guò)去使用它,因?yàn)槲冶仨毷褂盟覜](méi)有特別對(duì)待它,我并沒(méi)有成為一個(gè) Subversion 的專家。幾年之后,git 出現(xiàn)了,只能對(duì) Subversion 揮手拜拜??杀氖牵衲晡矣幸粋€(gè)客戶居然從 CVS 遷移到 Subversion !這可是 2015 年!
好了,讓我們重返的主題——怎樣成為冠軍程序員?我認(rèn)為以下幾點(diǎn)是非常有幫助的:
-
強(qiáng)大的記憶力。當(dāng) 我上八年級(jí)的時(shí)候,全因那位死氣沉沉的歷史老師,讓我自己都相信我的記憶力太差了。然而,令我驚訝的是,歷經(jīng)多年程序員的工作,我驚奇地發(fā)現(xiàn)自己對(duì)之前看 過(guò)的 Java 源代碼可以立即重現(xiàn)。在我閱讀 JDK 里的一個(gè)方法(method)的時(shí)侯,我常常能說(shuō)出該方法(method)相較先前版本有無(wú)改動(dòng)。也許我并不能記清楚某個(gè)人的長(zhǎng)相和名字,但是對(duì)于 Java 代碼可以做到過(guò)目不忘——要是人的名字也是 for 循環(huán)就好了。所幸,缺乏好的記憶力也絲毫不影響我們成為冠軍程序員,但擁有強(qiáng)大的記憶力依然是一個(gè)明顯的優(yōu)勢(shì)。
-
數(shù)學(xué)能力。不是成為一個(gè)數(shù)學(xué)高手才能成為一個(gè)好的 Java 程序員,但數(shù)學(xué)能力顯然會(huì)幫助你擁有成為優(yōu)秀程序員的資質(zhì)。今年一月份我有點(diǎn)空余時(shí)間,于是決定去試試歐拉謎題(Project Euler)。其中有一個(gè)謎題需要運(yùn)行九個(gè)半小時(shí)去尋找解決方案。在它運(yùn)行的過(guò)程中,我看了一下這個(gè)問(wèn)題,然后發(fā)現(xiàn)其中數(shù)字間的一點(diǎn)關(guān)系,這可以用以優(yōu)化 解決方案。我再次運(yùn)行,這次只花了 6 分鐘。與此同時(shí),我***個(gè)算法仍然持續(xù)運(yùn)行,嘗試找到答案。我再次回到數(shù)字中去,發(fā)現(xiàn)了另外一種沒(méi)有見(jiàn)過(guò)的模式,現(xiàn)在它只需要 6 秒鐘就完成了。我也嘗試過(guò)用聰明的編程技巧和并行去暴力優(yōu)化代碼,這可能讓速度加快了一點(diǎn)點(diǎn),但是依然沒(méi)有辦法使之少于6秒鐘。
大約十年前, Sun 發(fā)布了 Java 冠軍程序員(Java Champion)計(jì)劃。這個(gè)點(diǎn)子是用來(lái)發(fā)現(xiàn)世界上最***的 1000 個(gè) Java 專家,他們?cè)谝卜e極的做事情來(lái)幫助 Java 提升。我們現(xiàn)在大概排名在第 160 名。 Oracle 公司持續(xù)進(jìn)行著這個(gè)計(jì)劃,而且在過(guò)去的幾年里,我們看到了這個(gè)認(rèn)可制度的更多好處。這是一個(gè)自選的團(tuán)體。新的冠軍是被現(xiàn)存冠軍推介并進(jìn)行票選的。通常情況 下,在選定冠軍之前,需要有十多個(gè)贊成,而一個(gè)反對(duì)就會(huì)否決提議。自薦的情況是會(huì)被考慮的,但是一般不會(huì)得到足夠多的支持。
程序員朋友們經(jīng)常問(wèn)我是怎么成為 Java 冠軍程序員的,“很簡(jiǎn)單”我說(shuō),“只要和我一樣,發(fā)表 200 篇 Java 相關(guān)的文章;要么寫個(gè) Hibernate、Spring、Jacoco什么的;或者在 StackOverFlow 上回答數(shù)千個(gè)問(wèn)題并出版一打好文章;或者組織歐洲***的 Java 開(kāi)發(fā)者大會(huì)。”
你需要做一些卓越的事情,這將花費(fèi)時(shí)間和精力。沒(méi)有人因?yàn)樗麄兊膫€(gè)人魅力和顏值而成為 Java 冠軍程序員,全靠辛苦工作才可以,這也許是為什么我們的名字后面沒(méi)有臉部照片的原因
。甚至,不要為成為冠軍程序員而成為冠軍程序員。摒棄私心、等待其他人的贊揚(yáng),這將讓你感覺(jué)更好。并不是每個(gè)冠軍程序員都會(huì)被官方冠以“Oracle Java Champion(甲骨文Java冠軍程序員)”的稱號(hào)。無(wú)論你選擇了哪種方式,成為冠軍程序員就意味著奉獻(xiàn)。和朝九晚五式的上班是完全不一樣,你不可能在上班時(shí)學(xué)到所有你需要 的知識(shí)。而要成為冠軍程序員,需要利用晚上和周末的時(shí)間學(xué)習(xí),以保持與時(shí)俱進(jìn)。最夸張的笑話是,程序員一到40歲就會(huì)進(jìn)入淘汰期。也許他們?cè)?Java 編程上做的還不錯(cuò)——除非他們通過(guò)閱讀書(shū)籍、文章,或是參加開(kāi)發(fā)者大會(huì)和具有挑戰(zhàn)性的課程來(lái)刷新他們的知識(shí)——否則僅僅依靠一紙文憑,終將變得毫無(wú)價(jià)值, 這個(gè)行業(yè)將會(huì)把他們像用過(guò)的餐巾紙一樣拋棄掉。千萬(wàn)不要變成這樣的人!學(xué)習(xí),學(xué)習(xí),再學(xué)習(xí)!而***的學(xué)習(xí)方式無(wú)疑是和你的同僚分享知識(shí)。
怎么樣分享你的知識(shí)呢?如今,我們有很多方式可以選擇:可以在 StackOverflow 或者其他類似的網(wǎng)站上回答問(wèn)題;可以在午餐時(shí)間通過(guò)叫外賣來(lái)討論技術(shù)問(wèn)題——許多年前在我所在的一家公司里,我們就通過(guò)這樣的方式過(guò)了一遍”Design Patterns”。這需要一點(diǎn)犧牲,你可能必須放棄午餐,花費(fèi)某些晚上去準(zhǔn)備你的會(huì)談。然而,比起單純地做一個(gè)信息的消費(fèi)者,這能學(xué)到的東西要多得多。
“The Java™ Specialists’s Newsletter” 現(xiàn) 在為130多個(gè)國(guó)家的 70000 多程序員所閱讀,但開(kāi)始起步的時(shí)候非常微小,我把它發(fā)給我的八十個(gè)朋友和家人(包括我哥哥,和我父母),我懇求他們轉(zhuǎn)發(fā)給他們的朋友和同事。隨著時(shí)間地推 移,它慢慢地發(fā)展。我相信,如果你觀察周圍,你可以找到 80 個(gè)電子郵件地址,這就是它怎么起步的。萬(wàn)事開(kāi)頭小。它發(fā)展緩慢,但是成長(zhǎng)很穩(wěn)定。我知道當(dāng)你看到 70000 這個(gè)數(shù)字,可能會(huì)被震懾,但是這僅僅是 Java 程序員很小的比例。
***,我想以一個(gè)非常有幫助的要點(diǎn)結(jié)束這篇文章:熱忱。大部分人不得不做枯燥的計(jì)算機(jī)工作,很少有人能在其中享受。在我 的一份工作里,他們把組織源代碼庫(kù)的工作安排給一個(gè)電子工程師。他完全搞錯(cuò)了——當(dāng)他在做源代碼控制的時(shí)候,讓我們?cè)谀夸浿g拷貝源代碼樹(shù)。每周的 build時(shí)我們都要同時(shí)做這件事,服務(wù)器就像爬蟲(chóng)一樣緩慢。在機(jī)器卡殼的時(shí)候往往需要幾個(gè)小時(shí),所有的人都只能慢慢等,這是令人痛苦和沮喪的。我對(duì) VSS(Visual Source Safe:用于管理軟件開(kāi)發(fā)中各個(gè)不同版本的源代碼和文檔)毫無(wú)熱情。找到一個(gè)你令你感到熱愛(ài)的事情,它他應(yīng)該是你下班之后非常愿意做的事。對(duì)我而言,就 是研究 Java 生態(tài)系統(tǒng)里的犄角旮旯。熱忱就是,當(dāng)有無(wú)數(shù)個(gè)理由要我們停下,它依然驅(qū)使我們前進(jìn)。
這有點(diǎn)像我喜歡烹飪的原因。只不過(guò)幸運(yùn)的是,我編程要比做菜水平高一些。