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