架構(gòu)漫談:什么是軟件
架構(gòu)漫談:什么是軟件
2018-08-06 09:59:57 來(lái)源:網(wǎng)絡(luò) 作者:王概凱
搶沙發(fā)
2018-08-06 09:59:57 來(lái)源:網(wǎng)絡(luò) 作者:王概凱
摘要:軟件工程師的職責(zé)在這個(gè)浪潮中,不堪重負(fù),自然而然就分拆為不同的角色,形成了一個(gè)獨(dú)特的架構(gòu)體系。
關(guān)鍵詞:
企業(yè)架構(gòu)
前面通過幾篇文章,把什么是架構(gòu),如何做好架構(gòu)等必要的概念澄清了一下。這些概念對(duì)于在各種不同的領(lǐng)域都應(yīng)該也是有用的,需要讀者自行思考,并應(yīng)用到自己所在的領(lǐng)域中。在這篇文章開始,我們用同樣的思考,來(lái)看看軟件是怎么回事,以及如何運(yùn)用架構(gòu)思維,更好的設(shè)計(jì)和實(shí)現(xiàn)軟件。
馮諾依曼結(jié)構(gòu),圖靈機(jī),以模擬人為目標(biāo)
軟件的歷史,實(shí)際上可以說是用機(jī)器模擬人的歷史。不管大家(包括在這個(gè)歷史過程中的參與者)有沒有意識(shí)到,我們都有意無(wú)意的在計(jì)算機(jī)上模仿人類的行為。從馮諾依曼結(jié)構(gòu)開始,程序邏輯開始脫離硬件,采用二進(jìn)制編碼。加上存儲(chǔ),配合輸入輸出,一個(gè)簡(jiǎn)化的大腦就出現(xiàn)了。圖靈機(jī)則是模擬大腦的計(jì)算,用數(shù)學(xué)的方式把計(jì)算的過程定義了出來(lái),著名的邱奇-圖靈論題:一切直覺上能行可計(jì)算的函數(shù)都可用圖靈機(jī)計(jì)算,反之亦然。軟硬件兩者一結(jié)合,一個(gè)可編程的大腦出現(xiàn)了,這也是現(xiàn)在為什么我們把計(jì)算機(jī)叫做電腦。在硬件上編寫出的程序,就是軟件,是用來(lái)控制硬件的行為的。
成本為王
在初期,軟件使用二進(jìn)制編寫的,從硬件到軟件,成本都非常的高。隨著半導(dǎo)體技術(shù)的進(jìn)步,硬件的成本越來(lái)越低,性能越來(lái)越高,甚至出現(xiàn)了摩爾定律:當(dāng)價(jià)格不變時(shí),集成電路上可容納的元器件數(shù)目,約每隔18-24個(gè)月增加一倍,性能提升一倍。軟件方面,為了簡(jiǎn)化難度,開始采用匯編,進(jìn)一步出現(xiàn)了類似于人類的語(yǔ)言的高級(jí)語(yǔ)言,比如C/C++/Java等,這使得人類可以用類似于人的語(yǔ)言來(lái)和計(jì)算機(jī)溝通。軟件工程師慢慢越來(lái)越多,開發(fā)軟件的成本也越來(lái)越低。計(jì)算機(jī)就好像是一個(gè)只需要電,不需要休息的人,可以無(wú)休無(wú)止的工作。
人們?cè)絹?lái)越愿意把原來(lái)只有人才能做的事情,交給計(jì)算機(jī)來(lái)做。結(jié)果就導(dǎo)致軟件越來(lái)越豐富,能夠做的事情也越來(lái)越多,成本也越來(lái)越低??梢赃@么說,成本是我們?yōu)槭裁床捎密浖闹饕獎(jiǎng)恿?,可以?jié)省大量的人員培訓(xùn),減少雇員的數(shù)目。隨著互聯(lián)網(wǎng)的發(fā)展,人類社會(huì)也開始軟件化了。原來(lái)必須實(shí)體店來(lái)進(jìn)行售賣的,搬到互聯(lián)網(wǎng)上,開店成本更低,并且能夠接觸到更多的人。想象一下,一個(gè)門店每天的人流達(dá)到百萬(wàn)級(jí)別是很恐怖的,由實(shí)體空間大小來(lái)決定。但是在互聯(lián)網(wǎng)上,訪問量千萬(wàn)級(jí)別都不算什么。最終的結(jié)果就變成,每個(gè)人能夠負(fù)擔(dān)的工作越來(lái)越多,成本越來(lái)越低。這也是為什么軟件這么熱的原因。
軟件扮演的角色
隨著軟件的規(guī)模的變大,做好一個(gè)軟件也變得越來(lái)越難了。早期的程序員寫程序,主要是為了幫助自己研究課題。這些程序員熟練了之后,提高了自己的生產(chǎn)力,并發(fā)現(xiàn)還可以幫助別人寫程序,慢慢軟件就變成了一個(gè)獨(dú)立的行業(yè)。程序從早期由一個(gè)人完成,也逐漸變成了由很多不同角色的人共同合作來(lái)完成。以下討論的前提,都是基于幫助別人寫程序,多人合作的基礎(chǔ)上的。結(jié)論對(duì)于單人為自己寫程序也適用。
在沒有軟件之前,每個(gè)人干自己的工作,自行保存自己的工作結(jié)果。人們面對(duì)面或者通過電話等溝通,如下圖所示。
有了軟件之后,實(shí)際上,我們是把我們?nèi)粘I钪兴龅氖虑椋ㄎ覀冏约罕救硕家黄鹛摂M化到了計(jì)算機(jī)中。而人則演化成了,通過計(jì)算機(jī)的輸入輸出設(shè)備,控制計(jì)算機(jī)中的自己,來(lái)完成日常的工作,以及與其他人的溝通。也就是說,軟件一直以來(lái)的動(dòng)力,始終都是來(lái)模擬人和這個(gè)社會(huì)的。比如模擬大氣運(yùn)動(dòng)(天氣預(yù)報(bào)),模擬人類社會(huì)(互聯(lián)網(wǎng)社交),模擬交易,包括現(xiàn)在正在流行的VR,人工智能等等。模擬的對(duì)象越來(lái)越高級(jí),難度越來(lái)越大。
不管如何發(fā)展,模擬人的所有行為都是一個(gè)大的趨勢(shì)。也就是說,軟件的主要目的,還是把人類的生活模擬化,提供更低成本,高效率的新的生活。從這個(gè)角度來(lái)看,軟件主要依賴的還是人類的生活知識(shí)。軟件更多的是扮演一個(gè)cost center,這也是為什么會(huì)出現(xiàn)很多的軟件代工。
軟件開發(fā)的架構(gòu)演變
軟件工程師是實(shí)現(xiàn)這個(gè)模擬過程的關(guān)鍵人物,他必須先理解人是怎么在日常生活中完成工作的,才能夠很好的把這些工作在計(jì)算機(jī)中模擬出來(lái)??墒擒浖こ處熜枰獙W(xué)習(xí)大量的計(jì)算機(jī)語(yǔ)言和計(jì)算機(jī)知識(shí),還需要學(xué)習(xí)各行各業(yè)的專業(yè)知識(shí)。軟件工程師本身的培養(yǎng)就比較難,同時(shí)行業(yè)知識(shí)也要靠時(shí)間的積累,這樣就遠(yuǎn)遠(yuǎn)超出了軟件工程師的能力了。所以軟件開發(fā)就開始有分工了,行業(yè)知識(shí)和業(yè)務(wù)的識(shí)別,會(huì)交給BA,系統(tǒng)的設(shè)計(jì)會(huì)交給架構(gòu)師,設(shè)計(jì)的實(shí)現(xiàn)交給架構(gòu)師,實(shí)現(xiàn)的檢驗(yàn)交給測(cè)試,還有很多其他角色的配合。為了組織這些角色的工作,還有項(xiàng)目經(jīng)理。這就把原來(lái)一個(gè)人的連續(xù)工作,拆分成了不同角色的人的連續(xù)配合,演化成了不同的軟件開發(fā)的模式。然后慢慢演變出專門為別人開發(fā)軟件的軟件公司。
軟件架構(gòu)的出現(xiàn)
如同前面描述的架構(gòu)的定義,軟件架構(gòu)的出現(xiàn)也是同樣的。一開始是懵懵懂懂的去寫軟件,后來(lái)慢慢的就有意識(shí)的去切分,演變成了不同的架構(gòu)。這個(gè)背后的動(dòng)力也是一樣的,就是提升參與的人的利益,降低成本。導(dǎo)火索也是軟件工程師的任務(wù)太重,我們需要把很多工作拆分出來(lái)。拆分的原則也是一樣的,如何讓權(quán)責(zé)一致。同樣,這個(gè)拆分也是需要組織架構(gòu)的調(diào)整,來(lái)保證架構(gòu)的落地。具體如何分拆,如何調(diào)整,我們將在另外一篇中著重討論。
以上通過簡(jiǎn)單的描述計(jì)算機(jī)和軟件的發(fā)展歷史,闡明軟件的本質(zhì),其實(shí)就是通過把人類的日常工作生活虛擬化,減少成本,提升單個(gè)人員的生產(chǎn)力,提升人類自己的利益。軟件工程師的職責(zé)在這個(gè)浪潮中,不堪重負(fù),自然而然就分拆為不同的角色,形成了一個(gè)獨(dú)特的架構(gòu)體系。這一切的背后,仍然是為了提升人類自己的利益,解決人類自己的問題。
第三十四屆CIO班招生
北達(dá)軟EXIN網(wǎng)絡(luò)空間與IT安全基礎(chǔ)認(rèn)證培訓(xùn)
北達(dá)軟EXIN DevOps Professional認(rèn)證培訓(xùn)
責(zé)編:yangjun
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來(lái)自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),請(qǐng)及時(shí)通知本站,予以刪除。