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