隨著在這個(gè)行業(yè)里年限地增長,慢慢地,偶爾也會被問及如何入門和提高?為了避免不一而再,再而三地重復(fù)同樣的內(nèi)容,特意在這里寫下一些個(gè)人的所感所悟。完全是一家之言,只是為了自己省事,沒有半分為人師表的意思。
1. 概述
筆者屬于半路出發(fā)的選手,入行的時(shí)候沒有去過培訓(xùn)班,時(shí)至今日也沒呆過大公司體驗(yàn)正規(guī)的開發(fā)流程,更沒有得高人指點(diǎn)打通任督二脈的奇特境遇。唯一一次得貴人青睞的機(jī)會還讓自己主動放棄了。所以這些年來漫長的自學(xué)路上孤身一人走到了現(xiàn)在,既是周遭環(huán)境影響,也是個(gè)人性格所致。
說上面這些的目的不是為了顧影自憐,只是為了說明,雖然時(shí)代不同了,但是我下面要說的這些方法相信還是能夠?qū)δ阌兴鶐椭?。畢竟努力的路上?dú)自前行才是常態(tài),而筆者正是這么過來的?,F(xiàn)在就讓我們開始吧。因?yàn)楣P者做的是前三年的.NET,而后面這幾年則是Java。所以下面的推薦中某些細(xì)節(jié)是基于Java,但所有提及的方法和注意事項(xiàng)與語言無關(guān)。
2. 入門篇
2.1 讀一本入門書籍
首先,本文對于完全沒有基礎(chǔ)的,建議下看看 《Core Java(第10版)》(中譯《Java核心技術(shù)》),Java在入門書籍的位置做得并不好,所以這本屬于矮子里挑將軍。 如果你是半路出家,并且經(jīng)濟(jì)壓力比較大,那就先SSM框架擼起來,然后業(yè)余時(shí)間把這本書實(shí)踐掉。筆者因?yàn)槭菑?NET轉(zhuǎn)到Java,所以對于這本書只是掃了一遍,現(xiàn)在對這本書的印象就是寫得還是蠻詳細(xì)的,記住其中關(guān)于桌面開發(fā)的部分可以直接跳過。
2.2 建一個(gè)私人項(xiàng)目
強(qiáng)烈建議在入門這行的時(shí)候,馬上創(chuàng)建一個(gè)項(xiàng)目,這個(gè)項(xiàng)目里存放的就是你針對JDK或者某個(gè)學(xué)/用到的第三方框架里的某個(gè)類的研究的代碼,以單元測試的形式進(jìn)行存放,這一步一定要引起足夠的重視。因?yàn)檫@個(gè)項(xiàng)目將陪伴你走完你的整個(gè)職業(yè)生涯。
這里我能給出的其他建議是:
- 將JDK和第三方框架的研究分為兩個(gè)項(xiàng)目,盡量保持JDK研究項(xiàng)目的依賴純潔性。
- JDK研究項(xiàng)目就是按照框架的package結(jié)構(gòu)來組織你創(chuàng)建的package結(jié)構(gòu)。
- 單元測試類的命名也是直接以被研究類的名字開頭,加上個(gè)人比較傾向的后綴。
- 第三方框架的研究分開進(jìn)行,分別創(chuàng)建項(xiàng)目,不要偷懶整合在一起。相信我,最開始我就是這么干的,但隨著迭代,發(fā)現(xiàn)各種依賴彼此打架,最后自己都越來越不愿意打開那個(gè)項(xiàng)目了。至于重復(fù)工作量的問題,完全可以通過maven的archetype特性進(jìn)行大幅緩解。
- 最后就是保持更新,保證迭代。創(chuàng)建一個(gè)龐大的財(cái)富基石。
2.3 寫博客
從入門之初就要開始寫博客,保持一周一篇原創(chuàng)博客的更新頻率——只要是原創(chuàng)的就行。博客里可以記錄基礎(chǔ)知識(重要的是自己的總結(jié)和理解)。內(nèi)容淺薄很正常,重要的是從博客所展示的時(shí)間線里表現(xiàn)出來的你的學(xué)習(xí)能力,堅(jiān)持,堅(jiān)韌,進(jìn)步速度,這些品質(zhì)在任何地方都能讓人高看一眼。
記住一開始博客會很差,但只要你現(xiàn)在的博客比之前的好,這中間的比較就是能被人看到的進(jìn)步,那么過去的差就能反襯出你現(xiàn)在的好。
這是筆者之前寫過的一篇文章 —— 為什么要寫文章,這篇文章可以不看,但請一定要看看其中引用的那篇參考文章。絕大多數(shù)看過的人都會有滋生慶幸和后悔這兩種情緒,筆者也是。
2.4 熟悉幾個(gè)常用的第三方工具集
類似于Google的Guava,Apache的lang3,或者是碼云上的明星項(xiàng)目hutool-core,這些工具集可以大大減輕你在編碼中重復(fù)性的勞動,同時(shí)還能大大減低犯錯的風(fēng)險(xiǎn)。讀者可以通過在上面創(chuàng)建的項(xiàng)目中進(jìn)行這步操作。
筆者所在的公司的規(guī)模也是小,所以來面試的人水平也不怎么樣,但是很多號稱兩三年,甚至四五年工作經(jīng)驗(yàn)的人被問到平時(shí)是怎么處理文件,字符串,日期等操作時(shí),回答都是網(wǎng)上找個(gè)工具類,或者直接下面這種(大哥你在這行業(yè)里這么些年干什么去了?你說JVM,JDK源碼研究看不到效果不好堅(jiān)持,這工具類學(xué)一個(gè)馬上見效的東西你也不了解下,這說不過去吧.....):

2.5 使用電子筆記本
筆者面試的某些面試者,偶爾還是會有透露自己依然是使用紙質(zhì)筆記本來進(jìn)行日常知識的歸納總結(jié)。首先傳統(tǒng)的紙質(zhì)筆記本有其優(yōu)點(diǎn)——所謂眼過千遍,不如手過一遍。但是IT作為一個(gè)知識迭代非??欤ㄆ鋵?shí)這話里有陷阱),紙質(zhì)筆記本的迭代速度實(shí)在是有些捉襟見肘。
所以還是推薦入門的時(shí)候就選定一個(gè)自己比較中意的電子筆記本作為知識管理工具,當(dāng)然如果你要是能夠去熟悉個(gè)人Wiki這種專業(yè)的那是最好了。
這里就給出幾個(gè)關(guān)于電子筆記的最佳實(shí)踐:
- wiz,印象,OneNote等等都可以,筆者用的是wiz。但是更推薦OneNote,不過國內(nèi)OneNote同步是個(gè)問題,所以筆者在使用了兩年的OneNote后換成了wiz。
- 選擇哪種不是很重要,最重要的是一旦決定,一定要堅(jiān)持下去,保持所有的知識都在其上,不要東放一點(diǎn),西放一點(diǎn)。這是筆者多年來血的教訓(xùn),也是《如何有效閱讀一本書》里作者明確提出的觀點(diǎn)。
- 最后還是上面的那句話,最重要的是不斷為筆記補(bǔ)充原材料,筆記的格式可以亂,排版可以不好看,但正所謂巧婦難為無米之炊,原材料都沒有,你要上天都沒梯子。
- 保持迭代,不要認(rèn)為記錄在那就萬事大吉了,記錄的目的是為了以后能夠找到并借鑒甚至改良它。
3. 提高篇
這里提高的意思是你在能夠滿足一般小公司的業(yè)務(wù)開發(fā)——現(xiàn)在的你能把東西磕磕碰碰地做出來,但做的質(zhì)量不高。
3.1 編碼規(guī)范
本想將本小節(jié)放在”入門篇“里的,但考慮到新手入門初期連基礎(chǔ)知識都忙不過來,如果顧及太多可能就疲于奔命到灰心喪氣,故將其放在了這里。
我們總被教導(dǎo)——能力有問題可以忍,但態(tài)度有問題就絕對不能留了。而在開發(fā)中,代碼的邏輯完整性是能力問題,但你這代碼寫得時(shí)間長了,只有上帝知道什么意思,那就只能是態(tài)度問題了。
記住只有有意義的命名才能被人理解和記住, 你隨便取個(gè)無意義的A,你打算一周后如何回憶其代表的意思? 靠回憶當(dāng)時(shí)的心理狀態(tài)還是當(dāng)時(shí)的中午吃了什么嗎?
所以這里再次推薦下《Clean Code》這本書,這是筆者加過的對代碼規(guī)范要求最嚴(yán)苛的一本書。相比較之下,《重構(gòu)》,《.NET設(shè)計(jì)規(guī)范》,《阿里巴巴代碼規(guī)范》等都略有放松。相信等你實(shí)踐完這本書,你不會再對任何代碼規(guī)范產(chǎn)生約束感。
此書可以閱讀三遍以上,并反復(fù)實(shí)踐其中的內(nèi)容,然后演化出自己的風(fēng)格(記住這個(gè)風(fēng)格和團(tuán)隊(duì)的代碼風(fēng)格不能沖突,如果沖突,請讓步于團(tuán)隊(duì)風(fēng)格)。
最后說幾句題外話,筆者在實(shí)際的工作中,發(fā)現(xiàn)不少開發(fā)人員抱著你又沒說的心態(tài)。上述的代碼規(guī)范看似區(qū)別很大,但所有的差異也只在于細(xì)節(jié)的詳盡程度和偏好,大體諸如有意義的命名,快速返回,仔細(xì)挑選訪問修飾符,使用更有針對意思的異常等等,這些東西絕對不可能有偏差,也絕對存在各個(gè)規(guī)范中。
筆者認(rèn)為基礎(chǔ)就意味著我們默認(rèn)你要一定要掌握的,否則你是怎么進(jìn)入這一行的? 算法和數(shù)據(jù)結(jié)構(gòu)是基礎(chǔ),但平時(shí)工作中中用不到,你只會簡單的幾種能理解,但代碼規(guī)范這種無時(shí)無刻不在的東西,你還寄希望別人來教你? 請認(rèn)清楚你是在工作,你是拿著薪水的員工,不是付款的學(xué)生,筆者極其抵觸在這上面還振振有詞,別人把碗和飯準(zhǔn)備好還嫌不夠,還得遞到嘴邊的行為。學(xué)習(xí)和傳授永遠(yuǎn)是雙向選擇,在討論二次方程式的解法時(shí),沒有人希望對方連1+1等于幾都還需要教。
遵循了絕大部分最佳代碼規(guī)范,只有少數(shù)幾處違反了可以理解為暫時(shí)不知道,但全部都是反例的代碼就很難讓人相信所謂的熱情和態(tài)度端正了,沒有人希望自己認(rèn)真對待的東西被人以玩笑的態(tài)度對待。
3.2 推薦書籍
接下來就直接推書了,很多只能意會,無法言傳的東西恕筆者現(xiàn)在的功力不夠還無法用文筆表現(xiàn)出來,讀者可自行翻閱其他大牛的作品。
- 《深入分析Java Web技術(shù)內(nèi)幕》- 這一本基本能讓你勝任要求比較高的開發(fā)任務(wù)了。
- 《Spring源碼深度解析》- 逃不開的門檻。
- 《Maven實(shí)戰(zhàn)》- 只要談到Maven學(xué)習(xí)就一定是它,在公司推薦不知道多少次了,一個(gè)去看的都沒有。然后有問題就又問過來了。
- 《重構(gòu)》- 好代碼是演化出來的。
- 等等,有時(shí)間筆者可以拍張照片上傳。
4. 進(jìn)階篇
到了這一步,你應(yīng)該有了自己的判斷和對這個(gè)行業(yè)的理解,筆者就不妄下斷言了,正如本文的開頭,本文只是從筆者自身這么多年的實(shí)踐出發(fā),提供一些入門技巧,希望能夠幫助到幾個(gè)迷茫的朋友。
5. 參考
- 程序員必讀書單 - 這是筆者還在做.NET的時(shí)候找到的書單,非常全面,涉及多種語言以及基礎(chǔ)。
-
語言選擇:
編程語言選擇
