中國為什麼沒有自己的編程語言?

現在我們接觸到的編程語言無一例外都是國外的,為什麼中國就沒有人來研究一下我們自己的編程語言呢?我只是一個剛接觸編程的小白,但是我很想知道,我國電子科技和軟體方面趕不上國外是不是也是和編程語言基本以英文語法為主有關呢?如果我國利用漢語為基礎研發屬於自己的編程語言的話會不會降低一定的門檻?確實漢語的局限性和影響力遠沒有英語強,也未必能受到認可,但是只為我們國家那些喜愛編程但基礎又不好的人,為了我國這個領域的發展或者就是為了造福十三億人開發出漢語編程語言很難么。 我的想法可能很天真,但是真的希望各位幫我解答一下


第一,計算機講究的是生態圈,生態圈已經構建得差不多了,我們使用的電子產品都是這個生態圈中的一環,因此你做出來的任何東西都需要與這個生態圈兼容。生態圈是什麼,是所有技術人員的技術框架,還包括我們日常所用的所有軟硬體。在現有的條件下,設計一個程序語言,編寫一個操作系統,並沒有想像中那麼難。問題是,誰會用?國內做出來的一些漢語編程和操作系統,除了騙經費,基本沒有什麼市場。不要小看這個生態圈,IBM,INTEL,谷歌,微軟,這些公司這麼多年花了多少錢?沒有人有能力有資源推倒重新做一套出來。因而,我們做的任何IT產品,只能是站在巨人的肩膀上,只能與國際的先進技術接軌,否則沒有出路。搜索引擎的例子擺在那裡,充分說明了僵化的官僚體制與活躍的信息技術革命是不相適應的,所以,市場的就讓它歸市場吧,只有我們的企業修鍊到家了,才能參與到規則的制訂中去。

第二,中文編程是個偽命題。因為,現有的漢語編程語言,在理念上並沒有什麼創新,都只不過是在關鍵字上做了改變,把if寫成"如果",把return寫成"返回",這麼做意義不大。因為一個最low的程序員也不可能記不住那幾十個關鍵字,他只需要了解邏輯關係,而不需要理解關鍵字的字面意義。反而是英文字母更緊湊一些。而且,這也不叫什麼新的語言,一種編程語言的真正價值體現在它的設計上,它有什麼語言特性,這和關鍵字的編碼沒什麼關係。改造一下編譯器,任何程序語言都可以用漢語編程。然並卵,只不過在閉關鎖國的道路又進了一步罷了。

第三,關於語言的愛國問題。只要我們還承認自己落後,就不得不學習英語。別說軟體生態圈,國內的人才都未必已經形成一個氛圍良好的圈子,這時候就只能向別人學習。等到我們足夠強大了,別人自然會向我們學習,到時候,隨你怎麼折騰,外國人都會跪舔的。計算機行業強大的標誌就是出現一批能夠比肩IBM、谷歌等公司的中國企業。要知道,計算機行業的標準都是巨頭搞出來的,是強大的產品塑造了標準,不要搞反了。

第四,關於彎道超車。在已有的技術框架下,技術已經相對成熟,中國不大可能超越。比如,精密製造業,傳統計算機體系,別人積累了幾十年,中國至今都趕不上。中國可以做的就是保證自己能夠生產次好的產品,然後,在新的科技革命時實現超越。比如,量子,生物,人工智慧,都屬於未來投資的範疇。對於計算機理論,如果哪天有個中國籍的數學家提出了一個新的計算機體系結構,引領全世界量子計算、生物計算的浪潮,那才真值得驕傲。前面提到那些計算機巨頭,它們的根源在於理論。比如,IBM的研究人員裡面有多名諾獎得主,谷歌來自於斯坦福。

另外,回到題主的問題。我不認為將現有程序語言的關鍵字改成中文會對普及編程有多大的幫助。提高編程的教育質量,文檔和教育資源更重要。採用更人性化的語法,甚至用搭積木的形象的方式來編程,都是普及編程時不錯的思路。但這跟是不是中文沒關係,與其將程序語言翻譯成中文,還不如多翻譯一些優秀技術書籍。

最後說一句: 實幹興邦。天天喊愛國的,不是騙子就是傻子。


在關鍵字跟庫函數名稱中用到中文的並非沒有。很多人舉了例子,比如易語言。

但,計算機編程語言是獨立的語言,與中文英文呈並列關係,既不屬於中文也不屬於英文。

不但中文不能用於編程,英文本身也是無法用於編程的,著名圖靈獎得主高德納發明的文學編程語言試圖使用英語直接編程,但其實他這個離用語言文字編程尚有很大距離,而且顯然這個語言既不普及也不流行。

編程語言並不是英文,編程語言中大多數使用英文字母,僅僅是因為這些字母更方便輸入而已。而如果你製造一個用中文的編程語言,你勢必需要一個更適合這種新語言(它並不是真正的中文)的輸入法。

編程語言本身與人類自然語言無關,只是恰好使用了英文字母而已,使用這些字母的原因僅僅因為他們更容易用鍵盤輸入,這與英文沒有直接關係。


"為了我國這個領域的發展或者就是為了造福13億人開發出漢語編程語言很難么"

英文編程語言:
if (i&>0)
cout &<&< x.answer;
漢語編程語言:
如果 (變數1 &> 0)
輸出 &<&< 變數2.答案

但是,這一個對比並不是想說明漢語編程語言可讀性差。我想說的方面和可讀性無關。
實際上,一個編程語言自帶的部分也不過就是那一批關鍵詞:
if then else class struct auto var while ......
就算你做一個漢語編程語言,關鍵詞編程中文,無非也就是:
如果 那麼 不然 類 結構體 自動 變數 當
而要寫程序,真正最重要的邏輯思維、數據結構等等,你用哪個語言表達不都一樣?
英語裡面的二叉樹是這個樣子,漢語裡面的二叉樹還是這個樣子。
英語裡面的面向對象是這個思想,漢語裡面的面向對象還是這個思想。

單純只是搞一個漢語的編程語言出來,就好比
把CS的所有菜單的按鈕翻譯成中文
把汽車上的按鈕都翻譯成中文
把電路圖上的R C都改寫成電阻 電容

單純只是搞一個漢語的編程語言出來,對13億人沒有幫助,就好比
把CS的所有菜單的按鈕翻譯成中文,菜逼還是被高玩不停爆頭
把汽車上的按鈕都翻譯成中文,科目二掛科的還是會掛科
把電路圖上的R C都改寫成電阻 電容,看不懂電路圖的還是看不懂電路圖

如果題主真的有這份要讓漢語在編程界有存在感的精神,要做的不是設計一個漢語編程語言
而是:
把各大編程語言的參考手冊
全部翻譯成中文,讓不懂英文沒法查閱英文手冊的又想學編程的中國人有辦法查閱手冊。


誰說沒有?


相關問題:如果計算機是中國人發明的,那麼用中文編程是怎樣一種體驗? - 楊個毛的回答

當然那個大概因為標籤是「腦洞」,大部分回答的方向也莫名其妙,我寫那個回答的時候也比較怒……

用文明的語氣複述一下那個回答:

編程語言既不是英文也不是中文。實際上,學習編程語言的主要難度,在於編程語言本身,而跟它用了幾個英文關鍵字還是中文關鍵字無關。以至於說,如果把一門編程語言翻譯成中文,幾乎不會對它的學習難度帶來任何改變。

某種意義上,你在中學時期就學過至少三種語言,一種叫漢語,一種叫英語,一種叫數學的語言。它們各有各的內在的邏輯。

你學的數學裡你要寫「證:因為……所以……證畢」,而英語國家的人則寫「Proof: ..., therefore .... Q.E.D.」。但是你們學的東西都是數學的語言。而且,你會發現,從「用中文寫的數學」到「用英文寫的數學」之間切換,只是換幾個單詞而已,核心的邏輯其實都在那些不用翻譯的數學符號里。

編程語言在這一點上,情況跟數學的語言是一樣的。那些你看到的英文符號,都不太重要,重要的是剩下的部分。


這個領域的發展靠漢語編程是沒用的,因為學會編程語言不過是編程過程中最容易的幾個步驟之一,學不會英文關鍵詞語言的人即使學會了中文關鍵詞的語言估計也很難有所作為。
相比之下,大量高質量的中文文檔的幫助要大得多。現在幾乎所有最新的高質量的文檔、論文都是英文的,而這些東西才是提高人們水平的關鍵


漢字天然就不適合計算機使用,因為編碼太麻煩。當美國人在搞各種早期操作系統和早期高級語言的時候東亞的工程師都忙著開發在顯示器上顯示漢字的解決方案,好不容易搞出來了美國這邊Windows已經誕生了,這些方案幾乎一誕生就過時了。勸題主早點放棄這種民族主義的愚蠢想法。Ruby是日本人開發的,當前最熱門的編程語言之一,人家也沒用假名或者漢字啊做關鍵字啊。


可以基於Kotlin弄,首先弄個查找替換把所有保留字替換一遍,把標準庫用中文重寫一遍,然後就可以中文編程了。

世界上第一門跑在JVM上的中文編程語言。


實際上嚴格來說,常用編程語言里連英語的都沒有……計算機語言是一種基於邏輯運算規則和判斷的語言,沒有任何嚴格與之對應的人類自然語言。


更新:看到題主真改了,俺有點不好意思。這裡補充一下:

其實真的不用在意語言問題,在信息化越來越發達,溝通越來越快捷的時代,語言會越來越趨於大同,說不定以後中文英語合併成一種。
至於說編程語言,幾十個單詞門檻不高,只是個符號而已,當然可以換成中文,正如其他答案說的各種語言。不過如果幾十個符號化的單詞都記不住,其實這個智商不適合編程。

我認為,搞中文符號化的編程語言完全不能提高中國的技術水平,也不利於編程基礎教育。基礎的編程科普我認為應該是發展像Scratch這類青少年創客編程環境的中文化。實現可視化,積木化編程。

你無法掌握英語,又智商超凡,可能嗎?
另外我認為以愛國名義推廣中文編程語言這玩意的,都是騙子。沒有例外。
***************************************************
**原答案
**
請把題目中的13改成十三。你這個賣國賊。


PS:
我不得不說,底下很多發評論的人,閱讀理解有障礙。很多自以為看懂了我在說什麼而持我的觀點以為是在反駁我的,這類漿糊腦袋的評論,我就直接刪了,懶得費口舌。
而且看來很多人不理解數字電路和計算機的直接關係,居然以為編碼只是編碼,根本不知道編碼對應的電壓是如何直接在計算機硬體發揮作用的。
還有的看了點兒其他答案就自以為理解了計算機而跑來強行評論的,真是……秀逗逼也要有個底線。

原答:

月經問題。


有是有,比如易語言,但中文編程語言就像雞肋一樣。編程的語法根本不是人類語法,無論哪國語言都只是為它提供關鍵字罷了。

計算機,本質是數字電路的有機組合——數字電路懂不?編碼器、解碼器、鎖存器、加法器、模數轉換器、數模轉換器……全部都是邏輯門的拼接——邏輯門懂不?就是與或非,由一大堆輸入高低電壓決定輸出什麼電壓——高電壓懂不,用1表示,低電壓懂不,用0表示,一長串的高高低低電壓,俗稱「〇幺碼」,就是機器語言。

直接作用在計算機上的,就是機器語言——也就是電壓作用下的與或非的邏輯組合。

機器語言不直接對應任何一種人類語言——學過單片機沒?經典的51系列單片機,一大堆八位寄存器,每幾位〇幺碼就是一個什麼讀、存、加、地址之類的功能含義——這直接和電路是對應的!

古代的計算機程序員,全都是用這種0011100110……的二進位來編程的~


眾所周知,後來有了彙編語言——把讀、寫、存、加那幾位的二進位(邏輯門)和英文單詞對應——說到這裡,英文單詞/拼音語言就有了天生優勢了,通共二十來個符號,每個符號用鍵盤通過解碼器、模數轉換器、和矩陣有關的運算器、再到屏幕上顯示矩陣像素的數模轉換器——一個字母就這麼顯示出來了。
如果換成漢語,那要怎麼辦呢?在這一層里,只有基礎的數字電路在工作,漢語拼音對應的字型檔(資料庫)都還沒法兒構建呢。

再後來,才是高級語言,也就是什麼A啊、B啊、C啊、C++啊、C#啊、Java啊、易啊……歸根結底,這些語言寫的程序(俗稱源代碼),要通過另一套用高級語言寫的程序,編譯成二進位碼(俗稱目標代碼),才能運行在機器上。
高級語言比彙編語言更抽象,抽象的意思就是籠統——比如完成一個加法,彙編語言要很具體地把機器從哪裡讀什麼數寄存到哪裡、又從哪裡讀什麼數、加了以後結果存到哪個地方等等等一系列動作詳細具體地寫出來……但是高級語言呢?總共也就聲明、賦值、加,完了,至於從哪取存到哪,全都不用你管——這就叫抽象,從諸象中把核心的東西抽出來,其餘的不知道也不關心~(好像跑題了)
發展到高級語言這一層,資料庫才建立起來,漢字才能在屏幕上打出來。

以上是說漢字和英語字母比,在數字電路的輸入輸出上沒有天生優勢——漢字需要字型檔才能通過拼音字母轉換出來,而英語字母可以直接和高低電壓對應起來(俗稱ASCII碼)。

到高級語言這裡……(好像這裡才是重點)……一套高級語言,關鍵字統共二三十個,根本沒有記憶負擔,其他的就全都是邏輯——其實很多人是因為不懂邏輯,鬧不清數組、函數、類的含義和邏輯,不知道為什麼這些式子要這樣排列(腦子裡沒有邏輯框圖,或者根本沒有數電知識,對什麼內存外存地址編譯的眼前一抹黑),所以才以為是英語阻擋了他——其實根本沒有一毛錢的英語語法,單詞量還不到初中一個單元的多呢~
就算換了漢語,他該不懂還是不懂——連日常漢語的普通表達都不利索呢,更別說更高效的純邏輯的形式表達,不比「道可道」具象……
(搞程序久了,邏輯的觀念就幾乎是深入骨髓的,比如我~每說出一個詞,就要想想這個詞那個概念我有沒有聲明過,當我在具體論述過程中給他賦具體含義時,符不符合俗人/新手/老手/學術等的數據類型;概念構成的語句,是不是有始有終——因為多數編程語言每句話都有分號結尾;語句構成的段落,符不符合模塊化思想,日後再使用時,能不能直接引用拼接,類比程序函數;還有注釋,確保讀者能在我括弧里,搞明白我正文到底是基於什麼組構的……)

再者,把漢字打出來,首先每個漢字,有基本的二三四個字母不等,然後要按加加減減的翻頁選字,這就太慢了。——如果專門為了編程,去學快一點點的五筆,那又太二了,記憶成本還更高,有那功夫,幾種語言的關鍵詞都記住了~

再者,與計算機有關的著作或文檔,當然大多是英文,計算機領域有個特殊的現象——因為計算機邏輯和人類邏輯並不完全對應,所以英語著作的用詞不一定統一,而翻出來的漢語更不統一,況且,英語學得深入的話,會發覺,語言這種東西啊,真是沒辦法確切翻譯啊……連我們同在漢語語境下,我要給你解說計算機基礎,尚且這麼費勁,更別說從西文再到中文的有關演算法和邏輯的論述。


總結:
從歷史角度和與機器語言的對應程度(彙編語言)來看,漢字和計算機是真的無緣。
從高級語言的關鍵字複雜度來看,漢語辭彙又不比英語辭彙簡單,並沒有優勢。
從輸入角度,漢字輸入效率不高,對於動不動幾萬幾十萬行的代碼——敲起來要累死……
再者,世界範圍內,看整個計算機行業的風氣,非英語語境,實際上就是個二手集中地。而且還要看那些著述人的語言功底怎樣……理工科的表達能力,你是知道的呀,難道以為人人都跟我似的口齒清晰~?!

本來不想在知乎回答和本專業相關的東西,平日里都頭暈腦脹地學一大堆東西,看一大堆文檔,來知乎自然應該插科打諢,調戲調戲其他領域的人。

但我就是見不得月經問題!

我佛慈悲……


寫個語言最最最難的問題是 有人用

另外說一說漢語編程的問題,等找到鍵盤可以直接輸入中文的方法再考慮這個問題吧。

  • 試想 你輸入 「如果」 還需要先 「ruguo + 空格」,那我為什麼不直接輸入這個字母?哪怕就用拼音。
  • 可讀性差? 駝峰式 「ruGuo」 或者 直接 英語 「if」 或者其他採用鍵盤可直接打出來了的字母的語言豈不更好?

現在熱門的編程語言里有個很熱門的語言Ruby是日本人搞的,然而它也還是用英文字母,它如果也設計的用日語編程,估計早死了。

--------------------
另外 摘一下 @徐進永 的回答 加一句。

我不懂英文,但我代碼一樣可以寫的很好。

——然後寫著寫著,我發現我?懂英文了!


我見過公司內部用法文編的DSL, 像SELECTIONER TOUT去代替foreach,用..SI..FINSI...去代替if end if...

然並卯,還各種蛋疼,因為大多數客戶都不是法國的,系統的規格書這些東西都是英文的,很多時候代碼裡面的注釋和過程名都是英文的。


幾百年前我們也在用漢字做數學計算,後來覺得阿拉伯數字好用,大家很自然就接受了,用到現在沒有任何人問「中國為什麼沒有自己的數學運算」,因為拿漢字來做數學計算可以認為是一種反智行為。
在輸入手段沒有根本性突破的前提下,我打if只要敲兩個鍵,打「如果」要敲五個鍵外加選詞,只是幾個關鍵詞,當然是哪個方便用哪個了,上中學那會我也很嚮往漢語編程,後來諸如python3等編程語言都加入了越來越多的漢語支持,例如可以用漢語來寫變數名,但是真心不方便,輸入量太大,讀起來也沒比英文變數名方便多少。
如果說各個編程語言的官方文檔都能出個漢語版,那我倒是覺得是件意義非凡的事。


akemimadoka/NatsuLang

中國最好的編程語言不謝。


其實我也想問,為什麼沒有中文的數學公式啊確實?漢語的局限性和影響力遠沒有英語強,也未必能受到認可,但是只為我們國家那些喜愛數學但基礎又不好的人,為了我國這個領域的發展或者就是為了造福13億人開發出中文的數學公式很難么。

那麼問題來了,是不是用中文的數學公式,不喜歡數學的人就會喜歡數學呢?


題主的問題可能分兩部分來看
第一是,是否能用漢字來編程,注意我說的是漢字,而不是漢語,事實上現在流行的編程語言也不是英語自然語言,嚴格說是「借英語單詞來做關鍵字」,當然變數什麼的,外國人起名字也用英語單詞啦,你用拼音也沒啥大不了的,很多語言也支持中文變數
漢字編程的語言有很多,比如易語言什麼的,一個道理,就是用漢字(詞)來做關鍵字什麼的,描述演算法,這只是一個表現形式的問題,如果非要說誰好,我覺得還是用英文單詞比較好,因為漢語是沒有空格分詞的,而為了讓編譯器看懂,漢字編程的語言一般要多插空格,我覺得比較難看
第二是,中國人有沒有自己的語言,要說有和沒有,那肯定有,而且很多,不過一個語言要流行,除了自己設計得好,還得有語言之外的各種原因


我寫過易語言。

體驗就是,因為一下子能看懂了,自以為不需要系統學習編程了,結果反而什麼都沒學會,代碼風格和軟體結構差勁得很。


  • 蟬語 (已經不可用了)
  • 朱邦復 曾設計過一些中文語言,如 中文培基 與 中文cobol
  • 易語言.飛揚
  • 易樂谷
  • 易語言 大名鼎鼎,一直都在更新中.,除易語言外易語言.飛揚和易樂谷已長期未更新。
  • 唐宗漢 曾經設計過能以文言文寫作的 perl 模塊 PerlYuYan
  • 中蟒
  • ZhPy(周蟒)
  • O語言 中文彙編語言
  • 習語言 支持中文的C語言 (習語言的專欄)
  • 中文小海龜,漢化的Logo語言。
  • 夥計培基

現在習大上任了.
習語言作者怕.網友上綱上線.
就改名叫曦語言了.


跟英語無關吧。初中的時候玩編程,用的Pascal。那時候讀寫文件要用assign,函數要用function,過程要用procedure,但我是一直都不知道也不需要知道這三個單詞什麼意思,就知道用法也就夠了。久而久之就順手可以瞬間敲完的。如果改成要用中文輸入法輸入"函數",可能反而更不舒服。還有是,編程大多數時間都在打草稿,草稿都是箭頭符號,沒有中英。最後只是用電腦實現演算法而已。


編程語言的語法根本不是英語語法,這可能也是為什麼叫做C語法,Basic語法,Verilog語法吧。選用英文應該只是為了方便鍵盤使用,跟數學上用sin書寫方便意思也明確,是一個道理。換成寫"正弦α",不懂的還是不懂。

不會寫文章的話,把洋人的鋼筆換成中國人的毛筆,還是不會寫。工夫應該放在本質上。

當然,文章寫得好的話,自行改用毛筆,那是追求別的東西了,比如個人品味。如果代碼寫的好的話,去開發個中文編程語言,比如易語言,也是一種個人追求。可是要在業界普及,還是有難度的。打開一下易語言的主頁就知道了。


推薦閱讀:

TAG:編程 | 計算機 | 科技 | 電腦小白 |