本文是漫談架構(gòu)專欄的第九篇,作者Kevin以鉆木取火為切入點,深入介紹了技術(shù)、業(yè)務(wù)和架構(gòu)之間的關(guān)系。正如作者所說,技術(shù)總是在人類解決對業(yè)務(wù)的要求不斷提高的情況下產(chǎn)生,目的也是為了獲取更大更好的利益。
某天和朋友吃飯正好聊到這個話題。作為架構(gòu)師或者做技術(shù)的人,在開發(fā)軟件時,我們基本上就是在扮演上帝的角色:我們不但要創(chuàng)建出一個個的程序,還要讓這些程序能夠脫離我們在硬件上獨立運行,以便為這個程序所服務(wù)的群體提供服務(wù)。當這個程序出現(xiàn)問題甚至bug的時候,我們還得扮演牧師的角色去修復(fù)這些問題。這不正是一個程序的社會嗎? 和人類社會的演變何其相似!那么我們自然也能夠拿人類演變的歷史來指導(dǎo)軟件開發(fā)工作,以避免再經(jīng)歷一次像人類演變發(fā)展那么痛苦的過程了。由此我們也可以看出,架構(gòu)師和程序員們都在扮演著多么重要的角色,如果還在解決自己的問題,怎么扮演好上帝這個角色?
相關(guān)廠商內(nèi)容
京東、點融、獵豹、360等大企的區(qū)塊鏈玩法,了解一下 用2天時間換取30位區(qū)塊鏈大牛的技術(shù)實戰(zhàn)經(jīng)驗 學(xué)習(xí)區(qū)塊鏈技術(shù)需要哪些技術(shù)棧? Kubernetes的關(guān)鍵技術(shù)、應(yīng)用場景以及在企業(yè)落地實踐的經(jīng)驗 人工智能最意想不到的應(yīng)用場景| 打通AI落地應(yīng)用的任督二脈
相關(guān)贊助商
在軟件設(shè)計開發(fā)的過程中經(jīng)常會看到,很多所謂的架構(gòu)討論實際上只是在討論某種技術(shù)。在很多人的概念里面,架構(gòu)和技術(shù)實際上是等同的。學(xué)會了幾種技術(shù),就認為自己是架構(gòu)師了,甚至是學(xué)習(xí)的技術(shù)越多,就覺得自己的水平越高。這樣實際上是對自己很不負責(zé)任的。要知道任何技術(shù)都是為了解決某種問題而存在的,學(xué)會了技術(shù),并不代表自己能夠解決問題,這一點非常的重要。學(xué)會的技術(shù)的多少,所帶來的差別只是自己解決問題的手段多了罷了。但是手段多了就一定是好事嗎? 很多時候,學(xué)習(xí)的技術(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)動的速度。
也就是說:
業(yè)務(wù)目標是為了取火,鉆木取火這個技術(shù)的出現(xiàn)解決了這個問題。
鉆木取火的效率不高,影響了業(yè)務(wù)(取火)的效率,就有了進一步改進的動機,改進轉(zhuǎn)動木棍的方式,產(chǎn)生了弓弦轉(zhuǎn)動木棍的技術(shù)。
技術(shù)與架構(gòu),以及與業(yè)務(wù)之間的關(guān)系
技術(shù)總是在人類解決對業(yè)務(wù)的要求不斷提高的情況下產(chǎn)生,目的也是為了獲取更大更好的利益。所以:
技術(shù)是為了解決業(yè)務(wù)的問題而產(chǎn)生的,沒有了業(yè)務(wù),技術(shù)就沒有了存在的前提。
有了更好的技術(shù),效率更差的技術(shù),就會慢慢的被淘汰,消失,一切都遵從人類的利益訴求--也就是業(yè)務(wù)。有人會問,不用鉆木取火了,但是弓弦加速轉(zhuǎn)動木棍還可以用?。?沒錯,因為弓弦轉(zhuǎn)動木棍這個技術(shù),不是來生火的,是用來加速木棍轉(zhuǎn)動的,所解決的問題不一樣。但是兩種不同的技術(shù),合理結(jié)合起來,會更好更有效率的解決業(yè)務(wù)問題。
所以技術(shù)與技術(shù)之間,有兩種關(guān)系:
在解決同一個業(yè)務(wù)問題的前提下,更高效,更低成本的技術(shù),會淘汰低效,高成本的技術(shù)。這是人類利益訴求所決定的。
一般剛開始解決根本問題的技術(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ù)也是負責(zé)某一部分的業(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)該承擔(dān)起解決業(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ù)所解決的問題和分拆出來要解決的問題,完全匹配的時候,這是最完美的。比如需要提供web要訪問的service,很多MVC的framework就可以很好的滿足這一點。而這個時候如果非要自己實現(xiàn)一個,很有可能就是重新發(fā)明輪子。
當技術(shù)所提供的能力遠遠超過需要解決的問題時,往往掌握技術(shù)和維護技術(shù)會成為瓶頸。因為越復(fù)雜的技術(shù),成本越高。如果自己實現(xiàn)一個僅僅是解決當前問題的方案,可能成本反而更低。這也是為什么很多大型的互聯(lián)網(wǎng)公司不斷地開源出來自己的技術(shù)的原因。而這些技術(shù)對于我們來說是否適用?他們原本是用來解決誰的問題的?什么問題?如果不清楚這些,就冒然采用,可能會導(dǎo)致更高的成本。
當技術(shù)所提供的能力和我們所要解決的問題部分匹配時,還是要看成本。比如當我們需要一個錘子的時候,手邊正好沒有,但是卻有一只高跟鞋,勉強也可以替代錘子。但是長期來看,這么用不劃算,因為高跟鞋的價格比錘子高很多,耐用性差很多,維護成本也高很多。
所以,準確識別采用什么技術(shù)的能力,也是架構(gòu)師所要具備的能力之一。考慮的主要因素也是長期的成本和收益。
第三十四屆CIO班招生
北達軟EXIN網(wǎng)絡(luò)空間與IT安全基礎(chǔ)認證培訓(xùn)
北達軟EXIN DevOps Professional認證培訓(xùn)
責(zé)編:yangjun
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個人認為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,請及時通知本站,予以刪除。