本文主要是繼續研讀了資深架構師王概凱Kevin執筆的《架構漫談》系列的《架構漫談(九):你理清技術、業務和架構之間的關係了嗎?》的心得感覺。王概凱Kevin結合本身多年的架構經驗,經過不一樣的視角,從新審視架構的本質,從而產生一力做《架構漫談》系列,做者但願可以拋出本身從實踐中得出的一些觀點,並引起你們的一些思考,歡迎你們溝通討論。架構
如須要閱讀原文,請關注公衆號「聊聊架構」,從歷史文章中獲取《架構漫談》系列。post
本文內容結構圖:學習
在軟件設計開發的過程當中常常會看到,不少所謂的架構討論實際上只是在討論某種技術。在不少人的概念裏面,架構和技術其實是等同的。學會了幾種技術,就認爲本身是架構師了,甚至是學習的技術越多,就以爲本身的水平越高。這樣其實是對本身很不負責任的。要知道任何技術都是爲了解決某種問題而存在的,學會了技術,並不表明本身可以解決問題,這一點很是的重要。學會的技術的多少,所帶來的差異只是本身解決問題的手段多了罷了。可是手段多了就必定是好事嗎? 不少時候,學習的技術越多,越不知道採用哪一種技術好,所謂「亂花漸欲迷人眼」。設計
還有另外一種很廣泛的觀點:技術人廣泛看不起業務,認爲技術更高端,而業務過低端,而且業務每每喜歡給技術挖坑。業務則以爲技術眼光高,可是實際解決不了問題,老是理解有誤差,可是又迫不得已,由於本身不會。開發
本篇文章嘗試從這裏入手,分析一下這三個概念到底有什麼關係,咱們應該怎麼處理業務、技術還有架構的關係。it
什麼是技術效率
當咱們一無全部,或者什麼都不會的時候,這個時候其實是沒有技術的。就比如人類在最先期,什麼都得用本身的雙手來幹活。一旦咱們在平常生活中無心間發現某些規律的時候,咱們就能夠經過創造條件,讓這個規律重複的發生。經過人爲創造條件,讓指定的規律按照人類的意願發生,這就是技術。好比取火,最先人類只能靠打雷等天然現象產生火。軟件
取火其實就是一個業務目標,要解決的是人類本身的問題,這就是業務,實際就是人類的利益。這個時候人類沒有生火的技術,只能靠不斷的加木材,保持火不熄滅。後來人們發現了鑽木取火:只要用一個乾的木棍,在另外一個幹木表面快速的轉動,就能夠生火。這個辦法讓人類能夠自行創造火源,就產生了鑽木取火的技術。互聯網
可是雙手快速轉動木棍鑽木取火,並非全部人都可以作獲得的,須要不少力量和速度,對人的要求過高。爲了解決快速轉動的問題,就有人採用弓弦來提高木棍轉動的速度。程序
經過上述內容得出:
業務目標是爲了取火,鑽木取火這個技術的出現解決了這個問題。
鑽木取火的效率不高,影響了業務(取火)的效率,就有了進一步改進的動機,改進轉動木棍的方式,產生了弓弦轉動木棍的技術。
技術與架構,以及與業務之間的關係
技術老是在人類解決對業務的要求不斷提升的狀況下產生,目的也是爲了獲取更大更好的利益。因此:
技術是爲了解決業務的問題而產生的,沒有了業務,技術就沒有了存在的前提。
有了更好的技術,效率更差的技術,就會慢慢的被淘汰,消失,一切都聽從人類的利益訴求–也就是業務。有人會問,不用鑽木取火了,可是弓弦加速轉動木棍還能夠用啊? 沒錯,由於弓弦轉動木棍這個技術,不是來生火的,是用來加速木棍轉動的,所解決的問題不同。可是兩種不一樣的技術,合理結合起來,會更好更有效率的解決業務問題。
因此技術與技術之間,有兩種關係:
在解決同一個業務問題的前提下,更高效,更低成本的技術,會淘汰低效,高成本的技術。這是人類利益訴求所決定的。
通常剛開始解決根本問題的技術(鑽木取火)的效率是比較低的,只是把不可能變成了可能(從這一點上來講,技術纔是業務的enabler)。而後就會有提升效率的需求出現,要求改進這個技術。這個技術的低效率部分就會被其餘人(或者技術發明人本身)加以改進,這部分就會造成新的技術。
當關系2發生的時候,這個地方一定會造成一個切分,新技術會經過某種方式和原有的技術鏈接在一塊兒造成一個總體,讓這個新的技術能夠和原有技術共同工做,使得原有的技術能夠用更高的效率解決問題。由於要解決的主要問題(生火)並無發生改變,分拆所造成的是一個樹狀的結構。
按照前面的架構定義,這個時候其實已經產生了架構。也就是說,通常是先有技術,纔會有架構。這些其餘技術(弓弦拉動木棍),是從直接解決問題的初始主要技術中分拆出來造成的,並經過樹狀結構和主要技術(鑽木取火)組合在一塊兒。在解決主要問題(生火)以後,再開始逐漸的分拆爲更爲細粒度的技術(弓弦轉木棍)。
而這個細粒度的技術(弓弦轉動木棍)每每不會和業務的主要目標(生火)發生直接的關係。不一樣的技術,經過樹狀結構,組合在一塊兒,造成了一個完整的架構解決方案,共同完成業務的目標。這就是技術,業務和架構之間的關係。不少人把這個過程稱爲架構的進化,其實更合適的是把這個過程稱爲技術的進步所致使的新的架構分拆,由於這個過程內在的動力,更多的是來自技術對解決業務問題的解決。
技術人員和業務人員的關係
爲何技術人員老是和業務人員發生衝突呢? 這是由於技術人員不少時候關心的技術,和業務的主要目標每每不是直接對應的,業務也是負責某一部分的業務,也不是和業務的主要目標直接對應的,都是樹的分支節點(上文已經解釋了爲什麼會發生這種狀況)。只有直接解決業務問題的那個技術(或業務)–樹的根節點–會和業務直接相關。因此一旦產生衝突,通常必須兩個根節點(通常都是領導)碰面才能解決問題,就是這個緣由–他們都知道業務主要目標。這也是爲何下層沒法理解上層,而上層都喜歡下軍令狀,要求下層執行。人只有儘可能去理解上層的問題才能作下層的分拆。
在軟件行業,這個根節點技術就是軟件。這也是爲何架構師要認識什麼叫軟件,軟件解決誰的問題,什麼問題,軟件自己又是怎麼分拆的,纔可以更好的組合不一樣的技術,完成業務的目標。而軟件裏面和業務直接相關的,只有Business Domain這一部分。
用人來打比方,Business Domain至關於人的大腦,而Service,Repository,Glue Code等部分所採用的技術,所有都是計算機本身領域的技術,都是爲了可以讓程序跑起來,至關於人的四肢。咱們大部分開發人員的工做主要專一於四肢部分。咱們真正應該投入的是大腦部分。由於大腦可以決定四肢長什麼樣,而不是反過來。不少架構師、技術人員主要專一於計算機相關的技術,忽略了業務自己,甚至看不起業務,這也是爲何技術老是和業務衝突的緣由。
架構師應該承擔起解決業務問題的這個角色來,專一於Business Domain和軟件自己的架構,讓技術人員致力於爲業務在計算機中跑起來而努力。只有把這二者很好的結合起來,才能更好地完成業務的目標,纔會讓軟件更好地服務於你們。最終必定會獲得一個很好的軟件架構,令軟件開發團隊和業務部門都可以很好地開展工做並下降成本。
從新發明輪子
當現有已經存在不少技術,而這些技術卻和咱們所要解決的問題並非那麼直接對應的時候,咱們就須要有意識的組織和識別不一樣的技術,來實現業務的目標。這個時候組織的方式有不少種,其中成本最低的方法就是按照要達成的目的和當前的問題,從上到下進行架構分拆。分拆出來的更細粒度的問題,分解到不一樣的人來進行解決,就造成了業務架構和組織架構。解決這些問題就須要組合不少不一樣的技術,那麼應該採用哪些技術?仍是本身重頭實現一個? 本身實現一個—這就是不少人所謂的從新發明輪子。如下試着分析一下:
當技術所提供的能力遠遠超過須要解決的問題時,每每掌握技術和維護技術會成爲瓶頸。由於越複雜的技術,成本越高。若是本身實現一個僅僅是解決當前問題的方案,可能成本反而更低。這也是爲何不少大型的互聯網公司不斷地開源出來本身的技術的緣由。而這些技術對於咱們來講是否適用?他們本來是用來解決誰的問題的?什麼問題?若是不清楚這些,就冒然採用,可能會致使更高的成本。
當技術所提供的能力和咱們所要解決的問題部分匹配時,仍是要當作本。好比當咱們須要一個錘子的時候,手邊正好沒有,可是卻有一隻高跟鞋,勉強也能夠替代錘子。可是長期來看,這麼用不划算,由於高跟鞋的價格比錘子高不少,耐用性差不少,維護成本也高不少。
因此,準確識別採用什麼技術的能力,也是架構師所要具有的能力之一。考慮的主要因素也是長期的成本和收益。
做者:猿碼道 連接:https://juejin.im/post/5b36f95851882574e94f13f3 來源:掘金 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。