- 程序員必讀之軟件架構(gòu)
- (英)Simon Brown
- 1718字
- 2020-05-06 16:48:08
序
信息技術(shù)行業(yè)不是大步前行,就是劇烈動(dòng)蕩。一方面,我們奮力前行,重新發(fā)明軟件構(gòu)建方式,時(shí)時(shí)處處精益求精。而另一方面,我們不斷遺忘過(guò)去的好處,軟件開(kāi)發(fā)團(tuán)隊(duì)常意想不到地把事情搞砸。
軟件架構(gòu)在一個(gè)成功的軟件交付中扮演關(guān)鍵角色,然而令人沮喪的是,很多團(tuán)隊(duì)都忽視了這一點(diǎn)。即使在最敏捷的團(tuán)隊(duì)中,軟件構(gòu)架這一角色也都是必需的,不管是由一個(gè)人還是整個(gè)團(tuán)隊(duì)共同扮演,但要尋求到預(yù)先和演化兩種構(gòu)架理念的平衡,往往還只是人們美好的意愿而并沒(méi)有變?yōu)楝F(xiàn)實(shí)。
軟件架構(gòu)的壞名聲
當(dāng)我介紹自己是軟件架構(gòu)師時(shí),對(duì)方通常會(huì)有兩種反應(yīng)。要么覺(jué)得這非常酷,想了解更多;要么就是露出不屑的神情,意思是說(shuō)“我想跟實(shí)際開(kāi)發(fā)軟件的人聊,而不是跟只會(huì)畫(huà)框框線線的指揮家聊”。軟件架構(gòu)的角色在IT行業(yè)中名聲很差,出現(xiàn)這種想法自然不難理解。
“軟件架構(gòu)”給人的印象通常是架構(gòu)師閉門(mén)造車(chē),提前做好大型預(yù)先設(shè)計(jì),然后好像接力賽跑時(shí)傳遞交接棒一樣,把龐大的UML(Unified Modeling Language,統(tǒng)一建模語(yǔ)言)模型或200頁(yè)Word文檔丟給毫不知情的開(kāi)發(fā)團(tuán)隊(duì)。當(dāng)然,這是假設(shè)架構(gòu)師實(shí)際參與了軟件設(shè)計(jì)。似乎很多人都認(rèn)為,只要做一個(gè)PPT,而且幻燈片中有一頁(yè)出現(xiàn)了“企業(yè)服務(wù)總線”框線圖,就算是做完了軟件設(shè)計(jì)。哦,千萬(wàn)別忘了,這個(gè)PPT里毫無(wú)疑問(wèn)也少不了對(duì)ROI(Return on Investment,投資回報(bào))和TCO(Total Cost of Ownership,總體擁有成本)的陳述。
很多組織對(duì)軟件開(kāi)發(fā)普遍都有一個(gè)有意思的看法。比如,他們看到了離岸外包可以節(jié)省成本,因而把軟件開(kāi)發(fā)流程中的編碼工作也看作一種可以買(mǎi)賣(mài)的商品。其結(jié)果往往是本地開(kāi)發(fā)者被推向所謂“高價(jià)值”的軟件架構(gòu)職位,而編碼則交由其他人完成。多數(shù)情況下這只會(huì)讓軟件架構(gòu)和開(kāi)發(fā)更加脫節(jié),還常常讓人像趕鴨子上架一樣不得不去承擔(dān)架構(gòu)工作。這些組織也常傾向于把架構(gòu)師看作一種職位級(jí)別而非工作角色。
敏捷愿景
“敏捷”已經(jīng)出現(xiàn)了差不多十年,但它仍是“外來(lái)的時(shí)髦小子”。很多軟件團(tuán)隊(duì)都有“實(shí)現(xiàn)敏捷”的愿景。毫無(wú)疑問(wèn),敏捷有很多好處,人們都想讓你相信它是靈丹妙藥,但事實(shí)并非如此。IT行業(yè)的每件事,都伴隨著鋪天蓋地的宣傳和天花亂墜的炒作。如今,開(kāi)始一個(gè)新的軟件項(xiàng)目,總能聽(tīng)到自組織的團(tuán)隊(duì)、自動(dòng)化驗(yàn)收測(cè)試、持續(xù)交付、回顧、看板、浮現(xiàn)式設(shè)計(jì),還有一大堆你可能都沒(méi)聽(tīng)過(guò)的新名詞。這很奇葩,但團(tuán)隊(duì)往往急于趕時(shí)髦,就將原來(lái)的東西不分好壞一起丟掉。“非功能需求”聽(tīng)起來(lái)雖然不酷,但這并不是你能忽視它們的理由。
這堆老古董軟件架構(gòu)的東西都是什么?很多軟件團(tuán)隊(duì)似乎認(rèn)為他們不需要軟件架構(gòu)師,張口閉口都是“自組織團(tuán)隊(duì)”、“YAGNI”(You Aren't Going to Need It,你不會(huì)需要它)、“演化架構(gòu)”和“最后責(zé)任時(shí)刻”這些詞。如果他們確實(shí)需要架構(gòu)師,也許會(huì)去找個(gè)“敏捷架構(gòu)師”。我不完全確定這些詞都是什么意思,但我猜它有點(diǎn)像用便利貼替代UML,或用TDD(Test-Driven Development,測(cè)試驅(qū)動(dòng)開(kāi)發(fā))替代畫(huà)圖。也就是說(shuō),假設(shè)他們已經(jīng)不是只使用高層次系統(tǒng)隱喻的概念,而且也不把“浮現(xiàn)式設(shè)計(jì)”作為盲目樂(lè)觀的借口。
那么你覺(jué)得自己是架構(gòu)師嗎
看起來(lái)這個(gè)行業(yè)里有很多人自稱(chēng)是軟件架構(gòu)師,而他們實(shí)際上完全在做別的事。我能夠原諒那些在大企業(yè)里實(shí)踐軟件架構(gòu),卻誤以為自己是“企業(yè)架構(gòu)師”的人。總之我們這行的術(shù)語(yǔ)就是經(jīng)常把人搞糊涂。
但那些夸大自己在軟件團(tuán)隊(duì)里作用的人又如何呢?這些不負(fù)責(zé)任的架構(gòu)師通常擔(dān)任技術(shù)領(lǐng)導(dǎo),卻連基本能力都不夠格。我見(jiàn)過(guò)一些面向公眾的網(wǎng)站在進(jìn)入用戶驗(yàn)收測(cè)試環(huán)境時(shí),還有一堆安全問(wèn)題,沒(méi)有基本性能測(cè)試,常用功能也有問(wèn)題,死鏈,并且完全沒(méi)有文檔。這只是我能看到的軟件外在的問(wèn)題,天知道代碼會(huì)是什么樣子!如果你承擔(dān)了軟件架構(gòu)的角色,最后卻交付這樣的東西,你做得就不對(duì)。這不是什么軟件架構(gòu),這也只能算是盲目樂(lè)觀。
失意的架構(gòu)師
必須承認(rèn),不是所有軟件團(tuán)隊(duì)都像這樣,但我前面講的也不是空穴來(lái)風(fēng)。糟糕的是很多組織確實(shí)就是這樣干的,因此軟件架構(gòu)有這樣的名聲并不奇怪。
想在這個(gè)行業(yè)里有所作為,就需要克制對(duì)新鮮玩意的迷戀,開(kāi)始問(wèn)一些問(wèn)題。敏捷需要架構(gòu)嗎,或者架構(gòu)真的需要敏捷嗎?相比近些年學(xué)到的東西,我們是不是忘掉了更多好的軟件設(shè)計(jì)方法?對(duì)于我們現(xiàn)在構(gòu)建的軟件系統(tǒng),只有盲目樂(lè)觀就夠了嗎?如果我們不是從培養(yǎng)未來(lái)軟件架構(gòu)師的角度考慮,這些問(wèn)題還有意義嗎?我們要如何從失意走向平和?
- 物聯(lián)網(wǎng)射頻識(shí)別(RFID)技術(shù)與應(yīng)用
- Spring源碼深度解析
- DevOps原理與實(shí)踐
- MATLAB 2018從入門(mén)到精通
- 軟件工程理論與應(yīng)用
- 手機(jī)軟件測(cè)試最佳實(shí)踐
- 敏捷軟件開(kāi)發(fā):用戶故事實(shí)戰(zhàn)
- Python跨平臺(tái)應(yīng)用軟件開(kāi)發(fā)實(shí)戰(zhàn)
- Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)及實(shí)踐
- Visual Basic編程寶典(十年典藏版)
- 現(xiàn)代交換技術(shù)(第3版)
- 構(gòu)建移動(dòng)網(wǎng)站與APP:ionic移動(dòng)開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn) (跨平臺(tái)移動(dòng)開(kāi)發(fā)叢書(shū))
- Apache Cordova移動(dòng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)
- Spring Boot趣味實(shí)戰(zhàn)課
- 數(shù)據(jù)壓縮入門(mén)