(1)開發(fā)語言
一、面向函數(shù)
函數(shù)的發(fā)明不是為了靈活組合,而是為了代碼有可讀性,這樣,人好維護(hù)。
你可以試著不寫函數(shù),功能有多復(fù)雜、代碼就有多長,你看看你的代碼具有可讀性不?你看看這樣的代碼具有維護(hù)性不?
二、面向?qū)ο?/p>
面向?qū)ο蟮陌l(fā)明不是為了靈活組合,而是為了函數(shù)的安全性。面向?qū)ο螅押瘮?shù)分了安全級(jí)別,有的是自己私自可調(diào)用的,有的是自己的孩子可調(diào)用的,有的是所有人都能調(diào)用的。
三、面向組件
面向組件,這個(gè)事有點(diǎn)復(fù)雜。因?yàn)槊嫦蚪M件,需要編程語言和中間件一起配合才能搞定的。
面向組件的發(fā)明也不是為了靈活組合,而是為了兩個(gè)目的:
1、為了更好的編程表達(dá)。因?yàn)槊嫦蚝瘮?shù)、面向?qū)ο螅荒鼙磉_(dá)方法(function)。而組件能表達(dá)的更加豐富,可以表達(dá):Property、Method、Event。很顯然,這也不是為了靈活組合這個(gè)目標(biāo)而設(shè)計(jì)的。
2、為了爛程序員不用自己操心內(nèi)存管理。而是由組件容器中間件負(fù)責(zé)管理組件實(shí)例的創(chuàng)立、實(shí)例的計(jì)數(shù)、實(shí)例的池化、實(shí)例的掛起、實(shí)例的摧毀以及相關(guān)聯(lián)的內(nèi)存的回收。
(2)中間件
上述說到面向組件的時(shí)候牽扯到了中間件,我給大家把中間件的來龍去脈講講。
中間件出現(xiàn)在1984-1987年之間,現(xiàn)在各種中間件,其實(shí)都是40年前的中間件的細(xì)分和延伸。無數(shù)代程序員前赴后繼地重新發(fā)明輪子,用新技術(shù)一代代地重寫過去。
但是大家一定要牢記一句話:中間件,目標(biāo)都是為了解決分布式計(jì)算中出現(xiàn)的各種問題而設(shè)計(jì)的。根本不是為了靈活組合這個(gè)目標(biāo)而設(shè)計(jì)的。
1984年,Sun公司在自己的Unix服務(wù)器軟件中實(shí)現(xiàn)了一個(gè)功能,那就是跨服務(wù)器調(diào)用。采取Proxy/Stub這種生產(chǎn)者消費(fèi)者架構(gòu)思想,采取TCP/IP網(wǎng)絡(luò)協(xié)議、監(jiān)聽某個(gè)端口、傳輸二進(jìn)制數(shù)據(jù),以便達(dá)到跨服務(wù)器調(diào)用。
1986年,IBM發(fā)明了消息中間件。也就是說,你可以不用搞跨服務(wù)器函數(shù)調(diào)用,你在服務(wù)器之間來回傳輸數(shù)據(jù)即可,消息中間件來保證消息的傳輸是質(zhì)量保證的,不會(huì)丟數(shù)據(jù)、不會(huì)數(shù)據(jù)順序不對(duì)。
1986年,Bell實(shí)驗(yàn)室也對(duì)外發(fā)布了一個(gè)中間件,那就是事務(wù)中間件tuxedo。在一個(gè)服務(wù)器上保證所有邏輯在一個(gè)transaction中比較容易,但是跨服務(wù)器邏輯如何在一個(gè)transacation,這必須需要事務(wù)中間件。
1990年,IBM、Sun一堆廠商組了個(gè)委員會(huì),發(fā)布了CORBA中間件技術(shù)標(biāo)準(zhǔn)。后來Sun公司制定的J2EE中間件技術(shù)標(biāo)準(zhǔn),其實(shí)就是從CORBA借鑒而來的。
CORBA中間件和具體的Unix操作系統(tǒng)無關(guān)了,和具體的開發(fā)語言也無關(guān)了。雖然還是以來TCP/IP網(wǎng)絡(luò)協(xié)議,也是傳輸?shù)亩M(jìn)制數(shù)據(jù),但是有了自己專門的應(yīng)用級(jí)協(xié)議了,這就是IIOP。而且也擺脫了監(jiān)聽某個(gè)端口這樣的套路,而是專門獨(dú)立出注冊(cè)與發(fā)現(xiàn)服務(wù),這就是后來注冊(cè)中心、API網(wǎng)關(guān)的雛形。
1995年,微軟隨著Windows95的發(fā)布,還發(fā)布了DCOM。DCOM是微軟的面向組件的技術(shù)標(biāo)準(zhǔn),微軟在Windows95和WindowsNT中都內(nèi)嵌了組件中間件。而且,微軟還在操作系統(tǒng)中內(nèi)嵌了事務(wù)中間件。微軟的事務(wù)中間件叫MTS(Microsoft Transaction Server)。這就是IT產(chǎn)業(yè)界第一次面向組件和中間件的結(jié)合。Sun發(fā)明的RPC和IBM領(lǐng)導(dǎo)的CORBA,還都是針對(duì)面向?qū)ο笤O(shè)計(jì)的。
后來,微軟沿著DCOM,在1998年又改進(jìn)成COM+。2001年,微軟又融合了WebService技術(shù),改進(jìn)成.Net組件。
微軟的DCOM組件和組件中間件只能運(yùn)行在微軟操作系統(tǒng)之上。所以Sun公司在1997年借鑒CORBA,發(fā)布了與操作系統(tǒng)無關(guān)的J2EE組件技術(shù)標(biāo)準(zhǔn)和中間件。Sun公司也定義了自己的應(yīng)用級(jí)協(xié)議:RMI。
1998年,W3C借鑒了SGML和HTML技術(shù)發(fā)布了XML標(biāo)準(zhǔn)。2000年,W3C又借鑒CORBA發(fā)布了WebService標(biāo)準(zhǔn):
- 服務(wù)注冊(cè)與發(fā)現(xiàn)中心:UDDI
- 接口描述語言:WSDL
- 應(yīng)用調(diào)用協(xié)議:SOAP
- 數(shù)據(jù)傳輸格式:XML
- 傳輸協(xié)議:HTTP
IBM在2004年又領(lǐng)導(dǎo)發(fā)起SOA(畢竟風(fēng)靡的J2EE是Sun公司領(lǐng)導(dǎo)的)。IBM設(shè)計(jì)的SOA標(biāo)準(zhǔn)體系涵蓋以下主要方面:
- 組件規(guī)范:SCA
- 數(shù)據(jù)傳輸格式:SDO
- 業(yè)務(wù)流程編排與執(zhí)行:BEPL
其實(shí)IBM領(lǐng)導(dǎo)的SOA這場運(yùn)動(dòng)是徹底失敗的。我懷疑大家都根本不知道這三個(gè)技術(shù)。但是SOA面向服務(wù)這個(gè)詞卻流行了。
其實(shí)大家流行用的SOA,實(shí)際上是另外兩個(gè)東西:
- 服務(wù)注冊(cè)與發(fā)現(xiàn)中心:API網(wǎng)關(guān)
- 用WebService技術(shù)包裝的RPC中間件
到了2009年,VMWare公司通過資本并購一頓猛整,把Spring、Cloud Foundry、Pivotal這三家公司一頓整合。于是,Pivotal的技術(shù)布道師在2013年又發(fā)明了一個(gè)特別流行的詞:云原生。說云原生包含四個(gè)東西:微服務(wù)、容器、CI/CD、DevOps。其實(shí)CI/CD、Devops是敏捷軟件工程的東西,和云原生沒毛關(guān)系,早在他發(fā)明這個(gè)概念時(shí)已經(jīng)存在很久了也流行很久了。
其實(shí)微服務(wù)和SOA(面向服務(wù)架構(gòu))也沒毛關(guān)系。本來大家過去寫程序,和開發(fā)語言無關(guān)、和中間件無關(guān)、和框架也無關(guān)?,F(xiàn)在Spring、Cloud Foundry、Pivotal,讓大家和開發(fā)語言綁定、和框架綁定、和中間件綁定。這太她媽狗屎了。
所以,2015年,Google又領(lǐng)導(dǎo)了一幫人搞了一個(gè)CNCF組織。CNCF全稱就是Cloud Native Computing Foundation(云原生計(jì)算基金會(huì))。這下VMWare Pivotal公司的云原生喊不下去了。現(xiàn)在,VMWare Pivotal公司的技術(shù)路線,也順著CNCF技術(shù)路線走了。
唉,一代又一代聰明才智的程序員,如今又重寫了分布式的消息中間件如Pulsar、分布式的事務(wù)中間件如Seata、分布式RPC中間件如gRPC。這世界,40年來也沒啥變化。所以我特別困惑,你們都說新技術(shù)革命、新技術(shù)層出不窮,但我咋覺得技術(shù)這40年來都沒啥大變化呢?都是換姿勢而已。
有閑心的時(shí)候,我另外再給大家寫篇文章,說說如今的人工智能,也是換姿勢,和我在90年代學(xué)的東西沒啥大改變,很多現(xiàn)在人工智能的東西,在90年代其實(shí)就都有了。