1. 程式人生 > >成為1個技術大牛的入門到進階之路(學習路線圖)

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

有興趣朋友也可以進一步關注公眾號“架構之道與術”, 獲取原文。
或掃描如下二維碼:
這裡寫圖片描述

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

本文將介紹要成為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開始。