一般編程語言都是英文的,大家對中文編程有什麼樣的看法,中文編程有哪些優劣勢?


每次看到這種討論我都忍不住想拿一些現成的例子出來看。中文的編程語言大家討論的可能比較多,所以拿CJK大家庭中的J,日語來考察看看。

日語編程語言幾例:

なでしこ:なでしこ:日本語プログラミング言語

以及其前身的ひまわり

ひまわり:ひまわり-日本語プログラミング言語

這倆的特點都是:它們比較像AppleScript,本身的語言風格就是比較接近自然語言的語序和結構的,主要用於批處理腳本的場景,這樣可以充分發揮其「本地語言」的優勢。

如果是更hard-core的編程的話「本地語言」就沒啥優勢了,要麼羅嗦要麼彆扭。

Wiki列表裡的一堆:Non-English-based programming languages

其中像丙正正這麼歡樂的概念大家歡樂完之後還是得用C++?

另外?想起以前在淘寶的某業務組輪崗時的體會:

那邊某些代碼充斥著英文、拼錯的英文、漢語拼音、拼錯的漢語拼音,全部混在一起看得我頭昏腦脹。我實在受不了了,於是給他們寫的單元測試一概用了漢語方法名,例如:

@Test
void 測試提交訂單() {
// ...
}

這樣JUnit跑出來的結果就都是正統漢字了。再見,噁心的拼寫錯誤(逃

(不過我輪崗結束後那些漢語方法名應該又都被幹掉了哈哈哈哈)


說一些比較低端的事情吧。

03年我學C#的時候,發現一個好玩的東西,可以用很複雜的字元當變數名,比如說,一般的語言寫圓周率,都是寫一個pi,但是在C#裡面可以直接打一個π,除此之外,用中文也可以。當時我也就是這麼驚訝一下,沒覺得有什麼用處。

後來到04年,我聽人說,他在一個使用.net的小軟體公司,公司要求員工使用中文當類名,變數名,方法名,他很不開心,覺得非常2,我也這麼覺得。

後來,我參與過很多傳統管理軟體的項目,裡面人員的能力參差不齊,低端外包居多,有什麼頭疼問題呢,就是變數命名,我發現這些人多數英文特別渣,壓根沒法根據軟體所處的行業對變數進行合理的命名,而且到處都是拼寫錯誤,而且你也知道,這種行業人員流動很快,後一個人接手的時候,很多時候就不知道前一個人寫的是什麼了。如果說系統規模夠大,真的會有至少20%的時間花到這種破事上。

這時候我回顧之前那種東西,覺得還是能適用一些場景,解決一些問題的。我們說中文編程,並不是指要很變態地把操作符之類底層的東西都漢化,而是只限於變數名,那麼,你就有可能看到這樣的代碼:

定單 一個定單 = 定單工廠.創建定單(參數);

一個定單.校驗();

一個定單.提交();

儘管輸入的時候有些彆扭,但這個至少不會有人看不懂了……而且,如果是C#那麼好的東西,藉助強大的VS,一個點出來,後面列出一堆中文方法和變數名,對這個群體的生產力提升還是有幫助的。

不是所有軟體都是那麼高端,很低層的總要有人做,而且這些軟體一般都都是在處理業務邏輯,那些懂業務但是不懂代碼的人想審閱他們的邏輯是不是正確,也很便利。可見,10年前那家公司的架構師並不是我們想像的那樣沒見識。


沒有意義吧。。程序與其說是英文,不如說是數學,區別一種語言與另一種語言,不是看它語法的表皮是「let a =10」 還是「a=10」 還是 「SHORT A =10」 還是 「 a等於十」還是「(=,a,10)」,語言根本的區別在於語言提供的數據結構和演算法表現力,以及編譯的方式,是否提供了面向對象的類、對象等數據結構?是否提供了繼承、多態等處理方法?是否支持模板以及函數的重載?是強類型還是弱類型?是解釋執行還是編譯執行?是靜態編譯還是動態編譯?

中文編程語言,如果只是把SHORT A=10變為 整型數據A等於十,那麼不過是對詞法處理器進行了一定的變更,對於整個語言完全沒有影響,就相當於給你的臉換了一層皮,不可能你就從中國人變成了外國人。。。基本屬於騙錢的東西。

至於深入的,從頭到尾的, 對整個編譯器前後端的完全漢化,乃至創造符合漢語言思維方式的語言,個人覺得因為語言的核心都是數學,而數學都是不分國界的,基本也毫無意義。。


1. 編程語言各自都是獨立的語言,與自然語言無關。如:C 語言就是 C 語言,Python 就是Python,英語就是英語,漢語就是漢語,它們都是不同的語言。

2. 大多數編程語言借用了大量英語辭彙。這就跟日語借用了很多漢字、英語借用了很多法語辭彙本質上是一樣的。

3. 至於為什麼借用英語,是因為計算機最早從美國開始發展,輸入方式就是按照英語設計的,因此借用英語辭彙是使用起來最方便的。假如計算機最早是從中國開始發展,鍵盤也按照方便漢語輸入來設計,那很有可能就會在編程語言中借用漢語辭彙而非英語了。


程序員的時間是寶貴的,請不要把有限的時間浪費在輸入中文字元上。


代碼正學著, 中文編程沒有體驗到過, 挑過很多種語言的語法

我覺得輸入法才是最大的問題, 有輸入符號的便利那樣自然可以有各種嘗試

然而輸入符號漢字都不如英文符號方便的話遑論中文編程了

另外看發明語言的大牛, C 系列, Lisp 系列, Smalltalk 系列, 都是英文的源頭

語法和習慣都大受影響, 而語言本身也不該是標新立異設置交流障礙的

比較懷疑外國人在不認識漢字的前提下看到幾個不同的漢字是否誤認相同

技術實現上不懂...


那不是英語,那是拉丁字母~


怎麼沒人提這個 https://code.google.com/p/chtml/

CHTML 項目組和草泥馬編程語言已經達成諒解備忘, 互相推動彼此發展, 推進馬勒戈壁信息化產業的發展, 三年內開創戈壁上的新矽谷.

CHTML 是國際互聯網組織 W3C 超文本標記語言 4.0 的一個實現. 是在漢語編程光輝思想的指導下, 互聯網普遍協議與中國國情相結合的產物. 和漢語編程一樣, 原來使用英文的標籤現在可以全部使用中文; 除此之外, 還額外擴展了兩個標籤, 即 &<反功夫網&> 和 &<勾&>. 除此以外, 該協議和現有 HTML 標準完全兼容. 目前 CHTML 的版本是零點零一.

&<勾&> 是和中國國情結合的產物. 有時候我們需要創建只有一個答案的投票, 此標籤即可用於及時丟棄用戶投票, 節省伺服器資源, 彰顯社會主義優越性.

&<反功夫網&> 是著名的 CAPTCHA 系統的瀏覽器實現. 所以在此標籤中的元素都變成 CAPTCHA 從而人可以順利閱讀, 而機器不能. 目前的實現有兩個, 一個是由 CMU 構建的 reCAPTCHA 文字自動轉系統, 另一種是由中國網民發起的豎起來的文字系統. 此標籤對人和搜索引擎都無害, 但可以透明飛躍長城. 技術細節還在討論當中.

為便於中文開發者理解含義, 其他標籤也按照中文互聯網的特色做了相應的定義. 如, & 變成 &<含淚勸告&>, & 變成 &<停頓鼓掌&>,更多的細節可以參見這個 中文文檔. 我們的新版本也在緊鑼密鼓的開發中, 請各界群眾查看我們新版本中部分標籤的 任前公示


剛寫了個庫,可以把你的JS代碼轉換成中文的,而且可以運行,github地址:GitHub - xinyu198736/hancode: 把你的JS代碼翻譯成中文書寫的代碼,並且可執行

寫了篇文章描述原理:把你的JS代碼翻譯成中文書寫的代碼,並且可執行

把你的JS代碼轉換成中文版。。。

就是這麼變態。

使用AST替換變數名,使用百度翻譯服務翻譯代碼。

使用方式:

sudo npm install hancode -g;

#定位到某個目錄

hancode -s ./code.js

#會在當前目錄生成一個 code.漢.js

#code.漢.js 的代碼其實就是本庫的中文版,測試可以跑通,並且結果一樣。

todolist

  • 翻譯屬性名
  • 多個文件聯合編譯

示例:

var 醜化JS = require("uglify-js");

var _ = require("underscore");

var 翻譯工具 = require("./translate_util");

var 翻譯對象 = {};

module.exports = function(源代碼, 回調) {
var AST的代碼 = 醜化JS.parse(源代碼);
var 無功節點 = [];
var 參考節點 = [];
var 跨語言 = [];
AST的代碼.walk(new 醜化JS.TreeWalker(function(結) {
if (結 instanceof 醜化JS.AST_SymbolVar) {
無功節點.push(結);
跨語言.push(結.name);
}
}));
AST的代碼.walk(new 醜化JS.TreeWalker(function(結) {
if (結 instanceof 醜化JS.AST_SymbolRef) {
if (跨語言.indexOf(結.name) != -1) {
參考節點.push(結);
跨語言.push(結.name);
}
}
}));
跨語言 = _.uniq(跨語言);
console.log("翻譯中");
翻譯工具(跨語言.join("
"), function(E, 結果) {
翻譯對象 = 結果;
無功節點.forEach(function(結) {
結.name = 翻譯對象[結.name] || 結.name;
});
參考節點.forEach(function(結) {
結.name = 翻譯對象[結.name] || 結.name;
});
回調(null, AST的代碼.print_to_string({
beautify: true
}));
});
};


我的觀點是編程語言並非等同於英語,英文只是一個記號而已,如果所謂的中文編程只是將這些標識符和關鍵字換成中文的話技術上沒有難度,只是這樣做完全沒有意義。因為編程語言與編程語言的區別並不在於所使用的記號是英文、法文還是中文,而是在於其設計思想和演算法表現力。而且如果採用中文的話源代碼會由於編碼不統一帶來非常蛋疼的問題。由於計算機底層不支持中文,中文編程勢必無法勝任底層編程,(除非往裸機上裝漢卡)。所以中文編程的缺點遠大於其優勢(如果有的話)。


看我的腦洞!

#define 一坨 struct
#define 一大坨 class
#define 隨便上 public
#define 自己上 protected
#define 禁孌 private
#define 滾回去 return
#define 滾出去 throw


你的這個問題,讓我想起了之前的一個「易語言」,就是號稱中文編程

不過,大家的看法是,這不過是一個幾個內行搞出來騙那些政府的外行的錢而已,沒有什麼實際的價值

zhihu有關於它的討論,你可以搜索一下

http://www.zhihu.com/question/20136202


「吃了沒,世界!」


單獨用中文開發一種編程語言是毫無意義的。

但是長久來看,只要世界語言的發展不以」英文「為終結,用中文完成一套」深入的,從頭到尾的,乃至符合漢語言思維方式的編程語言「會使得國內很多人學習編程的障礙降低很多。當前的使用者可能會因為不習慣而不用,但是真正普及開來以後受益的將是後面數代人,會有更多人因此能體會到"編程語言的核心都是數學"、"編程是一種思想"。

歸根到底,這是一種技能的傳播(模仿)難易問題。全世界統一用一種語言,會使得溝通成本急劇下降,單純從發展的角度來講,統一語言是比創建一套中文編程方法更好的選擇。


其實中文編程對中國人應該是有優勢的,有研究表明雙語者的反應和聯想能力都弱於單母語者,用英語寫程序,同時考慮中文概念是非常消耗腦力的一件事。。。。編程語言越來越向高級語言發展,也就是越來越向自然語言發展,所以說如果有好的中文編程語言會是非常好的一件事


能不能設計出一個終極傻瓜編程軟體,讓普通人可以完美編程? - 知乎用戶的回答

其實我倒是想到一個完美的解決辦法,對於覺得if這種單詞難認、又覺得漢語難打字的人。。。

我們可以隆重推出拼音編程——pin yin bian cheng

對於嫌拼音長的人。。。還可以隆重推出——ud pn bm ig


因為編程無國界。當然如果你希望自己的代碼只有自己看,當我沒說。


不過我覺得如果開發出優秀的中文編程語言 類似C語言 是否有利於中國人的計算機水平的提高

通過中文編程語言再開發出自己操作系統 自己的彙編語言 我覺得還是很有必要的


魔方,積木,拼圖,七巧板的核心本質是什麼?我將其抽象為 [組件拼裝]. 我們現在談論的漢語編程不過是翻譯英語罷了,如果要有實質性的改變還得從計算機結構改起,但是,改變馮諾依曼計算機結構實在太難了,工程浩大相當於重新發明計算機.現在我在想一種能繞過這個艱難的方法去實現漢語編程,那就是用跨平台的圖形化語言如瓦肯,把程序語言語法代碼組件化為一個一個的模塊元素(如C語言可以把某一關鍵字(或若干關鍵字)組件化為一個元素,也可以把某一表達式(或若干表達式)如流程式控制制組件化為一個元素),這些模塊元素用漢語標示方便可讀,這樣用滑鼠和快捷鍵就能實現快速"編程",也就是堆代碼,甚至平板等觸控設備也能做到,快速出程序,這就是我的想法--[代碼組件拼裝]--.圖形化編程,圖形化程序設計.讓初學者和程序大牛都能像玩遊戲或使用Adobe PhotoShop與Autodesk AutoCAD 一樣編程.此舉主要是想將程序員從關注代碼過程的注意上解放到關注程序邏輯本身上去,進一步增強對數據結構的重視與演算法的掌握.

語法元素和過程獨立化,以最大自由度實現圖形化編程,由此創造一個open and free的軟體世界,open不是開放是開源 free不是自由是免費.

如果不是圖形化的程序設計語言,那就意味著還得一個字元一個字元地敲,還得關注流程式控制制,如果組件化模塊化的話,分分鐘就能組裝完,分分鐘就是幾十幾百行源代碼,我這樣做的目的就是想讓人脫離簡單機械化重複性操作,以最大限度實現人類智能,因為人類的智能其實是可以無限增長的,所以,此舉其實是變相地提高了人類生產力水平,甚至一些基礎科學,

總得有人去踏出第一步的,沒有奉獻和犧牲精神,人類很難往前走出一步.那些反對和質疑的人們,看來你們還沒看到其前景和價值,不要緊,每個新事物誕生之前,人們一般都會唱衰,因為人們害怕人們不知道的東西,就像飛機,汽車,輪船,還有工業等新生事物誕生時那樣的社會反應.你們可能忘了我們人類祖先是怎麼從猿進化為人的.


類名.方法

切換中英文就得累的吐血


推薦閱讀:

為什麼目前流行的編程語言都是很早以前就發明的?
如果計算機是由中國人發明的,那麼編程時寫代碼會是全中文嗎?
有哪些講編程範式的好書或好文?
Lua 的 table 索引默認從 1 開始,這樣做有什麼好處?
intel x86系列CPU既然是strong order的,不會出現loadload亂序,為什麼還需要lfence指令?

TAG:編程語言 | 編程 |