從新手碼農(nóng)到高級(jí)架構(gòu)師,要經(jīng)過幾步?要多努力,才能成為為人倚重的技術(shù)專家?本文將為你帶來一張程序員發(fā)展路徑圖,但你需要知道的是,天下沒有普適的道理,具體問題還需具體分析,實(shí)踐才能出真知。
架構(gòu)師的“內(nèi)功”
我認(rèn)為,架構(gòu)師的內(nèi)功主要包含三部分:判斷力、執(zhí)行力、創(chuàng)新力,簡單解釋如下:
-
判斷力: 能夠準(zhǔn)確判斷系統(tǒng)的復(fù)雜度在哪里,就像武俠高手一樣,能準(zhǔn)確地看出對(duì)手的破綻和弱點(diǎn)。
-
執(zhí)行力: 能夠使用合適的方案解決復(fù)雜度問題,就像武俠高手一樣,能選擇合適的招式或者方法打敗對(duì)手。
-
創(chuàng)新力: 能夠創(chuàng)造新的解決方案解決復(fù)雜度問題,就像武俠世界里,小一些的創(chuàng)新是創(chuàng)新招式,而武學(xué)宗師能夠創(chuàng)立新的武學(xué)或者心法,例如張三豐創(chuàng)立太極拳一樣。
因此,要成為一個(gè)優(yōu)秀的架構(gòu)師,就需要不斷地提升自己這幾方面的內(nèi)功,而這三方面的能力主要來源于 經(jīng)驗(yàn)、視野、思考。
-
經(jīng)驗(yàn): 設(shè)計(jì)過的系統(tǒng)越多、系統(tǒng)越復(fù)雜,架構(gòu)師的內(nèi)功也就越強(qiáng),不管是成功的架構(gòu),還是失敗的架構(gòu),不管是踩坑的經(jīng)驗(yàn),還是填坑的經(jīng)驗(yàn),都將成為架構(gòu)師內(nèi)功的一部分。
-
視野: 掌握的知識(shí)和技能越多、越深,架構(gòu)師的內(nèi)功也就越強(qiáng),他山之石可以攻玉,站在巨人的肩膀上會(huì)看的更高更遠(yuǎn)。
-
思考: 經(jīng)驗(yàn)和視野都是外部輸入,類似于我們吃的食物,但光吃還不行,還要消化,將其變?yōu)槲覀冏约旱臓I養(yǎng),這就是思考的作用。思考能夠?qū)⒔?jīng)驗(yàn)和視野中的模式、判斷、選擇、技巧等提煉出來為我所用,思考也能促使我們產(chǎn)生新的創(chuàng)意和靈感。
結(jié)合上面的分析,從程序員到架構(gòu)師的成長之路,總的指導(dǎo)原則是:積累經(jīng)驗(yàn),拓寬視野,深度思考。按照這個(gè)總的原則為指導(dǎo),接下來我們看看從程序員到架構(gòu)師的成長過程中,具體如何實(shí)踐。
我把程序員到架構(gòu)師的技術(shù)成長之路分為幾個(gè)典型的階段:
工程師 - 高級(jí)工程師 - 技術(shù)專家 - 初級(jí)架構(gòu)師 - 中級(jí)架構(gòu)師 - 高級(jí)架構(gòu)師
雖然總的指導(dǎo)原則是一樣的,但具體的實(shí)踐方法有很大差別,如果在正確的階段采取了錯(cuò)誤的方法,可能會(huì)出現(xiàn)事倍功半的問題。
第一步:工程師
1. 階段描述
成為一個(gè)合格的工程師需要 1~3 年時(shí)間,其典型特征是“在別人的指導(dǎo)下完成開發(fā)”,這里的“別人”主要是“高級(jí)工程師”或者“技術(shù)專家”,通常情況下,高級(jí)工程師或者技術(shù)專家負(fù)責(zé)需求分析和討論、方案設(shè)計(jì),工程師負(fù)責(zé)編碼實(shí)現(xiàn),高級(jí)工程師或者技術(shù)專家會(huì)指導(dǎo)工程師進(jìn)行編碼實(shí)現(xiàn)。
2. 成長指導(dǎo)
工程師階段是最原始的“基礎(chǔ)技能積累階段”,主要積累基礎(chǔ)知識(shí),包括編程語言、編程工具、各類系統(tǒng)的基本使用。以 Java 后端工程師為例,工程師階段需要積累的經(jīng)驗(yàn)和技能有:
Java 的語法、基本數(shù)據(jù)結(jié)構(gòu)的使用。
Eclipse、IDEA、Maven、Linux 命令行等各種工具。
數(shù)據(jù)庫 CRUD 操作、緩存的基本使用等。
業(yè)務(wù)系統(tǒng)的基本流程。
工程師階段最好的學(xué)習(xí)方法就是 找經(jīng)典的書籍系統(tǒng)地學(xué)習(xí),而不要遇到一個(gè)問題到網(wǎng)上搜搜然后就解決了事。以 Java 為例,《Java 編程思想》《Java 核心技術(shù)》《TCP/IP 協(xié)議》這類大部頭,一定要完整地看一遍,即使里面很多內(nèi)容當(dāng)前工作暫時(shí)用不上。
高級(jí)工程師
1. 階段描述
成長為高級(jí)工程師需要 2~5 年時(shí)間,其典型特征是“獨(dú)立完成開發(fā)”,包括需求分析、方案設(shè)計(jì)、編碼實(shí)現(xiàn),其中需求分析和方案設(shè)計(jì)已經(jīng)包含了“判斷”和“選擇”,只是范圍相對(duì)來說小一些,更多是在已有架構(gòu)下進(jìn)行設(shè)計(jì)。以 Java 后端工程師為例,高級(jí)工程師需要完成的工作包括:
MySQL 數(shù)據(jù)庫表如何設(shè)計(jì),是設(shè)計(jì)成兩個(gè)表還是三個(gè)表?
是否要用緩存,緩存的 Key 和 Value 如何設(shè)計(jì),緩存的更新策略是什么?
產(chǎn)品提出的需求是否合理?是否有更好的方式來滿足?
2. 成長指導(dǎo)
從普通工程師成長為高級(jí)工程師,主要需要“積累方案設(shè)計(jì)經(jīng)驗(yàn)”,簡單來說就是業(yè)務(wù)當(dāng)前用到的相關(guān)技術(shù)的設(shè)計(jì)經(jīng)驗(yàn)。以 Java 后端高級(jí)工程師為例,包括:表設(shè)計(jì)經(jīng)驗(yàn)、緩存設(shè)計(jì)經(jīng)驗(yàn)、業(yè)務(wù)流程設(shè)計(jì)經(jīng)驗(yàn)、接口設(shè)計(jì)經(jīng)驗(yàn)等。當(dāng)接到一個(gè)業(yè)務(wù)需求的時(shí)候,高級(jí)工程師能夠組合這些設(shè)計(jì)經(jīng)驗(yàn),最終完成業(yè)務(wù)需求。
高級(jí)工程師階段相比工程師階段,有兩個(gè)典型的差異:
深度:如果說工程師是要求知道 How,那高級(jí)工程師就要求知道 Why 了。例如 Java 的各種數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)原理,因?yàn)橹挥猩钊胝莆樟诉@些實(shí)現(xiàn)原理,才能對(duì)其優(yōu)缺點(diǎn)和使用場景有深刻理解,這樣在做具體方案設(shè)計(jì)的時(shí)候才能選擇合適的數(shù)據(jù)結(jié)構(gòu)。
理論:理論就是前人總結(jié)出來的成熟的設(shè)計(jì)經(jīng)驗(yàn),例如數(shù)據(jù)庫表設(shè)計(jì)的 3 個(gè)范式、面向?qū)ο蟮脑O(shè)計(jì)模式、SOLID 設(shè)計(jì)原則、緩存設(shè)計(jì)理論(緩存穿透、緩存雪崩、緩存熱點(diǎn))等。
針對(duì)技術(shù)深度,我的建議還是系統(tǒng)地學(xué)習(xí),包括看書和研究源碼。例如,研究 Java 虛擬機(jī)可以看《深入理解 Java 虛擬機(jī)》、研究 MySQL 可以看《MySQL 技術(shù)內(nèi)幕:InnoDB 存儲(chǔ)引擎》、研究 Memcache 可以去看其源碼。
針對(duì)設(shè)計(jì)理論,由于涉及的點(diǎn)很多,沒有一本書能夠涵蓋這么多的設(shè)計(jì)點(diǎn),因此更多的是依靠自己去網(wǎng)上搜索資料學(xué)習(xí)。那我們?cè)趺粗滥男┑胤綍?huì)有設(shè)計(jì)理論呢?簡單來說,就是假設(shè)每個(gè)設(shè)計(jì)環(huán)節(jié)都有設(shè)計(jì)理論,然后帶著這種假設(shè)去搜索驗(yàn)證看看是否真的有很熟的設(shè)計(jì)理念。
技術(shù)專家
1. 階段描述
成長為技術(shù)專家需要 4~8 年時(shí)間,其典型的特征是“某個(gè)領(lǐng)域的專家”,通俗地講,只要是這個(gè)領(lǐng)域的問題,技術(shù)專家都可以解決。例如:Java 開發(fā)專家、PHP 開發(fā)專家、Android 開發(fā)專家、iOS 開發(fā)專家、前端開發(fā)專家等。通常情況下,“領(lǐng)域”的范圍不能太小,例如我們可以說“Java 開發(fā)專家”,但不會(huì)說“Java 多線程專家”或“Java JDBC 專家”。
技術(shù)專家與高級(jí)工程師的一個(gè)典型區(qū)別就是,高級(jí)工程師主要是在已有的架構(gòu)框架下完成設(shè)計(jì),而技術(shù)專家會(huì)根據(jù)需要修改、擴(kuò)展、優(yōu)化架構(gòu)。例如,同樣是 Java 開發(fā),高級(jí)工程師關(guān)注的是如何優(yōu)化 MySQL 的查詢性能,而技術(shù)專家可能就會(huì)考慮引入 Elasticsearch 來完成搜索。
2. 成長指導(dǎo)
從高級(jí)工程師成長為技術(shù)專家,主要需要“拓展技術(shù)寬度”,因?yàn)橐粋€(gè)“領(lǐng)域”必然會(huì)涉及眾多的技術(shù)面。以 Java 后端開發(fā)為例,要成為一個(gè) Java 開發(fā)專家,需要掌握 Java 多線程、JDBC、Java 虛擬機(jī)、面向?qū)ο?、設(shè)計(jì)模式、Netty、Elasticsearch、Memcache、Redis、MySQL 等眾多技術(shù)。常見的拓展技術(shù)寬度的方法有:
學(xué)習(xí)業(yè)界成熟的開源方案,例如,Java 開發(fā)可以去學(xué)習(xí) Redis、Memcache、Netty 等,Android 開發(fā)可以去研究 Retrofit、Fresco、OkHttp 等。
研究業(yè)界的經(jīng)驗(yàn)分享,例如 BAT、FANG 等大公司的經(jīng)驗(yàn),可以通過參加技術(shù)大會(huì)等方式去近距離了解。
需要注意的是,拓展技術(shù)寬度并不意味著僅僅只是知道一個(gè)技術(shù)名詞,而是要深入去理解每個(gè)技術(shù)的原理、優(yōu)缺點(diǎn)、應(yīng)用場景,否則就會(huì)成為傳說中的“PPT 技術(shù)專家”。例如,以 Java 開發(fā)為例,知道 Netty 是個(gè)高性能網(wǎng)絡(luò)庫是遠(yuǎn)遠(yuǎn)不夠的,還需要學(xué)習(xí) Netty 的原理,以及具體如何使用 Netty 來開發(fā)高性能系統(tǒng)。
初級(jí)架構(gòu)師
1. 階段描述
成長為初級(jí)架構(gòu)師需要 5~10 年時(shí)間,其典型特征就是能夠“獨(dú)立完成一個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì)”,可以是從 0 到 1 設(shè)計(jì)一個(gè)新系統(tǒng),也可以是將架構(gòu)從 1.0 重構(gòu)到 2.0。初級(jí)架構(gòu)師負(fù)責(zé)的系統(tǒng)復(fù)雜度相對(duì)來說不高,例如后臺(tái)管理系統(tǒng)、某個(gè)業(yè)務(wù)下的子系統(tǒng)、100 萬 PV 量級(jí)的網(wǎng)站等。
初級(jí)架構(gòu)師和技術(shù)專家的典型區(qū)別是:架構(gòu)師是基于完善的架構(gòu)設(shè)計(jì)方法論的指導(dǎo)來進(jìn)行架構(gòu)設(shè)計(jì),而技術(shù)專家更多的是基于經(jīng)驗(yàn)進(jìn)行架構(gòu)設(shè)計(jì)。簡單來說,即使是同樣一個(gè)方案,初級(jí)架構(gòu)師能夠清晰地闡述架構(gòu)設(shè)計(jì)的理由和原因,而技術(shù)專家可能就是因?yàn)樽约涸?jīng)這樣做過,或者看到別人這樣做過而選擇設(shè)計(jì)方案。
但在實(shí)踐工作中,技術(shù)專家和初級(jí)架構(gòu)師的區(qū)別并不很明顯,事實(shí)上很多技術(shù)專家其實(shí)就承擔(dān)了初級(jí)架構(gòu)師的角色,因?yàn)樵谙到y(tǒng)復(fù)雜度相對(duì)不高的情況下,架構(gòu)設(shè)計(jì)的難度不高,用不同的備選方案最終都能夠較好地完成系統(tǒng)設(shè)計(jì)。例如,設(shè)計(jì)一個(gè)日 PV 100 萬的網(wǎng)站,MySQL + Memcache + Spring Boot 可以很好地完成,MongoDB + Redis + Nginx + php-fpm 也可以很好地完成,備選方案設(shè)計(jì)和選擇并不太難,更多的是看團(tuán)隊(duì)熟悉哪個(gè)技術(shù)。
2. 成長指導(dǎo)
從技術(shù)專家成長為初級(jí)架構(gòu)師,最主要的是形成自己的“架構(gòu)設(shè)計(jì)方法論”,我的架構(gòu)設(shè)計(jì)專欄其實(shí)就是講述完整的架構(gòu)設(shè)計(jì)方法論,包括架構(gòu)設(shè)計(jì)目的、架構(gòu)設(shè)計(jì)原則、架構(gòu)設(shè)計(jì)步驟、架構(gòu)設(shè)計(jì)模式等,類似的架構(gòu)設(shè)計(jì)方法論還有《恰如其分的軟件架構(gòu):風(fēng)險(xiǎn)驅(qū)動(dòng)的設(shè)計(jì)方法》和《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》等。
要形成自己的架構(gòu)設(shè)計(jì)方法論,主要的手段有:
系統(tǒng)學(xué)習(xí)架構(gòu)設(shè)計(jì)方法論,包括訂閱專欄或者閱讀書籍等。
深入研究成熟開源系統(tǒng)的架構(gòu)設(shè)計(jì),這個(gè)手段在技術(shù)專家階段也會(huì)用到,但關(guān)注點(diǎn)不一樣,同樣是研究開源系統(tǒng),技術(shù)專家階段聚焦于如何更好地應(yīng)用開源項(xiàng)目;初級(jí)架構(gòu)師階段聚焦于學(xué)習(xí)其架構(gòu)設(shè)計(jì)原理和思想,例如 Kafka 的文檔中就有關(guān)于消息隊(duì)列架構(gòu)設(shè)計(jì)的分析和取舍。
結(jié)合架構(gòu)設(shè)計(jì)方法論,分析和總結(jié)自己團(tuán)隊(duì)甚至公司的各種系統(tǒng)的架構(gòu)設(shè)計(jì)優(yōu)缺點(diǎn),嘗試思考架構(gòu)重構(gòu)方案。如果在這個(gè)基礎(chǔ)上真的能夠推動(dòng)架構(gòu)重構(gòu),那就更好了,既能夠?qū)嵺`自己的架構(gòu)設(shè)計(jì)方法論,同時(shí)積累經(jīng)驗(yàn),又能夠展現(xiàn)自己的技術(shù)實(shí)力,拿到結(jié)果。
中級(jí)架構(gòu)師
1. 階段描述
成長為中級(jí)架構(gòu)師需要 8 年以上時(shí)間,其典型特征是“能夠完成復(fù)雜系統(tǒng)的架構(gòu)設(shè)計(jì)”,包含高性能、高可用、可擴(kuò)展、海量存儲(chǔ)等復(fù)雜系統(tǒng),例如設(shè)計(jì)一個(gè)和 Kafka 性能匹敵的消息隊(duì)列系統(tǒng)、將業(yè)務(wù)改造為異地多活、設(shè)計(jì)一個(gè)總共 100 人參與開發(fā)的業(yè)務(wù)系統(tǒng)等。
中級(jí)架構(gòu)師與初級(jí)架構(gòu)師的典型區(qū)別在于系統(tǒng)復(fù)雜度的不同,中級(jí)架構(gòu)師面對(duì)的系統(tǒng)復(fù)雜度要高于初級(jí)架構(gòu)師。以開源項(xiàng)目為例,初級(jí)架構(gòu)師可能引入某個(gè)開源項(xiàng)目就可以完成架構(gòu)設(shè)計(jì),而中級(jí)架構(gòu)師可能發(fā)現(xiàn)其實(shí)沒有哪個(gè)開源項(xiàng)目是合適的,而需要自己開發(fā)一個(gè)全新的項(xiàng)目,事實(shí)上很多開源項(xiàng)目就是這樣誕生出來的。
2. 成長指導(dǎo)
從初級(jí)架構(gòu)師成長為中級(jí)架構(gòu)師,最關(guān)鍵的是“技術(shù)深度和技術(shù)理論的積累”,例如:
技術(shù)理論:CAP、BASE 是異地多活的設(shè)計(jì)理論基礎(chǔ)、Paxos 是分布式一致性的基礎(chǔ)算法、2PC、3PC 是分布式事務(wù)的基礎(chǔ)算法等。
技術(shù)深度:Kafka 用磁盤存儲(chǔ)還能做到高效是因?yàn)榇疟P順序?qū)懀籇isruptor 高性能是結(jié)合 CPU 預(yù)讀取機(jī)制、緩存行、無鎖設(shè)計(jì)等基礎(chǔ)技術(shù);Storm 的高效異或確認(rèn)機(jī)制;Flink 的分布式快照算法等。
很多同學(xué)對(duì)這點(diǎn)可能有疑問,這些技術(shù)理論和技術(shù)深度的事情不應(yīng)該是高級(jí)工程師階段或者技術(shù)專家階段就應(yīng)該積累的么?為何到了中級(jí)架構(gòu)師階段反而是成長的關(guān)鍵了呢?主要原因在于高級(jí)工程師或者技術(shù)專家階段即使去學(xué)習(xí)這些技術(shù),實(shí)際上也比較難理解透徹,更加難以有機(jī)會(huì)去應(yīng)用,更多的時(shí)候只是了解有這個(gè)技術(shù)點(diǎn)而已;而到了中級(jí)架構(gòu)師階段,面對(duì)高復(fù)雜度的系統(tǒng),很多時(shí)候就是幾個(gè)關(guān)鍵技術(shù)細(xì)節(jié)決定整個(gè)架構(gòu)設(shè)計(jì)的成敗,或者某個(gè)設(shè)計(jì)方案理論上就是不可行的,如果不深刻理解理論和相關(guān)的關(guān)鍵技術(shù)點(diǎn),很難設(shè)計(jì)優(yōu)秀的架構(gòu)。
以我做過的異地多活設(shè)計(jì)方案為例,之前很早我就知道 CAP 理論了,但也僅僅只是知道幾個(gè)概念而已。真正做異地多活的時(shí)候,開始的時(shí)候還是走了不少彎路,試圖做一個(gè)完美的異地多活系統(tǒng),最終發(fā)現(xiàn)這其實(shí)是不可能的,某天突然頓悟:其實(shí) CAP 理論已經(jīng)明確指出來了這點(diǎn),但最初學(xué)習(xí) CAP 理論的時(shí)候,很難有這樣深刻的理解。
高級(jí)架構(gòu)師
1. 階段描述
成長為高級(jí)架構(gòu)師需要 10 年以上時(shí)間,其典型特征是“創(chuàng)造新的架構(gòu)模式”,例如:
谷歌大數(shù)據(jù)論文,創(chuàng)造了分布式存儲(chǔ)架構(gòu)、分布式計(jì)算 MapReduce 架構(gòu)、列式存儲(chǔ)架構(gòu),開創(chuàng)了大數(shù)據(jù)時(shí)代。
在有 MapReduce 分布式計(jì)算架構(gòu)的背景下,Storm 又創(chuàng)造了流式計(jì)算架構(gòu)。
在虛擬機(jī)很成熟的背景下,Docker 創(chuàng)造了容器化的技術(shù)潮流。
高級(jí)架構(gòu)師與中級(jí)架構(gòu)師相比,典型區(qū)別在于“創(chuàng)造性”,高級(jí)架構(gòu)師能夠創(chuàng)造新的架構(gòu)模式,開創(chuàng)新的技術(shù)潮流。
2. 成長指導(dǎo)
坦白的說,對(duì)于從中級(jí)架構(gòu)師如何才能成長為高級(jí)架構(gòu)師,我并沒有太好的指導(dǎo),一個(gè)原因是我自我評(píng)價(jià)目前頂多算個(gè)中級(jí)架構(gòu)師;另外一個(gè)原因是一旦涉及“創(chuàng)造性”,其實(shí)和藝術(shù)就比較類似了,創(chuàng)造性實(shí)際上是很難學(xué)會(huì)的,也很難由老師教會(huì),更多是天分,或者某種場景下靈感爆發(fā)。
參考技術(shù)界幾個(gè)創(chuàng)造性的架構(gòu)案例,我總結(jié)出幾個(gè)可能誕生創(chuàng)造性架構(gòu)的背景條件:
足夠復(fù)雜的業(yè)務(wù)場景:例如谷歌的大數(shù)據(jù)、阿里的雙十一、Facebook 的海量用戶等,業(yè)務(wù)場景越復(fù)雜,給技術(shù)帶來的挑戰(zhàn)更大,更有可能產(chǎn)生創(chuàng)造性的技術(shù)突破。
足夠強(qiáng)大的技術(shù)團(tuán)隊(duì):絕大部分創(chuàng)造性的架構(gòu)都來源于大公司,或者知名的研究機(jī)構(gòu);沒有技術(shù)實(shí)力支撐,想突破也是心有余而力不足。
不滿足于現(xiàn)狀的態(tài)度:例如虛擬機(jī)很成熟但是資源占用太多,所以發(fā)明 Docker;MapReduce 難以做到實(shí)時(shí)運(yùn)算,所以創(chuàng)造 Storm 流式運(yùn)算。
尊重技術(shù)價(jià)值的文化:創(chuàng)造性的東西往往需要投入大量的人力和時(shí)間,而且剛開始一般都不會(huì)很成熟,如果完全結(jié)果導(dǎo)向、KPI 導(dǎo)向,創(chuàng)新技術(shù)很可能在萌芽階段就被否定。
對(duì)于2-5年的Java程序員我們應(yīng)當(dāng)如何來學(xué)習(xí)提升呢?下面是筆者收集整理的學(xué)習(xí)線路圖:
(一)微服務(wù)
(二)分布式
(三)源碼分析
(四)多線程并發(fā)編程
(五)工程化
(六)性能優(yōu)化
(七)電商項(xiàng)目文章來源:http://www.zghlxwxcb.cn/news/detail-789106.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-789106.html
到了這里,關(guān)于史上最全最詳細(xì)的Java架構(gòu)師成長路徑圖,程序員必備的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!