更新時(shí)間:2019-08-12 11:35:56 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2648次
從新手碼農(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)確地看出對手的破綻和弱點(diǎn)。
執(zhí)行力:能夠使用合適的方案解決復(fù)雜度問題,就像武俠高手一樣,能選擇合適的招式或者方法打敗對手。
創(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è)合格的工程師需要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)。
成長指導(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í)工程師
階段描述
成長為高級(jí)工程師需要2~5年時(shí)間,其典型特征是“獨(dú)立完成開發(fā)”,包括需求分析、方案設(shè)計(jì)、編碼實(shí)現(xiàn),其中需求分析和方案設(shè)計(jì)已經(jīng)包含了“判斷”和“選擇”,只是范圍相對來說小一些,更多是在已有架構(gòu)下進(jìn)行設(shè)計(jì)。以Java后端工程師為例,高級(jí)工程師需要完成的工作包括:
MySQL數(shù)據(jù)庫表如何設(shè)計(jì),是設(shè)計(jì)成兩個(gè)表還是三個(gè)表?
是否要用緩存,緩存的Key和Value如何設(shè)計(jì),緩存的更新策略是什么?
產(chǎn)品提出的需求是否合理?是否有更好的方式來滿足?
成長指導(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)原理,才能對其優(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))等。
針對技術(shù)深度,我的建議還是系統(tǒng)地學(xué)習(xí),包括看書和研究源碼。例如,研究Java虛擬機(jī)可以看《深入理解Java虛擬機(jī)》、研究MySQL可以看《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》、研究Memcache可以去看其源碼。
針對設(shè)計(jì)理論,由于涉及的點(diǎn)很多,沒有一本書能夠涵蓋這么多的設(shè)計(jì)點(diǎn),因此更多的是依靠自己去網(wǎng)上搜索資料學(xué)習(xí)。那我們怎么知道哪些地方會(huì)有設(shè)計(jì)理論呢?簡單來說,就是假設(shè)每個(gè)設(shè)計(jì)環(huán)節(jié)都有設(shè)計(jì)理論,然后帶著這種假設(shè)去搜索驗(yàn)證看看是否真的有很熟的設(shè)計(jì)理念。
技術(shù)專家
階段描述
成長為技術(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多線程專家”或“JavaJDBC專家”。
技術(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來完成搜索。
成長指導(dǎo)
從高級(jí)工程師成長為技術(shù)專家,主要需要“拓展技術(shù)寬度”,因?yàn)橐粋€(gè)“領(lǐng)域”必然會(huì)涉及眾多的技術(shù)面。以Java后端開發(fā)為例,要成為一個(gè)Java開發(fā)專家,需要掌握J(rèn)ava多線程、JDBC、Java虛擬機(jī)、面向?qū)ο蟆⒃O(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)。
架構(gòu)師
階段描述
成長為架構(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ù)雜度相對來說不高,例如后臺(tái)管理系統(tǒng)、某個(gè)業(yè)務(wù)下的子系統(tǒng)、100萬PV量級(jí)的網(wǎng)站等。
架構(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è)方案,架構(gòu)師能夠清晰地闡述架構(gòu)設(shè)計(jì)的理由和原因,而技術(shù)專家可能就是因?yàn)樽约涸?jīng)這樣做過,或者看到別人這樣做過而選擇設(shè)計(jì)方案。
事實(shí)上很多技術(shù)專家其實(shí)就承擔(dān)了初級(jí)架構(gòu)師的角色,因?yàn)樵谙到y(tǒng)復(fù)雜度相對不高的情況下,架構(gòu)設(shè)計(jì)的難度不高,用不同的備選方案最終都能夠較好地完成系統(tǒng)設(shè)計(jì)。例如,設(shè)計(jì)一個(gè)日PV100萬的網(wǎng)站,MySQL+Memcache+SpringBoot可以很好地完成,MongoDB+Redis+Nginx+php-fpm也可以很好地完成,備選方案設(shè)計(jì)和選擇并不太難,更多的是看團(tuán)隊(duì)熟悉哪個(gè)技術(shù)。
成長指導(dǎo)
從技術(shù)專家成長為架構(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)目;架構(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é)果。
架構(gòu)師所需要掌握的知識(shí)體系
而對于2-8年的Java程序員我這里有整理出最新的學(xué)習(xí)路線規(guī)劃,有需要的朋友可以自行下載。
提升競爭優(yōu)勢,揚(yáng)長避短:
明確了自己為何工作之后,就可以著重提升一下自己的競爭優(yōu)勢,下面推薦大家這套架構(gòu)的內(nèi)容腦圖涵蓋了當(dāng)下主流技術(shù):
2、架構(gòu)筑基專題
深入內(nèi)核、直擊故障、拒絕懵圈。
3、微服務(wù)架構(gòu)專題
你還不知道微服務(wù),怎么漲薪。
4、高性能架構(gòu)專題
成為互聯(lián)網(wǎng)架構(gòu)師,你要的都在這里。
5、團(tuán)隊(duì)協(xié)作開發(fā)專題
讓你團(tuán)隊(duì)開發(fā)效率提高十倍。
6、B2C商城項(xiàng)目實(shí)戰(zhàn)
擼起袖子干實(shí)事,項(xiàng)目經(jīng)驗(yàn)?zāi)屈c(diǎn)事。
有了路線解析圖,有沒有免費(fèi)資料?有沒有志同道合的小伙伴共同進(jìn)步?資源獲取登錄動(dòng)力節(jié)點(diǎn)IT培訓(xùn)【視頻課程】專欄,下載學(xué)習(xí)。
相關(guān)閱讀
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743