使用計(jì)算機(jī)就要給計(jì)算機(jī)輸入指令,早期給計(jì)算機(jī)的指令是寫在穿孔紙帶上的,如圖1所示。
圖1 早期的計(jì)算機(jī)語言
紙帶勻速通過一個光源,光線透過紙帶的穿孔后被接收器接收,產(chǎn)生一個電壓,遇到紙帶無孔時,光線就被紙帶遮蔽,紙帶后面的接收器就不產(chǎn)生電壓,這樣就將“100100”形式的二進(jìn)制信號輸給了計(jì)算機(jī)。這個發(fā)明源于圖靈1936年的設(shè)想——圖靈機(jī)(Turing Machine)。在計(jì)算機(jī)發(fā)明者名單中,圖靈是名氣最大的。由美國計(jì)算機(jī)協(xié)會(ACM)于1966年設(shè)立的圖靈獎(Turing Award),至今仍然是計(jì)算機(jī)科學(xué)領(lǐng)域的最高榮譽(yù)。
盡管計(jì)算機(jī)的輸入設(shè)備從穿孔紙帶一路發(fā)展到硬盤、鍵盤和鼠標(biāo),但其基本原理還是給計(jì)算機(jī)輸入“100100”形式的機(jī)器碼。人們?yōu)榱朔奖闩c計(jì)算機(jī)交流,發(fā)明了計(jì)算機(jī)操作系統(tǒng)。其實(shí)它就是預(yù)裝在計(jì)算機(jī)存儲器里面的一套機(jī)器碼,計(jì)算機(jī)一旦通電啟動,這套機(jī)器碼首先被讀入計(jì)算機(jī)內(nèi)存并被執(zhí)行,它使得計(jì)算機(jī)CPU、輸入輸出設(shè)備、存儲器等等初始化,提供各類硬件功能接口供應(yīng)用程序調(diào)用。人們借助計(jì)算機(jī)操作系統(tǒng)和預(yù)裝的一些“工具軟件”,用計(jì)算機(jī)完成諸如寫文件、繪圖表、做計(jì)算等簡單工作。如果要使計(jì)算機(jī)完成千差萬別的復(fù)雜工作,就必須給計(jì)算機(jī)輸入專門的指令——計(jì)算機(jī)程序。由于計(jì)算機(jī)只能認(rèn)識機(jī)器碼,而機(jī)器碼又實(shí)在太難學(xué)了,因此科學(xué)家就發(fā)明了“計(jì)算機(jī)語言”,人們可以借助這種語言編寫計(jì)算機(jī)讀得懂的程序。
最接近機(jī)器碼的計(jì)算機(jī)語言是匯編語言(Assembly language)。在匯編語言中,用簡單英文單詞構(gòu)成的助記符(Mnemonics)代替機(jī)器碼,再加上地址符號(Symbol),組成如圖2所示的計(jì)算機(jī)程序。
圖2 一個匯編語言計(jì)算機(jī)程序片段
圖中左邊綠色字是程序的注釋,它們不參加運(yùn)行。
我們再舉一個計(jì)算機(jī)程序的例子:完成任意三個數(shù)從小到大重新排列。比如,任意給計(jì)算機(jī)輸入三個數(shù):65.73、21.01、1.022,要求計(jì)算機(jī)將它們從小到大排列成:1.022、21.01、65.73。首先,我們必須設(shè)計(jì)一個算法如下:
第一步
比較第一個數(shù)與第二個數(shù)的大小。假如第一個數(shù)大于第二個數(shù),則將它們調(diào)換順序,否則就不調(diào)換順序。現(xiàn)在第一個數(shù)是65.73,它大于第二個數(shù)21.01,因此將它們調(diào)換順序。現(xiàn)在三個數(shù)排列為:21.01、65.73、1.022;
第二步
再比較第第二個數(shù)與第三個數(shù)的大小。假如第二個數(shù)大于第三個數(shù),則將它們調(diào)換順序,否則就不調(diào)換順序。現(xiàn)在第二個數(shù)是65.73,它大于第三個數(shù)1.022,因此將它們調(diào)換順序。現(xiàn)在三個數(shù)排列為:21.01、1.022、65.73;
第三步
再比較第一個數(shù)與第二個數(shù)的大小。假如第一個數(shù)大于第二個數(shù),則將它們調(diào)換順序,否則就不調(diào)換順序。現(xiàn)在第一個數(shù)是21.01,它大于第二個數(shù)1.022,因此將它們調(diào)換順序。現(xiàn)在三個數(shù)排列為:1.022、21.01、65.73,完成任務(wù)。
圖3是一個用Fortran語言編寫的計(jì)算機(jī)程序,它將輸入計(jì)算機(jī)的任意三個數(shù)從小到大排序。
圖3 一個完整的Fortran語言計(jì)算機(jī)程序
同樣,圖中左邊綠色字是程序的注釋,它們不參加運(yùn)行。將這個計(jì)算機(jī)程序輸入計(jì)算機(jī)后運(yùn)行,只要在計(jì)算機(jī)屏幕上用鍵盤任意敲入3個數(shù),計(jì)算機(jī)立即就會將此三個數(shù)從小到大重新排列,并且顯示在計(jì)算機(jī)屏幕上。當(dāng)然,三個數(shù)字的重新排序非常容易,人們一目了然就可以完成。如果經(jīng)常要將成千上萬的數(shù)字重新排序,就是一件困難的工作。這時編一個計(jì)算機(jī)程序,就可以比人工既快又省事。這個例子也說明,計(jì)算機(jī)必須依賴人類提供的算法完成任務(wù),或者說人類完成創(chuàng)造性工作,計(jì)算機(jī)幫助人類完成耗時費(fèi)力的工作,這基本上是長久以來的傳統(tǒng)觀點(diǎn)。但是,未來計(jì)算機(jī)會發(fā)展出與人類并駕齊驅(qū)甚至超越人類的智能嗎?那時的計(jì)算機(jī)能夠獨(dú)立完成創(chuàng)造性工作嗎?
咱們再回到計(jì)算機(jī)語言問題。比較圖2與圖3,讀者馬上會覺得:前者猶如天書一般根本無法讀懂,而后者的每一行都與英語近似。人們通常將前者稱為計(jì)算機(jī)底層語言,將與人類語言近似的計(jì)算機(jī)語言稱為計(jì)算機(jī)高級語言。高級語言不僅僅是與人類語言近似,而且在不同CPU之間可以通用。反之,底層語言所編寫的計(jì)算機(jī)程序隨著CPU硬件的改變必須改變。無論是計(jì)算機(jī)底層語言還是高級語言,它們都要靠被稱為“編譯器”的計(jì)算機(jī)程序,將其“翻譯”成計(jì)算機(jī)讀得懂得機(jī)器碼。
計(jì)算機(jī)高級語言除了上面舉例的Fortran語言以外,更加常見的是C、C++、Java、Javascript 、Python等等。Fortran語言源自于“公式翻譯”(英語:Formula Translation)的縮寫, 最早是1954年約翰.貝克斯在紐約發(fā)布的。Fortran語言經(jīng)過不斷的改進(jìn),它至今仍然應(yīng)用于科學(xué)和工程計(jì)算領(lǐng)域。C、C++、Java、Javascript是軟件程序員(外號“碼農(nóng)”)的看家本領(lǐng)。 Python語言是一種比C、C++、Java、Javascript更加高級的、更加接近人類語言的計(jì)算機(jī)語言,代碼極其簡潔,編程效率極高,用C語言編寫的上千行的程序,用Python語言編寫往往只有短短幾十行。Python有大量免費(fèi)、開源程序,在科學(xué)計(jì)算領(lǐng)域被大量使用,從統(tǒng)計(jì)、排序到機(jī)器學(xué)習(xí)、人工智能等等,幾乎是應(yīng)有盡有,還可以直接調(diào)用C、C++、Java程序。
現(xiàn)在懂得計(jì)算機(jī)底層語言的人實(shí)在是太少了,除了計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生,一般都不學(xué)習(xí)它們了。其實(shí),不懂得計(jì)算機(jī)底層語言者,其應(yīng)用計(jì)算機(jī)高級語言的水平就不會太高。另外,用底層語言編寫的計(jì)算機(jī)程序運(yùn)行效率遠(yuǎn)比高級語言高得多,并且需要計(jì)算機(jī)內(nèi)存資源也要小很多,因此,在實(shí)時性要求高的應(yīng)用中,都是用底層語言編寫程序的。可以說,在實(shí)時控制領(lǐng)域,采用Python語言編寫程序的工程師,一般都是水平較低者,真正的高手是用底層語言的,這就好比做高水平科學(xué)實(shí)驗(yàn),要自己制作實(shí)驗(yàn)設(shè)備一樣的道理。
盡管目前有的計(jì)算機(jī)高級語言(比如python)已經(jīng)很接近人類語言了。但是,要讓計(jì)算機(jī)進(jìn)一步讀懂摻雜了許多隨機(jī)因素的人類自然語言,容忍自然語言的模糊性,目前還做不到。隨著計(jì)算機(jī)語言的發(fā)展,未來會出現(xiàn)一種與人類的自然語言完全相同的計(jì)算機(jī)高級語言嗎?
本文上面提出的兩個問題,正是人工智能面臨的大問題,現(xiàn)在給出這些問題答案為時尚早。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7419瀏覽量
87712 -
人工智能
+關(guān)注
關(guān)注
1791文章
46846瀏覽量
237537
發(fā)布評論請先 登錄
相關(guān)推薦
評論