聊聊系统设计的套路
幾個(gè)公眾號轉(zhuǎn)了我三年前寫的<我在系統(tǒng)設(shè)計(jì)上犯過的14個(gè)錯(cuò)>,閱讀量遠(yuǎn)比當(dāng)年我發(fā)的時(shí)候高多了,感謝呀,那篇確實(shí)算得上心血之作了,哈哈,正好最近我在內(nèi)部在做一個(gè)系統(tǒng)設(shè)計(jì)培訓(xùn)的嘗試,有了更多感受,在這篇文章里再來寫寫。
系統(tǒng)設(shè)計(jì)我一直覺得是遠(yuǎn)比Java編程技能更難多了的培訓(xùn),很容易變成務(wù)虛課,全是一堆理論,然并卵(想想一堆沒怎么做過系統(tǒng)設(shè)計(jì)的人講系統(tǒng)設(shè)計(jì)的課,這純粹是開玩笑),所以以前從來不敢嘗試做這方面的培訓(xùn),不過今年由于一些情況,決定大膽嘗試下,就在內(nèi)部搞了個(gè)民間的培訓(xùn),結(jié)果還真有不少同學(xué)捧場,在開始上這門課后,我覺得收獲最大的搞不好是我自己,整理思路,從和學(xué)員的互動中學(xué)習(xí)到了很多,能更好的對系統(tǒng)設(shè)計(jì)的一些方法論進(jìn)行抽象總結(jié),所以我和這些捧場的學(xué)員們說其實(shí)是我們一起在共創(chuàng)系統(tǒng)設(shè)計(jì)的課程 。
我給系統(tǒng)設(shè)計(jì)培訓(xùn)定的目標(biāo)是:
通過這堂課掌握一個(gè)思考框架,知道做系統(tǒng)設(shè)計(jì)的套路,系統(tǒng)設(shè)計(jì)不是簡單的上來就畫畫框什么,必須按照一定的套路才能更好的進(jìn)行系統(tǒng)設(shè)計(jì);
拓寬知識面,系統(tǒng)設(shè)計(jì)中非常重要的是考慮的全面性,以更好的進(jìn)行權(quán)衡取舍,所以能不能借助系統(tǒng)設(shè)計(jì)培訓(xùn)來拓寬知識面非常重要。
而要達(dá)到這樣的效果,怎么去上這堂課挑戰(zhàn)其實(shí)是不小的:
1. 想要傳達(dá)的思考框架到底是什么?怎么樣變成不是純粹的理論,務(wù)虛的傳達(dá),從而讓大家能更好的掌握并真正的去運(yùn)用這個(gè)思考框架?
以前真的沒仔細(xì)的思考過系統(tǒng)設(shè)計(jì)的思考框架的問題,其實(shí)吧很多的系統(tǒng)設(shè)計(jì)的模板就是一個(gè)思考框架,但在不理解的情況下,是很難應(yīng)用好的。
回顧了下自己做過的幾個(gè)系統(tǒng)的設(shè)計(jì),發(fā)現(xiàn)現(xiàn)在自己在做系統(tǒng)設(shè)計(jì)的時(shí)候確實(shí)是會按照一個(gè)套路去做,這個(gè)套路就是:
系統(tǒng)設(shè)計(jì)的目的->系統(tǒng)設(shè)計(jì)的目標(biāo)->圍繞目標(biāo)的核心設(shè)計(jì)->圍繞核心設(shè)計(jì)形成的設(shè)計(jì)原則->各子系統(tǒng),模塊的詳細(xì)設(shè)計(jì)。
1). 系統(tǒng)設(shè)計(jì)的目的? ?
? ? ?是指做這個(gè)系統(tǒng)設(shè)計(jì)的目的到底是什么,很多人在做系統(tǒng)設(shè)計(jì)時(shí),是搞不清為什么要做一個(gè)新系統(tǒng)的設(shè)計(jì),或者為什么要做一個(gè)系統(tǒng)的重構(gòu)/演進(jìn)的設(shè)計(jì),如果搞不清楚這個(gè)目的,后面的系統(tǒng)設(shè)計(jì)上是很容易形成偏差的,導(dǎo)致本來是為了解決一個(gè)問題,要去做新的系統(tǒng)或重構(gòu)/升級舊的系統(tǒng),但最后完全脫離了初心。
? ? ?另外,還有很重要的一點(diǎn)是,一個(gè)大架構(gòu)師是需要給很多人講解系統(tǒng)設(shè)計(jì)的,只有理解并講清了系統(tǒng)設(shè)計(jì)的目的,團(tuán)隊(duì)才能更好的去實(shí)現(xiàn)。
2). 系統(tǒng)設(shè)計(jì)的目標(biāo)? ?
? ? ? 圍繞上面的目的,能不能形成一些可衡量的目標(biāo),從而確保最終系統(tǒng)實(shí)現(xiàn)和最初的目的不要出現(xiàn)太大的偏差,相信很多人都經(jīng)歷過最終的系統(tǒng)實(shí)現(xiàn)和系統(tǒng)設(shè)計(jì)偏差極大的現(xiàn)象,主要的原因基本都是沒有制定衡量系統(tǒng)設(shè)計(jì)的目標(biāo),并在系統(tǒng)設(shè)計(jì)上讓系統(tǒng)能透出這些目標(biāo)的情況。
3). 圍繞目標(biāo)的核心設(shè)計(jì)??
? ? ? 這步最重要的就是通過設(shè)計(jì)如何去實(shí)現(xiàn)上面的目標(biāo),這個(gè)環(huán)節(jié)中技術(shù)的專業(yè)、視野、全面的考慮、權(quán)衡取舍的主觀原則、解題的思路,這是形成最后的核心設(shè)計(jì)的關(guān)鍵。
? ? ?在核心設(shè)計(jì)的這個(gè)階段中,會產(chǎn)生一些新的衡量設(shè)計(jì)最后實(shí)現(xiàn)情況的目標(biāo),這些也都要增加到系統(tǒng)設(shè)計(jì)中,確保最后的實(shí)現(xiàn)和設(shè)計(jì)的偏差度是可視的。
4). 圍繞核心設(shè)計(jì)形成的設(shè)計(jì)原則??
? ? ?有了上面的核心設(shè)計(jì)后,可以真正的形成一些設(shè)計(jì)原則,確保后面的子系統(tǒng)/模塊的詳細(xì)設(shè)計(jì)中能夠遵循,并在詳細(xì)設(shè)計(jì)中體現(xiàn)出來,這樣才能讓整個(gè)大的系統(tǒng)設(shè)計(jì)的一致性。
5). 各子系統(tǒng)/模塊的詳細(xì)設(shè)計(jì)??
? ? ? 這個(gè)部分我倒覺得難度不會太大,畢竟有了前面的鋪墊,就是解好一個(gè)更小范圍的題,程序員群體在解題能力上通常是不錯(cuò)的,所以我一直覺得數(shù)學(xué)功底好是程序員的基本,數(shù)學(xué)就是典型的解題的學(xué)科。
ps: 這就是做分享/培訓(xùn)的好處,借機(jī)仔細(xì)整理自己的碎片,從而形成體系。
關(guān)于怎么更好的讓大家能掌握并運(yùn)用這個(gè)思考框架,我的想法就是在講每個(gè)步驟的時(shí)候講講自己當(dāng)年在這些步驟上犯的錯(cuò),實(shí)際的經(jīng)驗(yàn),這樣我覺得也許大家以后在做系統(tǒng)設(shè)計(jì)時(shí)就能想起,所以我覺得系統(tǒng)設(shè)計(jì)這種培訓(xùn)絕對是需要具備大量實(shí)際經(jīng)驗(yàn)的架構(gòu)師才能做。
在運(yùn)用部分,采取的方法就是通過互動,讓大家按照同樣的思考框架來講自己的所負(fù)責(zé)的系統(tǒng),通過互動來更好的彼此對齊,并借此逐漸變成習(xí)慣。
上面只是對每個(gè)步驟的簡單的闡述,后面會再來細(xì)節(jié)的寫寫上面的每個(gè)步驟內(nèi)的點(diǎn)。
2. 知識面拓寬這個(gè)倒還好,講一個(gè)全站的系統(tǒng)架構(gòu)就好,這樣可以讓知識面從業(yè)務(wù)架構(gòu)、到基礎(chǔ)技術(shù)架構(gòu)、到涉及到基礎(chǔ)設(shè)施的部署架構(gòu)等。
總結(jié)
- 上一篇: 面试题:SSH 和 SSM 两个框架的浅
- 下一篇: 备战618,京东如何保障系统稳定性?