互聯網浪潮下,Java程序員如何追趕技術革新的腳步?


一:時代背景

身處互聯網行業的咱們一直處在變革的最前端,受到行業發展浪潮的洗禮,不停歇地追趕着技術革新的腳步。特別是近幾年來, 互聯網架構不斷演化,經歷了從集中式架構到分佈式架構,再到雲原生架構的過程 。在這個演變過程當中,咱們能夠深入感覺到一系列的格局變化 —— 軟件改變世界,開源改變軟件,雲吞噬開源。每一次架構模式的升級都會給這個世界的合做模式帶來變化。前端

「雲原生」因能解決傳統應用升級緩慢、架構臃腫、沒法快速迭代等問題而逐漸成爲這個時代舞臺的主角。身處變革的浪潮中,咱們看到雲原生的出現改變了互聯網架構的航行方向,並給愈來愈多的企業帶來了全新的理念和無限的可能。程序員

在架構的演變過程當中,技術體系也在不斷革新,過去的技術比較單一,如今咱們談分佈式、談服務化、談容器調度、談 Service Mesh、探討雲數據庫等。不只如此,各類前沿的技術都提供了對應的優秀開源解決方案。面試

那麼在當下互聯網架構的技術體系中,如何學習和讀懂各類新技術,並將它融入本身的技術體系,以更新本身的技能樹呢?算法

2、你知不知道哪些該學,哪些不應學?

Java做爲一門語言至今已有20餘年歷史不管是語言自己,仍是相伴的工具和框架都發生了巨大變化。spring

  • JavaEE框架,從百家混戰到如今Spring基本一統天下。
  • Web開發,從標配的SSH到如今SpirngMVC + MyBatis組合。
  • IDE,從當年如火如荼的JBuilder到Eclipse,再到更好用的IDEA

在不斷的技術迭代下,若是摸索出一條高效的學習路徑,能夠大大的減小本身的時間成本與試錯成本。過去半年,我不斷的盤整本身的思路,想分享我對高效學習Java的見解。但不足之處是都沒有很是系統的梳理。所以,今天恰好趁此機會,我把它們整理起來,但願對你們的學習有所幫助。數據庫

spring編程

在Java EE開發中,Spring已經成爲和Java核心庫同樣的基礎設施,因此說若是想成爲一個優秀的Java程序員,Spring確定繞不開。另外一方面,若是掌握了Spring體系,Java基本上就算入門了,就有能力進行一些實用級的開發了。後端

但Spring自己也是日漸複雜,衍生項目愈來愈多,但最最核心的概念依舊是IOC和AOP,掌握了這兩個概念,再把Spring MVC學會,再學習其餘的衍生項目就會平滑不少。設計模式

同時,由於Spring自己就應用了許多優雅的設計理念,因此學習Spring的過程,也是增強Java基礎知識學習的過程。所以等你掌握了Spring,原來不少你理解不透徹的Java特性,此時就會恍然大悟,包括接口、抽象類等。數組

我學習Spring,讀的第一本書是《Spring實戰》,坦率的說,書很通常,但市面上比它好的書,我卻沒有遇到過。還有一本《Spring源碼深度解析》也不錯,對Spring的設計理念講的尤爲透徹,雖然整本書讀起來有些艱澀,但前幾章卻生動有趣,也是整本書的精華。因此建議你在學習Spring以前,先把該書的前幾章通讀一下,而後再回過頭來學習《Spring實戰》會順利不少。

以我經驗,要學透Spring,終極的方法仍是閱讀源碼(我當時就是這麼幹的),待把Spring的核心源碼通讀了,人就真的自由了(所謂無真相不自由),不只是對Spring,而是對整個Java體系。之後再遇到其餘框架,大概一眼就能看出其中的脈絡,所謂到了「看山不是山」的境界。但這都是後話,能夠做爲之後你努力的方向。

和學習Java基礎知識同樣,學習Spring也必定要記筆記,必定要分門別類保存demo。

老實說,Spring對初學者不算簡單,所以最好能有個好老師帶一下,不用太長時間,就是在你遇到大的困難時,能及時的點撥下。

以個人經驗,要初步掌握Spring,大概須要1到1個半月的時間。

如下是我整理的spring:

Spring是Java編程的基礎設施,但真要進入到實際項目的開發,還有些東西繞不過,包括 MySql,Mybatis,Redis,Servlet等,但若是你通過Spring的洗禮,這些東西相對就簡單多了,以個人經驗,1個月的時間足夠了。

Mybatis

MyBatis,做爲一個「混合式」,輕量級OR映射框架,既繼承了Hibernate的優勢,同時也吸收了他的教訓。在支持配置的同時,又能接觸SQL,從而帶來了更多靈活性(包括調試、優化)。

當前,在實際開發中,Hibernate使用的愈來愈少了。你們更偏心MyBatis這種輕量級框架。因此,對後來學習者,個人建議是:

「不須要再學習Hibernate了,學MyBatis就夠了。」

設計模式

設計模式,我認爲是初中級程序員,向高級程序員提高的關鍵點。

在實踐中,我見過太多程序員,前期衝勁十足,但後繼乏力,最終泯然於衆生。我不敢說全部的人如此,但有很多都是吃了設計模式的虧。

在工做的前幾年,大部分程序員都是處於熟悉語言層面的階段,也就是處於「技」的階段。這個階段,若是人還算靠譜,大概在2到3年就會過去,接下來就要進入「術」的階段。在編程領域,「術」的最典型表明就是「設計模式」。所以,設計模式的重要性再怎麼強調都不爲過。

固然,學習設計模式,不只要讀書,更要從實踐中學習。例如學習Spring框架的過程,若是你有思考,就會發現其中有太多設計模式可供借鑑。

學習設計模式,就是從實踐到理論,而後再從理論到實踐,反覆實踐,反覆思索,反覆總結的過程。固然,這也是從一個「碼農」轉變成「工程師」的過程。

高效開發工具

實現一個軟件系統的過程,不只只有編碼。還涉及到項目安排,團隊協調等一系列非技術因素。而做爲一名程序員,若是想往上更進一步,獨當一面,成爲team leader或者開發經理等管理職務。則軟件工程必定要跟上。

固然,軟件工程這麼多年也一直在進步,從原來的瀑布開發,到如今流行的敏捷開發,但不管怎麼變,有些經典的東西仍是不變的。

固然,關於軟件工程,最好的學習方法依然是觀察。觀察你所在的團隊、所在的公司是如何處理工程問題,而後思索,閱讀,最終造成本身的方法觀。

架構

寫出一個好程序,有幾個維度,從下到上,也是一個程序員逐步升級的過程。

第一階段,首先要保證基本功紮實,最簡單的說,要作到語法熟練、基本框架熟練,成爲一個功夫精熟的「碼農」。

第二階段,從「技」到「術」,從「碼農」到「工程師」。這個階段的關鍵技術是設計模式。在局部上,不只追求實現功能,更關注實現的好,關注功能以外的維度,例如健壯性、低耦合、可擴展等指標。對主流框架(例如Spring),不只會用,更有深入的理解。

第三階段,從「術」到「道」。

這個階段,不只在局部上追求一個模塊的好壞,並且還要從整個系統層面去掌控程序,例如保證整個程序不出現系統腐敗,如何安排資源的優先級等。這個時候就不是單一的維度,單一的技術可以保證了。

常常有朋友問我是如何成爲一名架構師的,很難用一句話來回答。

我能夠路線鮮明教你如何成爲一名優秀的軟件工程師,但至於如何成爲一名架構師,我想除了努力,運氣確定也很重要。但不管如何,有機遇,不是還得有準備嘛?

做爲一名架構師,所靠的確定不是單一的維度,也不是但靠純粹的讀書能得到的。但就我來講,我也有本身完整的技術體系棧,這個確實給我帶來了巨大的幫助,下面我就推薦給你們,須要完整、高清的技術體系棧的朋友也能夠加個人Java後端社區:519752913免費獲取:

分佈式架構

分佈式架構策略

分佈式架構之中間件

數據結構

毫無疑問,數據結構對一名程序員來講很是重要,不是有句話說「程序 = 數據結構 + 算法」。從某個角度看,這種說法即便如今依然成立。這也說明數據結構的重要性。

但大部分的數據結構課程,關注的重點都在如何從數學上實現一個數據結構(例如堆棧、鏈表)。這從研究上來講,沒有錯。

但在實際開發中,大部分主流語言(例如Java、C#)都已經內置了經常使用數據結構。並且即便沒有內置的,咱們也常能夠在第三方庫中找到現成的實現。並且這些實現,大都通過實踐檢驗,不管是穩定性仍是性能都有保證。

也就是說,對大部分程序員來講,在實際開發中,很難有需求從頭實現一個數據結構。所以,就徹底不必像科班生那樣,從數學源頭來學習數據結構,而只需作到下面幾點:

  1. 熟悉經常使用數據結構的概念(例如數組、堆棧、鏈表、Map等)
  2. 瞭解經常使用數據結構不一樣實現的差別(例如ArrayList和LinkList的差別)
  3. 關注經常使用數據結構的外圍算法(例如如何對List和Map進行查找)
  4. 關注數據結構使用中容易出錯的地方(例如是否線程是否安全等)

算法

這個要具體問題具體分析了。以我接觸的領域來講,大部分普通的業務系統都不會涉及到太複雜的算法,所以就不必專門在算法上投入時間。

但在一些特殊的領域,若是算法跟不上,可能「步履維艱」,例如圖形處理領域,不管是圖像的變化仍是加強,無一例外都要用到矩陣變換,所以就必然涉及到線性代數的內容,順藤摸瓜,往縱深學,就必然會牽出更多的東西。

所以,對非科班生(尤爲是數學不夠好的),對算法學習我是持「勸退」態度的。由於,從職業發展來講,這實在是一條太「曲折」的路線。

一方面,目前的開發愈來愈趨專業化,算法通常由專門的算法團隊負責,普通軟件工程師只負責算法轉換。

以我爲例,雖然是科班出身,也系統的學習過算法,但也常有力有不逮的時候。複雜的算法既實現不了,甚至是理解不了。不少時候,我乾脆就不作實現,直接請算法工程師告訴我思路,甚至是僞代碼,而我負責轉化爲正式代碼(例如Java)。實踐證實,這種作法不只是可行的,並且也是高效的,正所謂「術業有專攻」。

另外一方面,人的精力是有限的,你徹底能夠把精力投入到本身更擅長的方面,例如設計、產品、架構上,從而取得「差別化」的成功。

3、最後

最近到了傳統的招聘旺季,最近和朋友交流,發現了一種現象。不少工做多年的一線工程師,職級也不低,工做能力也夠強,然而在面試中卻老是能被各類「奇怪」的問題問倒。挫折的次數多了,有些朋友甚至都開始自我懷疑,懷疑本身究竟是不是「水貨」?

對這種狀況,我和朋友有過幾回討論,最後的結論是:不是咱們的能力不行,而是準備的不充分。

本質上,任何一個軟件工程師,在一段時間內,都只能是某種「類型」選手,只「手熱」某一方面的知識。所以,貿然去應聘,被面試官問倒,也就沒什麼奇怪的。

而要解決這個問題,只有一個辦法:不打無準備之戰。

就像學生時代的期末考試同樣,要進行考前複習。而要進行考前複習,就得有複習資料。對一個一線軟件工程師來講,常見的複習資料有幾種:源碼、書籍、視頻、學習筆記。

其中最好就是學習筆記,一則重點突出,二則「量身定製」。

下面就是個人學習筆記分類截圖,須要的能夠點擊連接加入個人Java後端社區,免費獲取。

相關文章
相關標籤/搜索