在之前的博文回復中,有些朋友問到這個問題,這里我結合自己的實際以及我看到的一些人和事給大家分享下這方面的經驗。 本文在博客園里寫過不少針對java后端高級開發的面試方面的文章,也出過本相關的面試書籍,java web輕量級開發面試教程,但這里,不講面試經驗,而是講如何一步一個腳印地提升自己的能力。本文主要是針對java后端開發。
1 不能光有決心,一定得多用時間學習
我見過不少程序員一點點從初級升到資深開發,少得用1年半,多的用3年,成功完成升級的都有一個共同點:進步得靠學習,學習得靠時間堆砌。
我個人不算聰明,所以我對曾國藩的一句話體會很深:結硬寨,打呆仗。用在學習上,就是不投機取巧,學習時為自己,踏實地掌握基本功,然后一步一個腳印。這一定得靠時間積累。
來算比能用在學習方面的時間賬:
1 每天早上起來后,大概半個小時。
2 每天上班時,不大可能總干活,與其上網划水,還不如搜索些技術資料,平均一天就算半個小時吧。
3 晚上回家,哪怕再累,總可以抽出半個小時。
這樣一天大概能用1個半小時,一周5天,至少能有7個小時,周末至少能有2個半小時,至少一周10個小時吧。
這不算多,以我親身經歷,每周10個小時學習,人而且還不累,如果再擠出點空閑時間,甚至一周能學15個小時。
如上算是雞湯文吧,但這也是本文的前提。一般來說,工作3年一般能升級到高級開發,如果無法保證一周10小時學習量,那么升級的進程就會延后,甚至無法完成升級。
2 先在java core方面打好基礎
這部分需要學習的內容:
1 基本語法 2 集合 3 異常處理流程 4 基本的IO操作 5 JDBC 6 多線程
在這個階段無需學的內容:
1 界面編程,比如Swing, AWT 2 Socket編程
在初級階段可以適當了解,但無法過多深入學習的內容:
1 面向對象思想,剛開始學時可以了解下語法,比如繼承,重載的語法,盡量體會其中的含義,但真正做到理解得到高級開發的級別。
2 設計模式思想,這個也可以適當了解。
3 虛擬機方面的內容。
書不在多,而在於精,我個人推薦一本:java編程思想(thinking in java),真的把這本書里的內容理解了,java core方面真能算掌握了。
怎么樣才能真正理解,不是光靠看,而是得邊看邊運行書中的例子,而且邊運行邊看書里的解釋。
這本書中的講解非常到位,而且全書是圍繞着面向對象思想講的,邊看邊運行代碼,估計最多用2個月就能看好。
這個我個人感覺是,打基礎是必要的,但不能過多拘泥於語法,所以要求大家邊運行代碼邊學習,如果只看書,一方面無法幫助大家深入理解代碼和知識點的含義,另一方面,看過以后印象不深,估計很短時間以后就忘了。
3 通過一些框架了解Java web方面的內容
這部分是進階。
目前大多數公司是用Java做Web項目,互聯網公司就更別說了,這方面常規的學習路線是:
1 可以先通過jsp+servlet了解下 web編程的概念,尤其是servlet,可以直接從3.0入手,了解下異步調用。
2 隨后可以通過Spring MVC+Mytabis,搭建一個基本的MVC項目,了解下常規的網絡框架。
3 再深入了解下Spring IOC,AOP,ORM方面,可以再深入了解下事務和連接池等高級知識點。
其實,了解上述內容后,就可以在公司里干活了,在公司里,初級程序員往往會在架構師搭建好的框架里,通過別人寫的代碼堆砌完成自己的功能點。
不過,初級程序員在會堆砌代碼的基礎上,還可以深入了解下分布式組件,集群等知識點。這里可以推薦通過學習Spring Cloud框架里的組件,深入了解下Web方面的知識點。
這方面,講述Spring Mytabis的書比較多,大家找本偏案例的書即可。
4 不斷地提升自己的優化能力
這部分是拉開你和其它初級開發的差距。
資深程序員和初級程序員寫出來的代碼會有不同,主要體現在如下三個方面。
1 資深程序員寫出來的代碼結構性比較強,這主要是資深程序員能在寫代碼的過程中,主動地引入面向對象思想和設計模式。不過面向對象思想和設計模式得靠項目積累,所以對初級程序員而言, 光學理論效果未必大,一定得在工作中多觀察下繼承,重載和接口復用等做法,因為面向對象和設計模式的表現形式主要包括這些。
2 得考慮性能優化,比如想下,如何讓sql語句更快,如何讓虛擬機內存性能更好,然后找這方面的資料。這些內容,我的其它博文里都涉及到。
3 一定得在“單機版”程序的基礎上問自己,如何搭建集群,或者,如何利用現有的面向集群的組件,比如可以用Eureka搭建服務治理的集群,在集群中用Ribbon做負載均衡。總之,這方面都是有現有解決方案的,而且學起來也不難,但不是每個初級程序員都知道該學這部分的內容。
在這個基礎上,大家都可以技多不壓身了,比如學些redis,消息中間件等,但一定得圍繞上述三個學習方面。
這方面,大家可以看些虛擬機調優,數據庫優化以及Spring Cloud方面的書,還是這句話,選擇的事情需要看下這書是偏重理論還是案例說明,最好是買些案例多點的書。
5 通過提升自己的軟實力,讓自己更專業
一般來說,初級程序員更像學生,而不像職場人士,所以對高級程序員的要求往往是能獨當一面,而對初級程序員的要求是,能在項目經理的帶領下完成本職工作。
所以,初級程序員一定得提升如下的軟技能。
1 要會積極主動溝通。能否具備好的溝通技能,這個是能力問題,肯不肯和別人溝通,願不願意積極主動地展示自己的想法,這個是態度問題。我見過不少初級程序員在干好本身的活以后,就縮在一邊,遇到測試和領導找過來時,也是敷衍,或者是不耐煩,這些人往往在公司中表現都不怎么好。
2 得提升自己解決問題的能力,積累解決問題的經驗。雖然目前很多問題都能靠百度,但比較專業的異常解決手段,以及基於框架的性能調優等,一般都得靠積累,所以初級程序員在遇到問題時,哪怕靠自己能力無法解決,但至少得想,得通過搜索等手段去解決,最后別人解決時,也得學下解決方法,這樣就能不斷提升自己的能力。
3 協調,甚至是扯皮的能力。比如一個活,自己做不完,這個很正常,但有些初級程序員就寧可自己扛。這樣哪怕是靠自己加班最終完成了,但對整個團隊來說,有延遲進度的風險。遇到這類情況,就可以早說,早讓項目經理協調。有些事甚至不該你或者你的組管,遇到這類情況,就可以推掉這類事,畢竟一個人的時間是有限的。
4 要學會和別人溝通協調,一起完成一個任務
比如測試方面有個問題,而這個問題需要你和別人一起解決,這時,就要求你和測試溝通,了解問題細節以及重現方式,最終和別人一起解決這個問題。在這個流程中,技術問題倒是次要的,關鍵還在協調和溝通方面,初級開發可能會比較被動,坐等別人過來告訴自己該怎么做,但更應該主動和多方面溝通,積極推動事情往前發展。
這方面可能就沒法靠看書,只能多靠觀察別人怎么做了。
6 總結、版權聲明
本文歡迎在說明作者和原鏈接的基礎上轉載,請勿用於商業用途。
本文是在觀察眾多初級開發的基礎上匯總而成,由於是匯總,所以雖然指明了發展方向,但細節部分有待挖掘。
還是這句話,如果大家想了解其中哪些細節,或者干脆想了解其它哪方面,都可以留言或者私信我,如果可以,本人盡量寫。最后,本人最近達到了997的程度,上周末還去公司干了兩天,所以碼字不易,如果可以,請大家多多幫忙推薦。