在github翻出来了一个非常接地气的编程语言项目:dongbei。

“dongbei”,即以东北方言词汇为基础, 以人为中心的编程语言 。
这种语言的文法设计和关键字的选择,都是建立在 东北人民 喜闻乐见的基础上,饱含着 白山黑水之情 。这是一种完全自主设计、开发和实现的,以人为中心的编程语言。
dongbei编程语言的特点如下:
简单啊!小学文化程度就行。您能看懂春晚不?能?那就没问题。
好读啊!看着看着包您不由自主地念出声儿来。
开心啊!呃,做人嘛,最重要的是要开心。
开源啊!不但不要钱,而且不要脸 -- 随时随地欢迎东北话高手打脸指正。
采用了业界领先的 TDD(TreeNewBee-Driven Development) 方式。
“以人为本”新语言
众所周知,世界上有许多编程语言。例如:过程式、函数式、逻辑式、面向对象式。
但到目前为止还没有一种“以人为本”的编程语言。
简而言之就是:dongbei是用东北话编程序,换壳什么不重要,重要的是“以人为本”。

从介绍里就可以看出作者对自己开发的语言很有信心,直接说:“ 这玩意儿可是填补了世界方言编程地图上的一大片儿空地啊! 这么说吧,谁要是看了 dongbei 程序能忍住了不笑,我敬他是纯爷们儿! ”
从这门语言的发展过程中,我们可以看出作者的实践方法确实很有东北特色。
具体地说,这种名为 dongbei的编程语言的开发采用了行业领先的 TDD (TreeNewBee-Driven Development)方法,即每一个功能都是先写好文案,八字没一撇牛皮就吹起来了,然后根据牛皮写测试案例,最后实现一个功能,让牛皮不被吹破。
规则简单明了
Dongbei语言的规则也很好理解,我们把常用的规则罗列一下,这样对东北话不熟悉的小伙伴也能很快掌握。
词法
字符串 : 很简单,中文全角双引号之间的内容就是一个字符串常量,例如:
...“我是一个字符串”...
注释 :在字符串常量外面出现 # 字符,#之后的内容为注释内容,比如:
唠唠:# 我是一个注释。
“嘎哈#?”。# 我还是一个注释。
的效果等于
唠唠:“嘎哈#?”。
分词 :为了适应华人书写习惯,对分词这一块来说,dongbei语言加不加空格换行都无所谓。 比如:
唠
唠
:
“嘎哈?”
。
的效果等于
唠唠:“嘎哈?”。
名字 :代码里面除了各种有特俗意义的关键词(keyword),还会有各种用户定义的名字(变量名、函数名、类型名,等等)。 在dongbei语言里面,除了关键词、标点符号和常数,剩下的都是名字。 比如,在“张三乘李四”这个 dongbei 语言表达式里,“乘”是一个关键词,“张三”和“李四”是两个不同的名字。
并且,为了解决名字和关键词之间需不需要回避的问题,dongbei语言允许你用中文全角方括号【】把一串字符标注为名字。 比如,“【阶乘】”就明明白白地是一个叫“阶乘”的名字,绝对不会被当成是名字“阶”加关键词“乘”。
常数 :除了用阿拉伯数字表示的十进制整数(比如 2、42、250,等等),0 到 10 的常数也可以用中 文表达:
零一二(两/俩)三(仨)四五六七八九十
语法
对于dongbei的语法问题,作者表示,一个 dongbei 程序是由一串语句组成的。 每个语句以句号(。)结束。 为了表达程序员炽热的感情,也可以用感叹号(!)结束,意思和句号是一样一样的。 大家可以根据自己的心情任选使用。
并且,除了GitHub中详细到有点“婆妈”的README,作者还放出了一个小抄,方便大家在写代码时碰到问题直接参考。
变量
老张是活雷锋。# 定义变量。初始值:啥也不是。
老张装二。# 老张 = 2
削老张。# 老张 = 啥也不是
老王是活雷锋。
老王装仨。# 老王 = 3
老张装老王。# 引用变量。老张 = 3
运算
老张走走。# 老张 += 1
老张走两步。# 老张 += 2
老张稍稍。# 老张 -= 1
老张稍三步。# 老张 -= 3
老张装老王加二。# 老张 = 老王 + 2
老张装(老张减三)除以五乘老王。# 老张 = (老张 - 3)/5*老王
老张装 老张齐整整地除以老王 # 老张 = (老张 / 老王),只留整数部分
比较
老王比5大
7加二比老刘小
老张跟老王一样一样的
老李跟250不是一样一样的
老刘啥也不是
打印
唠唠:“唉呀妈呀”。# 打印字符串常量。
唠唠:老王。# 打印变量的值。
唠唠:老王比老张大。# 打印表达式的值。
唠唠:“老王是”、老王。# 打印两个表达式的并置。
条件
寻思:老王比老张大?
要行咧就唠唠:“老王!”。
要不行咧就唠唠:“老张!”。
循环
老王从1到10磨叽:
唠唠:老王。
磨叽完了!
组合
寻思:老王比老张大?
要行咧就开整:
唠唠:“老王!”。
唠唠:“你好美!”。
整完了。
套路
【阶乘】(那啥)咋整:# 定义套路 阶乘,有一个参数 那啥。
寻思:那啥比一小?# 需要自推吗?
要行咧就 滚犊子吧 一。# 返回值1。
要不行咧就 滚犊子吧 那啥乘整【阶乘】(那啥减一)。# 需要。返回自推结果。
整完了。# 定义结束。
唠唠:整【阶乘】(五)!# 使用套路
帮衬
翠花,上 math。# 导入 python math 模块。
唠唠:整 math.factorial(五)。# 整个 python 套路。
中文编程越走越嗨
该项目作者是 Google的高级软件工程师/技术主管,在谷歌工作了15年,他是 googletest测试框架和 googlemock的原作者。

项目传送门:
https://github.com/zhanyong-wan/dongbei
更早之前,一项名为“wenyan-lang”的文言文编程语言项目备受瞩目,也被称为年度最骚编程语言。

吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
吾有一言。曰「「問天地好在。」」。書之。
云云。
没看懂,编译成 JavaScript:
var n = 3;
for (var i = 0; i < n; i++) {
console.log("問天地好在。");
}
运行:
問天地好在。
問天地好在。
問天地好在。
完全的中文编程有木有,使用古汉语语法,具有图灵完整性,可以编译成 JavaScript 或 Python。
如同古人篆书一般,一顿之乎者也,程序写好了!
文言文基础语法
技多不压身,赶紧学起来,第一章变量走起,中文编程肯定不能用 abc,还好我们有甲乙丙:
|
wenyan |
JavaScript |
|
吾有一數。曰三。名之曰「甲」。 |
var a = 3; |
|
有數五十。名之曰「大衍」。 |
var dayan = 50; |
|
吾有一言。曰「「噫吁戲」」。名之曰「乙」。 |
var b = "alas!"; |
true/false 我们也有对应的 陽/陰(繁体的阳/阴),类型就称为“爻”(卦符的基本符号):
|
wenyan |
JavaScript |
|
吾有一爻。曰陰。名之曰「丙」。 |
var c = false; |
if 判断也没问题:
|
wenyan |
JavaScript |
|
若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。 |
if(3<=5){return "of course"}else{return "no way"} |
循环更为简洁,直接声明次数,最后以云云结尾:
|
wenyan |
JavaScript |
|
為是百遍。⋯⋯ 云云。 |
for (var i = 0; i < 100; i++){ ... } |
|
恆為是。⋯⋯ 云云。 |
while (true) { ... } |
|
乃止。 |
break; |
加减乘除一应俱全,连逻辑运算符都支持:
|
wenyan |
JavaScript |
|
加一以二。乘其以三。 |
(1+2)*3 |
|
除十以三。所餘幾何。 |
10%3 |
|
減七百五十六以四百三十三。名之曰「甲」。 |
var a = 756-433; |
|
夫「甲」「乙」中有陽乎。 |
`a |
容器类型也支持,而且尊重汉语习惯,首个下标是从一开始:
|
wenyan |
JavaScript |
|
吾有一列。名之曰「甲」。充「甲」以四。以二。 |
var a = []; a.push(4, 2); |
|
夫「寶劍」之長。 |
sword.length; |
|
夫「甲」之一。 |
a[0] |
|
夫「玫瑰」之「「名」」。 |
rose["name"] |
下面是进阶语法了,定义一个函数 吾有一術:
|
wenyan |
JavaScript |
|
吾有一術。名之曰「吸星*法大**」。是術曰。⋯⋯是謂「吸星*法大**」之術也。 |
function f(){...} |
|
吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。 |
function f(a,b,c,d,e,f){...} |
|
吾有一術。名之曰「翻倍」。欲行是術。必先得一數。曰「甲」。乃行是術曰。乘「甲」以二。名之曰「乙」。乃得「乙」。是謂「翻倍」之術也。 |
function double(a){var b = a * 2; return b;} |
|
施「翻倍」於「大衍」。 |
double(dayan); |
|
吾有一數。曰五。書之。 |
console.log(5); |
看完这些代码让我感觉:
《九章算术》就是一本算法导论;
《孙子兵法》就是一本安全攻防;
《易经》大概是一本二进制逆向吧...
这不禁让人想说:中文编程溜到起飞,但为什么现在的编程还是使用英文呢?
英语≠编程语言
由于程序设计语言本身就是一种语言,它只是碰巧借用了人类的语言。不以中文、英文或其他任何一种语言为基础,而是为了方便计算机和程序员之间的交流而使用的语言。
这套“符号系统”是为计算机硬件而设计的,是为开关电路而设计的;它定义了一系列类似数学符号的“关键字”,使程序员能够将所有事物的数学框架,如做数学题一样,表达给计算机;最后,通过“数字信息”到“位置”“颜色”“亮度”等事物的对应表,将计算出来的东西转化为人们能够理解的图形、文本、表格等形式。

此外,最早的程序语言是数字0和1,以前的程序员写程序是在一个长纸带上打一个孔来表示0和1,后来发现0和1的二进制代码太麻烦,就把0和1压缩成16进制代码。
例如:数字10是用二进制表示的1010,用16进制表示的是0 A,这样表达更简洁,但输入计算机后还是要转换成二进制,计算机才能理解。
之后,科学家用简单的英文单词来表达某种功能。
例如,加法和减法分别用 add和 dec来表示,当程序员输入 add和 dec时,系统会将它们转换成相应的算法,这样就不断地给不同的代码段起名字。
这种不断从数字编码压缩中提升层次的编程语言,最终发展成今天各种各样的编程语言,例如:C、 C#、 C++、 HTML、 Java、 PHP和 Delphi等

为什么不用中文编程
没有成熟的体系
尽管机器只有0和1那么简单,但是想用0和1来表达人们的想法,这套系统就很难建立起来,即便是现在已经开发了多年的编程语言,仍然有许多不合理之处。
因此,在目前还没有成熟的编程系统的情况下,中文编程语言的开发也会很困难。除非重新编写能使用中文编程的硬件。
耗费成本太大
如果想要使用中文编程,只能在原来的硬件上把中文编程转换为英文编程,然后再转换为机器语言,这样会增加消耗,提高延时。
上述两种方法,无论是哪一种,都是要颠覆整个 IT行业最基本的体系结构,所有汇编语言都要进行修改,这就相当于把世界翻了个底朝天。
编程思想才是核心
过多地纠结于使用哪种语言编程,其实都是初级程序员所关心的,编程真正的核心在于指导思想,在于对事物整体的逻辑抽象能力,在不同情况下,拿出最精确的解决方案。程序语言的不同仅仅是语法细节的不同,两者都是执行程序。
所以,许多老程序员,切入新的编程语言,只需一周时间,就可以直接切入项目开发,并不是说这个人有多聪明,根本原因是编程理念已经到位,而且新语言的语法并不是掌握了所有语法细节才能进入项目。基本看懂文法了,在做的过程中遇到不懂文法的细节再去查阅资料即可。
有经验的程序员并不纠结于特定的编程语言或编程语法。
对于说是用什么语言编程,用原则上说,谁方便谁快谁选。科学技术的发展与国界、地域并无多大直接关系。
同样大厂在校招看重的更多是
你自己本身的能力而不是技能
因为这个时代最缺的就是人才
学好编程思维的小哥哥小姐姐
都能拿到了相当不错的OFFER
↓ ↓ ↓
视频加载中...