架構漫談(五):什麼是軟件



        本文是漫談架構專欄的第五篇,作者將會從自己的認知角度再次反思什麼是軟件,文中作者探討了軟件發展火熱的根本原因以及軟件扮演的角色等問題。如前幾天一位架構師所說,我們並不缺架構實踐,而是缺少對於架構的反思,希望這系列文章能幫你重新理解架構,重新認識軟件。

        前面通過四篇文章,把什麼是架構,如何做好架構等必要的概念澄清了一下。這些概念對於在各種不同的領域都應該也是有用的,需要讀者自行思考,並應用到自己所在的領域中。在這篇文章開始,我們用同樣的思考,來看看軟件是怎麼回事,以及如何運用架構思維,更好的設計和實現軟件。

馮諾依曼結構,圖靈機,以模擬人爲目標

        軟件的歷史,實際上可以說是用機器模擬人的歷史。不管大家(包括在這個歷史過程中的參與者)有沒有意識到,我們都有意無意的在計算機上模仿人類的行爲。從馮諾依曼結構開始,程序邏輯開始脫離硬件,採用二進制編碼。加上存儲,配合輸入輸出,一個簡化的大腦就出現了。圖靈機則是模擬大腦的計算,用數學的方式把計算的過程定義了出來,著名的邱奇-圖靈論題:一切直覺上能行可計算的函數都可用圖靈機計算,反之亦然。軟硬件兩者一結合,一個可編程的大腦出現了,這也是現在爲什麼我們把計算機叫做電腦。在硬件上編寫出的程序,就是軟件,是用來控制硬件的行爲的。

成本爲王

        在初期,軟件使用二進制編寫的,從硬件到軟件,成本都非常的高。隨着半導體技術的進步,硬件的成本越來越低,性能越來越高,甚至出現了摩爾定律:當價格不變時,集成電路上可容納的元器件數目,約每隔18-24個月增加一倍,性能提升一倍。軟件方面,爲了簡化難度,開始採用彙編,進一步出現了類似於人類的語言的高級語言,比如C/C++/Java等,這使得人類可以用類似於人的語言來和計算機溝通。軟件工程師慢慢越來越多,開發軟件的成本也越來越低。計算機就好像是一個只需要電,不需要休息的人,可以無休無止的工作。

        人們越來越願意把原來只有人才能做的事情,交給計算機來做。結果就導致軟件越來越豐富,能夠做的事情也越來越多,成本也越來越低。可以這麼說,成本是我們爲什麼採用軟件的主要動力,可以節省大量的人員培訓,減少僱員的數目。隨着互聯網的發展,人類社會也開始軟件化了。原來必須實體店來進行售賣的,搬到互聯網上,開店成本更低,並且能夠接觸到更多的人。想象一下,一個門店每天的人流達到百萬級別是很恐怖的,由實體空間大小來決定。但是在互聯網上,訪問量千萬級別都不算什麼。最終的結果就變成,每個人能夠負擔的工作越來越多,成本越來越低。這也是爲什麼軟件這麼熱的原因。

軟件扮演的角色

        隨着軟件的規模的變大,做好一個軟件也變得越來越難了。早期的程序員寫程序,主要是爲了幫助自己研究課題。這些程序員熟練了之後,提高了自己的生產力,並發現還可以幫助別人寫程序,慢慢軟件就變成了一個獨立的行業。程序從早期由一個人完成,也逐漸變成了由很多不同角色的人共同合作來完成。以下討論的前提,都是基於幫助別人寫程序,多人合作的基礎上的。結論對於單人爲自己寫程序也適用。

       在沒有軟件之前,每個人幹自己的工作,自行保存自己的工作結果。人們面對面或者通過電話等溝通,如下圖所示。

        有了軟件之後,實際上,我們是把我們日常生活中所做的事情,包括我們自己本人都一起虛擬化到了計算機中。而人則演化成了,通過計算機的輸入輸出設備,控制計算機中的自己,來完成日常的工作,以及與其他人的溝通。也就是說,軟件一直以來的動力,始終都是來模擬人和這個社會的。比如模擬大氣運動(天氣預報),模擬人類社會(互聯網社交),模擬交易,包括現在正在流行的VR,人工智能等等。模擬的對象越來越高級,難度越來越大。

        不管如何發展,模擬人的所有行爲都是一個大的趨勢。也就是說,軟件的主要目的,還是把人類的生活模擬化,提供更低成本,高效率的新的生活。從這個角度來看,軟件主要依賴的還是人類的生活知識。軟件更多的是扮演一個cost center,這也是爲什麼會出現很多的軟件代工。

軟件開發的架構演變

        軟件工程師是實現這個模擬過程的關鍵人物,他必須先理解人是怎麼在日常生活中完成工作的,才能夠很好的把這些工作在計算機中模擬出來。可是軟件工程師需要學習大量的計算機語言和計算機知識,還需要學習各行各業的專業知識。軟件工程師本身的培養就比較難,同時行業知識也要靠時間的積累,這樣就遠遠超出了軟件工程師的能力了。所以軟件開發就開始有分工了,行業知識和業務的識別,會交給BA,系統的設計會交給架構師,設計的實現交給架構師,實現的檢驗交給測試,還有很多其他角色的配合。爲了組織這些角色的工作,還有項目經理。這就把原來一個人的連續工作,拆分成了不同角色的人的連續配合,演化成了不同的軟件開發的模式。然後慢慢演變出專門爲別人開發軟件的軟件公司。

軟件架構的出現

        如同前面描述的架構的定義,軟件架構的出現也是同樣的。一開始是懵懵懂懂的去寫軟件,後來慢慢的就有意識的去切分,演變成了不同的架構。這個背後的動力也是一樣的,就是提升參與的人的利益,降低成本。導火索也是軟件工程師的任務太重,我們需要把很多工作拆分出來。拆分的原則也是一樣的,如何讓權責一致。同樣,這個拆分也是需要組織架構的調整,來保證架構的落地。具體如何分拆,如何調整,我們將在另外一篇中着重討論。

        以上通過簡單的描述計算機和軟件的發展歷史,闡明軟件的本質,其實就是通過把人類的日常工作生活虛擬化,減少成本,提升單個人員的生產力,提升人類自己的利益。軟件工程師的職責在這個浪潮中,不堪重負,自然而然就分拆爲不同的角色,形成了一個獨特的架構體系。這一切的背後,仍然是爲了提升人類自己的利益,解決人類自己的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章