編程語言的歷史

我是昨天在梳理生態應用開發、低代碼開發工具到底需要啥樣的開發語言而有感整理的。

計算機硬件、操作系統、編程語言,這是計算機工業的三大基礎件。咱們今天主要說編程語言。

(1)開啓

1946年,世界上第一臺通用計算機ENIAC產生。但真正要說把全球整個IT產業帶起來的,要說兩個公司:

1、一個是IBM,1964年發佈System/360大型機,開啓主機工業時代。當然,1976年貝爾實驗室發佈Unix和C語言,也值得紀念

2、一個是Apple,1977年發佈Apple II,開啓PC工業時代。當然,1983年IBM發佈PC兼容機開放標準,也值得紀念

一開始的計算機控制,用的是最原始的01010二進制編碼。還是IBM牛逼,在1953年發佈IBM 650大型主機時,研發出來彙編語言,這是間於機器和人類之間的一種語言,堪稱創世紀,把人和機器連在了一起。

一開始計算機很昂貴也很複雜,所以主要用於科學研究和軍事。所以,1957年,IBM發明了Fortran語言,主要目的用於科學計算。

隨後,大型企業也開始爲了計算財務、稅務、薪資、庫存,使用開計算機。早在1953年,安達信會計師事務所就爲幫助通用電氣公司提高薪資處理效率而安裝了美國第一臺商用電腦,從此開創了企業信息化的時代。COBOL開發語言於1958年產生。現在,全球很多金融機構,還有很多COBOL代碼仍然在運行。

Fortran和COBOL從一開始設計的時候就都有自己的明確目標,一個偏科學計算一個偏商業邏輯。到此爲止,要搞一些通用型的其他東西,只有彙編。這就不大好。1972年,貝爾實驗室的 D.M.Ritchie爲了開發Unix,特意發明了C語言。這是歷史上第一個人類可流暢使用的通用編程語言。

到了1980年,軟件需求越來越複雜,代碼規模越來越大,C語言的代碼組織方式已經不容易Hold住。於是,一種面向對象的編程語言設計哲學產生,因此也探索性地產生了第一個面向對象開發語言:SmallTalk。不過還是C語言的生命力強勝啊,Bjarne Stroustrup在1979年從劍橋大學計算機中心來到貝爾實驗室,開始把C語言改造成帶類的C語言,1983年正式命名爲C++。

(2)PC時代編程語言

我接觸計算機比較晚,1993年才接觸計算機,從ENIAC計算機發明算起,已經快過去50年了。不過即使算整個計算機史到現在2020年也才74年,我陪着這個行業也走過了27年(小30年了)。我是自學的C語言。當時計算機資源非常寶貴,所以我和前輩們一樣,都是在紙上寫好代碼並且反覆推演,有了上機機會就趕快敲入代碼並進行調試,所以也就是在那個時候,練成了我們代碼設計、嚴謹邏輯思考、飛速打字的好習慣。後來總有一些操作系統內核級的東西繞不過去,我就又自學了彙編語言。等真正用C++的時候,已經是VC++4.0的版本了,用MFC類庫寫Windows窗口GUI應用。

但我並未用C++寫過商用軟件,我真正拿到收入的反而是DBase系列,以及後來衍生的FoxBase、FoxPro for DOS、FoxPro for Windows。Dbase產生於1980年,我用的是1984年用C語言重寫的DbaseIII這個版本。當年這些編程語言都是偏商業應用的,爲PC單機而準備,GUI開發、業務邏輯開發、SQL操作數據庫,三位一體。後來隨着局域網的產生、互聯網的產生,開發語言纔不斷分化,有的擅長前端UI層,有的擅長業務邏輯層,有的擅長後端數據層。

我一直沒用過Basic語言,雖然BASIC在1964年就被John Kemeny 和他的老師 Thomas Kurtz發明出來了,John Kemeny這傢伙還是人工智能的鼻祖,人工智能編程語言LISP就是他的傑作,想想一個人發明兩個編程語言也是夠牛的。後來是蓋茨把BASIC移植到PC機上,開創了微軟帝國。真正在90年代火翻天的Windows應用開發三劍客是:VB、PowerBuilder、Delphi。VB和PB都是1991年產生,而Delphi最晚,是1995年發佈。我學習Delphi是1996年,算比較早的。

(3)Web時代編程語言

但其實,1995年是什麼年份?1995年既是PC最輝煌的年代,因爲最風靡的PC操作系統Windows95在這一年發佈了。但是,這也是全球互聯網爆發之年,因爲這一年,Amazon電子商務、雅虎資訊門戶都創立了。這一切都得益於WWW之父,歐洲核子研究組織的研究員:蒂姆·伯納斯·李,是他在1991年發佈了四個東西:URL、網頁編輯工具、網頁瀏覽器、網頁服務器。1993年,歐洲核子研究組織宣佈萬維網對任何人免費開放。1993年,伊利諾斯大學的學生馬克·安德列森寫出了Mosaic瀏覽器,後來他在1994年成立Netscape公司。所以說,HTML算是1991年就發明了,現在都HTML5標準了。

一開始,互聯網只用於信息展示,不能作爲應用。人們熱切想在互聯網上搞應用。於是,一堆過去做自動化腳本的編程語言現在搞出新名堂,支持互聯網應用開發。首當其衝的就是四大動態腳本類編程語言:1987年發明的Perl、1991年發明的Python、1994年發明的PHP、1995年發明的Ruby。Perl和Python都發明的比較早,一開始用於UNIX操作系統服務器端自動化Shell編程。但PHP和Ruby顯然是爲互聯網而來的。你看PHP,實際上人家一開始的全稱是:Personal Home Page。

服務器端具備了應用開發能力,網頁端也得配合。於是,1995年Netscape公司的Brendan Eich發明了Javascript,但其實和JAVA沒有半毛錢關係,只不過當時JAVA火的一塌糊塗,Netscape公司正在和JAVA的發明公司Sun公司合作,所以就命了這麼一個名。Javascript其實從設計到命名都比較草率和隨意,沒想到活的這麼久。

說到JavaScript,就必須要說到JAVA了。Sun是Andy Bechtolsheim在斯坦福上學時製造了一種強大的圖形工作站計算機,後來於1982年創辦Sun公司。到了1991年,Sun公司想進軍消費智能硬件,就搞了一個研究小組,JAVA之父詹姆斯·高斯林他們就在1992年搞出了一個叫Oak的東西,爲了支撐各種繁多的消費硬件,爲了讓平庸的消費者不會弄崩潰這些智能程序,他們發明了虛擬機這種運作平臺。但是發明出來發現無人問津,甚是鬱悶。轉機出現在1994年,當時互聯網熱了起來,他們抓住了時機轉向互聯網應用開發。當時網頁都是靜態的內容展示,人們渴望更多的動態和互動。於是Sun公司和Netscape合作,Sun公司發明Applet,通過插件方式運行在瀏覽器客戶端,而Netscape公司發明javascript,讓javascript可以操作HTML,使HTML可以動態起來。我是1997年開始學習Java的,而Java成氣候是1998年,這一年,Sun公司發佈了三大標準規範並且免費開放,這就是:J2ME(手機設備)、J2SE(PC設備)、J2EE(服務器設備)。所以,1998年,IBM和BEA都瘋狂進入,用Java開發語言實現J2EE規範的中間件,這就是後來的WebSphere和WebLogic。

客戶端能動態了,服務器端也能動態了,就差中間了。畢竟HTML是用於內容展示的,不是用於數據表示的。所以1998年W3C制定了XML1.0規範,這是從HTML這個方向裁剪出來的一個子集。但是 ECMAScript委員會他們從javaScript這個方向也裁剪出來一個解決方案,那就是JSON,於2001年發佈,在2005年之後因爲比XML簡潔而流行。另外再提一句,AJAX也因爲Google Gmail應用而在2005年伴隨Web2.0用戶體驗交互熱潮風靡全球,其實AJAX是微軟在1998年就發明了。

微軟在Web時代是氣喘吁吁。微軟搞過IE瀏覽器軟件,打過互聯網大戰第一仗。微軟還自己搞過bing搜索,現在也是全球第二大搜索引擎,給微軟每年帶來的營收也不小。社交網絡這種東西偏運營,對於微軟這樣的技術產品研發商不太合適,但最後微軟還是併購了一個LinkedIn,不算太輸。倒是微軟在通信方面比較搖擺:微軟收購過HotMail郵箱服務,這是互聯網基礎在線服務。微軟還自己搞過MSN Messager,後來還收購過Skype,現在又搞Team。Web互聯網時代,Sun搞JVM、Java語言、J2EE,紅遍互聯網世界。微軟當然不能落後,微軟就挖來Delphi的發明人安德爾斯,搞了一套.Net、C#。不過當年微軟即使不趕這個互聯網熱,也確實需要.Net和C#。因爲微軟的看家應用開發語言VB我一直看不上,VC++又太底層不易於開發商業應用。而且微軟的Windows95內核是從DOS一路上來的,不像NT這種服務器端操作系統有Client/Server內核保護機制,所以對於寫的比較爛的應用或者不懷好意的應用,容易把Windows弄的速度特別慢或者直接藍屏崩潰,大家都以爲是微軟的問題。微軟也很冤枉,所以微軟也急需虛擬機這種內存保護和內存自動回收管理機制。所以Don Box說.Net是更好的COM,我一下子理解了。

在Web時代的黃昏,還留下一個小尾巴咱們也值得講講。一個是發明C#的安德爾斯,搞了一個可以在瀏覽器端運行的C#吧,命名叫TypeScript。而發明Chrome瀏覽器的Google,則把Chrome的JavaScript解釋引擎獨立出來成爲NodeJS,以便實現JavaScript在服務器端運行。在Web時代的黃昏,這兩個的舉動尤其搞笑。

(4)商用開發語言

咱們梳理的時間線到了2006年,但是我先暫時按下移動時代不表,我先撿回來說說商用開發語言這個特定兵種。自從1958年發明完大型機的COBOL,1980年發明完PC機的DbaseScript,咱們還沒太介紹更多的商用邏輯開發語言。

首先提到的就是SAP創造的ABAP。ABAP最初是用於報表開發的,是隨着1979年R/2套件開發而逐步產生的。你可以這麼理解,ABAP一開始就好像是EXCEL表格的函數和VBA宏腳本語言。這套語言在1983年發佈。要知道,VBA宏腳本語言,是微軟1991年才發明的,到了1993年才隨着Excel5.0的發佈而發佈。

後來,SAP爲了方便上層應用簡單開發,就把ABAP逐步擴張,到了1989年就成熟了。所以,R/3的應用模塊就用ABAP開發了,1992年R/3發佈。要知道,1992年,COBOL已老,JAVA還剛剛產生,Dbase小兒科,C++太底層,還真沒有合適的商業應用開發語言。所以ABAP被髮明出來也是天時決定。但是2001年SAP研發Web的ERP套件時就沒有自己另外發明開發語言了,而是直接用了最火爆的Java語言。而Oracle的ERP起步就比較晚,所以一上來就是Java,Oracle ERP一直沒有創造自己的開發語言,覺得大量的程序員都默認掌握Java和SQL這兩大流行殺器,無須再簡化。

但是,創辦於1999年的Salesforce,在2004年研發PaaS開發平臺時,卻創建了一種自己的商業應用開發語言APEX。要知道,1999年是Java如日中天的時候,Salesforce也是用Java開發的。2004年Java更是在業界大行其道,但Salesforce爲啥自己要創建一種開發語言呢?SAP創造ABAP是有天時限制,你Salesforce有啥限制?

我後來想明白這個問題了。這和Salesforce創始人的初衷哲學有很大關係。他一直希望人們能夠像使用互聯網一樣使用應用軟件,所以Salesforce一直追求在線營銷、在線銷售、在線自助試用、在線自助配置初始化、在線自助訂購在線付費、在線社區獲得支持。當然他也一直希望人們能夠很簡單地創建應用。所以在配置平臺和開發平臺集成平臺之間,產生了低代碼開發平臺:Force.com、APEX開發語言、AppExchange應用商店,而2018年收購MuleSoft,更可以通過調調Open API就能快速開發一個應用了。這樣,APEX就成了API的粘合工具了。這和AWS推的Serverless 函數即服務殊途同歸。這是在線雲服務時代的未來大趨勢。

說起API粘合,我還想起一個編程語言,那就是:Lua。2003-2006年,網絡遊戲特別火。遊戲也是一種特殊的應用軟件,只不過用漂亮的劇情、音樂、圖片、動畫把它包裝的更吸引人,它其實也有引擎,也有功能,也有API。我過去玩帝國時代時候就特別癡迷地圖編輯器,我還鑽研過後臺的腳本文件結構。想想帝國時代自帶的那幾個英雄故事就是遊戲工作室的工作人員用腳本構建起來的。所以Lua語言小巧玲瓏地把C++的函數粘合起來,對於我等C++渣們來說,無疑是個福音。

(5)移動時代編程語言

現在讓我們來到移動開發時代吧。這個時代主要是由Apple和Google這兩家公司帶領起來的。

來源於喬布斯的Next公司的Next操作系統用Object-c(Next操作系統本質上是從FressBSD Unix改造過來的),所以iOS用Object-c。因爲iOS用Object-c,所以iPhone上面的應用就用Object-c。就這麼個邏輯。

而Google創造出Android(其實是併購的),操作系統內核是Linux,上層應用開發語言是Java。爲啥選Java,就是因爲Java一開始發明就是爲智能硬件而設計的啊,而且1998年已經發布J2ME規範,最成熟。而且Java程序員好多好多。Linux+Java,Google這個技術選擇甚是現實,可以方便快速追趕Apple。

但是,現在,移動時代基本是iOS和Android的天下了,進入雙子星市場壟斷格局,誰也幹不掉誰。所以雙方都開始歇下來,做更好。2014年,Apple公司推出Swift開發語言,2017年Google推出Kotlin開發語言。

隨着這兩大殺器語言甚是優美,但是也拗不過萬金油的程序員,獨獨鍾愛JavaScript。所以移動Web時代有BootStrap這樣的多端適配自響應框架,移動App時代Facebook在2013年還發布了React框架,2015年又流行Vue框架,2017年又流行小程序框架,幾乎兩年換一茬。換來換去也就是圍繞JavaScript這個技術在搞。

(6)雲計算、大數據、人工智能時代編程語言

移動時代,都是終端技術上發力,現在風水輪流轉,又回到了服務器端發力。

雲時代,主要是多租戶、分佈式,如何併發執行不干擾是關鍵。併發是人類很早就做鬥爭的東西。從1998年愛立信創造erLang,到2009年的Golang,到2012年的Rust,都在致力於解決這個問題。但我獨愛Golang,從2009年它一發布我就眼前一亮,太工程簡潔了,就得這麼幹,對於中國萬金油的程序員,就得給他們格式化的死死的纔不會犯錯。

說到大數據,不管你怎麼繞,比如開發Hadoop的Java、開發Spark的Scala,最後你還得繞回該死的SQL,這和JavaScript一樣你看不慣它但是你就是打不死它。如果說Kotlin是終端上更好的java技術,那麼Scala就是服務器端上更好的java技術,就這麼回事。

說起人工智能,我們先提提經典的科學計算、數據統計、數據挖掘。除了世界上第一個開發語言1957年發明的Fortran,那就得數1980年發明的R語言。真正的人工智能編程語言其實是1958年產生的LISP語言,就是咱們文章最前面提到的曾聯合發明BASIC編程語言的麥卡錫。不過受兩大人工智能深度學習平臺之一的PyTorch影響,Python現在又成爲了最流行的人工智能應用的開發語言。有時候我也在想,爲啥某個技術是由某個編程語言開發的,後來也想明白了,可能那個主導人就比較擅長某個編程語言而已,沒啥適不適合的。

如果讓我自己來選擇開發語言:

UI前端層是HTML、JavaScript

頁面層是:Python和PHP雖然都行,但Python從Web時代過渡到了人工智能時代,那就選擇一門:Python

業務邏輯層是:Golang

數據層是:SQL

(7)招聘

去年,爲了開放生態、開放平臺、微應用、低代碼開發平臺,我立了一個研究項目,那就是超級小程序。深入到了類JavaScript語言的解釋器。後來出了一個Demo演示,發了一個開源項目,發表了一篇論文就結項了。今年想想,這事還得繼續專門研究員持續研究起來。

我去年年底想招一個高級程序員,要求是精通Python和JavaScript,職責是來幫助研究員加快原型開發、成果工程化轉化,如果還能把低代碼編程語言研究這事也能順接起來那就更棒了。所以我就搞了一個招聘簡歷來測試到底是不是擅長一門開發語言。很多程序員用一種編程語言寫一輩子代碼、開發過無數個項目,也對編程語言其實僅僅止步於入門。

我在想,測驗他們的什麼呢?我就舉了一些測試點:

一、開發語言特性類:

1、動態語言和靜態語言的優缺點是什麼?

2、強類型和弱類型有什麼設計考量?

3、對象管理、接口管理、運行時類型信息,幾個主流開發語言之間的對比差異

二、計算機控制類:

1、內存管理,幾個主流開發語言之間的對比差異

2、線程管理、併發管理、異步管理,幾個主流開發語言之間的對比差異

3、進程間通信、遠程調用,幾個主流開發語言之間的對比差異

三、編譯與運行類:

1、作爲解釋性腳本語言之間,他們在解釋性腳本方面有啥差異?

2、解釋器原理是什麼?和虛擬機模式對比分析

3、如何跨平臺?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章