天天看點

架構漫談(一):什麼是架構?

架構漫談是由資深架構師王概凱Kevin執筆的系列專欄,專欄将會以Kevin的架構經驗為基礎,逐漸讨論什麼是架構、怎樣做好架構、軟體架構如何落地、如何寫好程式等問題。專欄的目的是希望能抛出一些觀點,并引發大家思考,如果你有感觸或者新的感悟,歡迎聯系專欄負責人Gary(微信greenguolei)深聊。

本文是漫談架構專欄的第一篇,作者将會通過類比的方式來介紹什麼是架構以及為什麼會産生架構。

緣起                

一直以來,在軟體行業,對于什麼是架構,都有很多的争論,每個人都有自己的了解。甚至于很多架構師一說架構,就開始談論什麼應用架構、硬體架構、資料架構等等。我曾經也到處尋找過架構的定義,請教過很多人,結果發現,沒有大家都認可的定義。套用一句關于big data流行的笑話,放在架構上也适用:

Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。

事實上,架構在軟體發明時的N多年以前,就已經存在了,這個詞最早是跟随着建築出現的。是以,我覺得有必要從源頭開始,把架構這個概念先讨論清楚,隻有這樣,軟體行業架構的讨論才有意義。

什麼是架構?

架構的英文是Architecture,在Wikipedia上,架構是這樣定義的:

Architecture (Latin architectura, from the Greek ἀρχιτέκτων arkhitekton"architect", from ἀρχι- "chief" and τέκτων "builder") is both the process and the product of planning, designing, and constructing buildings and other physical structures。

從這個定義上看,架構好像是一個過程,也不是很清晰。為了講清楚這個問題,我們先來看看為什麼會産生架構。

為什麼會産生架構?

想象一下,在最早期,每個人都完全獨立生活,衣、食、住、行等等全部都自己搞定,整個人類都是獨立的個體,不相往來。為了解決人類的延續的問題,自然而然就有男女群居出現,這個時候就出現了分工了,男性和女性所做的事情就會有一定的分工,可是人每天生活的基本需求沒有發生變化,還是衣食住行等生活必須品。

但是一旦多人分工配合作為生存的整體,力量就顯得強大多了,是以也自然的形成了族群:有些人種田厲害,有些人制作工具厲害,有些地方适合産出糧食,有些地方适合産出棉花等,就自然形成了人的分群,地域的分群。當分工發生後,實際上每個人的生産力都得到了提高,因為做的都是每個人擅長的事情。

整個人群的生産力和抵抗環境的能力都得到了增強。為什麼呢?因為每個人的能力和時間都是有限的,并且因為人的結構的限制,人同時隻能專心做好一件事情,這樣不得已就導緻了分工的産生。既然分工發生了,原來由一個人幹生存所必需的所有的事情,就變成了很多不同分工的角色合作完成這些事情,這些人必須要通過某些機制合在一起,讓每個人完成生存所必需的事情,這實際上也導緻了交易的發生(交易這部分就不在這裡展開了,有機會再讨論)。

在每個人都必須自己完成所有生活必須品的生産的時候,是沒有架構的(當然在個人來講,同一時刻隻能做有限的事情,在時間上還是可能會産生架構的)。一旦産生的分工,就把所有的事情,切分成由不同角色的人來完成,最後再通過交易,使得每個個體都擁有生活必須品,而不需要每個個體做所有的事情,隻需要每個個體做好自己擅長的事情,并具備一定的交易能力即可。

這實際上就形成了社會的架構。那麼怎麼定義架構呢?以上面這個例子為例,把一個整體(完成人類生存的所有工作)切分成不同的部分(分工),由不同角色來完成這些分工,并通過建立不同部分互相溝通的機制,使得這些部分能夠有機的結合為一個整體,并完成這個整體所需要的所有活動,這就是架構。由以上的例子,也可以歸納出架構産生的動力:

  1. 必須由人執行的工作(不需要人介入,就意味着不需要改造,也就不需要架構了)
  2. 每個人的能力有限(每個人都有自己的強項,個人的産出受限于最短闆,并且由于人的結構限制,同時隻能專注于做好一件事情,比如雖然有兩隻眼睛,但是隻能同時專注于一件事物,有兩隻手,無法同時做不同的事情。ps. 雖然有少部分人可以左手畫圓右手畫框,但是不是普遍現象)
  3. 每個人的時間有限(為了減少時間的投入,必然會導緻把工作分解出去,給擅長于這些工作的角色來完成,見2,進而縮短時間)
  4. 人對目标系統有更高的要求(如果滿足于現狀,也就不需要進行架構了)
  5. 目标系統的複雜性使得單個人完成這個系統,滿足條件2,3(如果個人就可以完成系統的提高,也不需要别的人參與,也就不需要架構的涉及,隻是工匠,并且一般這個工作對時間的要求也不迫切。當足夠熟練之後,也會有一定的架構思考,但考慮更多的是如何提高品質,提高個人的時間效率)

有人可能會挑戰說,如果一個人對目标系統進行分解,比如某人建一棟房子,自己采購材料,自己搭建,難道也不算架構嘛?如果對于時間不敏感的話,是會出現這個情況的,但是在這種情況下,并不必然導緻架構的發生。如果有足夠的自覺,以及足夠的熟練的話,也會産生架構的思考,因為這樣對于提高生産力是有幫助的,可以縮短建造的時間,并會提高房子的品質。事實上建築的架構就是在長期進行這些活動後,積累下來的實踐。

當這5個條件同時成立,一定會産生架構。從這個層面上來說,架構是人類發展過程中,由懵懵懂懂的,被動的去認識這個世界,變成主動的去認識,并以更高的效率去改造這個世界的方法。以下我們再拿建築來舉例加強一下了解。

最開始人類是住在山洞裡,住在樹上的,主要是為了躲避其他猛獸的攻擊,以及減少自然環境的變化,對人類生存的挑戰。為了完成這些目标,人類開始學會在平地上用樹木和樹葉來建立隔離空間的設施,這就是建築的開始。但是完全隔離也有很多壞處,慢慢就産生了門窗等設施。

建築的本質就是從自然環境中,劃出一塊獨占的空間,但是仍然能夠通過門窗等和自然環境保持溝通。這個時候架構就已經開始了。對地球上的空間進行切分,并通過門窗,地基等,保持和地球以及空間的有機的溝通。當人類開始學會用火之後,茅棚裡面自然而然慢慢就會被切分為兩部分,一部分用來燒飯,一部分用來生活。當人的排洩慢慢移入到室内後,洗手間也就慢慢的出現了。這就是建築内部的空間切分。

這個時候人們對建築的需求也就慢慢的越來越多,空間的切分也會變成很多種,組合的方式也會有很多種,比如每個人住的房子,群居所産生的宗教性質的房子,集體活動的房子等等。這個時候人們就開始有意識的去設計房子,架構師就慢慢的出現了。一切都是為了滿足人的越來越高的需求,提升品質,減少時間,更有效率的切分空間,并且讓空間之間更加有機的進行溝通。這就是建築的架構以及建築的架構的演變

總結一下,什麼是架構,就是:

  1. 根據要解決的問題,對目标系統的邊界進行界定。
  2. 并對目标系統按某個原則的進行切分。切分的原則,要便于不同的角色,對切分出來的部分,并行或串行開展工作,一般并行才能減少時間。
  3. 并對這些切分出來的部分,設立溝通機制。
  4. 根據3,使得這些部分之間能夠進行有機的聯系,合并組裝成為一個整體,完成目标系統的所有工作。

同樣這個思考可以展開到其他的行業,比如企業的架構,國家的架構,組織架構,音樂架構,色彩架構,軟體架構等等。套用三國演義的一句話,合久必分,分久必合。架構實際上就是指人們根據自己對世界的認識,為解決某個問題,主動地、有目的地去識别問題,并進行分解、合并,解決這個問題的實踐活動。架構的産出物,自然就是對問題的分析,以及解決問題的方案:包括拆分的原則以及理由,溝通合并的原則以及理由,以及拆分,拆分出來的各個部分和合并所對應的角色和所需要的核心能力等。

感謝郭蕾對本文的策劃和審校。

架構漫談(一):什麼是架構?

繼續閱讀