西宁沐足都有什么服务
首頁 > EA > 正文

架構漫談:什么是軟件

2018-08-06 09:59:57  來源:網絡 作者:王概凱

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

第二十九屆CIO班招生
法國布雷斯特商學院MBA班招生
法國布雷斯特商學院碩士班招生
法國布雷斯特商學院DBA班招生
責編:yangjun
西宁沐足都有什么服务 玩重庆时时彩怎样稳赚 彩票破解器手机app 加入麦点商城如何赚钱 金鲨银鲨 开罗游戏冠军足球物语2 分分彩五码计划app 大乐透中奖查询 苹果手机程序开发 四川快乐12人工计划 炸金花手机版下载 玩三公扑克牌赢钱产品 赛车pk10技巧论坛 赚偏财赚钱 自动投注系统 七星彩开奖现场 传客怎样赚钱