“軟件架構(gòu)師”這個名詞也不知是什么時候進(jìn)入我的腦中的,不過一直就很疑惑,總覺得和軟件的Team Leader之間有些糾纏不清。不過以我的觀點(diǎn)來看,軟件架構(gòu)師除了沒有行政上的職責(zé)以外,與Team Leader也并無二致了,也就是一個軟件團(tuán)隊的核心設(shè)計者和決策人。作為一個軟件團(tuán)隊的領(lǐng)頭人,架構(gòu)師應(yīng)該具備哪些能力、素質(zhì)和經(jīng)驗?zāi)兀?/p>
我可以把一個軟件研發(fā)工作者的從業(yè)經(jīng)歷大致劃分為3個階段
第一階段是新手期
這個階段的典型特征是容易被新技術(shù)的華麗外表所迷惑。當(dāng)在網(wǎng)上看到一種新技術(shù)的介紹或者心得,立即產(chǎn)生了大量腎上腺素的分泌,干什么都想用一用,如果這時有人跟他說你的這項工作用這個不合適的話,要是性子急的人估計就直接開始罵娘了,性子緩些的也會想盡理由說服你使用這個新東西,實在沒辦法的話,吃不下東西睡不著覺也想另找個地方用一下。
新手時期的程序員對需求和應(yīng)用環(huán)境的掌控能力還不強(qiáng),但卻往往信心爆棚地認(rèn)為自己寫的代碼有多么優(yōu)雅高效。當(dāng)問題出現(xiàn)時,大多數(shù)人的反應(yīng)就是:“怎么可能!在我的機(jī)器上運(yùn)行的好好的!”。不管看了多少書,學(xué)習(xí)了多么高效的算法,實際的工作中需求和環(huán)境始終是變化萬端的。其實我也很不明白為什么那么多的技術(shù)類書籍往往都帶有或多或少的炒作成份,往往夸大某方面的優(yōu)勢,而對缺點(diǎn)卻往往一帶而過,同時,相對思想算法講解、技術(shù)介紹類的書籍,針對具體項目研發(fā)實例進(jìn)行技術(shù)選型講解的書真的少之又少,或許這也從側(cè)面反應(yīng)了寫書人很多,真正做研究的卻很少吧。
新手期程序員的不成熟還體現(xiàn)在團(tuán)隊表現(xiàn)上,當(dāng)一個問題提交給新手,當(dāng)跟蹤別人的代碼段時,經(jīng)常會丟手不管,還理直氣壯地說“我這塊沒問題”,殊不知問題都沒有查清楚,你又怎知不是你的問題呢?在團(tuán)隊研發(fā)中,我一向堅持入口點(diǎn)解決問題的原則,只要問題的入口點(diǎn)在你這里,就必須全程跟蹤查到底,問題查出來了,再通知相關(guān)人員進(jìn)行程序修正。團(tuán)隊的程序員雖然分工不同,但每個人必須對他人的程序和算法有清楚的認(rèn)識和了解,因為大家是在同一個環(huán)境下工作,雖然代碼有分工,可是操縱的卻是相同的設(shè)備和資源。獨(dú)善其身在團(tuán)隊開發(fā)中是最要不得的想法。
第二階段是中級程序員階段
這個階段的程序員對技術(shù)、和工具的選擇已經(jīng)審慎了很多,可以根據(jù)具體的需求來選擇需要采用的技術(shù),可以寫出詳細(xì)的需求調(diào)研報告并提出設(shè)計方案,優(yōu)點(diǎn)、缺點(diǎn)分析得清晰明了。在應(yīng)用層面也有較強(qiáng)的全局理解力,在團(tuán)隊中也具有相當(dāng)?shù)膮f(xié)作能力,因此具備較強(qiáng)的解決問題的能力。
中期的程序員雖然在應(yīng)用層面上已經(jīng)相當(dāng)嚴(yán)謹(jǐn),但在系統(tǒng)層面的掌控力卻并不強(qiáng)。應(yīng)用系統(tǒng)也并非獨(dú)善其身,她和網(wǎng)絡(luò)環(huán)境、使用方法、硬件環(huán)境、操作系統(tǒng)、地點(diǎn)、時間等等諸多因素有著千絲萬縷的聯(lián)系。在少量用戶的中底端研發(fā)中,如越來越多的呈幾何級數(shù)增長的信息管理系統(tǒng)中,系統(tǒng)掌控力并非必須的能力。但在一個高端高并發(fā)量,被大量應(yīng)用于不同環(huán)境的軟件產(chǎn)品,系統(tǒng)掌控力就是不可或缺的能力。這種能力我認(rèn)為大部分取決于知識面,工作越多,經(jīng)驗越豐富,就越能對不同的應(yīng)用環(huán)境有著敏銳地感覺和判斷。
大多數(shù)中階段程序員限于行業(yè),對語言的依賴還是很強(qiáng),比如搞信息系統(tǒng)的和搞單片機(jī)的、搞網(wǎng)絡(luò)、路由器交換機(jī)的,由于系統(tǒng)層面不同,專精和對語言的理解都不甚相同。
第三階段是高級程序員/分析師/架構(gòu)師階段
進(jìn)入這個階段的前提是多年的工作經(jīng)驗,廣闊的知識面和對系統(tǒng)底層到高層的全面認(rèn)識,已經(jīng)使其進(jìn)入了無語言無工具的層次。也就是能任何清楚地感知每種編程語言的優(yōu)劣、使用范圍、編碼禁忌,對一個大型工程能有最全面的了解,在選擇語言和確定技術(shù)方案的時候不會被自己對語言或技術(shù)工具的偏好(或者根本已經(jīng)無所偏好)所影響,真正明白了其實別管是神馬語言、神馬技術(shù),歸根到底咱們的對象還不是CPU、內(nèi)存、硬盤和網(wǎng)絡(luò),該做的事情一件都不能少,所謂的技術(shù)框架是對初級程序員用的,真正高級了不研究個清楚透徹都不敢讓你進(jìn)來。即使對同一種語言,在不同的操作系統(tǒng)中,如Visual C++和Unix C、AIX XLC、GNU G++等等的區(qū)別,以及不同版本之間的區(qū)別也了如指掌。這個階段很難達(dá)到是由于對操作系統(tǒng)層面的清晰了解,相信一個初級程序員一路走來,大部分工作都是在Team Leader的規(guī)范和引導(dǎo)下完成的,每人都必須做好自己的工作,雖然在應(yīng)用層面必須顧全大局,但系統(tǒng)層面的問題相對就難以接觸了。如果不是對技術(shù)有著強(qiáng)烈的渴求和一定的綜合能力,系統(tǒng)層面的工作經(jīng)驗將很難與你有緣。這就好比一個當(dāng)外科醫(yī)生的,其實做手術(shù)并不像很多人想象中那樣難,一般看個幾次,基本上也就差不多了,如果得到機(jī)會實際操作一下,不單是可以積累大量的經(jīng)驗,自信心方面的收獲也是無法估量的。但是,動手術(shù)責(zé)任重大,機(jī)會不是人人都有的。技術(shù)工作者其實還是很幸福的,畢竟工作經(jīng)驗的取得相對于當(dāng)醫(yī)生還是容易的多。
高級階段一定需要有團(tuán)隊的開發(fā)和管理經(jīng)驗,一個軟件團(tuán)隊好比一個樂隊,每個人對曲目的理解都不同,雖然司職不同的樂器,沒有指揮家也會弄得一團(tuán)糟。軟件團(tuán)隊的每個人對語言、業(yè)務(wù)、能力的理解都不一樣,交流方式也有別,同時他們操作著相同的系統(tǒng)和資源,如果Team Leader不做好規(guī)劃,后果肯定可想而知。豐富的經(jīng)驗和敏銳的觸覺神經(jīng)足以判斷出團(tuán)隊成員的編碼風(fēng)格和技術(shù)選擇偏好,能以足夠的經(jīng)驗和理由說服其拋棄自己的感情偏好,從而很好地完成自己的工作。這種能力有點(diǎn)類似于行政的管理,但實際上卻是有明顯的不同的,這種管理基于的是實際的豐富經(jīng)驗和充足的理由,絕對不可以將行政管理中的排隊觀念帶入,如果2個人意見相左,就必須爭論,爭不下去了回家想清楚理由再爭,甚至直到時間來證明一切,不能說這次你聽我的,下次我聽你的,技術(shù)工作是絕對的,最好的、最適合需求的方案永遠(yuǎn)只有一個,如果你覺得“都可以”,只能說對行業(yè)和需求還沒有吃透。
高級程序員是經(jīng)常會對需求說“No”的人,對行業(yè)的深入認(rèn)識和對系統(tǒng)及應(yīng)用全局的把握能力使他具有真正指導(dǎo)用戶的能力,規(guī)范用戶的工作、思想并用計算機(jī)這個工具真正對行業(yè)產(chǎn)生引領(lǐng)作用。高級架構(gòu)師能深入認(rèn)識管理和技術(shù)的關(guān)系,管理上出現(xiàn)的問題一定要在管理上解決,工作經(jīng)驗不多的用戶或者程序員往往會把管理上產(chǎn)生的問題拋給軟件系統(tǒng),導(dǎo)致系統(tǒng)越來越復(fù)雜,維護(hù)成本迅速增長,而管理上的問題卻依然存在。但有一個現(xiàn)狀是,往往用戶提需求都直接提給負(fù)責(zé)程序的程序員,小公司估計直接就和程序員聯(lián)系了,大點(diǎn)的也由一個其實并不怎么懂技術(shù)的所謂“客戶經(jīng)理”協(xié)調(diào)轉(zhuǎn)發(fā),而并非經(jīng)過設(shè)計師和架構(gòu)師的同意,因為他們可能現(xiàn)在已經(jīng)在研發(fā)別的項目了。那么用戶的需求是否合理,是否符合當(dāng)初設(shè)計的初衷,往往初級的程序員并不知曉或有不同理解和偏好。雖然這也是實際情況所限,很難做的更好,但這也造成了很多系統(tǒng)的持續(xù)發(fā)展力很低,而許多用戶也處于信息不對等的弱勢地位,也只好將就算了。
最后,技術(shù)和社會是緊密聯(lián)系在一起的。社會的進(jìn)步發(fā)展決定了需求和技術(shù)的發(fā)展,一個對技術(shù)發(fā)展有著敏銳感覺的架構(gòu)師必須對社會有著深刻的認(rèn)識。一個良好的團(tuán)隊必須有新老交替才能不斷進(jìn)步,老人要舍得帶新人。“要讓一部分人先富起來,然后先富的帶動后富的,最終達(dá)到共同富裕。”這是我們上學(xué)時學(xué)到的話吧,不過要是先富的盡想著向前看,根本沒把后富的放在眼里,那這個團(tuán)隊也好、社會也好,也就沒多大的持續(xù)發(fā)展力了。其實我倒是認(rèn)為現(xiàn)在真正的大富豪還是有不少知民間疾苦的,頂層的和基層的都還能了解屁民們的生活,不了解的是中間層,他們整天生活在富庶小康的溫床,經(jīng)常會提及一些好高騖遠(yuǎn)、不切實際的想法,而對那些為底層人民謀福利的事情嗤之以鼻,甚至諷刺為“用先進(jìn)的技術(shù)做愚蠢的事情”,目的僅僅是為了嘩眾取寵和彰顯自己的遠(yuǎn)見卓識。
先寫到這里了,其實我自己也在為成為一個真正的架構(gòu)師而奮斗,一家之言,難免有所偏差,不過還是那句話,“我們一直在努力”。
-
架構(gòu)師
+關(guān)注
關(guān)注
0文章
47瀏覽量
4772
發(fā)布評論請先 登錄
如何釋放異構(gòu)計算的潛能?Imagination與Baya Systems的系統(tǒng)架構(gòu)實踐啟示

Arm架構(gòu)何以成為現(xiàn)代計算的基礎(chǔ)
解鎖未來汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析
如何成為一名合格的KaihongOS北向應(yīng)用開發(fā)工程師
如何成為一名嵌入式軟件工程師?
基于SCA的軟件無線電系統(tǒng)的概念與架構(gòu)

如何成為嵌入式開發(fā)工程師?
一個優(yōu)秀的嵌入式軟件“架構(gòu)師” — AWFlow

英特爾前Xeon首席架構(gòu)師加盟高通
如何成為一名合格的北向應(yīng)用開發(fā)工程師
架構(gòu)建模與優(yōu)化咨詢和實施服務(wù)

請問PCM3070的pin18(REF)的電壓是如何產(chǎn)生的,3070內(nèi)部的電源架構(gòu)是怎樣的?
架構(gòu)與設(shè)計 常見微服務(wù)分層架構(gòu)的區(qū)別和落地實踐

一位架構(gòu)師的自述:在尚未踏入的世界成為你自己

評論