OOP教義的宗旨是你弦,讓軟件開發(fā)過程變得更容易考传。 —— 《Java語言程序設(shè)計(jì)》
平臺(tái)團(tuán)隊(duì)的主要目的應(yīng)該是其屏,讓使用平臺(tái)的人,減少認(rèn)知負(fù)擔(dān)措译。 —— 《AIDevOps》
軟件開發(fā)(Software Development)和軟件架構(gòu)(Software Architecture)的區(qū)別是很模糊的别凤。有的人會(huì)說,這兩個(gè)概念沒有區(qū)別领虹,架構(gòu)只是編程者開發(fā)過程的一個(gè)擴(kuò)展规哪;有的人則指出,這兩個(gè)概念之間有著巨大的鴻溝塌衰,如果想要跨越诉稍,那么必須堅(jiān)持概念抽象并且擺脫細(xì)節(jié)糾纏。
Well最疆,模糊的邊界會(huì)引起一個(gè)有趣的問題:我們?nèi)绾螐囊环N角色到另一種角色呢杯巨?
在軟件開發(fā)過程中,有一些關(guān)鍵的指標(biāo)用來區(qū)分“架構(gòu)”和“開發(fā)”: 量級的增長努酸、抽象層級的增長服爷、決策重要性的增長。軟件架構(gòu)获诈,是用更全局的視角仍源、更宏大的圖景來理解軟件整體是如何運(yùn)轉(zhuǎn)的√蛳眩或許镜会,這個(gè)角度能夠區(qū)分“架構(gòu)”和“開發(fā)”,但并不能回答“如何從一種角色到另一種角色”终抽,同理戳表,它也不能回答“你是不是一個(gè)軟件架構(gòu)師”桶至,“誰能做出好的軟件架構(gòu)”。
經(jīng)驗(yàn)非常重要匾旭,并且你必須看的很深镣屹,想的更多。
你不會(huì)因?yàn)槟炒温殬I(yè)的晉升就突然成為一名架構(gòu)師价涝。架構(gòu)師是一個(gè)角色女蜈,而不是一種等級。成為一名架構(gòu)師是一個(gè)漫長的色瘩、演變的過程伪窖,你必須在這個(gè)過程中積累足夠的經(jīng)驗(yàn)和自信。
當(dāng)觀察其他的架構(gòu)師時(shí)居兆,你會(huì)發(fā)現(xiàn)他們除了都有一把年紀(jì)之外覆山,還有許多不同的品質(zhì),比如:項(xiàng)目的參與度泥栖、影響力簇宽、領(lǐng)導(dǎo)力、以及特殊的職責(zé)任務(wù)吧享。廣義上魏割,大多數(shù)項(xiàng)目中的軟件架構(gòu)能夠被拆分成兩塊:定義架構(gòu)、保證交付钢颂。
架構(gòu)的定義
設(shè)計(jì)架構(gòu)钞它,顧名思義,就是厘清需求并設(shè)計(jì)系統(tǒng)滿足它殊鞭。但在實(shí)際工作中遭垛,架構(gòu)并沒有那么簡單,取決于“你的投入程度”和“你對待自身角色的嚴(yán)肅程度”钱豁,它會(huì)在某個(gè)區(qū)間內(nèi)波動(dòng)耻卡。
- 非功能性需求的管理
開發(fā)者一般會(huì)持續(xù)追問用戶想要的功能特征,而很少問他們想要的系統(tǒng)品質(zhì)牲尺。有時(shí)候業(yè)務(wù)方會(huì)說系統(tǒng)要快卵酪,但“快”這個(gè)詞太主觀了。非功能性需求必須準(zhǔn)確谤碳、可度量溃卡、可完成、可測試蜒简。大多數(shù)非功能性需求是一些技術(shù)的天然屬性瘸羡,并且會(huì)直接影響軟件架構(gòu)。
Clearly Define Harder Than Maybe Assume
- 系統(tǒng)設(shè)計(jì)
每一個(gè)軟件系統(tǒng)都有一套設(shè)計(jì)搓茬,但不是每一個(gè)軟件系統(tǒng)都有一套架構(gòu)犹赖。
架構(gòu)一定是設(shè)計(jì)队他,而設(shè)計(jì)不一定是架構(gòu)。架構(gòu)是重要的設(shè)計(jì)峻村,架構(gòu)給出被強(qiáng)制執(zhí)行的限制麸折,并在限制基礎(chǔ)上解決問題。 架構(gòu)是框架粘昨、綱領(lǐng)垢啼、原則和技術(shù)預(yù)言。
Define From Blank Harder Than Re-use From Other
- 技術(shù)選型
技術(shù)選型包括但不限于復(fù)雜度张肾、三方依賴芭析、技術(shù)策略、部署方案吞瞪、升級政策馁启、端用戶環(huán)境。技術(shù)選型的本質(zhì)是管理風(fēng)險(xiǎn)尸饺,既要知道選型帶來的高復(fù)雜度和不確定性进统,也要知道選型帶來的好處助币。
Confidently Evaluate Harder Than Easily Pick
- 設(shè)計(jì)評估
當(dāng)你在設(shè)計(jì)軟件時(shí)浪听,你需要問自己這套架構(gòu)可行么?我會(huì)有三個(gè)思考方向眉菱,滿足非功能性需求迹栓,提供實(shí)現(xiàn)功能需求的框架、以及足夠的空間去解決潛在的業(yè)務(wù)問題俭缓。 實(shí)際上克伊,我們在持續(xù)不斷的驗(yàn)證架構(gòu)可行,前期UML設(shè)計(jì)圖的評審华坦、中期反復(fù)的測試愿吹、后期線上的監(jiān)控。越早驗(yàn)證系統(tǒng)惜姐,就能降低更多的風(fēng)險(xiǎn)犁跪。
Prove Harder Than Assume
- 架構(gòu)協(xié)作
軟件系統(tǒng)幾乎不會(huì)在孤立中存在,從需要理解并認(rèn)同架構(gòu)的實(shí)際開發(fā)者歹袁,到對系統(tǒng)的安全性坷衍、維護(hù)性等感興趣的人,架構(gòu)一定需要被人理解条舔。
為了軟件產(chǎn)品的成功枫耳,架構(gòu)師有必要和系統(tǒng)相關(guān)的人密切合作,以便保證架構(gòu)能夠和環(huán)境完美的集成孟抗。
Involved Work Harder Than Delivered Document
架構(gòu)的交付
同“定義”一樣迁杨,取決于“架構(gòu)師的投入程度”钻心,交付也會(huì)在一個(gè)區(qū)間內(nèi)波動(dòng)。
- 架構(gòu)的所有權(quán)
為了讓架構(gòu)成功的落地铅协,需要有個(gè)人堅(jiān)持架構(gòu)原則并不斷向開發(fā)團(tuán)隊(duì)確認(rèn)扔役,在整個(gè)開發(fā)周期中負(fù)起責(zé)任。
Take Ownership Better Than Hand Over
- 領(lǐng)導(dǎo)力
在開發(fā)過程中警医,團(tuán)隊(duì)是否處于正確的方向亿胸,是否需要技術(shù)引領(lǐng),是否做了合適的技術(shù)決策预皇,作為架構(gòu)師侈玄,有必要保證每件事都被認(rèn)真對待了。
Take Leadership Better Than Receive Direction
- 教練和指導(dǎo)
領(lǐng)導(dǎo)是在團(tuán)隊(duì)層面保證開發(fā)在正確的方向上穩(wěn)步前進(jìn)吟温,個(gè)體的支持和幫助序仙,在不少團(tuán)隊(duì)中被忽視了,這會(huì)增強(qiáng)個(gè)人的能力和事業(yè)鲁豪。值得注意的是潘悼,在架構(gòu)和設(shè)計(jì)上提供指導(dǎo),和解決變成問題是有很大差距的爬橡。
Coaching and Mentoring Better Than Being coached or mentored
- 質(zhì)量保證
項(xiàng)目完全有可能因?yàn)橐粋€(gè)bug而導(dǎo)致失敗治唤。
質(zhì)量保證,不僅僅是代碼審查糙申,也可以是代碼規(guī)范宾添、設(shè)計(jì)原則、源碼分析柜裸、AT測試缕陕、覆蓋率檢查等等CI工具,不同的人會(huì)看重不同的事情疙挺,我的是架構(gòu)的重要性扛邑,復(fù)雜度和高度可視化。
Do Something Better Than Do Nothing
- 設(shè)計(jì)铐然、開發(fā)蔬崩、測試
回到架構(gòu)角色開發(fā)者的本質(zhì),設(shè)計(jì)架構(gòu)锦爵、開發(fā)實(shí)現(xiàn)舱殿、測試交付。和開發(fā)團(tuán)隊(duì)密切接觸险掀,不是要求你天天寫代碼沪袭,是要求你持續(xù)的投入項(xiàng)目,幫助構(gòu)造和交付。不得不說冈绊,寫代碼也是有必要的侠鳄,它會(huì)讓你感受到開發(fā)者在架構(gòu)設(shè)計(jì)中的痛點(diǎn),從而幫助你從開發(fā)者的視角更好地理解架構(gòu)死宣。
當(dāng)然伟恶,代碼級別的介入在有些場合并不實(shí)際,因?yàn)樵凇澳菢哟蟆钡捻?xiàng)目中毅该,架構(gòu)師需要關(guān)心的事太多了博秫。
Being Involved Better Than Watching Aside
尾聲
無論你是否感受到了那條虛無的線,文章中提到的點(diǎn)在不同的團(tuán)隊(duì)中確有不同眶掌,“不同”取決于架構(gòu)師的“投入程度”和“對待角色的嚴(yán)肅程度”挡育。 大多數(shù)開發(fā)者不會(huì)在某一天醒來,然后突然宣布自己是一個(gè)架構(gòu)師朴爬。在職業(yè)中開始架構(gòu)是一個(gè)漸變的過程即寒,我敢打賭,有一些開發(fā)者召噩,和他們的職業(yè)頭銜不相符的母赵,已經(jīng)開始承擔(dān)部分架構(gòu)的角色了。
參與軟件系統(tǒng)的開發(fā)具滴,和自主設(shè)計(jì)并負(fù)責(zé)軟件系統(tǒng)凹嘲,是非常不一樣的。是否跨過開發(fā)和架構(gòu)中間的線抵蚊,完全取決于你自己施绎,對自己作出準(zhǔn)確的角色定義是跨越的開始溯革。