不了解持續(xù)架構(gòu)會(huì)落伍么?
信息技術(shù)是一個(gè)日新月異的領(lǐng)域,從自身的發(fā)展到學(xué)科的教程,再到應(yīng)用場(chǎng)景的無(wú)處不在,導(dǎo)致每天甚至每時(shí)每刻都可能會(huì)有新的技術(shù)或者新的方法涌現(xiàn)出來(lái)。
“吾生也有涯,而知也無(wú)涯”,那么,對(duì)于一個(gè)工程師而言,不了解并學(xué)習(xí)持續(xù)架構(gòu)會(huì)落伍么?
不學(xué)習(xí)就會(huì)落伍
在前不久QCon2022( 由于疫情的原因延遲到今年舉辦)上有個(gè)分論壇主題是“工程師成長(zhǎng)實(shí)戰(zhàn)”,無(wú)論是宗剛老師的《三倍速成長(zhǎng)實(shí)現(xiàn)職場(chǎng)躍遷》,還是《Maven實(shí)戰(zhàn)》作者許曉斌的《技術(shù)領(lǐng)導(dǎo)力實(shí)戰(zhàn)》,或是老媽農(nóng)自己分享的《QCon:工程師成長(zhǎng)的金字塔思維?》,都涉及了一個(gè)同樣的主題——學(xué)習(xí)。
對(duì)一個(gè)IT從業(yè)者,尤其是一名軟件工程師,對(duì)自己而言,需要不斷成長(zhǎng)才能提高自己的適應(yīng)能力以及市場(chǎng)的競(jìng)爭(zhēng)力,才能坦然地面對(duì)所謂的“35歲危機(jī)”;對(duì)企業(yè)而言,只有不斷地成長(zhǎng)才能持續(xù)地為企業(yè)創(chuàng)造價(jià)值。不斷地成長(zhǎng),離不開(kāi)學(xué)習(xí),對(duì)于我們每個(gè)人而言,可能是終身學(xué)習(xí)。
那么如何學(xué)習(xí)呢?
在老碼農(nóng)自己的分享中,描述了關(guān)于學(xué)習(xí)的金字塔模型,將學(xué)習(xí)方式分為了三個(gè)方式:輸入、消化和輸出。盡管主動(dòng)學(xué)習(xí)優(yōu)于被動(dòng)學(xué)習(xí),很多的學(xué)習(xí)都是從輸入開(kāi)始,根源上都是從問(wèn)題開(kāi)始的,而閱讀是學(xué)習(xí)方式中非常重要的一種方法。在計(jì)算機(jī)領(lǐng)域的思維范式金字塔中,歷史思維是其中的一個(gè)支點(diǎn),“治學(xué)先治史”,所謂治史離不開(kāi)閱讀。
或許,每個(gè)人都知道學(xué)習(xí)的重要性,但面對(duì)浩如煙海的知識(shí),我們學(xué)習(xí)什么呢?
學(xué)習(xí)什么?
學(xué)習(xí)什么取決于學(xué)習(xí)的目的,不是為了學(xué)習(xí)而學(xué)習(xí),不能把手段當(dāng)目的。學(xué)習(xí)的目的是為了更好地解決問(wèn)題,分析并解決問(wèn)題才是價(jià)值所在,而個(gè)人的成長(zhǎng)可能只是學(xué)習(xí)目的的一部分或者副產(chǎn)品。
“知人者智,知己者明”,有時(shí)候,發(fā)現(xiàn)問(wèn)題比解決問(wèn)題更困難。提出一個(gè)好問(wèn)題是一件有挑戰(zhàn)的事情,因?yàn)榇鸢竿驮趩?wèn)題當(dāng)中。對(duì)于我們軟件工程師來(lái)說(shuō),有很多問(wèn)題都會(huì)落到軟件工程領(lǐng)域,例如軟件架構(gòu)。
如果把問(wèn)題比喻成病痛,那么解決問(wèn)題則類似于治病。在《扁鵲見(jiàn)蔡恒公》中有“君有疾在腠理,不治將恐深”,很多致命的問(wèn)題可能都是小問(wèn)題日積月累形成的。而治病的更高境界可能是“治未病”,即“防患未然”。然而,我們常見(jiàn)的情形往往是“曲突徙薪忘恩澤,焦頭爛額為上客”?;趥€(gè)人和環(huán)境的局限,我們的預(yù)見(jiàn)能力可能非常有限。
但是,我們可以通過(guò)學(xué)習(xí),參考業(yè)界對(duì)未來(lái)的遇見(jiàn),幫助我們提升洞察力,例如Gartner 對(duì)技術(shù)趨勢(shì)的預(yù)測(cè)。2023年, Gartner 對(duì)十大戰(zhàn)略技術(shù)趨勢(shì)的預(yù)測(cè)如下:
- 數(shù)字免疫系統(tǒng)
- 應(yīng)用可觀測(cè)性
- AI信任、風(fēng)險(xiǎn)和安全管理
- 行業(yè)云平臺(tái)
- 平臺(tái)工程
- 無(wú)線價(jià)值實(shí)現(xiàn)
- 超級(jí)應(yīng)用
- 自適應(yīng)人工智能
- 元宇宙
- 可持續(xù)技術(shù)
這十大技術(shù)趨勢(shì)劃分為優(yōu)化、開(kāi)拓、擴(kuò)展三大主題,其中,優(yōu)化包括:數(shù)字免疫系統(tǒng)、應(yīng)用可觀測(cè)性、AI信任、風(fēng)險(xiǎn)和安全管理;開(kāi)拓包括:元宇宙、超級(jí)應(yīng)用、自適應(yīng)AI;擴(kuò)展包括:行業(yè)云平臺(tái)、平臺(tái)工程、無(wú)線價(jià)值實(shí)現(xiàn)。而可持續(xù)性技術(shù)貫穿2023年的所有戰(zhàn)略技術(shù)趨勢(shì)。那么,什么樣的可持續(xù)性技術(shù)會(huì)貫穿所有的領(lǐng)域呢?聚焦在軟件工程的話,恐怕應(yīng)該是持續(xù)架構(gòu)了。
從架構(gòu)到持續(xù)架構(gòu)
軟件架構(gòu)是客觀存在的, 不論你是否主觀情愿,它都在那里。然而,架構(gòu)一詞源自隱喻(關(guān)于隱喻的學(xué)習(xí)與思考?),所以對(duì)軟件架構(gòu)的范圍,人們往往有著不同的看法。例如,宏觀的系統(tǒng)結(jié)構(gòu),把架構(gòu)認(rèn)為是一個(gè)軟件系統(tǒng)的高級(jí)抽象,由一組計(jì)算組件和描述這些組件之間交互的連接器組成;那些對(duì)系統(tǒng)及其涉眾有重大影響的決策;作為系統(tǒng)和開(kāi)發(fā)項(xiàng)目的藍(lán)圖等等。
老碼農(nóng)喜歡用時(shí)空觀來(lái)分析問(wèn)題,在《如何進(jìn)入一個(gè)新領(lǐng)域?》以及《面向全棧的技術(shù)管理?》有過(guò)描述。一般地,對(duì)于軟件架構(gòu)而言,從空間視角來(lái)看是軟件系統(tǒng)的體系架構(gòu),例如架構(gòu)模式(?軟件架構(gòu)的10個(gè)常見(jiàn)模式?)等;從時(shí)間視角來(lái)看是架構(gòu)決策和實(shí)現(xiàn)流程。實(shí)際上,軟件架構(gòu)是時(shí)空視角的結(jié)合與統(tǒng)一,也就是說(shuō),在一般意義上,軟件架構(gòu)是指軟件系統(tǒng)的基本結(jié)構(gòu)以及創(chuàng)建這種結(jié)構(gòu)和系統(tǒng)的規(guī)程。
令人困擾的事,基于時(shí)間的單向性和動(dòng)態(tài)性,與時(shí)間相關(guān)的軟件流程乃至所謂的“最佳實(shí)踐”有時(shí)候往往又會(huì)成為生產(chǎn)力的約束。老碼農(nóng)個(gè)人認(rèn)為,持續(xù)架構(gòu)以及可持續(xù)性技術(shù)都是對(duì)時(shí)間視角架構(gòu)問(wèn)題的積極探索和實(shí)踐,并且涵蓋了空間視角架構(gòu)的大多數(shù)方法。
什么是持續(xù)架構(gòu)呢?這需要從明確架構(gòu)活動(dòng)開(kāi)始——
軟件架構(gòu)是由業(yè)務(wù)目標(biāo)所驅(qū)動(dòng),然而,在架構(gòu)活動(dòng)中,對(duì)業(yè)務(wù)及其需求的深入理解并不常見(jiàn),進(jìn)而被認(rèn)為為業(yè)務(wù)增值,而且太慢了。于是,很多人把敏捷作為救命稻草,認(rèn)為“最好的架構(gòu),需求和設(shè)計(jì)來(lái)自于自組織團(tuán)隊(duì)?!眻F(tuán)隊(duì)往往在專注于更快的交付功能,代價(jià)就是不斷推遲技術(shù)債務(wù)和技術(shù)特性。于是,一些敏捷途徑和方法論已經(jīng)開(kāi)始包含正式的架構(gòu)活動(dòng)與步驟。
借鑒敏捷原則的定義方式,滿足以下六個(gè)簡(jiǎn)單準(zhǔn)則的就可以被稱作持續(xù)架構(gòu):
- 準(zhǔn)則1:用產(chǎn)品思維,而非項(xiàng)目思維來(lái)設(shè)計(jì)架構(gòu)。從產(chǎn)品的角度來(lái)構(gòu)建比單純?cè)O(shè)計(jì)點(diǎn)解決方案更有效率,更容易讓團(tuán)隊(duì)專注于客戶的需求。
- 準(zhǔn)則2:聚焦質(zhì)量屬性,而不僅僅是功能性需求。質(zhì)量屬性需求驅(qū)動(dòng)著架構(gòu)。
- 準(zhǔn)則3:在絕對(duì)必要的時(shí)候再做設(shè)計(jì)決策。設(shè)計(jì)架構(gòu)取決于事實(shí),而不是猜測(cè)。設(shè)計(jì)和實(shí)施可能永遠(yuǎn)都用不到的功能是無(wú)意義的,是對(duì)時(shí)間和資源的浪費(fèi)。
- 準(zhǔn)則4:利用“微小的力量”,面向變化來(lái)做架構(gòu)設(shè)計(jì)。大的,單體的,緊耦合的組件很難改變。相反,應(yīng)該使用小且松散耦合的軟件元素。
- 準(zhǔn)則5:為構(gòu)建,測(cè)試,部署和運(yùn)營(yíng)來(lái)設(shè)計(jì)架構(gòu)。大多數(shù)架構(gòu)方法只關(guān)注軟件構(gòu)建活動(dòng),但我們認(rèn)為架構(gòu)師也應(yīng)該關(guān)注測(cè)試,部署和運(yùn)營(yíng),以支持持續(xù)交付。
- 準(zhǔn)則6:在完成系統(tǒng)設(shè)計(jì)后,開(kāi)始為團(tuán)隊(duì)做組織建模。團(tuán)隊(duì)的組建方式驅(qū)動(dòng)著系統(tǒng)的架構(gòu)和設(shè)計(jì)。
持續(xù)架構(gòu)不是一種方法論,而是一組準(zhǔn)則,工具,技術(shù)和想法,可以被視為架構(gòu)師有效處理持續(xù)交付項(xiàng)目的工具集。
持續(xù)架構(gòu)的目標(biāo)是客戶需求和交付能力的平衡,以創(chuàng)建一個(gè)連貫、可持續(xù)的系統(tǒng),該系統(tǒng)不僅應(yīng)滿足其功能要求,還應(yīng)滿足相關(guān)的質(zhì)量屬性,例如安全性、性能、可伸縮性、彈性、數(shù)據(jù)等等。應(yīng)用持續(xù)架構(gòu)的方法如下圖所示