架構(gòu)師是所有程序員為之奮斗的目標(biāo),但是很多小伙伴對(duì)架構(gòu)師的理解只是定義在字面上,并不明白架構(gòu)師的真正意義,下面通過一個(gè)故事來說明:
Simon是一家外企軟件公司的總經(jīng)理,最近給一個(gè)問題愁壞了。項(xiàng)目一個(gè)接一個(gè)的下來,人手越來越緊張。Simon是個(gè)極限編程的粉絲,但也不得不批準(zhǔn)了一份又一份的加班申請(qǐng)。HR經(jīng)理把這個(gè)問題歸結(jié)到房價(jià)上,他的妙論是“怕失業(yè)了還不上房款,不敢跳槽”。
K項(xiàng)目組長Allen終于忍不住了,帶了一個(gè)只有一年工作經(jīng)驗(yàn)的小伙子要Simon面試,“很聰明!經(jīng)驗(yàn)少了點(diǎn)?!?/p>
Simon皺了皺眉毛,說:“你不知道這個(gè)職位最低要求是三年工作經(jīng)驗(yàn)嗎?”
Allen說:“這已經(jīng)是三個(gè)月里通過技術(shù)考試中最好的一個(gè)了,老大,試試吧?!盇llen是Simon多年的哥們,比較隨便。抵到面子上來,Simon只好讓Allen把小伙子帶進(jìn)來。
Simon的面試通常是三步曲:
問題一:你能說說畢業(yè)后的主要工作經(jīng)歷嗎?
問題二:再說說你在公司的地位?
問題三:你的發(fā)展目標(biāo)是什么?等回答后,比如說構(gòu)架師,他就跟著問:想象一下你當(dāng)構(gòu)架師的一天,說給我聽聽?
小伙子回答第一問題很快很清楚,一年工作當(dāng)然沒什么東西。Simon覺得小伙子挺聰明。所以在小伙子回答了第二個(gè)問題后,問了一個(gè)發(fā)散性的問題:“你剛才說你在公司里處于中等水平,那比你差的人為什么會(huì)比你差呢?”
這個(gè)問題是個(gè)陷阱。小伙子冒冒失失回答說:“我覺得他們每天工作是為工作而工作,工作沒有責(zé)任感?!?/p>
Simon點(diǎn)點(diǎn)頭說:“是嗎?那真是糟糕的員工。那你剛好比糟糕的員工好一點(diǎn)了?”
小伙子的臉一下子紅了,“我不是這個(gè)意思……”
“好了,那你說說比你好的人為什么比你強(qiáng)?”
“我覺得他非常努力,工作很多年了還在學(xué)習(xí)各種構(gòu)架,水平很高?!庇谑荢imon就問那最后一個(gè)問題。果然,小伙子回答的是要成為構(gòu)架師。大概70%的人想成為構(gòu)架師。但是構(gòu)架師是什么呢?
Simon問道:“那你為什么要成為構(gòu)架師呢?”
小伙子一愣,大概還沒有人這么置疑過?!澳昙o(jì)大了,不能老寫程序吧。”這個(gè)回答,讓Simon想起關(guān)于他對(duì)什么是老的定義:當(dāng)你希望做年輕人做的事情時(shí),你就還年輕;如果你希望做老年人做的事情,你就老了。這和你出生了多長時(shí)間是沒有關(guān)系的。
Simon接著問:“好吧,那你說說你成為構(gòu)架師以后,每天都會(huì)做什么?”
小伙子說:“我還沒想過,不過,我想應(yīng)該主要是需求分析,設(shè)計(jì)構(gòu)架吧……”這大概是現(xiàn)在年輕人的通病,年輕人很容易追逐一些自己也不清楚的目標(biāo)。
Simon問:“那設(shè)計(jì)構(gòu)架具體都做些什么呢?”
小伙子這次的回答是:“比如,選擇程序框架,決定用Spring或Struts等等?!?/p>
“哦,那我問你,你怎么說服別人是用Spring還是Struts呢?”
“如果我有經(jīng)驗(yàn),我會(huì)知道哪個(gè)更好……”
“是嗎,但關(guān)于Spring或Struts的知識(shí)任誰都可以很容易得到。如果別人不同意你的建議,你怎么說服他?如果同意你的建議,那你不過是作出了和別人一樣的認(rèn)識(shí),別人又憑什么認(rèn)可你呢?”
小伙子沒想過構(gòu)架師日子里還有一個(gè)說服人的工作,說:“我是構(gòu)架師,我應(yīng)該有權(quán)力做決定吧?”
Simon想起權(quán)力的三種層次,第一層,任命;第二層,專業(yè);第三層,品德。
Simon問:“如果在一個(gè)成熟的軟件企業(yè)里沒有你所想象的構(gòu)架師呢?或者說,構(gòu)架師這種職業(yè)已經(jīng)死亡或消失了呢?你會(huì)怎么定位你的職業(yè)?”
Simon畫了一個(gè)系統(tǒng)構(gòu)架,然后又給小伙子看了一段代碼?!澳且粋€(gè)更難懂?”Simon問。
小伙子指著代碼說:“代碼難懂。”
Simon的解釋是:“這就是為什么實(shí)際上所謂的構(gòu)架師不存在的原因。一個(gè)更簡(jiǎn)單的東西怎么會(huì)更有價(jià)值呢?每個(gè)人都能夠畫出這種構(gòu)架圖,但不是每個(gè)人都能寫出好的代碼。”
送走了小伙子,Simon有點(diǎn)難受。他有點(diǎn)喜歡這個(gè)小伙子,但是,這又是一個(gè)被愚蠢的教育和誤人子弟的技術(shù)雜志污染的家伙。Simon在自己的筆記本中加了一句話:中國程序員最愚蠢的認(rèn)識(shí)之三:我想當(dāng)構(gòu)架師。前面兩個(gè)赫然是:
35歲后寫不動(dòng)程序了;
我只要做Java(C++);
那么,你對(duì)“架構(gòu)師”這個(gè)職業(yè)又是如何理解的?接下來我們通過幾個(gè)問題來看看架構(gòu)師是如何理解“架構(gòu)師”這個(gè)職位的
1、架構(gòu)師應(yīng)該做什么工作?
1)負(fù)責(zé)/參與技術(shù)架構(gòu)設(shè)計(jì)、重構(gòu)、優(yōu)化,根據(jù)業(yè)務(wù)規(guī)劃及技術(shù)規(guī)劃制定應(yīng)用架構(gòu)方案;
2)負(fù)責(zé)/參與系統(tǒng)的架構(gòu)設(shè)計(jì)和系統(tǒng)設(shè)計(jì)、詳細(xì)設(shè)計(jì);
3)參與技術(shù)難題攻關(guān),進(jìn)行技術(shù)驗(yàn)證;
4)參與核心功能的架構(gòu)與代碼編寫,開發(fā)與維護(hù)系統(tǒng)公用核心模塊;
5)分析系統(tǒng)瓶頸,解決各種疑難雜癥,對(duì)系統(tǒng)進(jìn)行性能調(diào)優(yōu);
6)承擔(dān)核心功能代碼編寫,重點(diǎn)項(xiàng)目架構(gòu)設(shè)計(jì)開發(fā);
7)深入理解業(yè)務(wù)需求,分析和發(fā)現(xiàn)系統(tǒng)的優(yōu)化點(diǎn),負(fù)責(zé)推動(dòng)產(chǎn)品性能和架構(gòu)優(yōu)化;
8)新人指導(dǎo)、培訓(xùn),主導(dǎo)技術(shù)難題攻關(guān),提升團(tuán)隊(duì)整體技術(shù)水平;
9)負(fù)責(zé)公司的技術(shù)方向、技術(shù)規(guī)劃,為公司業(yè)務(wù)發(fā)展提供全面的技術(shù)保障;
10)研究決策公司技術(shù)發(fā)展路線,規(guī)劃公司產(chǎn)品的技術(shù)架構(gòu);
12)負(fù)責(zé)協(xié)調(diào)項(xiàng)目開發(fā)或?qū)嵤┑母鱾€(gè)環(huán)節(jié),把握項(xiàng)目的整體進(jìn)度;
13)指導(dǎo)建立完善、規(guī)范的軟件開發(fā)流程和高品質(zhì)的管理體系并參照?qǐng)?zhí)行。
2、有了架構(gòu)師公司會(huì)收益什么?
架構(gòu)師在整個(gè)軟件開發(fā)過程中都起著重要的作用,并隨著開發(fā)進(jìn)程的推進(jìn)而其職責(zé)或關(guān)注點(diǎn)不斷地變化,在需求階段,架構(gòu)師主要負(fù)責(zé)理解和管理非功能性系統(tǒng)需求,比如軟件的可維護(hù)性、性能、復(fù)用性、可靠性、有效性和可測(cè)試性等等,此外,架構(gòu)師還要經(jīng)常審查客戶及市場(chǎng)人員所提出的需求,確認(rèn)開發(fā)團(tuán)隊(duì)所提出的設(shè)計(jì);在需求越來越明確后,架構(gòu)師的關(guān)注點(diǎn)開始轉(zhuǎn)移到組織開發(fā)團(tuán)隊(duì)成員和開發(fā)過程定義上;在軟件設(shè)計(jì)階段,架構(gòu)師負(fù)責(zé)對(duì)整個(gè)軟件體系結(jié)構(gòu)、關(guān)鍵構(gòu)件、接口和開發(fā)政策的設(shè)計(jì);在編碼階段,架構(gòu)師則成為詳細(xì)設(shè)計(jì)者和代碼編寫者的顧問,并且經(jīng)常性地要舉行一些技術(shù)研討會(huì)、技術(shù)培訓(xùn)班等;隨著軟件開始測(cè)試、集成和交付,集成和測(cè)試支持將成為軟件架構(gòu)師的工作重點(diǎn);在軟件維護(hù)開始時(shí),架構(gòu)師就開始為下一版本的產(chǎn)品是否應(yīng)該增加新的功能模塊進(jìn)行決策。
3.、架構(gòu)師需要什么能力?
1)擁有10年以上從業(yè)經(jīng)驗(yàn),8年以上技術(shù)開發(fā)及團(tuán)隊(duì)管理經(jīng)驗(yàn),有大中型項(xiàng)目開發(fā)經(jīng)驗(yàn);
2)具備 4 年以上 C/S 或 B/S 體系結(jié)構(gòu)軟件產(chǎn)品開發(fā)及架構(gòu)和設(shè)計(jì)經(jīng)驗(yàn);
3)深厚的技術(shù)背景,熟悉多線程開發(fā)、服務(wù)器集群、負(fù)載均衡;
4)具備豐富的大中型開發(fā)項(xiàng)目的總體規(guī)劃、方案設(shè)計(jì)及技術(shù)隊(duì)伍管理經(jīng)驗(yàn);
5)對(duì)相關(guān)的技術(shù)標(biāo)準(zhǔn)有深刻的認(rèn)識(shí),對(duì)軟件工程標(biāo)準(zhǔn)規(guī)范有良好的把握;
6)具有面向?qū)ο蠓治?、設(shè)計(jì)、開發(fā)能力(OOA、OOD、OOP),精通 UML 和 ROSE,熟練使用 Rational Rose、PowerDesigner 等工具進(jìn)行設(shè)計(jì)開發(fā);
7)精通大型數(shù)據(jù)庫如 Oracle、Sql Server 等的開發(fā);
8)對(duì)計(jì)算機(jī)系統(tǒng)、網(wǎng)絡(luò)和安全、應(yīng)用系統(tǒng)架構(gòu)等有全面的認(rèn)識(shí),熟悉項(xiàng)目管理理論,并有實(shí)踐基礎(chǔ);
9)在應(yīng)用系統(tǒng)開發(fā)平臺(tái)和項(xiàng)目管理上有深厚的基礎(chǔ),有大中型應(yīng)用系統(tǒng)開發(fā)和實(shí)施的成功案例;
10)具備良好的客戶需求分析能力、業(yè)務(wù)和技術(shù)方案策劃和設(shè)計(jì)能力;思路清晰,具備很強(qiáng)的文檔撰寫能力和良好的語言表達(dá)能力;
11)精通多種軟件構(gòu)架、設(shè)計(jì)模式、很強(qiáng)的解決項(xiàng)目開發(fā)中技術(shù)難題的能力。
在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群。如果你想學(xué)習(xí)這套系統(tǒng)化的課程體系,你可以加群。交流學(xué)習(xí)群號(hào): 744642380, 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良
課程體系
源碼分析:

性能優(yōu)化:

微服務(wù)架構(gòu):

團(tuán)隊(duì)協(xié)作:

分布式專題:

電商專題:

并發(fā)編程專題:
