作者**了軟體發展火熱的根本原因以及軟體扮演的角色等問題。就像說中所提到的我們並不缺架構實踐,而是缺少對於架構的反思。
軟體的歷史,實際上可以說是用機器模擬人的歷史。不管大家(包括在這個歷史過程中的參與者)有沒有意識到,我們都有意無意的在計算機上模仿人類的行為。從馮諾依曼結構開始,程式邏輯開始脫離硬體,採用二進位制編碼。加上儲存,配合輸入輸出,乙個簡化的大腦就出現了。圖靈機則是模擬大腦的計算,用數學的方式把計算的過程定義了出來,著名的邱奇 - 圖靈論題:一切直覺上能行可計算的函式都可用圖靈機計算,反之亦然。軟硬體兩者一結合,乙個可程式設計的大腦出現了,這也是現在為什麼我們把計算機叫做電腦。在硬體上編寫出的程式,就是軟體,是用來控制硬體的行為的。
成本為王
在初期,軟體使用二進位制編寫的,從硬體到軟體,成本都非常的高。隨著半導體技術的進步,硬體的成本越來越低,效能越來越高,甚至出現了摩爾定律:當**不變時,積體電路上可容納的元器件數目,約每隔 18-24 個月增加一倍,效能提公升一倍。軟體方面,為了簡化難度,開始採用彙編,進一步出現了類似於人類的語言的高階語言,比如 c/c++/j**a 等,這使得人類可以用類似於人的語言來和計算機溝通。軟體工程師慢慢越來越多,開發軟體的成本也越來越低。計算機就好像是乙個只需要電,不需要休息的人,可以無休無止的工作。
人們越來越願意把原來只有人才能做的事情,交給計算機來做。結果就導致軟體越來越豐富,能夠做的事情也越來越多,成本也越來越低。可以這麼說,成本是我們為什麼採用軟體的主要動力,可以節省大量的人員培訓,減少雇員的數目。隨著網際網路的發展,人類社會也開始軟體化了。原來必須實體店來進行售賣的,搬到網際網路上,開店成本更低,並且能夠接觸到更多的人。想象一下,乙個門店每天的**達到百萬級別是很恐怖的,由實體空間大小來決定。但是在網際網路上,訪問量千萬級別都不算什麼。最終的結果就變成,每個人能夠負擔的工作越來越多,成本越來越低。這也是為什麼軟體這麼熱的原因。
軟體扮演的角色隨著軟體的規模的變大,做好乙個軟體也變得越來越難了。早期的程式設計師寫程式,主要是為了幫助自己研究課題。這些程式設計師熟練了之後,提高了自己的生產力,並發現還可以幫助別人寫程式,慢慢軟體就變成了乙個獨立的行業。程式從早期由乙個人完成,也逐漸變成了由很多不同角色的人共同合作來完成。以下討論的前提,都是基於幫助別人寫程式,多人合作的基礎上的。結論對於單人為自己寫程式也適用。在沒有軟體之前,每個人幹自己的工作,自行儲存自己的工作結果。人們面對面或者通過**等溝通,如下圖所示。
有了軟體之後,實際上,我們是把我們日常生活中所做的事情,包括我們自己本人都一起虛擬化到了計算機中。而人則演化成了,通過計算機的輸入輸出裝置,控制計算機中的自己,來完成日常的工作,以及與其他人的溝通。也就是說,軟體一直以來的動力,始終都是來模擬人和這個社會的。比如模擬大氣運動(天氣預報),模擬人類社會(網際網路社交),模擬交易,包括現在正在流行的 vr,人工智慧等等。模擬的物件越來越高階,難度越來越大。不管如何發展,模擬人的所有行為都是乙個大的趨勢。也就是說,軟體的主要目的,還是把人類的生活模擬化,提供更低成本,高效率的新的生活。從這個角度來看,軟體主要依賴的還是人類的生活知識。軟體更多的是扮演乙個 cost center,這也是為什麼會出現很多的軟體代工。軟體開發的架構演變
軟體工程師是實現這個模擬過程的關鍵人物,他必須先理解人是怎麼在日常生活中完成工作的,才能夠很好的把這些工作在計算機中模擬出來。可是軟體工程師需要學習大量的計算機語言和計算機知識,還需要學習各行各業的專業知識。軟體工程師本身的培養就比較難,同時行業知識也要靠時間的積累,這樣就遠遠超出了軟體工程師的能力了。所以軟體開發就開始有分工了,行業知識和業務的識別,會交給 ba,系統的設計會交給架構師,設計的實現交給架構師,實現的檢驗交給測試,還有很多其他角色的配合。為了組織這些角色的工作,還有專案經理。這就把原來乙個人的連續工作,拆分成了不同角色的人的連續配合,演化成了不同的軟體開發的模式。然後慢慢演變出專門為別人開發軟體的軟體公司。
軟體架構的出現
如同前面描述的架構的定義,軟體架構的出現也是同樣的。一開始是懵懵懂懂的去寫軟體,後來慢慢的就有意識的去切分,演變成了不同的架構。這個背後的動力也是一樣的,就是提公升參與的人的利益,降低成本。導火索也是軟體工程師的任務太重,我們需要把很多任務作拆分出來。拆分的原則也是一樣的,如何讓權責一致。同樣,這個拆分也是需要組織架構的調整,來保證架構的落地。具體如何分拆,如何調整,我們將在另外一篇中著重討論。
以上通過簡單的描述計算機和軟體的發展歷史,闡明軟體的本質,其實就是通過把人類的日常工作生活虛擬化,減少成本,提公升單個人員的生產力,提公升人類自己的利益。軟體工程師的職責在這個浪潮中,不堪重負,自然而然就分拆為不同的角色,形成了乙個獨特的架構體系。這一切的背後,仍然是為了提公升人類自己的利益,解決人類自己的問題
《架構漫談》閱讀筆記三
今天將 架構漫談 又讀了一遍,在此進行了總結 第一篇主要在介紹了什麼是架構以及為什麼會產生架構。文章中提到,架構是把乙個整體切分成不同的部分,由不同角色來完成這些分工,並通過建立不同部分相互溝通的機制,使得這些部分能夠有機的結合為乙個整體,並完成這個整體所需要的所有活動。比如平時像我們學習中有很多情...
架構漫談閱讀筆記三
在識別出問題後,大部分問題都會迎刃而解,但還是會有一些問題需要做出相應的調整,也就是架構的切分。切分是乙個很生動的詞彙 切分團體中每個人應得的 蛋糕 也就是合理分配每個人的利益。利益是乙個人生存的根本,所有維護利益是每個人的本能,人不為己天誅地滅 正是由此而來。有捨才有所得,在這個模式下,每個人都必...
閱讀筆記之 《架構漫談》三
我們要認識到,架構實際上解決的是人的問題。我們人需要什麼,應該用什麼東西來滿足我們的需要,通常不只有乙個東西能解決我們的需求,也不只有乙個需求用到同乙個東西,根據我們需求的不同,相同的東西可能會有不同的用法。我們必須要有這樣乙個概念,就是我們是為了在解決乙個具體的問題的前提下,才需要能解決我們問題的...