一、計(jì)算機(jī)語(yǔ)言發(fā)展史
? 計(jì)算機(jī)已經(jīng)成為人大腦的延伸
? ? ? ? 計(jì)算機(jī)已經(jīng)成為我們這個(gè)時(shí)代的核心設(shè)備,每時(shí)每刻都需要它。計(jì)算機(jī)也不再是大家以前印象中的臺(tái)式機(jī)、服務(wù)器,已經(jīng)演變成了我們身邊隨處可見(jiàn)的物體。比如:手機(jī)、平板電腦、筆記本,以及很多人沒(méi)意識(shí)到,但實(shí)際上設(shè)備內(nèi)部包含“計(jì)算機(jī)”的設(shè)備。比如:電視機(jī)、微波爐、汽車(chē),甚至小孩玩的智能小機(jī)器人等。
? ? ? ? 可以這么說(shuō), 計(jì)算機(jī)已經(jīng)成為了人類身體的延伸、大腦的延伸,成為不可或缺的一部分。未來(lái),計(jì)算機(jī)將真的進(jìn)入人體、進(jìn)入大腦,真正成為人體的一部分。比如,在科幻電影《黑客帝國(guó)》中,主角被超級(jí)針頭插在頸部后方,便能使他快速學(xué)習(xí),改變大腦神經(jīng)網(wǎng)絡(luò),幾秒就成為功夫高手,如圖 1-1 所示。

? ? ? ? 算法是計(jì)算機(jī)的靈魂,編程語(yǔ)言是塑造計(jì)算機(jī)靈魂的工具
? ? ? ? 計(jì)算機(jī)是如何工作的?對(duì)于普通人來(lái)說(shuō),這很神秘。讓計(jì)算機(jī)具備“靈魂”,可以按照人的意志運(yùn)行,甚至某天按照計(jì)算機(jī)自己的意志運(yùn)行(如果這一天實(shí)現(xiàn),科幻電影《終結(jié)者》中的場(chǎng)景也會(huì)成為人類社會(huì)的可能選項(xiàng)),其核心就是“算法”。“算法就是計(jì)算機(jī)的靈魂”算法的實(shí)現(xiàn)又依賴于“計(jì)算機(jī)編程語(yǔ)言”。
? ? ? ? 計(jì)算機(jī)編程語(yǔ)言的發(fā)展,是隨著計(jì)算機(jī)本身硬件發(fā)展而發(fā)展的。硬件速度越快、體積越小、成本越低,應(yīng)用到人類社會(huì)的場(chǎng)景就會(huì)越多,那么所需要的算法就會(huì)越復(fù)雜,也就要求計(jì)算機(jī)編程語(yǔ)言越高級(jí)。
? ? ? ? 最初重達(dá)幾十噸但一秒只能運(yùn)算 5000 次的 ENIAC(世界上第一臺(tái)計(jì)算機(jī)),只能做非常小的應(yīng)用,比如:某些情況的彈道計(jì)算。現(xiàn)在任何一個(gè)人的手機(jī)運(yùn)算能力都可以秒殺那個(gè)年代地球上所有計(jì)算機(jī)運(yùn)算能力的總和。

? ? ? ? 計(jì)算機(jī)編程語(yǔ)言的發(fā)展歷經(jīng)了從低級(jí)到高級(jí)發(fā)展。發(fā)展的核心思想就是“讓人更容易編程”
? ? ? ? 越容易使用的語(yǔ)言,就有越多人使用;越多人使用,就有越多協(xié)作;越多協(xié)作,就可以創(chuàng)造越復(fù)雜的物體;現(xiàn)代社會(huì),一個(gè)軟件動(dòng)輒幾十人協(xié)作、幾百人協(xié)作、甚至幾千人協(xié)作也成為可能,這自然就為開(kāi)發(fā)復(fù)雜軟件提供了“人力基礎(chǔ)”。這是一個(gè)人類普遍的社會(huì)現(xiàn)象,越容易使用的工具,通過(guò)使用數(shù)量,通過(guò)大量人的協(xié)作,徹底改變某個(gè)行業(yè)甚至人類社會(huì)。
? ? ? ? 計(jì)算機(jī)語(yǔ)言經(jīng)歷了三代:第一代是機(jī)器語(yǔ)言,第二代是匯編語(yǔ)言,第三代是高級(jí)語(yǔ)言。
第一代語(yǔ)言:機(jī)器語(yǔ)言(相當(dāng)于人類的原始階段)
? ? ? ? 機(jī)器語(yǔ)言由數(shù)字組成所有指令。當(dāng)讓你使用數(shù)字編程,寫(xiě)幾百個(gè)數(shù)字、甚至幾千個(gè)數(shù)字,每天面對(duì)的是純數(shù)字,我大膽預(yù)測(cè):“程序員群體 100%會(huì)有精神問(wèn)題”。
? ? ? ? 機(jī)器語(yǔ)言通常由數(shù)字串組成(最終被簡(jiǎn)化成 01),對(duì)于人類來(lái)說(shuō),機(jī)器語(yǔ)言過(guò)于繁瑣。使用機(jī)器語(yǔ)言,人類無(wú)法編出復(fù)雜的程序。如下為一段典型的機(jī)器碼:
1. 0000,0000,000000010000代表 LOAD A, 16
2. 0000,0001,000000000001代表 LOAD B, 1
3. 0001,0001,000000010000代表 STORE B, 16
第二代語(yǔ)言:匯編語(yǔ)言(相當(dāng)于人類的手工業(yè)階段)
? ? ? ? 為了編程的方便,以及解決更加復(fù)雜的問(wèn)題。程序員開(kāi)始改進(jìn)機(jī)器語(yǔ)言,使用英文縮寫(xiě)的助記符來(lái)表示基本的計(jì)算機(jī)操作。這些助記符構(gòu)成了匯編語(yǔ)言的基礎(chǔ)。如下是一些常見(jiàn)的匯編語(yǔ)言助記符(單詞)比如:LOAD、MOVE 之類,這樣人更容易使用了。識(shí)別幾百、幾千個(gè)單詞,感覺(jué)要比幾百幾千個(gè)數(shù)字,美妙多了。匯編語(yǔ)言相當(dāng)于人類的手工業(yè)社會(huì),需要技術(shù)極其嫻熟的工匠,但是開(kāi)發(fā)效率也非常低。
? ? ? ? 匯編語(yǔ)言雖然能編寫(xiě)高效率的程序,但是學(xué)習(xí)和使用都不是易事,并且很難調(diào)試。另一個(gè)復(fù)雜的問(wèn)題,匯編語(yǔ)言以及早期的計(jì)算機(jī)語(yǔ)言(Basic、Fortran 等)沒(méi)有考慮結(jié)構(gòu)化設(shè)計(jì)原則,而是使用 goto 語(yǔ)句來(lái)作為程序流程控制的主要方法。這樣做的后果是:一大堆混亂的調(diào)轉(zhuǎn)語(yǔ)句使得程序幾乎不可能被讀懂。對(duì)于那個(gè)時(shí)代的程序員,能讀懂上個(gè)月自己寫(xiě)的代碼都成為一種挑戰(zhàn)。匯編語(yǔ)言仍然應(yīng)用于工業(yè)電子編程領(lǐng)域、軟件的加密解密、計(jì)算機(jī)病毒分析等。
第三代:高級(jí)語(yǔ)言(相當(dāng)于人類的工業(yè)階段)
? ? ? ? 對(duì)于簡(jiǎn)單的任務(wù),匯編語(yǔ)言可以勝任。但是隨著計(jì)算機(jī)的發(fā)展,滲透到了工作生活的更多的方面,一些復(fù)雜的任務(wù)出現(xiàn)了,匯編語(yǔ)言就顯得力不從心(應(yīng)該說(shuō)是程序員使用匯編語(yǔ)言解決復(fù)雜問(wèn)題出現(xiàn)了瓶頸)。于是,出現(xiàn)了高級(jí)語(yǔ)言。像我們熟知的 C、C++、Java 等等都是高級(jí)語(yǔ)言。
? ? ? ? 高級(jí)語(yǔ)言允許程序員使用接近日常英語(yǔ)的指令來(lái)編寫(xiě)程序。例如,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的任務(wù):A+B=C? ,使用機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言的的實(shí)現(xiàn)如下圖 1-2 所示(OH MY GOD~~).

? ? ? ? 從上面這個(gè)簡(jiǎn)單的加法計(jì)算,可以看出越到高級(jí)語(yǔ)言,越接近人的思維,人使用起來(lái)就越方便。
? ? ? ? 高級(jí)語(yǔ)言的出現(xiàn),尤其是面向?qū)ο笳Z(yǔ)言的出現(xiàn),相當(dāng)于人類的工業(yè)社會(huì),高級(jí)語(yǔ)言極其易用,編程門(mén)檻和難度大大降低,大量的人員進(jìn)入軟件開(kāi)發(fā)行業(yè),為軟件爆發(fā)性的增長(zhǎng)提供了充足的人力資源。目前以及可預(yù)見(jiàn)的將來(lái),計(jì)算機(jī)語(yǔ)言仍然處于“第三代高級(jí)語(yǔ)言”階段。
未來(lái)簡(jiǎn)史中關(guān)于計(jì)算機(jī)和人的核心思想有如下三點(diǎn):
1.? 生物也是算法,而生命過(guò)程就是進(jìn)行數(shù)據(jù)的處理
2. 智能和意識(shí)從碳基進(jìn)入到硅基,實(shí)現(xiàn)人類的終極進(jìn)化
3. 硅基智能生命的進(jìn)化速度將是指數(shù)級(jí)的,從而實(shí)現(xiàn)“人到神的進(jìn)化”
二、常見(jiàn)編程語(yǔ)言介紹
? ? ? ? Tiobe 發(fā)布了最新一期編程語(yǔ)言歡迎度榜單,其榜單根據(jù)互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、課程和第三方廠商的數(shù)量,并使用搜索引擎(如 Google、Bing、Yahoo!)以及 Wikipedia、Amazon、YouTube 統(tǒng)計(jì)出排名數(shù)據(jù)。
? ? ? ? TOP5 幾乎沒(méi)有變化,Java 和 C 語(yǔ)言牢牢占據(jù)前兩名。Python相較去年上升一位進(jìn)入 TOP3,C++下降一位,Visual Basic .NET 也超越 C#上升到 TOP 行列。

C語(yǔ)言
? ? ? ? C語(yǔ)言誕生于 1972 年,可以稱之為現(xiàn)代高級(jí)語(yǔ)言的鼻祖,由著名的貝爾實(shí)驗(yàn)室發(fā)明。C 語(yǔ)言是人們追求結(jié)構(gòu)化、模塊化、高效率的“語(yǔ)言之花”。在底層編程,比如嵌入式、病毒開(kāi)發(fā)等應(yīng)用,可以替代匯編語(yǔ)言來(lái)開(kāi)發(fā)系統(tǒng)程序。在高層應(yīng)用,也可以開(kāi)發(fā)從操作系統(tǒng)(Unix/Linux/Windows都基于 C 語(yǔ)言開(kāi)發(fā))到各種應(yīng)用軟件。
老鳥(niǎo)建議:
? ? ? ? 大學(xué)開(kāi)這門(mén)課請(qǐng)一定認(rèn)真學(xué)習(xí),而不要覺(jué)得老套,那是經(jīng)典;C 語(yǔ)言在現(xiàn)代流行程度仍然排名前三。
C++語(yǔ)言
? ? ? ? 作為 C 語(yǔ)言的擴(kuò)展,C++是貝爾實(shí)驗(yàn)室于80 年代推出的。C++是一種混合語(yǔ)言,既可以實(shí)現(xiàn)面向?qū)ο缶幊蹋部梢蚤_(kāi)發(fā) C 語(yǔ)言面向過(guò)程風(fēng)格的程序。
? ? ? ? C語(yǔ)言讓程序員第一次可以通過(guò)結(jié)構(gòu)化的理念編寫(xiě)出易于理解的復(fù)雜程序; 盡管 C 語(yǔ)言是一個(gè)偉大的語(yǔ)言,但是程序的代碼量達(dá)到 30000 行以上時(shí),程序員就不能很好的從總體上把握和控制這個(gè)程序。 因此,在 80 年代初期,很多軟件項(xiàng)目都面臨無(wú)法解決的問(wèn)題而不能順利進(jìn)行。 1979 年,貝爾實(shí)驗(yàn)室發(fā)明了 C++。 C++最初的名字叫做“帶類的 C”,后來(lái)才改名叫 C++。國(guó)內(nèi)通用叫法:“C 加加”,國(guó)際通用讀法“C plus plus”。
? ? ? ? C++語(yǔ)言在科學(xué)計(jì)算、操作系統(tǒng)、網(wǎng)絡(luò)通訊、系統(tǒng)開(kāi)發(fā)、引擎開(kāi)發(fā)中仍然被大量使用。
Java語(yǔ)言
? ? ? ? 由美國(guó) SUN 公司(被 oracle 公司收購(gòu))發(fā)明于 1995 年,是目前業(yè)界應(yīng)用最廣泛、使用人數(shù)最多的語(yǔ)言,連續(xù)多年排名世界第一,可以稱之為“計(jì)算機(jī)語(yǔ)言界的英語(yǔ)”。
? ? ? ? Java廣泛應(yīng)用于企業(yè)級(jí)軟件開(kāi)發(fā)、安卓移動(dòng)開(kāi)發(fā)、大數(shù)據(jù)云計(jì)算等領(lǐng)域,幾乎涉及 IT 所有行業(yè)。關(guān)于 Java 的發(fā)展歷史和特性,將在后面專門(mén)介紹。
JavaScript語(yǔ)言
? ? JavaScript是一種腳本語(yǔ)言,已經(jīng)被廣泛用于Web 應(yīng)用開(kāi)發(fā);應(yīng)用范圍越來(lái)越大,重要性越來(lái)越高。目前,流行的 H5 開(kāi)發(fā)的核心其實(shí)就是 JavaScript 語(yǔ)言。
Python語(yǔ)言
? ? ? ? Python發(fā)明于 1989 年,語(yǔ)法結(jié)構(gòu)簡(jiǎn)單,易學(xué)易懂;Python 具有豐富和強(qiáng)大的庫(kù)。它常被昵稱為膠水語(yǔ)言,能夠把用其他語(yǔ)言制作的各種模塊(尤其是 C/C++)很輕松地聯(lián)結(jié)在一起。
? ? ? ? Python廣泛應(yīng)用于:圖形處理、科學(xué)計(jì)算、web 編程、多媒體應(yīng)用、引擎開(kāi)發(fā);尤其是在未來(lái)大熱方向機(jī)器學(xué)習(xí)和人工智能上有非常大的潛力。
PHP語(yǔ)言
? ? ? ? PHP 原始為 Personal Home Page 的縮寫(xiě),已經(jīng)正式更名為 "PHP: Hypertext Preprocessor"。PHP 語(yǔ)言,一般用于 WEB 開(kāi)發(fā)領(lǐng)域;大量的中小型網(wǎng)站以及某些大型網(wǎng)站使用 PHP 開(kāi)發(fā)。
Object-C和 Swift 語(yǔ)言
? ? ? ? Object-C通常寫(xiě)作 Objective-C 或者 Obj-C 或 OC,是根據(jù) C 語(yǔ)言所衍生出來(lái)的語(yǔ)言,繼承了 C 語(yǔ)言的特性,是擴(kuò)充 C 的面向?qū)ο缶幊陶Z(yǔ)言。OC 主要用于蘋(píng)果軟件的開(kāi)發(fā)。
? ? ? ? Swift,蘋(píng)果于 2014 年 WWDC(蘋(píng)果開(kāi)發(fā)者大會(huì))發(fā)布的新開(kāi)發(fā)語(yǔ)言,可與 OC 共同運(yùn)行于 Mac OS 和iOS 平臺(tái),用于搭建基于蘋(píng)果平臺(tái)的應(yīng)用程序。
C#(c sharp)語(yǔ)言
? ? ? ? C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NET Framework 之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。C#在基于 windows 操作系統(tǒng)的應(yīng)用開(kāi)發(fā)這一領(lǐng)域在取代 C++,占據(jù)主導(dǎo)地位?!俺梢彩捄螖∫彩捄巍保珻#的微軟身份,也成為了發(fā)展的阻力,在其他 IT 領(lǐng)域應(yīng)用較少。
Kotlin語(yǔ)言
? ? ? ? Kotlin 是一個(gè)用于現(xiàn)代多平臺(tái)應(yīng)用的靜態(tài)編程語(yǔ)言,由 JetBrains 開(kāi)發(fā)。Kotlin 可以編譯成 Java 字節(jié)碼,也可以編譯成 JavaScript,方便在沒(méi)有 JVM 的設(shè)備上運(yùn)行。
? ? ? ? Kotlin 已正式成為Android 官方支持開(kāi)發(fā)語(yǔ)言,并且是一種可以兼容 java 的語(yǔ)言。
Go語(yǔ)言
? ? ? ? Go(又稱 Golang)是 Google 的Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。Go 語(yǔ)言語(yǔ)法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。
易語(yǔ)言
? ? ? ? 易語(yǔ)言是一門(mén)以中文作為程序代碼編程語(yǔ)言,其以“易”著稱,創(chuàng)始人為吳濤。易語(yǔ)言早期版本的名字為 E 語(yǔ)言。其最早的版本的發(fā)布可追溯至 2000 年 9 月 11 日。
Fortran語(yǔ)言
? ? ? ? 世界上第一種高級(jí)語(yǔ)言,IBM 公司在 1954 年提出的,主要用在需要復(fù)雜數(shù)學(xué)計(jì)算的科學(xué)和工程領(lǐng)域?,F(xiàn)在仍然被廣泛使用,尤其是工程領(lǐng)域。Fortran 雖然適合編寫(xiě)科學(xué)計(jì)算方面的程序,但是不適于編寫(xiě)系統(tǒng)程序。
Basic語(yǔ)言
? ? ? ? 雖然易學(xué),但功能不夠強(qiáng)大,應(yīng)用到大程序的有效性令人懷疑。已經(jīng)逐步退出歷史舞臺(tái)。
COBOL語(yǔ)言
? ? ? ? 于 1959 年提出。主要用于大量精確處理數(shù)據(jù)的商業(yè)領(lǐng)域中,比如金融、銀行。今天,仍然有超過(guò)一半的商業(yè)軟件使用 COBOL 編寫(xiě)。有將近 100 萬(wàn)人使用 COBOL 編程。
Pascal語(yǔ)言
? ? Pascal 的名稱是為了紀(jì)念十七世紀(jì)法國(guó)著名哲學(xué)家和數(shù)學(xué)家 Blaise Pascal 而來(lái)的,它由瑞士 Niklaus Wirth 教授于六十年代末設(shè)計(jì)并創(chuàng)立的。Pascal 語(yǔ)言語(yǔ)法嚴(yán)謹(jǐn),層次分明,程序易寫(xiě),可讀性強(qiáng),是第一個(gè)結(jié)構(gòu)化編程語(yǔ)言。由于沒(méi)有大廠商和政府的支持,只是限于大學(xué)教育這一塊。
三、未來(lái)的發(fā)展方向
為什么擔(dān)心軟件開(kāi)發(fā)人才飽和是多余的?
? ? ? ? 很多未進(jìn)入或剛進(jìn)入軟件行業(yè)的朋友,特別擔(dān)心一個(gè)問(wèn)題“這么多人學(xué),會(huì)不會(huì)飽和?”。這其實(shí)是杞人憂天,越多人編程,才能為軟件行業(yè)提供巨量的人力資源,才能實(shí)現(xiàn)我們以前都不敢想的應(yīng)用開(kāi)發(fā)。要以發(fā)展的眼光看問(wèn)題,而不是靜態(tài)的眼光。
? ? ? ? 越多人編程,越多應(yīng)用需要做,越多應(yīng)用需要做,更需要越多人編程。這就像一個(gè)農(nóng)夫剛剛進(jìn)入工業(yè)社會(huì),擔(dān)心服裝工廠工人招滿了怎么辦? 他沒(méi)有想到工業(yè)發(fā)展后,鋼鐵廠也需要工人、汽車(chē)廠也需要工人。年輕朋友請(qǐng)記住“軟件行業(yè)發(fā)展永無(wú)止境,將會(huì)整合人類現(xiàn)有所有行業(yè),也會(huì)創(chuàng)造很多新的行業(yè)”。
未來(lái) 30 年必將是軟件人才的世界
? ? ? ? 未來(lái) 30 年的世界必將是軟件人才的世界;除了普通軟件的應(yīng)用,大批的人工智能應(yīng)用也將出現(xiàn);未來(lái)自動(dòng)駕駛、自動(dòng)翻譯、機(jī)器人保姆甚至機(jī)器人女友都會(huì)進(jìn)入我們的生活,甚至計(jì)算機(jī)編程和基因工程結(jié)合,長(zhǎng)生不老都能實(shí)現(xiàn);有興趣的童鞋,推薦大家看《未來(lái)簡(jiǎn)史》這本書(shū),把握一下未來(lái)的脈搏。 請(qǐng)發(fā)揮我們年輕人的想象力,盡情的在 IT 的世界中揮灑吧!

? ? ? ? 附:未來(lái)簡(jiǎn)史,人類社會(huì)的終極變革:從智人到神人
? ? ? ? 經(jīng)過(guò)7萬(wàn)年的演化,人類主題已從饑荒、瘟疫和戰(zhàn)爭(zhēng),轉(zhuǎn)變?yōu)橛郎?、快?lè)和神人(擁有特定的超能力)。宗教創(chuàng)建秩序,科學(xué)尋求力量,二者共同推動(dòng)人類文明的演進(jìn)。人文主義成為我們的信仰,人類相信自由意志、個(gè)體價(jià)值。
? ? ? ? 但生命工程等技術(shù)的發(fā)展已經(jīng)顛覆了人文主義的基石,我們發(fā)現(xiàn)并沒(méi)有所謂的自由意志,人類也不是什么不可分割的個(gè)體,也沒(méi)有靈魂,只找到了基因、荷爾蒙、神經(jīng)元,遵守著世界共同遵循的物理和化學(xué)原則。大腦和意志可以被操控。“個(gè)人”概念在逐步瓦解消融。
? ? ? ? 人是一堆算法,人的感覺(jué)、情緒、想法,都是算法在支配,生命就是進(jìn)行數(shù)據(jù)處理。人類正在利用人工智能、生物科技,不斷自我升級(jí),大部分人將淪為“無(wú)用階層”,一小部分人則進(jìn)化成“神人”,統(tǒng)治世界。
? ? ? ? 以人為中心的世界觀將轉(zhuǎn)換為以數(shù)據(jù)為中心。取代人文主義的將是數(shù)據(jù)主義,它將以最大化數(shù)據(jù)流量和系統(tǒng)效率為價(jià)值目標(biāo)。在未來(lái)有可能不再需要人類,這是我們應(yīng)該認(rèn)真思考的問(wèn)題。
? ? ? ? 但科技的發(fā)展并不會(huì)帶來(lái)一定的結(jié)果,同樣的科技也會(huì)創(chuàng)造出非常不一樣的社會(huì),未來(lái)無(wú)法真正預(yù)測(cè),仍有無(wú)限可能。
? ? ? ? 用心做到極致,堅(jiān)持改變命運(yùn)
? ? ? ? 歡迎大家點(diǎn)擊了解百戰(zhàn)程序員并評(píng)論分享的你的想法和建議,在下一篇文章中,我們一起走進(jìn)Java語(yǔ)言的大門(mén)。