精品主題,實戰(zhàn)科普,最新行業(yè)熱點話題,隨時掌握云上咨訊。
計算機是個復雜的機器,相比普通的機器(比如小家電、汽車),它可以在使用過程中對其「工作行為」進行「再定義和場景適配」,以解決不同場景下的人的需求和問題,這種「定義的結(jié)果」,對于機器的最終用戶來說,是「應(yīng)用 / Application」。
對于非計算機相關(guān)的普通人而言,即便是有諸多對于職位頭銜的描述:「程序員」、「軟件工程師」、「架構(gòu)師」、「首席技術(shù)官」,也離不開一個潛意識的印象:「做網(wǎng)站的」或者是「修電腦的」。
很多「架構(gòu)師」,都是從「軟件工程師」開始,不知不覺的變成了一個「架構(gòu)師」。對于我個人而言,當我還是一個實習生,被「升」為一個部門架構(gòu)師帶領(lǐng)一些正式員工干活的時候,對「架構(gòu)師」這個概念居然是一片空白,甚至于不知道這是個「好消息」,還是個「壞消息」,當然也不知道「架構(gòu)師」是干嘛的。
所以,我一直以最簡單的方式對架構(gòu)進行定義:架構(gòu)是一種用計算機解決問題的綜合能力,與頭銜無關(guān)。下面我將結(jié)合自己的工作經(jīng)驗,談?wù)勥@些年來,我對結(jié)構(gòu)的理解。
1、架構(gòu)源于對實踐的總結(jié)
架構(gòu)能力并不是與生俱來的,而是和具體經(jīng)歷強相關(guān)的,豐富的經(jīng)驗是形成架構(gòu)能力的基礎(chǔ)。
很多時候我們強調(diào)「系統(tǒng)性思考」對于架構(gòu)設(shè)計的重要性,希望從方法論上能夠?qū)φ趶氖禄蛘呒磳氖录軜?gòu)工作的程序員在專業(yè)能力上進行提升。教條式、填鴨式的培訓,是教不出架構(gòu)能力的。理論的價值是能夠幫助應(yīng)用理論的人少走一部分的彎路,但不能夠解決眼前的現(xiàn)實問題。
在企業(yè)里,架構(gòu)是一個實踐結(jié)合非常緊密的領(lǐng)域,一切以解決實際問題為目標。由于問題是多種多樣的,導致解決的方法也是多種多樣的。踩過的雷,填過的坑,都需要進行總結(jié)和抽象,才能提升到架構(gòu)層的高度,防止重蹈覆轍。
2、架構(gòu)是一個建模的過程
對于一個復雜問題,通常會對復雜問題按照能力領(lǐng)域進行分解,其目的是能夠找到與現(xiàn)有能力相匹配的映射。這個映射,就是解決方案。它,離不開人的「知識型勞動」,主要分解為三個方面:
對于已知問題的抽象和建模
對于已知能力的抽象和建模
對于解決方案和工具的設(shè)計
其中前兩個方面,都提到了「建?!?。建模本身是對客觀事物的一種抽象,客觀事物越復雜,那建模的結(jié)果變成「盲人摸象」的概率就越高。
然而,「盲人摸象」在 IT 領(lǐng)域其實不能算是個「貶義詞」,因為這個現(xiàn)象十分的常見。究其原因,解決實際問題信息系統(tǒng),更多程度是面向于「典型」應(yīng)用場景,而不是「任意」應(yīng)用場景的。
場景即是對客觀事物的認知視角,信息系統(tǒng)做不到、也不需要對一個完整的客觀事物進行全面(360°無死角)建模。
舉個具體的例子:對于人這個客觀事物,銀行系統(tǒng)里,可能會關(guān)心這個人財務(wù)指標,例如「收入」、「支出」和「存款余額」,但在醫(yī)院的重癥監(jiān)護病房里,可能就會關(guān)心這個人的生命指標,例如「血壓」、「心跳」。
從例子里可以看出,一個面向具體問題的場景化應(yīng)用系統(tǒng),都是對一個客體進行「片面的」場景化建模。
說到底,建模是一種抽象能力,具體的說,是人對客觀事物認知結(jié)果的理性提煉和總結(jié),不可否認感性的部分太難以刻畫和描述。很符合「莊子·天道」中所述:「意之所隨者,不可以言傳也」。
如果要拿數(shù)學語言進行描述「建模的能力」,就是找到一組盡可能少的「特征向量」去表述這個空間,而找這組「特征向量」的能力,就是建模的能力。
3、架構(gòu)工作的核心是設(shè)計
沒有軟件的計算機,是「無法使用」的,因為沒有辦法幫助我們解決任何問題。計算機原本很「生硬」,無法很「柔軟」的去直接適配所需要解決的問題。
架構(gòu)的核心工作是「設(shè)計」,設(shè)計計算機如何按照預(yù)期進行工作。
架構(gòu)設(shè)計中,建模的結(jié)果,是模型,它有著結(jié)構(gòu)化、棱角分明的特質(zhì),因為這是計算機進行計算的最高效的方式:嚴格的告訴我們——兩個數(shù)是相等還是不相等,及其衍生。正由于嚴格匹配,所以在很長的一段時間里,解決方案的制定和后續(xù)系統(tǒng)的交付運行,都圍繞著如何嚴格按照實際場景進行模擬和落地。 很少以「按概率成功」對系統(tǒng)的業(yè)務(wù)功能進行設(shè)計和實現(xiàn),一切都必須「絕對正確」。因為絕大部分的計算機系統(tǒng),無法理解自然語意。只能根據(jù)人為設(shè)計的結(jié)構(gòu)化信息,「按部就班」地完成重復性勞動。
人工智能、機器學習,在解決自動化建模領(lǐng)域的成熟度還是遠遠達不到人的能力,如果達到了,那么軟件就不需要人進行「架構(gòu)設(shè)計」了。簡單的從架構(gòu)設(shè)計的結(jié)果(當然也是結(jié)構(gòu)化的),生成代碼,這方面目前的計算機還是有能力勝任的。
任何不符合實際場景的計算結(jié)果,用戶都認為是「缺陷 」,而在系統(tǒng)中產(chǎn)生此類異常結(jié)果,往往需要「程序員」為此承擔相應(yīng)的責任。吶,回想一下,在沒計算機的時代,反而往往都是店小二算錯了帳自己賠,沒有人會去責怪算盤。這是為什么,因為算盤足夠簡單,簡單到不需要做任何的監(jiān)控系統(tǒng)、不需要記錄任何的日志,連「三下五除二」這樣的操作規(guī)則,都已經(jīng)被社會化學習消除了使用成本。最終,一切出錯的原因只有一個:用鍵盤的人。
是的,計算機系統(tǒng)生來就是是不可靠的,它不可能像「算盤」一樣在運行期不依賴任何的自然資源。斷電了,會引發(fā)故障;光纖斷了,會引發(fā)故障;磁盤滿了,會引發(fā)故障。。。一系列的不確定因素,導致「分布式系統(tǒng)」架構(gòu)設(shè)計比「主機系統(tǒng)」的架構(gòu)設(shè)計復雜的多,原本不需要操心的事情,都需要從更上層的軟件層加以解決了。
所以,當前架構(gòu)工作的很大一塊,都隨著分布式系統(tǒng)規(guī)模的增大而加大了比重。也許,導致世界上最聰明的一伙人都去解決計算機的問題了。
4、架構(gòu)需要作出一系列非技術(shù)選擇
架構(gòu)既然是個解決方案,自然有很多可以自由選擇的領(lǐng)域,有很多受限的前提條件。這些外圍因素,往往還系統(tǒng)背后的個人、團隊、企業(yè)的價值觀、以及非 IT 能力有關(guān),這是一個很容易被忽視的點。
與人和團隊的關(guān)系
架構(gòu)往往是與個人或者團隊的能力有關(guān)的,因為架構(gòu)前一部分是設(shè)計工作,后一部分是代碼框架的落地工作。可以沒有一個十全十美、滿足各方需求的方案,架構(gòu)過程中有很多都是妥協(xié)的結(jié)果,有的是向需求妥協(xié),有的是向運維妥協(xié),有的是向個人英雄主義妥協(xié)。另外,絕大部分的選擇都是人作出的,這導致了和人、團隊的水平形成了很大的耦合關(guān)系。
早在 1895 年,法國心理學家勒龐在他的心理學名著「烏合之眾(The Crowd)」就早已經(jīng)說過:一群精英所作出的群體決定,很有可能是最愚蠢的決定。有時候,技術(shù)團隊不能太強調(diào)民主;有時候,技術(shù)團隊中的強強產(chǎn)生的效果是「1 + 1 \< 1」。一個良好的、強弱結(jié)合的組織結(jié)構(gòu),才有可能孵化出優(yōu)秀的工具,再進階為一個優(yōu)秀的產(chǎn)品,也有利于成員梯隊的培養(yǎng)。
團隊越大,一個優(yōu)秀的架構(gòu)設(shè)計方案被嚴格執(zhí)行下去的可能性越小。第一,制定方案的人和落地方案的人大多數(shù)情況下都有脫節(jié),很多設(shè)計精巧的方案細節(jié)到了執(zhí)行者的手里,會被忽視。第二,為了統(tǒng)一一個團隊的認識結(jié)構(gòu)、設(shè)計理念,這部分的培訓成本往往都是各個雇主不愿意付出的。第三,方案的描述本省是「不精確」的,還很容易存在文檔過期的情況,在軟件及交付的各個環(huán)節(jié),任何參與者都有機會以自己的知識背景作為出發(fā)點進行理解,并自豪地加上自己的「杰作」。
與企業(yè)的價值觀相關(guān)
企業(yè)的價值觀,最直接的體現(xiàn),就是企業(yè)的投資組合。
在大型的企業(yè)里,軟件產(chǎn)品的采購往往會受制于「采購部」,也會受制于不懂 IT 的公司級領(lǐng)導所下達的行政干預(yù),有些理由好像聽上去也「很有道理」:采購過為什么還要采購,要「保護投資」。往往到了這個層面,程序員、架構(gòu)師都紛紛表達了無奈。
軟件,包含代碼和數(shù)據(jù)。它不是一個簡單的能夠按照「固定資產(chǎn)折舊」進行的固定資產(chǎn)。它透射的是使用者對客觀世界的認識,也需要隨著對客觀世界認知的變化而變化,因此版本對于軟件來說就是一個時刻認知的快照沉淀。
行業(yè)的快速發(fā)展,企業(yè)的快速發(fā)展,勢必推動企業(yè)信息系統(tǒng)的快速發(fā)展。對于企業(yè)而言,其價值是能夠找到感知行業(yè)、感知產(chǎn)品、感知用戶、感知企業(yè)內(nèi)部運營的觸角,每個社會中的實體不管是個人,還是產(chǎn)品都能夠在系統(tǒng)中找到它的影子。
對企業(yè)主而言,IT 是一個長期的投資行為。陳舊的、不符合時代背景的軟件,是會變成降低企業(yè)生產(chǎn)力的絆腳石。
5、代碼是架構(gòu)設(shè)計的落地實現(xiàn)
現(xiàn)今任何的計算機高級編程語言,例如 Java/C/C++,或者更高層的 DSL,都是人與計算機之間的「單向語言」。這些「單向語言」,并非自然語言,大多數(shù)由程序員編寫,再交由計算機進行執(zhí)行,在很長的一段時間內(nèi),信息系統(tǒng)都是以這種方式與人進行交互。 (當然,也可以慢慢的等待「Siri」之類的助手長大成人,成為一名架構(gòu)師,也許那個時候,廣大架構(gòu)師需要轉(zhuǎn)行了。)
代碼是架構(gòu)實現(xiàn)的核心,通過代碼可以完成對現(xiàn)實世界的「虛擬化」:
概念的虛擬化
能力的虛擬化
實體的虛擬化
記憶的虛擬化
協(xié)作的虛擬化
通過一些例子,有助于理解:
概念的虛擬化:一個業(yè)務(wù)概念的類定義
能力的虛擬化:一個方法對多個輸入數(shù)據(jù)進行加工并返回結(jié)果
實體的虛擬化:一個類的實例,即具體的數(shù)據(jù)
記憶的虛擬化:一條關(guān)系型數(shù)據(jù)庫的行記錄
協(xié)作的虛擬化:遠程方法調(diào)用
是的,代碼是計算機的指揮者,代碼是把人類智慧「賦能」給計算機的一種語言。
代碼到不到位,寫的好不好,對設(shè)計的落地實現(xiàn)會產(chǎn)生很大的影響。
6、其實,架構(gòu)是一種用計算機解決問題的綜合能力
很多時候我們看到的「系統(tǒng)架構(gòu)圖」,其實是針對目標問題所設(shè)計的「計算機領(lǐng)域的解決方案」,是一種設(shè)計圖紙。
可以說,「架構(gòu)工作」不僅要能夠交付「設(shè)計圖紙」,還要能夠「建地基、搭房梁」。
宏觀層面:對特定問題,進行解決方案的設(shè)計
微觀層面:對后續(xù)的編碼工作,形成與解決方案核心相一致的代碼框架
做好「架構(gòu)工作」有很多非技術(shù)的「軟實力」,比如:
對于團隊中成員職能的正確定位,知道他們真正擅長什么
深挖至本質(zhì)的問題分析
多視角、符合人性的換位思考
舍棄一些力所能及,但影響專注的「雜事」,合理的說「不」
具備一定的投資意識,從更高、更長遠的視角,看待投入與產(chǎn)出
網(wǎng)站建設(shè)專家中科服網(wǎng)絡(luò)( www.xinzz.cc), 專注于高端品牌網(wǎng)站建設(shè)的解決方案,為您提供專業(yè)、安全的企業(yè)展示網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、商城系統(tǒng)網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)站認證、網(wǎng)絡(luò)營銷、并提供一站式互聯(lián)網(wǎng)基礎(chǔ)服務(wù)。7×24小時專業(yè)技術(shù)支持,互聯(lián)網(wǎng)用戶服務(wù)的選擇。