☆【細品架構(gòu)9/100】技術(shù)、業(yè)務(wù)和架構(gòu)之間的關(guān)系

本文主要是繼續(xù)研讀了資深架構(gòu)師王概凱Kevin執(zhí)筆的《架構(gòu)漫談》系列的《架構(gòu)漫談(九):你理清技術(shù)、業(yè)務(wù)和架構(gòu)之間的關(guān)系了嗎?》的心得感受。王概凱Kevin結(jié)合自己多年的架構(gòu)經(jīng)驗,通過不同的視角,重新審視架構(gòu)的本質(zhì),從而產(chǎn)生一力作《架構(gòu)漫談》系列,作者希望能夠拋出自己從實踐中得出的一些觀點,并引發(fā)大家的一些思考,歡迎大家溝通討論。

如需要閱讀原文,請關(guān)注公眾號“聊聊架構(gòu)”,從歷史文章中獲取《架構(gòu)漫談》系列。

本文內(nèi)容結(jié)構(gòu)圖:

技術(shù)、業(yè)務(wù)和架構(gòu)之間的關(guān)系

在軟件設(shè)計開發(fā)的過程中經(jīng)常會看到,很多所謂的架構(gòu)討論實際上只是在討論某種技術(shù)。在很多人的概念里面,架構(gòu)和技術(shù)實際上是等同的。學(xué)會了幾種技術(shù),就認為自己是架構(gòu)師了,甚至是學(xué)習的技術(shù)越多,就覺得自己的水平越高。這樣實際上是對自己很不負責任的。要知道任何技術(shù)都是為了解決某種問題而存在的,學(xué)會了技術(shù),并不代表自己能夠解決問題,這一點非常的重要。學(xué)會的技術(shù)的多少,所帶來的差別只是自己解決問題的手段多了罷了。但是手段多了就一定是好事嗎? 很多時候,學(xué)習的技術(shù)越多,越不知道采用哪種技術(shù)好,所謂“亂花漸欲迷人眼”。

還有另一種很普遍的觀點:技術(shù)人普遍看不起業(yè)務(wù),認為技術(shù)更高端,而業(yè)務(wù)太低端,并且業(yè)務(wù)往往喜歡給技術(shù)挖坑。業(yè)務(wù)則覺得技術(shù)眼光高,但是實際解決不了問題,總是理解有偏差,但是又無可奈何,因為自己不會。

本篇文章嘗試從這里入手,分析一下這三個概念到底有什么關(guān)系,我們應(yīng)該怎么處理業(yè)務(wù)、技術(shù)還有架構(gòu)的關(guān)系。


什么是技術(shù)

當我們一無所有,或者什么都不會的時候,這個時候?qū)嶋H上是沒有技術(shù)的。就好比人類在最早期,什么都得用自己的雙手來干活。一旦我們在日常生活中無意間發(fā)現(xiàn)某些規(guī)律的時候,我們就可以通過創(chuàng)造條件,讓這個規(guī)律重復(fù)的發(fā)生。通過人為創(chuàng)造條件,讓指定的規(guī)律按照人類的意愿發(fā)生,這就是技術(shù)。比如取火,最早人類只能靠打雷等自然現(xiàn)象產(chǎn)生火。

取火其實就是一個業(yè)務(wù)目標,要解決的是人類自己的問題,這就是業(yè)務(wù),實際就是人類的利益。這個時候人類沒有生火的技術(shù),只能靠不斷的加木材,保持火不熄滅。后來人們發(fā)現(xiàn)了鉆木取火:只要用一個干的木棍,在另一個干木表面快速的轉(zhuǎn)動,就可以生火。這個辦法讓人類可以自行創(chuàng)造火源,就產(chǎn)生了鉆木取火的技術(shù)。

鉆木取火

但是雙手快速轉(zhuǎn)動木棍鉆木取火,并不是所有人都能夠做得到的,需要很多力量和速度,對人的要求太高。為了解決快速轉(zhuǎn)動的問題,就有人采用弓弦來提升木棍轉(zhuǎn)動的速度。

采用弓弦來提升木棍轉(zhuǎn)動的速度

通過上述內(nèi)容得出:

  1. 業(yè)務(wù)目標是為了取火,鉆木取火這個技術(shù)的出現(xiàn)解決了這個問題。

  2. 鉆木取火的效率不高,影響了業(yè)務(wù)(取火)的效率,就有了進一步改進的動機,改進轉(zhuǎn)動木棍的方式,產(chǎn)生了弓弦轉(zhuǎn)動木棍的技術(shù)。


技術(shù)與架構(gòu),以及與業(yè)務(wù)之間的關(guān)系

技術(shù)總是在人類解決對業(yè)務(wù)的要求不斷提高的情況下產(chǎn)生,目的也是為了獲取更大更好的利益。所以:

  1. 技術(shù)是為了解決業(yè)務(wù)的問題而產(chǎn)生的,沒有了業(yè)務(wù),技術(shù)就沒有了存在的前提。

  2. 有了更好的技術(shù),效率更差的技術(shù),就會慢慢的被淘汰,消失,一切都遵從人類的利益訴求–也就是業(yè)務(wù)。有人會問,不用鉆木取火了,但是弓弦加速轉(zhuǎn)動木棍還可以用?。?沒錯,因為弓弦轉(zhuǎn)動木棍這個技術(shù),不是來生火的,是用來加速木棍轉(zhuǎn)動的,所解決的問題不一樣。但是兩種不同的技術(shù),合理結(jié)合起來,會更好更有效率的解決業(yè)務(wù)問題。

所以技術(shù)與技術(shù)之間,有兩種關(guān)系:

  1. 在解決同一個業(yè)務(wù)問題的前提下,更高效,更低成本的技術(shù),會淘汰低效,高成本的技術(shù)。這是人類利益訴求所決定的。

  2. 一般剛開始解決根本問題的技術(shù)(鉆木取火)的效率是比較低的,只是把不可能變成了可能(從這一點上來說,技術(shù)才是業(yè)務(wù)的enabler)。然后就會有提高效率的需求出現(xiàn),要求改進這個技術(shù)。這個技術(shù)的低效率部分就會被其他人(或者技術(shù)發(fā)明人自己)加以改進,這部分就會形成新的技術(shù)。

當關(guān)系2發(fā)生的時候,這個地方必定會形成一個切分,新技術(shù)會通過某種方式和原有的技術(shù)連接在一起形成一個整體,讓這個新的技術(shù)可以和原有技術(shù)共同工作,使得原有的技術(shù)可以用更高的效率解決問題。因為要解決的主要問題(生火)并沒有發(fā)生改變,分拆所形成的是一個樹狀的結(jié)構(gòu)。

按照前面的架構(gòu)定義,這個時候其實已經(jīng)產(chǎn)生了架構(gòu)。也就是說,一般是先有技術(shù),才會有架構(gòu)。這些其他技術(shù)(弓弦拉動木棍),是從直接解決問題的初始主要技術(shù)中分拆出來形成的,并通過樹狀結(jié)構(gòu)和主要技術(shù)(鉆木取火)組合在一起。在解決主要問題(生火)之后,再開始逐漸的分拆為更為細粒度的技術(shù)(弓弦轉(zhuǎn)木棍)。

而這個細粒度的技術(shù)(弓弦轉(zhuǎn)動木棍)往往不會和業(yè)務(wù)的主要目標(生火)發(fā)生直接的關(guān)系。不同的技術(shù),通過樹狀結(jié)構(gòu),組合在一起,形成了一個完整的架構(gòu)解決方案,共同完成業(yè)務(wù)的目標。這就是技術(shù),業(yè)務(wù)和架構(gòu)之間的關(guān)系。很多人把這個過程稱為架構(gòu)的進化,其實更合適的是把這個過程稱為技術(shù)的進步所導(dǎo)致的新的架構(gòu)分拆,因為這個過程內(nèi)在的動力,更多的是來自技術(shù)對解決業(yè)務(wù)問題的解決。


技術(shù)人員和業(yè)務(wù)人員的關(guān)系

為什么技術(shù)人員總是和業(yè)務(wù)人員發(fā)生沖突呢? 這是因為技術(shù)人員很多時候關(guān)心的技術(shù),和業(yè)務(wù)的主要目標往往不是直接對應(yīng)的,業(yè)務(wù)也是負責某一部分的業(yè)務(wù),也不是和業(yè)務(wù)的主要目標直接對應(yīng)的,都是樹的分支節(jié)點(上文已經(jīng)解釋了為何會發(fā)生這種情況)。只有直接解決業(yè)務(wù)問題的那個技術(shù)(或業(yè)務(wù))–樹的根節(jié)點–會和業(yè)務(wù)直接相關(guān)。所以一旦產(chǎn)生沖突,一般必須兩個根節(jié)點(一般都是領(lǐng)導(dǎo))碰面才能解決問題,就是這個原因–他們都知道業(yè)務(wù)主要目標。這也是為什么下層無法理解上層,而上層都喜歡下軍令狀,要求下層執(zhí)行。人只有盡量去理解上層的問題才能做下層的分拆。

在軟件行業(yè),這個根節(jié)點技術(shù)就是軟件。這也是為什么架構(gòu)師要認識什么叫軟件,軟件解決誰的問題,什么問題,軟件本身又是怎么分拆的,才能夠更好的組合不同的技術(shù),完成業(yè)務(wù)的目標。而軟件里面和業(yè)務(wù)直接相關(guān)的,只有Business Domain這一部分。

用人來打比方,Business Domain相當于人的大腦,而Service,Repository,Glue Code等部分所采用的技術(shù),全部都是計算機自己領(lǐng)域的技術(shù),都是為了能夠讓程序跑起來,相當于人的四肢。我們大部分開發(fā)人員的工作主要專注于四肢部分。我們真正應(yīng)該投入的是大腦部分。因為大腦能夠決定四肢長什么樣,而不是反過來。很多架構(gòu)師、技術(shù)人員主要專注于計算機相關(guān)的技術(shù),忽略了業(yè)務(wù)本身,甚至看不起業(yè)務(wù),這也是為什么技術(shù)總是和業(yè)務(wù)沖突的原因。

架構(gòu)師應(yīng)該承擔起解決業(yè)務(wù)問題的這個角色來,專注于Business Domain和軟件本身的架構(gòu),讓技術(shù)人員致力于為業(yè)務(wù)在計算機中跑起來而努力。只有把這兩者很好的結(jié)合起來,才能更好地完成業(yè)務(wù)的目標,才會讓軟件更好地服務(wù)于大家。最終一定會得到一個很好的軟件架構(gòu),令軟件開發(fā)團隊和業(yè)務(wù)部門都能夠很好地開展工作并降低成本。


重新發(fā)明輪子

當現(xiàn)有已經(jīng)存在很多技術(shù),而這些技術(shù)卻和我們所要解決的問題并不是那么直接對應(yīng)的時候,我們就需要有意識的組織和識別不同的技術(shù),來實現(xiàn)業(yè)務(wù)的目標。這個時候組織的方式有很多種,其中成本最低的方法就是按照要達成的目的和當前的問題,從上到下進行架構(gòu)分拆。分拆出來的更細粒度的問題,分解到不同的人來進行解決,就形成了業(yè)務(wù)架構(gòu)和組織架構(gòu)。解決這些問題就需要組合很多不同的技術(shù),那么應(yīng)該采用哪些技術(shù)?還是自己重頭實現(xiàn)一個? 自己實現(xiàn)一個—這就是很多人所謂的重新發(fā)明輪子。以下試著分析一下:

當技術(shù)所提供的能力遠遠超過需要解決的問題時,往往掌握技術(shù)和維護技術(shù)會成為瓶頸。因為越復(fù)雜的技術(shù),成本越高。如果自己實現(xiàn)一個僅僅是解決當前問題的方案,可能成本反而更低。這也是為什么很多大型的互聯(lián)網(wǎng)公司不斷地開源出來自己的技術(shù)的原因。而這些技術(shù)對于我們來說是否適用?他們原本是用來解決誰的問題的?什么問題?如果不清楚這些,就冒然采用,可能會導(dǎo)致更高的成本。

當技術(shù)所提供的能力和我們所要解決的問題部分匹配時,還是要看成本。比如當我們需要一個錘子的時候,手邊正好沒有,但是卻有一只高跟鞋,勉強也可以替代錘子。但是長期來看,這么用不劃算,因為高跟鞋的價格比錘子高很多,耐用性差很多,維護成本也高很多。

所以,準確識別采用什么技術(shù)的能力,也是架構(gòu)師所要具備的能力之一??紤]的主要因素也是長期的成本和收益。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容