學習後端技術和學習其餘的技術並無什麼大的不一樣。所以,題目換作如何學習技術也是講的通的。歸納來說,有如下幾點建議:html
以上是計算機專業的一些比較廣泛的基礎知識課程。這裏不得不說的一點是,雖然如今各大高校的計算機專業課程是比較落後的,可是這些基礎課程,因爲多少年也沒有怎麼變過,所以無論怎樣都是須要紮實掌握的。也許上學的時候你感受不到有多大的用處。可是進入實際的開發工做中,是否可以掌握紮實的基礎知識每每決定了一個開發工程師的上限,這也是不少大的互聯網公司不管是校招仍是社招,都側重於一些底層知識考察的緣由。畢竟,你會使用什麼東西只能決定你的下限,而你的基礎知識和學習能力才決定了你的上限。前端
此外,其實不少平時開發中的一些技術均可以類比到一些基礎知識的。好比,咱們常常爲了提升查詢性能而使用的緩存技術,和爲了兼容CPU和IO速度不匹配的而設計的CPU Cache就是一樣的東西;操做系統中的進程間通訊方式和服務之間的異步同步通訊也是差很少的道理。諸如此類,其實計算機科學基礎凝聚了不少精華的設計,不管是計算機硬件架構、計算機操做系統仍是計算網絡。程序員
常常遇到來面試的工程師,他們簡歷上寫了不少項目,也用過不少技術,怎麼看都是很是不錯的候選人。可是面試一旦深刻到原理或者是優化層面,不少工程師甚至是一些公司的資深架構師都會支支吾吾,答非所問或者說是沒關注過。聽到最多的解釋就是業務壓力太忙,沒有時間去研究這個。其實,自我經從來看,業務忙是緣由,可是沒有時間卻確定是藉口,畢竟閱讀一個項目的源碼雖然比較耗費時間,可是去網上看看已有的原理分析實際上是花不了太多的時間的。歸根結底,仍是沒有一種知其然更要知其因此然的基本意識。不少東西,你學會了使用會很興奮,可是你有沒有想過這麼興奮的功能是如何實現的呢?最簡單的例子,Java中的HashMap,你們都在用,可是他究竟是怎麼實現的呢?不少人甚至都不知道這和數據結構課程上的哈希表是什麼關係,更別說讓他說出解決衝突的方式了。面試
這也能夠映射到如今的一種現象:不少開發工程師工做了好久,看着經驗豐富,但基本都是拿着一年的工做經驗重複n年的。基本上每一份工做,每個項目都在那裏作重複勞動,並且也並不去考慮如何避免重複勞動這件事。算法
進一步的,除了遇到問題再去看源碼、究底層,主動閱讀經典類庫、高質量開源項目的源碼以及其餘同事寫的代碼,學習其中好的架構、設計、編碼風格以及類庫的使用也是促進自身技術進步的一個很是有效的方式。後端
這也牽扯到了技術的廣度和深度的問題。就我本身來看,對於剛剛畢業或者剛剛入職的工程師來講,首要的是深度問題,只有你在某一領域有了深刻的研究和造詣了,你才能融匯貫通,迅速地擴大本身的知識面,在廣度上作到突破。而對於有必定工做經驗的工程師來講,雖然深度不是那麼必須了,可是遇到的問題、新學到的東西仍是刨根問底纔好,不然一旦出現問題再去盲羊補牢會讓你顯得很是被動,也不利於本身的技術發展。畢竟,一個什麼都作過、什麼都用過卻什麼也不精的人可替代性太強了。緩存
學習領域有所謂721模型:我的的成長70%來自於崗位實踐,20%來自向他人學習,10%來自於培訓。雖然這種理論存在爭議,但在筆者看來對於程序員來講按照實踐、學習和培訓的方式進行重要性排序是合理的。廣泛公認的一種學習技術的最佳實踐-「項目驅動型學習」,也就是這裏說的動手實踐。不少技術,只是看書,你會雲裏霧裏,看了就忘。必需要通過你本身的實踐或者項目中使用到了這種技術,你才能很快地掌握並熟練。此外,如今朋友圈、微博上都充斥各類所謂乾貨,不少人閱讀大量的資料自覺得收貨滿滿,其實對於裏面的東西根本就沒有去實踐過。甚至有時候就是感嘆一下別人真厲害而已。真正的乾貨是須要本身消化的,消化的一種最好的模式就是實踐,不管是對資料中的例子仍是一筆帶過的知識。網絡
動手實踐可以讓你快速入門,但只有頻繁練習才能讓你熟練使用。數據結構
「一萬小時」理論講的是任何一個行業都至少須要一萬小時的實踐才能成爲專家。先不去爭論此理論是否正確,能夠想一想當你長時間不寫代碼或者不用某個技術後你再去作相關的開發,那種生澀陌生感想必是每一個人都有體會的。可見對於研發這個角色,頻繁練習是有多麼的重要。架構
固然,這裏的頻繁練習並不是指的重複勞動。應該是帶着本身的思考去練習,多去想一下爲何這麼作?有沒有更好的方式?
「活到老,學到老」這句話用在程序員這個職業上再合適不過。IT技術尤爲是互聯網開發中的技術,其迭代是很是迅速的。也許你今天學的,過不了幾年就成了被拋棄的。雖然相比起前端技術,後端技術算是比較穩定的,但相比起其餘行業,迭代速度仍是很是快的,像Struts這種當年火的一塌糊塗的技術如今也成了過期的東西。所以,必定要對新事物、新技術具備敏感性,要不斷地去涉獵業界最新的知識點,擴充本身的知識庫。
這裏還須要提到一點就是要「逃離溫馨區」。人對本身熟悉的東西都比較親切,對本身熟練掌握的技術通常也可以自信地使用,然而當須要使用本身沒接觸過的技術時,不少人就望而卻步、不敢嘗試,進而也就喪失了學習新的知識、擴充本身知識庫的機會。最好的方式應該是勇於「逃離溫馨區」、勇於使用新的技術,這樣才能讓本身具備持續的學習興趣,促進本身的持續進步。
相信不少人在日常的工做中,常常會遇到一些問題,而後經過查閱網上資料、詢問同事、翻看源碼等手段解決了,當再次遇到相似的問題甚至是相同的問題時,仍是一頭霧水。先不提記憶力的問題,形成這種情形的很大一個緣由就是沒有去總結。固然,這裏的總結不只僅指的是把你平時遇到的問題記錄下來,更深一層的是要找到問題發生的本質緣由,如何避免發生一樣的問題,從中有什麼啓發和收穫。再進一步的則須要常常將本身一段時間內的知識收穫組織成體系或者融入到本身的知識體系中,這樣才能觸類旁通,遇到相同的問題能夠有據可循。
而自我總結的方式包括記筆記、寫博客、作分享。其中,比起記筆記來講,寫博客、作分享是筆者更爲推薦的方式。畢竟,和別人交流一方面能促使你對總結質量的把控,另外一方面分享知識給別人帶來的「榮譽感」反過來會產生某種正向反饋讓你更加樂於總結和分享。
平時和很多工程師聊過關於職業規劃的事情,其中有些人對本身的職業道路有很清晰的認識,但更多的則是沒有任何概念,只是以爲能掙錢養家就好。很明顯前者是屬於有規劃的人,對於這種人來講,其努力是有目標的,所以走的路也會更踏實,更具備可持續性。
對於研發職位來講,學會規劃是一個很關鍵的特質。而規劃能夠分爲長期規劃和短時間規劃。上面說的職業規劃就是一種長期規劃,須要高瞻遠矚的定下本身前進的方向。如在五年內成長爲一個後端服務架構師就能夠看作一個長期規劃。筆者本身的長期規劃以下:
而對於短時間規劃來講,則是一些具體技能、晉升、學習方面的規劃。如,筆者近一年的學習計劃包括:
須要注意的是,對於這些短時間規劃,要設定的比較合理,具備可達性,也要設定好優先級,根據優先級逐步去完成。此外,規劃不要定死,能夠根據實際狀況靈活調整。
上面主要講述了宏觀層面的如何學習技術,而具體到學習某一個新技術,其實也是有法可循的。以下圖所示:
因爲不少技術的模塊很是多,源碼也很是複雜,不少時候在看源碼的時候會陷進去越看越不得章法,所以這裏着重說明一下「看源碼」的一個典型流程:
程序員是一個金字塔結構的職業體系,越往上,人越少也越難達到。以下圖所示:
一步步走到金字塔頂部須要不斷的學習和進步,包括正確的態度、正確的方法以及持續的努力。本文所述只是筆者本身的體會,也是本身一直在踐行的東西。除此以外,確定還有不少其餘優秀的方法和思想可以促進這個過程。
本文節選自《Java工程師修煉之道》一書。
本書能夠看做一本Java工程師的入職指南,也能夠看做一本串聯Java後端技能點的參考手冊。經過精心編排的內容,剛入門的Java工程師可以體系化地學習相關開發技能,有經驗的Java工程師可以查漏補缺,鞏固本身的相關開發技能,進一步完善自身的Java技術體系。