中國為什么沒有自己的編程語言?不是不需要,而是缺乏哲學(xué)、數(shù)學(xué)、語言學(xué)和編譯原理方面的理論和實踐,看懂才知道差距不小。 中國為什么沒有編程語言 中國都是應(yīng)用編程語言,很少有自己開發(fā)語言的人。應(yīng)用制造是兩碼事。所以你問這個問題,就像問一個乘坐火箭到太空旅游的人,火箭是怎么造出來的?很難得到你想要的答案。 ![]() 他們多半不清楚火箭是怎么造出來的 要形成一門編程語言并不是一件容易的事。計算機和軟件程序的創(chuàng)始發(fā)明應(yīng)該屬于馮諾依曼(John von Neumann)和圖靈(Alan Mathison Turing)。馮諾依曼規(guī)定了二進制和計算機的體系架構(gòu);圖靈從數(shù)學(xué)上闡明了圖靈計算機的邏輯學(xué)和數(shù)學(xué)判定原理。他們規(guī)定的基礎(chǔ)法則今天仍在應(yīng)用。 ![]() 馮諾依曼(計算邏輯理論和計算體系架構(gòu))和圖靈(圖靈機) 最早的編程都是用機器代碼的,后來有了匯編語言,但效率都很低。計算機語言開創(chuàng)性工作得算LISP和FORTRAN。LISP是由麥肯錫(John McCarthy)發(fā)明的,對語言的主要貢獻在邏輯推理,麥肯錫也是人工智能的創(chuàng)始人;FORTRAN是由巴克斯(John Warner Backus )發(fā)明的,解決了語法范式、高效編譯的問題。 ![]() 麥肯錫(人工智能創(chuàng)始人)和巴克斯(Fortran 語言之父) 大師做的是原始創(chuàng)新和開創(chuàng)性的工作。這些人都是數(shù)學(xué)家和邏輯學(xué)家,在哲學(xué)和語言學(xué)方面有很深的造詣,然后才發(fā)明計算機和語言。 大師們多處于戰(zhàn)爭年代,扎堆來一起走。隨著大師相繼離世,現(xiàn)在編程語言例如Java和Python,都變得越來越工具化,數(shù)學(xué)和智能水平都降低了,語言內(nèi)在邏輯的嚴(yán)謹(jǐn)性也漸漸地消失了。(LISP和后來的Prolog是能進行邏輯推理的語言,現(xiàn)在語言推理只能靠人腦) 總結(jié)下來,發(fā)明一門語言要有幾個方面的基礎(chǔ): 哲學(xué)基礎(chǔ):語言是反應(yīng)思想的,那么思想的本質(zhì)描述能力就依賴于你的世界觀,你認(rèn)為世界到底是一個什么樣子的?是面向本體對象的,還是面向過程的?思想怎么表述?事實怎么表述?這些需要你對哲學(xué)有一定的研究,才能把世界描述得清楚,否則你的語言反映思想的能力會很差。 現(xiàn)在的計算機語言基本上都是按照分析哲學(xué)的模式來設(shè)計的,有興趣的同學(xué)可以看看維特根斯坦的《邏輯哲學(xué)論》,你會發(fā)現(xiàn)是一本學(xué)習(xí)面向?qū)ο缶幊陶Z言語言的好書。 ![]() 維特根斯坦和邏輯哲學(xué)論 數(shù)學(xué)基礎(chǔ):編程語言對數(shù)學(xué)的要求也是比較高的,這里主要是離散數(shù)學(xué)和數(shù)理邏輯。你要清楚反映我們思想的命題的表達方式,到底需要什么樣的數(shù)學(xué)基礎(chǔ)?我們是命題邏輯,描述邏輯還是一階邏輯?怎么對我們所寫的代碼進行推理和判斷,更好地找出其中會引起錯誤或者沖突的部分。 ![]() 離散數(shù)學(xué)和數(shù)理邏輯是基礎(chǔ) 語言基礎(chǔ):你還要精通語言學(xué)的內(nèi)容,英語和漢語都是反映人類思想的,編程語言作為一門語言,也要符合語言學(xué)的基本規(guī)律。由于哲學(xué)基礎(chǔ)的差異,漢語的表達和這些編程語言多少是有些出入的。 比如我們說今天很熱,我們翻譯過來肯定是想說Today is hot。但是這里我們就錯誤地把今天作為主語了,其實今天應(yīng)該是時間副詞。英語會翻譯成It is hot today這里的It指的是天氣,也就是熱的主體。 這種語言上的差異反映了我們語言其實缺乏本體論,所以我們古代雖然政治經(jīng)濟發(fā)達,但也沒有產(chǎn)生科學(xué)。西方語言和邏輯則很好地繼承了古希臘的語言傳統(tǒng)。 ![]() 中西方差可不小 技術(shù)基礎(chǔ):要想高效率地把語言轉(zhuǎn)換成機器的代碼,那么我們還要精通編譯原理和底層機器語言。當(dāng)然你也可以拿Java和C來構(gòu)建,但是這樣兩層翻譯以后,你的執(zhí)行效率就會打了些折扣。從這一點上來看,程序的本質(zhì)是思想翻譯,程序員的工作也不過是把思想翻譯成高級語言,然后再轉(zhuǎn)譯成機器代碼。 ![]() 程序員原來是翻譯? 我們當(dāng)前的很多科技進步還都是表面性質(zhì)的,因為我們現(xiàn)在技術(shù)趕上了,整體的科學(xué)素質(zhì)跟西方比還是差距挺大的。向大師們致敬!革命尚未成功,我輩仍需努力。 |
|