<rp id="kbk7q"></rp><th id="kbk7q"><track id="kbk7q"></track></th>
<dd id="kbk7q"></dd><progress id="kbk7q"><pre id="kbk7q"></pre></progress>

  • <th id="kbk7q"><pre id="kbk7q"><sup id="kbk7q"></sup></pre></th>

  • <dd id="kbk7q"><pre id="kbk7q"></pre></dd>

    <rp id="kbk7q"></rp>
  • 您的位置:知識庫 ? 軟件設計

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

    作者: 王概凱  來源: InfoQ  發布時間: 2016-04-17 22:27  閱讀: 29297 次  推薦: 16   原文鏈接   [收藏]  

      上篇:架構漫談(四):如何做好架構之架構切分

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

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

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

      成本為王

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

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

      軟件扮演的角色

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

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

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

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

      軟件開發的架構演變

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

      軟件架構的出現

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

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

      下篇:架構漫談(六):軟件架構到底是要解決什么問題?

    16
    1
    標簽:架構

    軟件設計熱門文章

      軟件設計最新文章

        最新新聞

          熱門新聞

            中文大香蕉在线影院