更新時間:2019-08-12 11:35:56 來源:動力節(jié)點 瀏覽2952次
從新手碼農(nóng)到高級架構(gòu)師,要經(jīng)過幾步?要多努力,才能成為為人倚重的技術(shù)專家?本文將為你帶來一張程序員發(fā)展路徑圖,但你需要知道的是,天下沒有普適的道理,具體問題還需具體分析,實踐才能出真知。
架構(gòu)師的“內(nèi)功”
我認為,架構(gòu)師的內(nèi)功主要包含三部分:判斷力、執(zhí)行力、創(chuàng)新力,簡單解釋如下:
判斷力:能夠準確判斷系統(tǒng)的復(fù)雜度在哪里,就像武俠高手一樣,能準確地看出對手的破綻和弱點。
執(zhí)行力:能夠使用合適的方案解決復(fù)雜度問題,就像武俠高手一樣,能選擇合適的招式或者方法打敗對手。
創(chuàng)新力:能夠創(chuàng)造新的解決方案解決復(fù)雜度問題,就像武俠世界里,小一些的創(chuàng)新是創(chuàng)新招式,而武學(xué)宗師能夠創(chuàng)立新的武學(xué)或者心法,例如張三豐創(chuàng)立太極拳一樣。
因此,要成為一個優(yōu)秀的架構(gòu)師,就需要不斷地提升自己這幾方面的內(nèi)功,而這三方面的能力主要來源于經(jīng)驗、視野、思考。
經(jīng)驗:設(shè)計過的系統(tǒng)越多、系統(tǒng)越復(fù)雜,架構(gòu)師的內(nèi)功也就越強,不管是成功的架構(gòu),還是失敗的架構(gòu),不管是踩坑的經(jīng)驗,還是填坑的經(jīng)驗,都將成為架構(gòu)師內(nèi)功的一部分。
視野:掌握的知識和技能越多、越深,架構(gòu)師的內(nèi)功也就越強,他山之石可以攻玉,站在巨人的肩膀上會看的更高更遠。
思考:經(jīng)驗和視野都是外部輸入,類似于我們吃的食物,但光吃還不行,還要消化,將其變?yōu)槲覀冏约旱臓I養(yǎng),這就是思考的作用。思考能夠?qū)⒔?jīng)驗和視野中的模式、判斷、選擇、技巧等提煉出來為我所用,思考也能促使我們產(chǎn)生新的創(chuàng)意和靈感。
結(jié)合上面的分析,從程序員到架構(gòu)師的成長之路,總的指導(dǎo)原則是:積累經(jīng)驗,拓寬視野,深度思考。按照這個總的原則為指導(dǎo),接下來我們看看從程序員到架構(gòu)師的成長過程中,具體如何實踐。

工程師
階段描述
成為一個合格的工程師需要1~3年時間,其典型特征是“在別人的指導(dǎo)下完成開發(fā)”,這里的“別人”主要是“高級工程師”或者“技術(shù)專家”,通常情況下,高級工程師或者技術(shù)專家負責需求分析和討論、方案設(shè)計,工程師負責編碼實現(xiàn),高級工程師或者技術(shù)專家會指導(dǎo)工程師進行編碼實現(xiàn)。
成長指導(dǎo)
工程師階段是最原始的“基礎(chǔ)技能積累階段”,主要積累基礎(chǔ)知識,包括編程語言、編程工具、各類系統(tǒng)的基本使用。以Java后端工程師為例,工程師階段需要積累的經(jīng)驗和技能有:
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í),而不要遇到一個問題到網(wǎng)上搜搜然后就解決了事。以Java為例,《Java編程思想》《Java核心技術(shù)》《TCP/IP協(xié)議》這類大部頭,一定要完整地看一遍,即使里面很多內(nèi)容當前工作暫時用不上。
高級工程師
階段描述
成長為高級工程師需要2~5年時間,其典型特征是“獨立完成開發(fā)”,包括需求分析、方案設(shè)計、編碼實現(xiàn),其中需求分析和方案設(shè)計已經(jīng)包含了“判斷”和“選擇”,只是范圍相對來說小一些,更多是在已有架構(gòu)下進行設(shè)計。以Java后端工程師為例,高級工程師需要完成的工作包括:
MySQL數(shù)據(jù)庫表如何設(shè)計,是設(shè)計成兩個表還是三個表?
是否要用緩存,緩存的Key和Value如何設(shè)計,緩存的更新策略是什么?
產(chǎn)品提出的需求是否合理?是否有更好的方式來滿足?
成長指導(dǎo)
從普通工程師成長為高級工程師,主要需要“積累方案設(shè)計經(jīng)驗”,簡單來說就是業(yè)務(wù)當前用到的相關(guān)技術(shù)的設(shè)計經(jīng)驗。以Java后端高級工程師為例,包括:表設(shè)計經(jīng)驗、緩存設(shè)計經(jīng)驗、業(yè)務(wù)流程設(shè)計經(jīng)驗、接口設(shè)計經(jīng)驗等。當接到一個業(yè)務(wù)需求的時候,高級工程師能夠組合這些設(shè)計經(jīng)驗,最終完成業(yè)務(wù)需求。
高級工程師階段相比工程師階段,有兩個典型的差異:
深度:如果說工程師是要求知道How,那高級工程師就要求知道Why了。例如Java的各種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)原理,因為只有深入掌握了這些實現(xiàn)原理,才能對其優(yōu)缺點和使用場景有深刻理解,這樣在做具體方案設(shè)計的時候才能選擇合適的數(shù)據(jù)結(jié)構(gòu)。
理論:理論就是前人總結(jié)出來的成熟的設(shè)計經(jīng)驗,例如數(shù)據(jù)庫表設(shè)計的3個范式、面向?qū)ο蟮脑O(shè)計模式、SOLID設(shè)計原則、緩存設(shè)計理論(緩存穿透、緩存雪崩、緩存熱點)等。
針對技術(shù)深度,我的建議還是系統(tǒng)地學(xué)習(xí),包括看書和研究源碼。例如,研究Java虛擬機可以看《深入理解Java虛擬機》、研究MySQL可以看《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》、研究Memcache可以去看其源碼。
針對設(shè)計理論,由于涉及的點很多,沒有一本書能夠涵蓋這么多的設(shè)計點,因此更多的是依靠自己去網(wǎng)上搜索資料學(xué)習(xí)。那我們怎么知道哪些地方會有設(shè)計理論呢?簡單來說,就是假設(shè)每個設(shè)計環(huán)節(jié)都有設(shè)計理論,然后帶著這種假設(shè)去搜索驗證看看是否真的有很熟的設(shè)計理念。
技術(shù)專家
階段描述
成長為技術(shù)專家需要4~8年時間,其典型的特征是“某個領(lǐng)域的專家”,通俗地講,只要是這個領(lǐng)域的問題,技術(shù)專家都可以解決。例如:Java開發(fā)專家、PHP開發(fā)專家、Android開發(fā)專家、iOS開發(fā)專家、前端開發(fā)專家等。通常情況下,“領(lǐng)域”的范圍不能太小,例如我們可以說“Java開發(fā)專家”,但不會說“Java多線程專家”或“JavaJDBC專家”。
技術(shù)專家與高級工程師的一個典型區(qū)別就是,高級工程師主要是在已有的架構(gòu)框架下完成設(shè)計,而技術(shù)專家會根據(jù)需要修改、擴展、優(yōu)化架構(gòu)。例如,同樣是Java開發(fā),高級工程師關(guān)注的是如何優(yōu)化MySQL的查詢性能,而技術(shù)專家可能就會考慮引入Elasticsearch來完成搜索。
成長指導(dǎo)
從高級工程師成長為技術(shù)專家,主要需要“拓展技術(shù)寬度”,因為一個“領(lǐng)域”必然會涉及眾多的技術(shù)面。以Java后端開發(fā)為例,要成為一個Java開發(fā)專家,需要掌握Java多線程、JDBC、Java虛擬機、面向?qū)ο?、設(shè)計模式、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)驗分享,例如BAT、FANG等大公司的經(jīng)驗,可以通過參加技術(shù)大會等方式去近距離了解。
需要注意的是,拓展技術(shù)寬度并不意味著僅僅只是知道一個技術(shù)名詞,而是要深入去理解每個技術(shù)的原理、優(yōu)缺點、應(yīng)用場景,否則就會成為傳說中的“PPT技術(shù)專家”。例如,以Java開發(fā)為例,知道Netty是個高性能網(wǎng)絡(luò)庫是遠遠不夠的,還需要學(xué)習(xí)Netty的原理,以及具體如何使用Netty來開發(fā)高性能系統(tǒng)。
架構(gòu)師
階段描述
成長為架構(gòu)師需要5~10年時間,其典型特征就是能夠“獨立完成一個系統(tǒng)的架構(gòu)設(shè)計”,可以是從0到1設(shè)計一個新系統(tǒng),也可以是將架構(gòu)從1.0重構(gòu)到2.0。初級架構(gòu)師負責的系統(tǒng)復(fù)雜度相對來說不高,例如后臺管理系統(tǒng)、某個業(yè)務(wù)下的子系統(tǒng)、100萬PV量級的網(wǎng)站等。
架構(gòu)師和技術(shù)專家的典型區(qū)別是:架構(gòu)師是基于完善的架構(gòu)設(shè)計方法論的指導(dǎo)來進行架構(gòu)設(shè)計,而技術(shù)專家更多的是基于經(jīng)驗進行架構(gòu)設(shè)計。簡單來說,即使是同樣一個方案,架構(gòu)師能夠清晰地闡述架構(gòu)設(shè)計的理由和原因,而技術(shù)專家可能就是因為自己曾經(jīng)這樣做過,或者看到別人這樣做過而選擇設(shè)計方案。
事實上很多技術(shù)專家其實就承擔了初級架構(gòu)師的角色,因為在系統(tǒng)復(fù)雜度相對不高的情況下,架構(gòu)設(shè)計的難度不高,用不同的備選方案最終都能夠較好地完成系統(tǒng)設(shè)計。例如,設(shè)計一個日PV100萬的網(wǎng)站,MySQL+Memcache+SpringBoot可以很好地完成,MongoDB+Redis+Nginx+php-fpm也可以很好地完成,備選方案設(shè)計和選擇并不太難,更多的是看團隊熟悉哪個技術(shù)。
成長指導(dǎo)
從技術(shù)專家成長為架構(gòu)師,最主要的是形成自己的“架構(gòu)設(shè)計方法論”,我的架構(gòu)設(shè)計專欄其實就是講述完整的架構(gòu)設(shè)計方法論,包括架構(gòu)設(shè)計目的、架構(gòu)設(shè)計原則、架構(gòu)設(shè)計步驟、架構(gòu)設(shè)計模式等,類似的架構(gòu)設(shè)計方法論還有《恰如其分的軟件架構(gòu):風險驅(qū)動的設(shè)計方法》和《領(lǐng)域驅(qū)動設(shè)計》等。
要形成自己的架構(gòu)設(shè)計方法論,主要的手段有:
系統(tǒng)學(xué)習(xí)架構(gòu)設(shè)計方法論,包括訂閱專欄或者閱讀書籍等。
深入研究成熟開源系統(tǒng)的架構(gòu)設(shè)計,這個手段在技術(shù)專家階段也會用到,但關(guān)注點不一樣,同樣是研究開源系統(tǒng),技術(shù)專家階段聚焦于如何更好地應(yīng)用開源項目;架構(gòu)師階段聚焦于學(xué)習(xí)其架構(gòu)設(shè)計原理和思想,例如Kafka的文檔中就有關(guān)于消息隊列架構(gòu)設(shè)計的分析和取舍。
結(jié)合架構(gòu)設(shè)計方法論,分析和總結(jié)自己團隊甚至公司的各種系統(tǒng)的架構(gòu)設(shè)計優(yōu)缺點,嘗試思考架構(gòu)重構(gòu)方案。如果在這個基礎(chǔ)上真的能夠推動架構(gòu)重構(gòu),那就更好了,既能夠?qū)嵺`自己的架構(gòu)設(shè)計方法論,同時積累經(jīng)驗,又能夠展現(xiàn)自己的技術(shù)實力,拿到結(jié)果。
架構(gòu)師所需要掌握的知識體系
而對于2-8年的Java程序員我這里有整理出最新的學(xué)習(xí)路線規(guī)劃,有需要的朋友可以自行下載。
提升競爭優(yōu)勢,揚長避短:
明確了自己為何工作之后,就可以著重提升一下自己的競爭優(yōu)勢,下面推薦大家這套架構(gòu)的內(nèi)容腦圖涵蓋了當下主流技術(shù):

2、架構(gòu)筑基專題
深入內(nèi)核、直擊故障、拒絕懵圈。

3、微服務(wù)架構(gòu)專題
你還不知道微服務(wù),怎么漲薪。

4、高性能架構(gòu)專題
成為互聯(lián)網(wǎng)架構(gòu)師,你要的都在這里。

5、團隊協(xié)作開發(fā)專題
讓你團隊開發(fā)效率提高十倍。

6、B2C商城項目實戰(zhàn)
擼起袖子干實事,項目經(jīng)驗?zāi)屈c事。

有了路線解析圖,有沒有免費資料?有沒有志同道合的小伙伴共同進步?資源獲取登錄動力節(jié)點IT培訓(xùn)【視頻課程】專欄,下載學(xué)習(xí)。

相關(guān)閱讀