
如何成長(zhǎng)為一名架構(gòu)師?
很多程序員想成為一名架構(gòu)師,但是對(duì)于其中的技能掌握程度,以及編程功底的要求?設(shè)計(jì)能力的要求有哪些?
我簡(jiǎn)要從以下6點(diǎn)經(jīng)驗(yàn)來談,從技能的角度拋磚引玉。
1:編程基本功:數(shù)據(jù)結(jié)構(gòu)和算法
1.數(shù)據(jù)結(jié)構(gòu)相關(guān)的哈希表、鏈表、二叉樹等等
2.常見的算法有哪些?至少下圖的算法我認(rèn)為應(yīng)該要掌握。
比如:HashMap如何擴(kuò)容,重點(diǎn)就是考底層數(shù)據(jù)結(jié)構(gòu)。

2:編程基本功:Java編程
這些都算是編程基本功底:多線程、JVM、并發(fā)容器、并發(fā)類、NIO等。

3:Web開發(fā)
其實(shí)web開發(fā)這個(gè)領(lǐng)域,如果你要掌握好了,發(fā)展也非常不錯(cuò)的。
比如:現(xiàn)在的H5、小程序等,對(duì)于掌握前端技術(shù)的開發(fā)人員,競(jìng)爭(zhēng)力也是杠杠的。
當(dāng)然作為后端開發(fā)人員,多掌握點(diǎn)前端的技術(shù),那也是必須的。

4:數(shù)據(jù)庫
重點(diǎn)就看圖了,這里涉及的技術(shù)還是蠻多的,mysql、oracle、nosql相關(guān)的mongodb,以及如今大家都熟知的分庫分表、讀寫分離等技術(shù)。
這些都是大家熟知的,我補(bǔ)充點(diǎn)設(shè)計(jì)相關(guān)的:數(shù)據(jù)庫設(shè)計(jì)范式、索引、事務(wù)、數(shù)據(jù)庫相關(guān)的慢查詢、長(zhǎng)事務(wù)。
這些也算是數(shù)據(jù)庫技術(shù)的編程功底。

5:研發(fā)相關(guān)的框架工具
Java程序員對(duì)于下圖應(yīng)該都是比較熟悉的,這些框架與工具都是經(jīng)常使用。

6:架構(gòu)設(shè)計(jì)
談到設(shè)計(jì),就不得不提到項(xiàng)目中的概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),這就會(huì)涉及到UML。
除此之外,整個(gè)項(xiàng)目的設(shè)計(jì),這個(gè)時(shí)候考驗(yàn)?zāi)愕募軜?gòu)設(shè)計(jì)能力。

這里的架構(gòu)設(shè)計(jì),包含的系列非常多,特別是Redis、應(yīng)用程序拆分、拆分后涉及到的RPC微服務(wù)等技術(shù),以及后端數(shù)據(jù)庫的拆分技術(shù),以及拆分后的分布式集群部署。
程序員如何突破成長(zhǎng)瓶頸?
對(duì)工作1-3年的程序員來說,依據(jù)個(gè)人情況提前規(guī)劃未來職業(yè)發(fā)展方向,這很重要。譬如,在未來3-5年甚至更久,工作要做到什么程度?往哪個(gè)方向發(fā)展?通過怎樣的路徑才能實(shí)現(xiàn)目標(biāo)?如果沉浸在當(dāng)下“程序員高薪”的論調(diào)中歲月靜好,總歸有一天會(huì)面臨網(wǎng)上熱議的“程序員中年危機(jī)”,以至于最后不得不步入轉(zhuǎn)行或提前退休的尷尬局面。
作為經(jīng)常跟IT人接觸的我,我一直認(rèn)為這個(gè)話題對(duì)程序員非常重要,今天和大家詳細(xì)聊聊。
職業(yè)規(guī)劃的重要性
人生和職場(chǎng)就像下象棋,你只有明確了目標(biāo)才不會(huì)在每一步上迷茫,之所有迷茫,是因?yàn)椴磺宄约鹤罱K想要什么,下一個(gè)階段的目標(biāo)在哪里?
- 某公司表示薪資上浮20%-30%,我應(yīng)該跳槽加入嗎?
- 我最近收到了幾個(gè)offer,應(yīng)該去哪一家更好?
- 從大公司去小公司,是否值得去嘗試?
- 想成為架構(gòu)師,但不知道自己的技術(shù)是否能勝任?
- 從程序員轉(zhuǎn)行,但不知道未來自己的競(jìng)爭(zhēng)力會(huì)變?nèi)鯁幔?/li>
- ……
其實(shí),追求短期利益(眼前)或長(zhǎng)期利益(未來),取決于你自己的決定。
我的建議是,不要在你經(jīng)歷之后,再去回顧職業(yè)生涯,初期跳槽漲薪確實(shí)很快,但到了中后期,跳槽再也帶不來前期的漲幅,反而在頻繁的跳槽過程中,失去了很多機(jī)會(huì),技能與業(yè)務(wù)的能力也沒能積累沉淀下來,這將直接導(dǎo)致很多人在即將步入中年時(shí)感到異常焦慮,不知道自己未來的路何去何從。
跳槽和轉(zhuǎn)行如果僅僅只是工作逃避的手段,未來你將面臨更大的焦慮,未來也根本談不上什么有什么核心競(jìng)爭(zhēng)力。但如果跳槽和轉(zhuǎn)行,是謀定而后動(dòng),圍繞你的主線職業(yè)去發(fā)展,這是完全不一樣的結(jié)果。
總之,在職業(yè)的選擇上,絕不能有“逃避”二字,逃避將會(huì)讓你無處藏身,你只有明白了這個(gè)道理,你才會(huì)去克服眼前的困難,學(xué)會(huì)承擔(dān),這樣的人生才有未來。
程序員的職業(yè)發(fā)展方向
1、架構(gòu)師(專注技術(shù),側(cè)重技術(shù))
每一個(gè)程序員都有一個(gè)架構(gòu)師的夢(mèng)想,這個(gè)方向是很多技術(shù)人的第一選擇,從年薪十幾萬的程序員成長(zhǎng)為年薪幾十萬甚至過百萬的架構(gòu)師,給力的薪酬已足以讓不少程序員心動(dòng)不已。若未來你想成為架構(gòu)師,那么現(xiàn)在至少需要清楚了解架構(gòu)師的主要職責(zé)是什么?有目標(biāo)有方向地堅(jiān)持學(xué)習(xí)。
2、項(xiàng)目經(jīng)理(技術(shù)一般,側(cè)重管理)
往管理方向發(fā)展的職業(yè)路徑,項(xiàng)目經(jīng)理主要側(cè)重于項(xiàng)目管理工作,主要能力是計(jì)劃、溝通及組織協(xié)調(diào)。溝通和表達(dá)是開發(fā)人員短柄,所以想往此線路發(fā)展的同學(xué),從日常的工作、生活中就得逐步加強(qiáng)鍛煉這方面能力。
3、技術(shù)經(jīng)理(技術(shù)和管理結(jié)合)
技術(shù)經(jīng)理需要帶領(lǐng)團(tuán)隊(duì)前行,在國(guó)內(nèi)的技術(shù)經(jīng)理,大部分都在30歲左右。一般,程序員在30歲是一個(gè)職業(yè)分水嶺。
技術(shù)經(jīng)理的這個(gè)階段的工作重點(diǎn)不再是專注于技術(shù),而是在培養(yǎng)團(tuán)隊(duì),帶領(lǐng)團(tuán)隊(duì)為主。如果你沒有讓團(tuán)隊(duì)的成員變得更好,沒有分享,沒有利益分享的想法,沒有去幫助大家成長(zhǎng)的想法,這樣的程序員不太適合這個(gè)崗位。
總之,這個(gè)職位成全大家而不是自己才是重點(diǎn)。
4、產(chǎn)品經(jīng)理(轉(zhuǎn)崗)
如果你對(duì)技術(shù)發(fā)展路徑、管理發(fā)展路徑都不感興趣,那么不妨考慮轉(zhuǎn)產(chǎn)品經(jīng)理,移動(dòng)互聯(lián)網(wǎng)時(shí)代,產(chǎn)品經(jīng)理的角色越來越重要,一個(gè)好的產(chǎn)品經(jīng)理有可能帶給公司顛覆性的發(fā)展,收入各方面也還不錯(cuò),我認(rèn)識(shí)的一些程序員,也有轉(zhuǎn)行做產(chǎn)品經(jīng)理,并且做得還不錯(cuò)的。
5、CTO(管理+技術(shù)結(jié)合,側(cè)重管理)
需要有一定的技術(shù)能力和團(tuán)隊(duì)管理能力。CTO的工作更偏業(yè)務(wù)、偏管理,以及商業(yè)等,主要職責(zé)包括團(tuán)隊(duì)管理、開發(fā)流程、公司戰(zhàn)略、業(yè)務(wù)增長(zhǎng)以及各類技術(shù)疑難問題的解決等,可以說是一個(gè)比較全方位的發(fā)展方向,一句話,CTO的主要職能是管理+技術(shù)+業(yè)務(wù)+商業(yè)的綜合發(fā)展。
成長(zhǎng)為Java架構(gòu)師必須突破的11個(gè)技術(shù)點(diǎn)
1、Java基礎(chǔ)技術(shù)體系掌握牢固:
- JVM內(nèi)存分配
- 垃圾回收
- 類裝載機(jī)制
- JVM性能優(yōu)化
- 反射機(jī)制
- 多線程
- 網(wǎng)絡(luò)編程
- 常用數(shù)據(jù)結(jié)構(gòu)和相關(guān)算法
2、對(duì)面向?qū)ο蟮能浖_發(fā)思想有清晰的認(rèn)識(shí)、熟悉掌握常用的設(shè)計(jì)模式:
- 熟練使用UML工具以及各種流程圖
- 經(jīng)典的設(shè)計(jì)模式會(huì)手寫以及熟知使用場(chǎng)景
- 概要設(shè)計(jì)與詳細(xì)設(shè)計(jì)
- 面向?qū)ο蟮暮诵乃枷胄枰\(yùn)用在代碼編程中,例如:高內(nèi)聚低耦合
3、目前流行開源框架,除了熟練使用,還需要掌握核心原理和實(shí)現(xiàn)
- Spring
- Springmvc
- MyBatis
建議看源碼以及debug配合掌握實(shí)現(xiàn)原理。
4、熟悉Oracle、MySQL等SQL,以及MongoDB等NoSQL開發(fā)。
- 特別是MySQL,相關(guān)的索引優(yōu)化、SQL查詢優(yōu)化、慢的事務(wù)優(yōu)化等,以及MySQL的分庫分表等也需要掌握。
- MongoDB等典型的NoSQL大數(shù)據(jù)場(chǎng)景設(shè)計(jì)
5、CDN,以及分布式緩存系統(tǒng)Redis或 Memcached的設(shè)計(jì)和研發(fā)
CDN與分布式緩存的設(shè)計(jì)原理其實(shí)是一致的,重點(diǎn)你需要掌握兩者之間的區(qū)別和使用場(chǎng)景。
6、熟悉底層中間件等分布式技術(shù)
分布式技術(shù)涉及范圍比較廣,例如相關(guān)的消息中間件就會(huì)涉及到3個(gè)以上,為什么要選擇Kafka或者
RabbitMQ,選擇和比較需要掌握。除此之外,很多內(nèi)部系統(tǒng)還會(huì)涉及到JBPM工作流中間件等。
7、精通shell編程,熟練應(yīng)用awk、sed、grep、strace、tcudump、gdb等常用命令。
8、有大型分布式、高并發(fā)、高負(fù)載(大數(shù)據(jù)量)、高可用性系統(tǒng)設(shè)計(jì)開發(fā)經(jīng)驗(yàn)。
大型分布式就會(huì)設(shè)計(jì)到高并發(fā)解決方案,以下有相關(guān)的知識(shí)。
9、對(duì)配置管理和敏捷研發(fā)模式有所了解。
- jekins、nexus、git等
- 敏捷開發(fā)、極限編程等。
10、熟悉常見的一些解決方案及其原理
單點(diǎn)登錄、分布式緩存、SOA、全文檢索、消息中間件,負(fù)載均衡、連接池、流計(jì)算等。
11、能大概知道市面上主流技術(shù)的特點(diǎn)及業(yè)務(wù)瓶頸
例如秒殺系統(tǒng)等如何設(shè)計(jì)。
總結(jié)
不管選擇什么樣的路徑,都離不開提前規(guī)劃、充分準(zhǔn)備,機(jī)會(huì)總會(huì)留給有準(zhǔn)備的人。程序員是個(gè)相對(duì)公平的職業(yè),你若盛開,蝴蝶自來,薪酬也會(huì)隨能力得到明顯增幅,那么大家在應(yīng)對(duì)中年危機(jī)時(shí)更加游刃有余了。
往期精彩文章
《 兩個(gè)月拿到N個(gè)offer,看看我是如何做到的 》