平時(shí)經(jīng)常能聽到一些同學(xué)困惑,“面試造火箭,天天擰螺絲”,每天進(jìn)行重復(fù)的業(yè)務(wù)開發(fā),似乎自己的能力被日常工作限制,無法突破提高自己的能力水平。我想說,難道懂得如何造火箭,還能沒有實(shí)際價(jià)值嗎?它的價(jià)值在于,當(dāng)真的出現(xiàn)不可預(yù)測的、具有挑戰(zhàn)性的任務(wù)時(shí),你能不能
Hold 住。那么關(guān)于Java工程師的成長路線是什么呢?又給如何找到自己所處的能力水平,通過學(xué)習(xí)和實(shí)踐實(shí)現(xiàn)進(jìn)階呢?
一、新手
如果你是新手階段,全面、扎實(shí)地掌握語言的基本要素是當(dāng)務(wù)之急。在這個(gè)階段我認(rèn)為是有無限可能的,因此我并不建議完全用《Java 核心技術(shù)面試精講》專欄作為
Java 語言入門的課程,而是更應(yīng)該找到更基礎(chǔ)的、系統(tǒng)的 Java 書籍或者課程。
你可以在正規(guī)的指導(dǎo)(比如進(jìn)行培訓(xùn))飛速進(jìn)步,并培養(yǎng)出良好的編碼習(xí)慣。然后可以再結(jié)合專欄,看看 Java
技術(shù)領(lǐng)域典型的、長期的熱點(diǎn)話題,了解業(yè)界通常從哪些角度判斷你的能力和水平。你還可以從專欄的基礎(chǔ)模塊,看到 Java 領(lǐng)域長期的熱點(diǎn)話題,增長自我見識(shí)。
二、高級(jí)新手
工作了幾年,整天忙于業(yè)務(wù)代碼,很容易困惑下一步的方向在哪里,相當(dāng)多的程序員長期停留在高級(jí)新手的階段。一個(gè)常見的表現(xiàn)就是發(fā)展成為了“面向搜索引擎”編程工程師,擅長快速利用開源項(xiàng)目或者以往成果,完成一些“OK”的工程任務(wù)。這本無可厚非,職業(yè)路線很多,未必每個(gè)人都想成為底層專家。
但是,如果想在技術(shù)領(lǐng)域更進(jìn)一步,一定要避免下面兩個(gè)問題。面對(duì)沒見過的、一定規(guī)模的或者較高標(biāo)準(zhǔn)的問題時(shí)無所適從,具體表現(xiàn)為“領(lǐng)導(dǎo),你看這樣行嗎?”。沒做過互聯(lián)網(wǎng)高并發(fā)應(yīng)用,難道就不能對(duì)并發(fā)編程有相對(duì)深入的思考嗎?比如,習(xí)慣了使用
Executors,你有沒有思考過不同的線程池到底適合什么場景?當(dāng)前的實(shí)現(xiàn)在未來業(yè)務(wù)量增長下可能出現(xiàn)什么問題?
無法獨(dú)立提供有說服力的、有深度的分析、設(shè)計(jì)和實(shí)現(xiàn),比如業(yè)務(wù)系統(tǒng)運(yùn)行一段時(shí)間就變慢,調(diào)整 Heap 大小,似乎仍然
OOM。目前團(tuán)隊(duì)處理的方式就是重啟服務(wù)器,有沒有想過去發(fā)掘真正的原因,真正去解決它?
三、勝任者
那如何才能算是擺脫了高級(jí)新手的階段呢?或者換句話說,如何成長為團(tuán)隊(duì)的核心成員?這取決于你能背多大的鍋、填多大的坑,比如你已經(jīng)可以:
獨(dú)立負(fù)責(zé)做 GC 調(diào)優(yōu),即使沒有歷史經(jīng)驗(yàn),也能給出有說服力的方案。在 JVM
領(lǐng)域有充足的技術(shù)經(jīng)驗(yàn)和知識(shí)儲(chǔ)備,全面評(píng)估評(píng)估后臺(tái)變慢等問題的復(fù)雜度、風(fēng)險(xiǎn)點(diǎn)、解決的可能性。對(duì)于所謂本質(zhì)的思考和理解,能聽懂深入的抽象觀點(diǎn)。并且,除了
Java/JVM,還要掌握更完整的技能樹,例如分布式系統(tǒng)設(shè)計(jì)、數(shù)據(jù)庫隔離級(jí)別選型等。
掌握將“OK”的事情做到“excellent”程度的能力,不斷地進(jìn)行高效實(shí)踐、領(lǐng)域的擴(kuò)展和精深,我們就可以達(dá)到并超過勝任者,逐步成為精通者和專家。