去年入职了一家新公司,负责的是一个行业的具体业务。入职没多久便遇到了命名问题:很多业务相关的名词都是用中文表述的,翻译成对应的英文相当困难。好不容易各种翻箱倒柜找到了对应的翻译命名,结果 review 同事的代码时直接晕倒:同一个中文名词在不同人手里有着 3 种完全不同的名字!
自此之后我便思考:业务代码说到底就是 CRUD,又不需要开源给老外看,为何不直接用中文命名呢?而目前大部分编程语言(如 Go
, Python
, JS
等)都是基于英文设计,直接使用中文命名必然会导致频繁地切换输入法,最终写出来的代码也不够协调;所以最后决定自己设计一门纯粹面向业务的编程语言吧!于是我就花了大约一年的时间去开发Zn
。
目前
Zn
的基本语法已经实现(见后面的图),但是距离一门真正可用的语言还有一段距离,所以目测会有些 bug,还请多多详解。
Zn 是一门 面向业务 的编程语言。
所谓「面向业务」,即是为用户开发业务代码时提供便利,使得用户能够快速根据真实需求投射出简洁、稳定、可维护的代码。Zn 在设计之初即强调「以人为本」,希望程序能够适应真实世界的需求而不是让开发者去适应代码逻辑。
为此,Zn 拥有以下独特的特性:
采用 中文关键词及标点符号。这样再也不用为「用英文命名变量」之事发愁了。
默认使用 高精度小数 作为数值并参与运算,杜绝因浮点数计算所带来的计算误差。
这一点对开发金融应用尤为关键。显然,诸如 0.1 + 0.2 = 0.30000000000000004 这样的结果在金融应用中是无法忍受的。
贴近汉语本身语法,阅读代码可以像阅读文章一样自然。
关键词之间不必用空格分隔。
Zn 语言采用 Go
开发。之所以选用它是因为它在开发效率以及运行效率间取得了平衡,而且里面内置的函数库也帮助省去了很多开发上的障碍(比如 高精度运算使用 math/big
库,里面直接使用 Go 自己的 GC 等);之后将 Zn 内嵌到已有的 Go 项目里也会变得十分简单。
详细见 GitHub
求解鸡兔同笼问题
流程控制代码:循环、遍历、如果
调用方法
定义一个类,并调用其方法
1
6IbA2bj5ip3tK49j 2020-09-20 21:20:17 +08:00 11
给你介绍 @xuanwu
你们俩可以好好交流下。 |
2
cmdOptionKana 2020-09-20 21:55:13 +08:00
蛮好的,但,凡是中文编程都会遇到一个尴尬的处境:已经学会编程的人(程序员)没必要学,也不乐意学中文编程。而且,其中不少人怀有复杂的(由懂编程、懂英语等多种因素揉合而成的)优越感,他们会嘲讽中文编程。
因此建议向还未学会编程的人群推广,两个方向,一是作为入门的踏脚石,入门后改学主流编程语言;一是作为某个小领域的专用语言。 |
3
Cu635 2020-09-20 22:00:42 +08:00
这个和锌有啥关系?
|
4
love 2020-09-20 23:06:56 +08:00
喜欢看这类一本正经地搞笑
话说之前也有一个文言文版的,记不清叫啥了 |
5
JmmBite 2020-09-20 23:15:40 +08:00
有甲骨文版的吗
|
6
79bxh9b 2020-09-20 23:32:21 +08:00
|
7
nguoidiqua 2020-09-21 00:41:12 +08:00 3
每当提到中文编程,总会有人说什么适合教别人入门,我想了下,大概类似拿九章算术教别人数学入门,拿切韵教别人汉语入门一样。
中国使用汉字数字几千年,现在没看到谁提汉字数字比阿拉伯数字容易入门。中国使用切韵学汉字发音几千年,现在没看到谁说切韵比用外国拉丁字母编成的汉语拼音更容易入门。 更没听说谁指责使用阿拉伯数字和汉语拼音的人——怀有复杂的优越感、嘲讽汉字数字和切韵。实际上从来没有人嘲笑中文编程,用中文编程或者用中文编程语言都不会有人嘲笑,谁没有民族好胜心呢。 但要是天天高举着“中文编程优越性”的旗帜,实际上自己没用中文编程写几个程序,也没教出几个学生,只是反复到处空谈“优势”,那不被嘲笑是不可能的,大家嘲笑的不是中文编程,大家嘲笑的是“空谈”。 如果自己扎扎实实去用,最后写出更好的程序,或者效率更高,或者成本更低,教出更多、更好水平的学生,没有人会嘲笑,大家只会佩服,到时候什么都不用说,大家自然会群起效仿。 |
8
lostberryzz 2020-09-21 00:56:18 +08:00
英语比中文简单很多...
|
9
lamany 2020-09-21 01:00:51 +08:00 2
我现在面对的业务也是上百个变量,每个变量翻译起来都很麻烦。
所以就直接的在 Python 里使用中文变量名了,数据库也是用中文字段:) |
11
catror 2020-09-21 01:31:30 +08:00 via Android
编程语言只是一个符号系统,用英文来定义符号(关键字),明显比中文要简单明了。你想象一下写数学公式解数学题什么的全部用中文,就会明白这个道理。
|
12
nguoidiqua 2020-09-21 01:36:11 +08:00
我一向的观点就是——适合用什么的适合用什么,我们拿工具是为了做事的,不是来搞工具民族主义的。
就好像你吃饭的时候不会想——番茄、番薯(红薯)、番椒(海椒、辣椒)、茄子、番石榴、番木瓜、洋葱、洋姜、洋芋(土豆)、胡瓜、胡桃、胡豆、胡椒、胡葱、胡蒜、芥兰、紫甘蓝、西葫芦、西兰花、胡萝卜、菠菜、黄瓜、莴笋、生菜、香菜、南瓜、四季豆这些是外来的,要吃本地原产食物。 以编程为例,关键字用 if else 之类,和非要写 若 或者 如果 假如 ruo huo 有蛮大区别吗?简单了吗?一定要中文才行吗? 像变量名、函数名、类名之类,如果不考虑国际化,有些用汉字或者拼音确实更方便,这个时候当然要用汉字或者拼音,但是像 i j x y z id by to set get run 也要中文化吗?更方便吗? 不见得。当然,想要纯粹中文化的心情是可以理解的,但强说纯中文更有优势就有点扯了。 |
13
chinvo 2020-09-21 01:37:06 +08:00 2
业务逻辑需要的不是中文编程, 而是 BDD
|
14
yuzo555 2020-09-21 01:50:46 +08:00
你这个方向有前景,但是重点应该是自然语言处理,而不是生硬地要求用户用你给出的关键词写八股文。
|
15
falcon05 2020-09-21 03:54:05 +08:00 via iPhone
这跟业务关系好像没多大啊?…
|
16
xuanwu 2020-09-21 04:35:37 +08:00
@xgfan 多谢,可惜好像 v2 不会提醒被别人 @ ?
to 楼主:建议先从自己开始在项目内特别业务相关的部分用中文命名( go 也支持吧),关于切换中英问题,用输入法选项“中文下使用英文标点”、再用“中文代码快速补全”vsc 插件或者 JB 系列类似插件 ChinesePinyin-CodeCompletionHelper 可以部分解决。 个人建议:既然 zn 还未达到实用程度,先在项目里用起中文命名来得到点立竿见影效果为好。毕竟读代码时间远超过写的,算下来还是很值得。 关于 zn,可否发介绍文章到知乎?希望可以收入中文编程专栏。最近也有其他一些中文编程工具出现,不妨一同交流一下。 |
17
number 2020-09-21 07:30:16 +08:00 via Android
如果能完成自举就更棒了
|
18
ClarkAbe 2020-09-21 07:56:51 +08:00 via iPhone 1
这代码看着好累,可读性极差
|
19
demohn2016 OP @yuzo555 其实编程语言从某种意义上讲就是八股文:通过约定某种特定的语法让计算机完成特定的事情。自然语言由于其多义性天然就和编程语言所需要的高效性相矛盾。
|
20
cmdOptionKana 2020-09-21 08:07:25 +08:00 6
@nguoidiqua 楼主已经把语言做出来了(虽然只是起步阶段),花了很多时间精力,你说楼主是空谈?
你的最后一段话 “最后写出更好的程序,或者效率更高,或者成本更低,教出更多、更好水平的学生,没有人会嘲笑,大家只会佩服,到时候什么都不用说,大家自然会群起效仿” 意思是:等你成功了,大家就会支持你。现在大家嘲笑你,不是嘲笑别的,只是嘲笑你没有成功。 就这,还好意思说 “实际上从来没有人嘲笑中文编程” ? 已经有国人开了个好头,你不参与进去就算了,还说人家是空谈。说人家是空谈就算了,还说现在说你空谈是鞭策你等你成功了我就加入你。就这,好意思说 “有民族好胜心”? 另外你说人家天天高举着中文编程优越性的旗帜,就更搞笑了,楼主很明显只是用中文辅助业务,起一个 “有点帮助” 的作用,没有“高举着中文编程优越性的旗帜”。在你楼上的评论也没有人把中文编程说得有多好多好,更没有人说民族好胜心。 |
21
Rxianbei 2020-09-21 08:38:47 +08:00 via Android
@cmdOptionKana 是的,我觉得楼主这样的精神特别值得学习,不空谈概念,不反智反常识。就是默默的去做这件事。并且已经有了一个超过 demo 水平的产物。
另外强调,中文只是语言的载体。zn 业务的基础和亮点是面向业务的语言,而非中文。 |
22
missdeer 2020-09-21 08:45:49 +08:00
真心觉得这个有点 6
|
24
CrazyMoon 2020-09-21 09:16:19 +08:00 2
@cmdOptionKana 这些天天嘲笑中文编程的人,所竖起的靶子其实正是他们自己。就因为行业传统上使用英文编程,所以“祖宗之法不可废”,怎么能用其它语言写程序呢。而把自说自话地中文看成“民族主义”的做法,恰又证明了他们自己内心深深的西方中心观,凡是有一点违逆了西方中心的举动,哪怕只是为了服务现实业务,也都是“可悲的民族主义”。。
|
25
demohn2016 OP @victor 空格可以自己加的,这里演示表明不用空格也能正常工作
|
26
948936595 2020-09-21 09:23:14 +08:00
中文编程好,只要好用,我肯定用,我又不想专业编程,有各种哇
|
27
948936595 2020-09-21 09:24:32 +08:00
学起来简单,使用方便,作为业务后盾
|
28
wy7305e 2020-09-21 09:26:20 +08:00 via Android
下一步是摆脱阿拉伯数字
|
29
robinchina 2020-09-21 09:34:38 +08:00
有点文言文的感觉,如果能按现在的语法,只是对应单词换中文,可能会好读一点
|
30
demohn2016 OP @wy7305e 没计划,也没必要
|
31
yy77 2020-09-21 10:03:20 +08:00
其实保留字和语法可以留着英语,只要变量能够开放使用中文(主流语言应该都支持 utf8 了),那就是很大的进步了。其他变化就有点鸡肋了。
比如直接使用“鸡总脚数”,可读性应该好过“Sum_Of_Legs_Chicken”,尤其是大家的英语水平参差不齐的情况下。 如楼主所述,如果有约定的中文名,比如“年度集团销售总额”之类的,直接用就行。 |
32
wysnylc 2020-09-21 10:05:32 +08:00
中文关键字和中文命名是两码事,前者代表中文化编程后者现在的任何支持 utf-8 以上的都支持
|
33
xz410236056 2020-09-21 10:13:33 +08:00
@cmdOptionKana 计算机语言本质是符号语言,就现在那批语言,从变量到方法都可以搞成中文,但是有意义吗,除了打字的时候多打几个按键。搞语言不搞解释器这不耍流氓吗。
“Zn 语言采用 Go 开发。”看到这就没兴趣了 |
34
tuchg 2020-09-21 10:25:08 +08:00 via Android
其他不说,这种语法结构挺舒服的(ps:把现代汉语关键字换文言可能更合适,可以更简洁可能更舒服,也能减少费力的输入),楼主最初的出发点其实开发一个插件就可以解决
|
35
Chingim 2020-09-21 10:26:08 +08:00
Wenyan:
吾有一數。曰三。名之曰「甲」。 為是「甲」遍。 吾有一言。曰「「問天地好在。」」。書之。 云云。 Equivalent JavaScript: var n = 3; for (var i = 0; i < n; i++) { console.log("問天地好在。"); } Output: 問天地好在。 問天地好在。 問天地好在。 https://github.com/wenyan-lang/wenyan |
36
liberty1900 2020-09-21 10:28:42 +08:00 via Android
@Chingim Python 可以更简单,用 range 2 行就完了
|
37
nguoidiqua 2020-09-21 10:37:45 +08:00
@cmdOptionKana
我没有说楼主空谈。 我是说你和那个 xuanwu 空谈,整天空谈“更适合国人”,“更容易入门”。那么请问用中文编程效率提高了吗?有对比数据吗?教别人更容易入门吗?有对照试验吗?写出什么好程序了吗?有案例吗?不拿事实说话,整天网上论优势,有意义吗? 大家嘲笑的是这种空谈行为本身,和成功不成功毫无关系,请不要曲解别人的意思。如果扎扎实实去实践,用实践说话,不管成功还是失败,都是令人敬佩的。 |
38
lucybenz 2020-09-21 10:46:50 +08:00
个人觉得楼主的需求解决方案应该是:变量名使用 [ 前缀 + unicode 编码] 来规范一致性,然后通过 IDE 插件实现开发过程中的变量 中文预览 或 中文注释
|
39
nguoidiqua 2020-09-21 10:48:41 +08:00 1
@CrazyMoon
扪心自问,搞中文编程真的和民族主义没关系吗? 别自欺欺人好吗?我十多年前也搞过易语言,我那时候年轻,我就是很民族主义,我现在也还很民族主义,我坦坦荡荡承认我就是出于民族自尊心去搞的,我不遮遮掩掩说什么有优势,我就是愤青。 但我就算很民族主义,我也是实事求是的民族主义,我不会因为我希望中文编程发扬光大就自欺欺人的谈优势,就自欺欺人的掩盖自己出于民族主义搞中文编程的事实,就自欺欺人的去指责别人“嘲笑中文”“迂腐守旧”“西方中心观”。 我很民族主义,我特别支持中文编程,但我非常讨厌自欺欺人不敢坦诚自己心态的那些民族主义分子。 我很支持中文编程,但我非常讨厌盲目谈“优势”的人,因为太虚伪了。 |
40
l00t 2020-09-21 11:05:57 +08:00
“默认使用 高精度小数 作为数值并参与运算,杜绝因浮点数计算所带来的计算误差。"
你的高精度小数是什么东西?定点数? 其实浮点数这点误差没什么关系……单精度的话倒是可能确实不够用。双精度基本上够用了。 |
41
nguoidiqua 2020-09-21 11:09:56 +08:00
那个 xuanwu,我印象中,大概五六年前就在知乎看到过了,当时他就大谈优势了,我当时也问了他上面几个问题,到现在也没看他给出答案。
这么多年过去,他总是用一个台湾人拿 Python 混合中文命名写的几个小脚本举例,而且这都不是他自己写的。 喜欢一个东西,不管有没有优势有没有特别好处,不管出于什么心态,都可以去搞,这是个人自由。但你既然要宣扬什么优势,难道别人不能提出反对看法了?一旦别人提出反对看法,一个“西方中心”的帽子就盖上去了,这行么? |
42
demohn2016 OP |
43
demohn2016 OP @l00t 只要有浮点数就会有误差,这里主要考虑到在金融领域计算金额时要求准确。
|
44
cmdOptionKana 2020-09-21 11:16:01 +08:00
@nguoidiqua
我是空谈,但我空谈的内容主要不是批评、批判别人,而是轻度鼓励一下别人。 你的空谈程度和我是一样的,但你空谈的内容主要是批评、批判别人。 其实论坛发言,空谈很正常,我从未开贴鼓吹中文编程,只是在有人作出这方面的努力时说几句鼓励的话而已。你我都在论坛划水,如果你评判楼主,还算切题,如果你忽然对围观群众说 “你怎么在划水”,这…… 我看来至少是跑题了。 |
46
l00t 2020-09-21 11:18:40 +08:00
@demohn2016 #43 不要求的…… 保留到指定小数点位就行了。准确是不可能准确的。误差不仅来自浮点数,也来自数字本身。随便乘个利率什么的,都会出现一大串小数,这时候都得取整到指定小数点位。浮点数也只需要保证指定小数点位的准确就可以了。
|
47
jedihy 2020-09-21 11:18:55 +08:00 via iPhone
比英语门槛还高
|
48
nguoidiqua 2020-09-21 11:20:16 +08:00
实际上真正去实践,很容易发现一个情况:
中文少的时候,中文变量名、函数名很醒目,相当于点睛效果,确实很方便。但是随着中文比例加高,分辨就越来越难了。 所以实践下来,汉字、拼音、英文结合起来用才是最合适的,实际上工作中很多人都是这样灵活使用的。 如果适合用英文的时候非要中文,或者适合中文的时候非要一长串英文,那都是很扯淡的。 |
49
nguoidiqua 2020-09-21 11:38:07 +08:00
@cmdOptionKana
我不评判楼主,楼主只是做了个事情,没有表达什么观点,没有什么可以评判的。东西我也没用,也不打算去用,既然如此,我不可能去批判这个编程语言。 空谈是很正常,别人嘲笑这是空谈难道不正常? 至于我发帖的原因,因为你帖子先说别人“优越感”。而且,我开始没有批评别人吧,我只是反驳了“优越感”和“嘲笑中文编程”的这个观点,说明大家嘲笑的其实是“空谈”。 然后我鼓励大家去实践,扎扎实实用出成果,用事实说话,这个也不算批评别人吧? 后面有人“祖宗”“西方中心观”的帽子都盖出来了,我说下自欺欺人、虚伪不算很过分吧? |
50
mdesi 2020-09-21 11:43:15 +08:00
支持,大佬加油,不过代码看着确实可读性不是特别好
|
51
icyalala 2020-09-21 11:44:41 +08:00
好!很有精神!
|
52
demohn2016 OP @nguoidiqua 认同第一句,其实我无意推广中文编程( i.e. 把中文当作是编程的目的而不是解决问题的手段)只是想在实际应用中解决问题。
事实上对于前述的 i,j,k,m,n , Zn 完全可以用单个英文字母表示:比如 ‘以 K,V 遍历数组’ 这样。非得追求全中文变量名(诸如 甲乙丙丁)除了给自己添堵之外没有任何好处。 Zn 更想解决业务相关的变量命名问题:比如 ‘function getPrizeReissueCensorList’ 和 ‘如何获取人工发奖审核列表?‘ 相比 显然后者对于母语是中文的人来说更加容易理解。 |
53
winglight2016 2020-09-21 12:50:32 +08:00
7 楼讲得挺明白了,但是很多人不愿意动脑筋思考一下,哪怕是做一下 SWOT 就能知道“中文编程语言有没有用”和“面向业务的编程语言有没有用”的答案。结果很明显,有用,但是和弊端比较,并没什么优势。
另外,我很好奇 lz 怎么从“解决面向业务( CRUD )编程”走到了“发明中文编程语言”这一步的?只是命名困难、不规范这种问题,应该有更便捷的解决方案呀——20 年前 SRS 模板里就有术语表 /Glossary 这一块内容了,后期维护一下也不是什么难事儿呀。毕竟,就算你用了中文编程,程序员还不是照样可以乱起变量名? |
54
demohn2016 OP @winglight2016 Glossary 这玩意对于专门的 **名词** 很有用,比如将 `行情卡` 厘定为 `QutCard` ,因为这些都是有稽可循的;而对于动词效果就大打折扣了——我曾经见过对于同一个 “审核” ,在不同的业务里称为 `audit`, `check`, `review` 甚至 `censor` 都有... 尤其是 `censor`, 简直是拿 google translator 随手一查查出来的。
其实对于命名问题有两大方案:一是大家英文水平都提高(雅思 6.5 起步 LOL );二是干脆全用中文。lz 只是想尝试下第二条路可不可行 TAT |
55
fuxkcsdn 2020-09-21 15:35:22 +08:00
不知道没有编程基础的人看起来如何
反正我看上面的示例感觉比看英文还吃力 |
56
chenluo0429 2020-09-21 17:26:50 +08:00
和 wenyanlang 一样,蛮有意思的。
没了解过语法和编译器相关的设计,请教一下,关键字和变量名之间没有分割,这样如果变量名中包含了关键字(比如“令”),会不会分词错误导致编译错误,或者结果和预期不一致? 还有令,为,之这些关键字很多都是偏文言的习惯用词,现在很少这么说,会不会导致新手入门理解困难?可不可以换成更加通俗一点的词作为关键字? |
57
winglight2016 2020-09-21 18:48:46 +08:00
@demohn2016 我觉得,如果考虑到 programming language 的本质其实是不同于中文或英文的一种“严格定义”的语言,那么这种编程语言本身(关键字等)是不需要中文化的。至于你说的变量、类名、方法名的统一问题,我同样理解为一种“遵守约定”的能力,并不需要英语 6 级,需要的是项目管理能力,btw,如果真的想英语流利使用,6 级远远不够。最后,VB 就支持中文的变量、类名、方法名,20 年前我就见过这种风格的 HIS,并不需要额外的发明一门新的“编程语言”。
|
58
demohn2016 OP @chenluo0429 会,所以解决办法就是在变量前后各加一个间隔号,就像这样: ·将军令·
至于 为,之 等关键词这个确实可以商榷,这里选用偏文言的词汇主要是希望代码写出来更加书面一些,而且 “之” 要比“的” 适用范围更广一些(存粹是语感的角度) |
59
msaionyc 2020-09-22 11:42:48 +08:00
语言名也别叫 Zn 了,直接叫锌,或者叫 xx 语言( xx 为汉字),去英文就去的彻底一点
|