成長爲軟件教練的三千大道之一

摘要:本文主要介紹的是沿Java,分佈式微服務架構,大數據與流計算,Linux OS與中間件,AI,這樣一套功法,來討論從一個剛畢業的理科生,如何修煉到軟件教練這個層次。以及對更高層境界的暢想。

本文主要介紹的是沿Java,分佈式微服務架構,大數據與流計算,Linux OS與中間件,AI,這樣一套功法,來討論從一個剛畢業的理科生,如何修煉到軟件教練這個層次。以及對更高層境界的暢想。前端

師傅領進門,修行在我的。我在本文中只指出道路,至關於一次將全套功法給你。但修行的路還請本身努力。不明白的地方,Google是個金手指。我會看你們對具體哪裏更感興趣,後續將其展開講一下,做爲一個系列。你們能夠留言給我。web

首先第一階段,對應煉氣期。你要掌握:算法

1, Java:俗稱JAVASE。不只僅指Java語法,還包括JDK的使用。這塊知識很是沉重也很是重要。沉下心花幾年時間學好它。推薦學習方式:sql

a) 《Effective Java》。讓你感覺下Java裏面的彎彎繞繞,並非語法表現的那樣傻白甜。數據庫

b) SCJP考試。如今可能更名爲OCJP了也說不定。全方位讓你瞭解Java及裏面的細節。很是重要。編程

c) 《併發編程實踐》。必讀刊物。多核CPU自帶L2 cache卻共享內存和線程,複雜的鎖,一行Java代碼被編譯爲多行機器指令而CPU在任意機器指令間均可切換線程。面對這麼複雜的硬件環境,Java是如何設計保證程序正確的。設計模式

2, 敏捷開發:敏捷開發不是靠書學的(雖然也有書),而是靠實踐來感悟的。就像賣油翁,不去倒油光靠看老翁寫的心得,永遠不會倒油。安全

3, 算法與數據結構:性能優化

a) Leetcode刷題。雖然只有極少的開發會用到算法,但這是能力的體現。不要覺得就是個鏈表反轉,至少要把動態規劃級別的算法搞懂。服務器

b) 《算法導論》。讀讀就好了。但願你能讀懂。

4, 測試:要了解測試同窗如何寫測試用例,如何保障code coverage,如何作自動化。

當上面瞭解的七七八八後,你天然而然就會產生心靈上的感悟從而進階至築基期。你要掌握:

1, 設計模式:《設計模式》,Gang Of Four。四杆老槍的設計模式(我可沒開車),教會你面對各類經典場景如何構造類羣。

2, JVM原理:《深刻理解Java虛擬機》。我剛工做時,大概06年,若是那時候有人說對JVM原理很懂,那就屬於國內頂尖的技術人才了。如今知識的獲取方式愈來愈方便了,好比閱讀本文。你須要瞭解JVM如何使用內存,如何GC,如何調整啓動參數,如何查看各類dump文件等等。

3, 網絡編程:書籍暫時沒有推薦。反正就是要搞懂HTTP/WebSocket與TCPIP與Socket的關係等知識。

4, 分佈式系統中各類中間件:

a) Dubbo。國內最知名開源項目。無中心化分佈式架構的核心。取代了IBM的SOA產品(中心化架構形成性能瓶頸)。

b) ZooKeeper。Zookeeper小紅書。分佈式系統數據一致性協調工具。單機進程,代碼執行被認爲是徹底可靠的,要麼執行成功要麼執行失敗。而到分佈式系統,網絡調用偏多出來一個超時。分佈式系統之因此比單進程複雜那麼那麼多,都是這獨獨一個超時鬧的。理解CAP,理解分佈式系統數據一致性,是分佈式系統不出錯的保障。你歷來沒看見銀行轉帳時給你少轉過一分錢吧?

c) Kafka。《Kafka權威指南》。要理解其爲何那麼快又那麼可靠又那麼存儲空間大。同時也是理解冪等性最方便的系統。

d) Redis。《Redis設計與實現》。瞭解了前述的知識,Redis就是個菜。無非多了個流言協議,一致性哈希環,跳躍表,哨兵,持久化方式而已。

e) MySQL(僞裝其也是中間件好了)。《MySQL高性能》,《MySQL技術內幕:InnoDB存儲引擎》。要了解紅黑樹和索引的實現方式,瞭解innodb存儲引擎的工做原理,你才能更好的理解explain sql後出來的各類回顯結果,幫助你更好調優sql。MyISAM被廢棄了,你能夠少看一本書了,偷着樂吧,少年。

f) Nginx。之因此能有多個冪等節點存在,就全靠它了。學一下它的單線程技術。明明是單線程卻能作到高性能。「我就是看不上你多線程,咋啦?」惟有真正理解計算機原理才能返璞歸真。

g) Netty。《Netty權威指南》。你有沒有感受到在2002年後的某一年,就在短短一兩年內,計算機網絡忽然提速了?02年JDK1.4,04年Netty。原本計算機網絡性能被阻塞在IO上。但NIO大幅度提高了IO效率。Go語言爲何曾那麼火?它的MPG模型仍是找的IO阻塞的茬,使得多線程併發會更快。學一下Linux IO模型,零拷貝技術。理解計算機原理才能作到真正性能優化。我猜想,在JDK支持了NIO以後,Tomcat等web容器很快就進行了IO模塊的更新,以後各大網站的Tomcat跟着升級,因而在全世界硬件資源沒變的狀況下,網絡站點服務器的併發響應能力大幅提高。順便說一句爲何Java語言會長盛不衰。由於任何新語言的特性,好比Go的MPG模型,Reactive模式等,很快就會被Java抄過來。Java已有AKKA併成功用於Flink等知名項目了。而Go想抄Java的好處,短期很難達成。

h) Flume。一個日誌收集傳輸系統。

i) ProtoBuf。序列化也是性能中須要重要關注的地方。

j) Tomcat。太有名了。學學其classloader的設計。

5, JAVAEE依然有用的知識:好比servlet,JMX等。哎,一個時代的落幕。

6, 編譯原理與操做系統:我假設你上大學時候就學過了。沒有的話,至少操做系統要讀一下。就讀清華大學的本科教材吧。

7, 分佈式數據庫體系架構:第4條講的是內存網絡的分佈式架構。這條要講持久化存儲的分佈式架構。分庫分表,異構索引,數據庫主備等。《數據密集型系統設計》,這本書很贊,堪稱存儲設計的通史。

8, Spirng and Mybatis:怎麼說呢,你能讀懂源代碼固然更好。

9, 前端與CDN:至少要了解一下。

10,UML建模:教會你如何認識世界並轉到計算機系統裏來。《UML用戶指南》。

上個境界,是最難晉升的了。多少開發們被阻在這步一生不得前進了。由於既要承擔繁重的開發任務,又要學習那麼多的知識,還要處理我的的生活,太難了。這些知識對你的提高又只是相加,不是相乘的關係。熬過去後海闊天空。好了你如今是金丹期了,你的不少要繼續學的知識,都是靠前面給你打基礎的,你會發現你的提高曲線斜率愈來愈抖了。你要掌握:

1, 架構設計方法論:作事要有章法。《軟件架構設計》。

2, 領域驅動設計:軟件是真實世界在計算機中的虛擬映射。如何讓軟件更貼近真實世界,讀一下Eric Evans的《領域驅動設計》。很晦澀,不太容易懂。

3, 中臺:中臺這個詞如今這麼火,怎能不提一下。平臺是啥也許你還不清楚,那就先了解一下中臺。

4, 高性能調優:仍是那句話,真正瞭解計算機及runtime的本質,才能作到性能調優或Hacker。《性能之巔》。

5, 穩定性建設:湊合看《逆流而上》。可是穩定性和上述的性能調優,是真正體現水平的地方。還有Google的《Google SRE》。

6, 兩地三中心容災系統建設:這個目前我還不清楚有什麼書。若是確實沒有的話,能夠趁機出一本搶佔市場。

7, 全鏈路壓測:又是測試。但又不只僅是測試。對系統的性能瓶頸節點的探查,對系統QPS的掌控。單單一個起壓機就不容易設計。

8, 大數據:首先,你須要跨多個領域開始瞭解更多的知識。其次,你會發現我對技術的介紹粒度開始愈來愈粗了。由於你以前打的基礎 - 粗粒度之下用來支撐的細粒度知識,已經生效了。再而後就是我會減小推薦書籍。到了這裏你應該造成本身的知識體系了,也就會找書了。離線海量數據存儲與計算的Hadoop。將Hadoop變的更易用些的HIVE。在線海量數據存儲的HBase。批計算的Spark。流計算的Flink。自成一套ELK,尤爲大名鼎鼎彈性搜索。時序數據庫Druid。

9, 數據倉庫:大數據都學了,順便也就把數倉學了唄。順手的事而已。

10,IC:HCIE,這個我就不班門弄斧了。

11,網絡安全:我也不懂。汗。

12,Linux OS。可不只僅是使用命令操做系統而已。固然,即便是這樣也不容易了。

當你還要再繼續晉升,就涉及到我也不徹底理解的境界了。

1, 中間件的實現細節:做爲業務側的技術架構師,一般會把存儲和網絡的需求下壓給中間件團隊。可是他們是怎麼實現的呢?細節重要的點是什麼?

2, 使用Master Slave模式,Spark等是如何實現分佈式任務分解並確保計算正確的?

3, Docker虛擬化技術。

4, Yarn的資源分配技術。

5, 計算機網絡等。

6, 再擴展一下技術領域,觸角伸到AI領域。那麼數學基礎,各類論文與算法實現。又或者使用算法來賦能某個具體的業務領域好比AI賦能新零售。

7, 也能夠往IOT方向發展。隨着5G的發展,這個應該也很火。持續看好。

本文分享自華爲雲社區《成長爲軟件教練的三千大道之一》,做者:華爲雲小月老師

點擊關注,第一時間瞭解華爲雲新鮮技術~

相關文章
相關標籤/搜索