多语言编程的设想:将变量名与自然语言解耦

2020-08-25 20:03:29 +08:00
 Mindjet

前排提醒,怕来低级黑

  1. 中文编程主要是用于变量名,在义务教育普及的年代,没人想改关键字。
  2. 中文编程普及的前提是编译器支持 UniCode,已经实现。但还有很多问题尚待解决,下文说的是重要问题之一。
  3. 中文在某些情况下可能优于英文,并不是要在任何场景下使用。

重要问题

用更熟练的语言思考,对于提高思考的质量和速度都有很好的帮助[1]。

由于中文在编程界不是通用的语言,所以用它编程的重要问题是 —— 没有办法和其他国家的人进行交流,老外一看变量名都是方块字,估计直接劝退了。

软件界面多语言已经很常见了,代码也可以有这个思路。

让自然语言和编程语言在写变量名方面解耦,可以先用母语写变量名,并用来思考编程问题,发布的时候,然后再逐渐翻译,就像现在的软件那样。

变量名与自然语言解耦的好处

  1. 提升命名质量:
    • 专心思考:由于代码和自然语言解耦,可以用专门时间来思考变量名问题,而不是在思考编程问题,手忙脚乱的时候,同时考虑命名和翻译两大问题。
    • 后期修改:后期修改非常方便,当有灵感的时候修改 XML 文件就行,不用打开 IDE 重构。
    • 全球协作:由任何人提出 PR 随时修改英文变量名,总有人能比你想到更好的,比如英文更好,或者就是刚好有灵感。
  2. 提升编程体验:英文不熟练人,能很好的腾出工作记忆,在编程的时候,更好的专注于编程本身。
  3. 隐秘使用:如果周围的环境对中文变量名不够友好,可以自己用中文提交代码的时候用英文。
  4. 全球化支持:同一段代码不仅有中英双语,其他国家的人只要是有这个意思,也可以快速的进行翻译。GUI 软件常常会支持好几十个国家的语言,那么代码也可以。

可能的实现途径

JetBrains 系的 IDE,都有重构的功能,调用重构功能换变量名,应该就能实现。

代码混淆器,好像会替换变量名而让软件功能保持不变,如果有开源的,应该可以利用。

注释 1

...

一个是 Leontiev 通过研究发现,在进行外语交流时,有一个把母语思想用外语形式表达之前的一个“过渡阶段”,在这个时候才用外语思维。其他时间一般都用母语思维。这也就是说,交流前的深度思维,或者“筹划阶段”,一般都是用母语思维的。但 Leontiev 研究的对象大部分都是使用“翻译法”学外语的。那么他研究的这种存在“过渡阶段”思维的对象,是否是因为用“翻译法”学外语造成的呢?这一问题成为了 Loentiev 研究结论的致命伤。

另一个是 John-Steiner 提出的阶段性和统一性的理论:外语初学者习惯用母语思维来帮助理解外语,当达到中级阶段时,就会尽量避免依赖翻译而直接使用外语思维来理解外语,但真正到了高级阶段,大脑中的母语和外语形成的高度联系统一的“语义”系统,双语者可以很自由随意地使用两种语言代码。

研究表明,有经验的翻译人员在翻译工作中,已经做到了可以表达超出单词表面意思的直译,达到深度含义的意译的翻译水平,指的就是这个高级阶段。许多对双语流利的人的研究也都显示:在思考问题时,经常会没有意识到自己刚才到底在用哪种语言思维或可能两种都使用了。

...

《找对英语学习方法的第一本书》

如果大多数英语不好的人都会用母语思维,然后再用翻译形成英语,那么根据工作记忆有限的事实,直接用母语思考,有可能会减轻负担,从而提高思考的质量。


简单的查了一下,Multilingual variable name,和“多语言变量名”,好像没有发现类似的项目,所以将这个灵感发出来,如果有精通写 IDE 插件,这方面的人,也许会有点兴趣吧。

4917 次点击
所在节点    奇思妙想
37 条回复
Accessing
2020-08-25 20:10:02 +08:00
有点意思
CrazyMoon
2020-08-25 20:16:22 +08:00
好想法,之前虽然有类似的帖子,但只说中文命名,境界不如楼主的多语言编程
Mindjet
2020-08-25 20:21:42 +08:00
这里说的用母语思考效率可能更高,指的是英语比母语熟练度明显差的,大多数人可能都会这样,因为毕竟在国内的环境中,练习的机会少很多。

如果英语和母语已经差不多熟,那么不需要。
gggxxxx
2020-08-25 20:38:13 +08:00
为啥总有人把编程语言和人类常规语言做类比?
编程语言虽然字面有语言这个词,但是本质上是数学公式啊。理论上任何一个编程语言可以把源代码替换成任何国家文字而完全不影响使用。这就跟全世界的数学内容都一样但是大家约定统一用英语符号和阿拉伯数字表示是一样的原理。你学中文版数学和英语版数学没有任何差别。
tuchg
2020-08-25 21:08:12 +08:00
这个是个好想法,点赞,稍微想了下 jetbrains 的实现没毛病,问题不大
哪段时间有空可以试着开发开发🌚
lance6716
2020-08-25 23:31:18 +08:00
啥意思,装一个谷歌翻译插件?
secondwtq
2020-08-26 02:18:10 +08:00
这个不是什么新鲜玩意。
”界面多语言“和”符号多语言“,以及”编程语言多语言“其实可以统一起来。

现在 DCC 工具流行使用节点网络,你把软件汉化了,那些节点也汉化了。这就同时实现了界面、符号和编程语言的多语言。
推而广之,编程语言和库本身也是一种”界面“,可以应用界面多语言的实践。节点网络或可视化的好处在于,因为键盘主要只需要输入一些数字(其实数字一般都是拖出来的 ...),没有输入方面的破事。不过我觉得这是现有实现的不足,可能不是特别大的问题。

这里指的是接口部分,至于实现我倾向于保持简单直接。这里的问题是实现一般只是维护者在折腾,变动又比接口更频繁。折腾的性价比远不如接口高。
ericls
2020-08-26 03:16:33 +08:00
感觉光是变量名所使用的语言对思考的关系不大
以前学数学的时候也是 x y z a b c 和一些希腊字母,没有觉得有什么 overhead
Mutoo
2020-08-26 07:56:46 +08:00
1 )基乎所有算法都可以用母语描述伪代码,而编码的过程实质上只是一种翻译过程。如果你不翻译名词也不会有什么大问题。
不过实际工作中的编程很少直接编写算法,大多是 CRUD,你怎么命名只要团队里的人没意见就行了。
如果你想发布一些开源框架,而英文又不好,那结果只能是小打小闹,对世界也没啥影响。

2 )另外翻译本身是一种多对多的关系,一致性非常差,如果把这东西应用在编码上,各种冲突肯定是恶梦。
sagaxu
2020-08-26 09:00:07 +08:00
变量名多语言之后,如果输出一个 lib,对外接口用哪种语言命名?恐怕还是少不了提供 ascii 字符集内的命名。
Mindjet
2020-08-26 09:10:10 +08:00
案例畅想:假设我今天决定使用中文编程,以后的代码都是中文的

1. 闭源公司项目:如果在公司里环境允许用中文那么很好,现在就可以用了;如果公司不让用,那么有了这个项目之后就可以偷偷的用,自己用中文写,在任何时候都可以改成英文的变量名,然后再提交。(可能是零碎时间,也可能是很大的空闲,这个无所谓,因为已经解耦了,可以随时随地改)

2. 开源项目:用中文编程后,首先应该写英文的 README 等内容,让外国人检索到,然后就是写文档,但这些部分的确已经解耦了,所以完全不存在问题,很简单的就可以翻译过来。真正的问题是我写的代码别人看不懂,而且我也不好翻译,因为翻译起来太麻烦,有了这个项目之后,我就可以随时随地翻译。
murmur
2020-08-26 09:15:02 +08:00
以后的代码页是 i18n 的?有点过了
Mindjet
2020-08-26 09:21:54 +08:00
以后还是都在 GitHub 讨论吧,V2EX 不能编辑的设计,可能不太适合讨论这些问题,因为如果不能快速发帖就会被淹没在楼层中,但想法是需要常常修正的。
https://github.com/program-in-chinese/overview/issues/179
misaka19000
2020-08-26 09:25:43 +08:00
好奇楼主用中文编程有多久了,有 1 年了吗,是否清晰的了解了中文编程的利与弊呢?

我曾经用中文写过半年的代码,感觉中文编程毫无意义
takemeaway
2020-08-26 09:32:18 +08:00
4L 说得很对,编程语言本质上并不是语言。
所以跟你中英文没有关系。
hs0000t
2020-08-26 10:01:43 +08:00
如果能有多语种变量名对照表就更好了,根据 IDE 中母语的设置,自动载入不同的代码语言配置文件,并替换和联想变量名,可能还会催生出一个“代码翻译”的职业来
Halohoop
2020-08-26 10:11:44 +08:00
4L 属于降维解读,个人觉得都对,不过是一个从宏观角度去聊,一个从深入编程细节去聊,都有意义。
levn
2020-08-26 10:56:14 +08:00
PerlYuYan 是一个可以令人使用文言文开发 Perl 语言程序的 Perl 组件,由唐凤于 2002 年 1 月发表,只花了两个小时就编写完成。它是中文编程语言的尝试。作者利用中文的性质,将许多指令改成以汉字来表示,形成了文言文的效果。

五言诗范例如下:

#!/usr/local/bin/perl
# The Sieve of Eratosthenes - 埃拉托斯芬筛法
use Lingua::Sinica::PerlYuYan;

用筹兮用严 井涸兮无碍。
印曰最高矣 又道数然哉。
截起吾纯风 赋小入大合。
习予吾阵地 并二至纯风。
当起段赋取 加阵地合始。
阵地赋筛始 系系此杂段。
终阵地兮印 正道次标哉。
输空接段点 列终注泰来。
timothyqiu
2020-08-26 12:00:12 +08:00
在循环里写 i 的时候,就已经人脑解耦过一次了,我们写的既不是 index 也不是「索引」。

这就像数学一样,x = sin(BAC) 初到我国时会把它换成 甲=sin(丑子寅),但现在已经没人这么用了,因为一来写起来麻烦,二来交流起来需要翻译一次很麻烦。
charten
2020-08-26 13:37:39 +08:00
想到现在的前端 web 项目都是基于 webpack 打包,babel 编译混淆,实际上 js 源码写不写中文变量名函数名并不影响最终输出的 js 代码。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/701390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX