- 程序員必讀之軟件架構(gòu)
- (英)Simon Brown
- 1451字
- 2020-05-06 16:48:12
第16章 小心鴻溝
我們這個行業(yè)對軟件架構(gòu)的角色真是又愛又恨,因為架構(gòu)師“閉門造車”的獨裁,不參加構(gòu)建可用軟件的任何實際工作,很多組織干脆取消了它。這種壞名聲損害了IT行業(yè),阻撓了項目的成功,需要改變。
開發(fā)者關(guān)注底層細(xì)節(jié)
如果你正在一個軟件開發(fā)項目中工作,看看團(tuán)隊其他人吧。團(tuán)隊的結(jié)構(gòu)是怎樣的?每個人的角色和責(zé)任都定義好了嗎?誰負(fù)責(zé)大局?性能、可伸縮性、可用性、安全性等由誰負(fù)責(zé)?
我們都夢想在這樣的團(tuán)隊中工作:所有人都經(jīng)驗豐富,從代碼到架構(gòu),對軟件考慮得面面俱到。然而現(xiàn)實并非如此。我合作過的大多數(shù)團(tuán)隊,成員經(jīng)驗參差不齊,有些甚至剛接觸IT這一行,另一些則“接觸過幾次”。作為軟件開發(fā)者,代碼是我們主要的關(guān)注點,但如果你的團(tuán)隊只關(guān)注底層細(xì)節(jié),會發(fā)生什么?想象有一個用上了所有最新編程語言特性的代碼庫,代碼很好地解耦,測試也完全自動化。這個代碼庫的結(jié)構(gòu)和格式都堪稱完美,但如果系統(tǒng)在部署到生產(chǎn)環(huán)境時有可伸縮性的問題,一切就毫無用處。
閉門造車的獨裁架構(gòu)師
軟件架構(gòu)角色不同于開發(fā)者角色。有些人把它看作開發(fā)者的上級,有些人則看作同級。不管你怎么看,架構(gòu)師都要負(fù)責(zé)“大局”。很多團(tuán)隊了解軟件架構(gòu)的重要性,會找來一個有著受人尊敬的“架構(gòu)師”頭銜的人,卻只是把他們硬塞在凌駕于團(tuán)隊的位置上。發(fā)生任何事,都會在架構(gòu)師和原本要一起工作的團(tuán)隊之間造成巨大的鴻溝,讓架構(gòu)師立刻被孤立起來。
拉近距離
可惜,很多軟件團(tuán)隊里,在開發(fā)團(tuán)隊和架構(gòu)師之間都有這個不必要的鴻溝,特別是當(dāng)架構(gòu)師被看作是只會下命令的獨裁者。這導(dǎo)致了幾個問題:
? 不管架構(gòu)師的決策是否正確,開發(fā)團(tuán)隊都不尊重他;
? 開發(fā)團(tuán)隊變得缺乏積極性;
? 重要決策因為職責(zé)不明而無人負(fù)責(zé);
? 因為沒有人負(fù)責(zé)大局,項目最終苦不堪言。
幸好,有一些簡單的方法能從兩方面解決這個問題,畢竟,軟件開發(fā)是一個團(tuán)隊行為。
如果你是軟件架構(gòu)師
? 包容與合作:讓開發(fā)團(tuán)隊參與軟件架構(gòu)的過程,幫助他們了解大局,認(rèn)同你所做的決策。確保每個人都明白決策背后的原理和目的,會對此有所幫助。
? 動手:如果可能的話,參與一些項目的日常開發(fā)工作來提高你對架構(gòu)交付的理解。根據(jù)你的角色和團(tuán)隊規(guī)模,這可能會不太現(xiàn)實,那就通過其他方式來了解底層的進(jìn)展,比如協(xié)助設(shè)計和代碼評審。了解軟件的底層如何工作會讓你更透徹地了解開發(fā)團(tuán)隊對架構(gòu)(比如:他們是否對其視而不見)的感受,也會為你提供有價值的信息,可以用來更好地塑造/影響架構(gòu)。如果開發(fā)者感到痛苦,你也要感同身受。
如果你是軟件開發(fā)者
? 了解大局:花些時間去了解大局將幫助你了解做出架構(gòu)決策的語境,增強(qiáng)你對系統(tǒng)整體的理解。
? 挑戰(zhàn)架構(gòu)決策:有了對大局的了解,你現(xiàn)在就有機(jī)會挑戰(zhàn)眼前的架構(gòu)決策。架構(gòu)應(yīng)該是一個合作的過程,而不是由那些不參與項目日常工作的人說了算。如果你發(fā)現(xiàn)有些事情你不理解或不喜歡,挑戰(zhàn)它。
? 申請參與:很多項目都有一個負(fù)責(zé)架構(gòu)的架構(gòu)師,這個人通常會承擔(dān)所有的“架構(gòu)工作”。如果你是一個開發(fā)者,想要參與其中,提出來。你說不定幫了架構(gòu)師一個忙!
軟件架構(gòu)的合作方式
我這里已經(jīng)談到的內(nèi)容很容易適用于中小型項目團(tuán)隊,但對于大型團(tuán)隊,事情就變得復(fù)雜了。言外之意,大型團(tuán)隊意味著更大的項目,更大的項目意味著更大的“大局”。無論項目規(guī)模如何,確保大局不被忽視是成功的關(guān)鍵,而這個重任往往落在架構(gòu)師的肩上。減少開發(fā)者和架構(gòu)師之間不必要的鴻溝,可以讓大多數(shù)軟件團(tuán)隊從中獲益,雙方都可以努力減少這個鴻溝。開發(fā)者可以增加他們的架構(gòu)意識,而架構(gòu)師可以加強(qiáng)與團(tuán)隊其他人的合作。要確保你注意到了鴻溝,其他人也會跟隨。
- Spring源碼深度解析
- 大前端三劍客:Vue+React+Flutter
- OpenNI體感應(yīng)用開發(fā)實戰(zhàn)
- 掌握分布式跟蹤:微服務(wù)和復(fù)雜系統(tǒng)性能分析
- 嵌入式系統(tǒng)開發(fā)之道:菜鳥成長日志與項目經(jīng)理的私房菜
- Scala機(jī)器學(xué)習(xí)
- 軟件需求分析實戰(zhàn)
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- ODPS權(quán)威指南 阿里大數(shù)據(jù)平臺應(yīng)用開發(fā)實踐
- 數(shù)據(jù)科學(xué)導(dǎo)論:Python語言實現(xiàn)
- SQL Server應(yīng)用與開發(fā)范例寶典
- 大模型入門:技術(shù)原理與實戰(zhàn)應(yīng)用
- 基于Pro/Engineer Wildfire的直齒圓錐齒輪虛擬設(shè)計與制造
- 區(qū)塊鏈核心算法解析
- 現(xiàn)代軟件工程