什麼是軟件

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

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

  成本爲王架構

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

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

  軟件扮演的角色性能

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

  在沒有軟件以前,每一個人幹本身的工做,自行保存本身的工做結果。人們面對面或者經過電話等溝通,以下圖所示。測試

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

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

  軟件開發的架構演變

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

  軟件架構的出現

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

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

相關文章
相關標籤/搜索