天天看點

成為1個技術大牛的入門到進階之路(學習路線圖)

本人新書出版,對技術感興趣的朋友請關注:

成為1個技術大牛的入門到進階之路(學習路線圖)

https://mp.weixin.qq.com/s/uq2cw2Lgf-s4nPHJ4WH4aw

計算機領域技術更疊非常之快,内容博大精深。涉及到分布式架構,更是分支衆多,知識龐雜。很多新人在最初往往找不到頭緒,不知道從何處下手來一步步提升自己的技術水準。

本文将介紹要成為1個技術大牛的18般兵器譜,以及這條打怪更新之路,希望可以讓新人少走彎路,在這條路上一步步提升自己。

階段1: 計算機功底

(1)常用資料結構,算法的時間/空間複雜度的計算(随便找本大學教科書都有的内容)

(2)Linux作業系統(從各種指令操作,到原理的了解:比如各種IO,磁盤檔案組織、程序與記憶體管理、epoll)

(3)多線程(無論是用Java的Concurrent Util,還是C++直接用Liunx的pthread,原理都一樣。各種線程同步機制的深刻了解)

(4)網絡(知道一個完整的socket c/s程式是如何寫的,TCP/IP協定的原理)

(5)資料庫(比如B+樹為什麼可以實作關系資料庫的各種查詢方式、排序,比如事務的隔離級别)

(6)精通1門語言:不是隻會用文法,而是能深刻了解語言下面的實作機制。如果你搞Java,怎要很好了解JVM的各種機制,class loader,記憶體模型,注解,動态代理。。;

如果你搞C++,需要了解編譯、連結、運作的整個過程,對象在記憶體裡面如何布局的,多态咋實作的(這方面書籍狂多,随便找1本國外大牛的書,好好啃完,對語言的了解就會深刻很多);

如果你搞其他語言,比如PHP,GO, Rust,同樣的,除了很熟練的會用,可以去了解背後的實作原理。。

階段2: 能用架構搭建各種系統

你可以用各種開源架構,搭建常用的Web應用,以Java為例:

Nginx,SpringMVC, Dubbo或者Spring Cloud,Mysql,Redis/Memcached,TFS,Kafka或者RocketMQ,CDN等

當然,非Web應用,比如IM這種,也有類似的各種架構(XMPP協定的實作),或者第3方支援的。

在這個階段,也就知道了各種架構怎麼用的,面對各種五花八門的業務,你都可以搭建出符合需求的系統出來:

Nginx的負載均衡;

SpringMVC的Web應用;

Dubbo/Spring Cloud的微服務架構;

Redis的分布式緩存;

Kafka的分布式隊列;

CDN的靜态内容分發;

TFS的分布式檔案存儲;

階段3: 基礎架構與中間件的原理

到了這個階段,就需要的不光是用,而是對原理的深刻了解,有必要的看看源碼。

用Redis Cluster,知道有哪些關鍵特性,這些特性的原理有好的了解;

用Kafka,知道Kafka為什麼快,為什麼高可用,其實作原理是什麼。。

用Dubbo,知道網絡IO怎麼玩的,服務注冊怎麼搞的,動态代理用來幹嘛。。

。。

對于做偏業務架構的人來說,這個階段,隻要原理很清楚就可以;

但如果就是做基礎架構,那就不是光原理清楚了,而是要精通,對源代碼很熟。

階段4: 高并發 & 高可用 & 穩定性 & 一緻性

到了這個階段,可以說“術”這個層面已經很成熟,接下來就是要修“道”了。

我所說的“道”,就是指解決問題的方法論,成體系的方法,可以讓上面這些武器、招式,在你的手上流暢發揮,讓你面對任何問題的時候,都能從容應對。

第1種道:C端的大型系統,能夠出完善的技術設計方案,在高并發、高可用、穩定性、一緻性方面,都有很好的考慮。

階段5: 業務模組化、業務架構

第2種道:B端的大型業務系統。

C端的東西,使用者通路量很大,但業務邏輯相對簡單。

而B端的系統,往往流程很長,功能子產品狂多,開發團隊人數多,流程與流程之間還各種耦合。在這種情況下,如果不能站在技術上面,更抽象的看整個系統,會面臨失控的局面。到最後,就是沒有人能說清楚這個系統到底幹了多少事情。

是以,在這個階段,需要能對整個業務做一個邏輯上的架構,這個邏輯架構最終會達到下面幾個目的:

(1)整個系統具有很有的複用性、擴充性,不拖業務後腿

(2)團隊人員,可以依據這個架構進行分工,高效協作

(3)更進階的,有前瞻性的,不僅不拖業務後腿,反而給了業務發揮空間。

階段6:團隊與上司力

這個階段,就不光是技術的問題了。團隊管理能力、綜合素質、行業機遇、公司機遇、耐心。。種種因素的綜合,讓你可以帶領1個很大的團隊,做一個完整的業務,然後帶更大的團隊,做更大的業務。。。

寫在最後:幾個關鍵點

(1)上面的6個階段,不是1個線性的過程,而是1個螺旋上升的過程,這也是事務發展的普适規律。越是大牛,往往越重視功底,到後面了,發現前面功底還不夠,又回去更深的研究功底。

(2)空杯心态:其實除了上面列舉的還有很多東西需要了解,比如機器學習、大資料、區塊鍊。。這也是我在另外一篇文章提到的。活到老,學到老。

(3)到了後面,就超出了技術可主導的範疇了。現實中種種因素的合力,讓你站在人生的某個位置。(此處不談人生)

(4)興趣。任何一個技,一個藝,都是十年磨一劍,沒有興趣,光憑毅力是持久不了的。

(5)耐心。再複雜的東西,都是從1+1=2開始的,單獨看某1步,并不難;一點點的累積,累積到最後,你就覺得很複雜了。而這個過程,就需要你有耐心,從1+1=2開始。

繼續閱讀