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

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 条回复
kiroter
2020-08-26 17:24:25 +08:00
说中英没差别的,角度太偏,主要集中在了写上,就写来说中英确实不怎么重要,到写这步时说明你脑子里已经构思完成了。中写还是英写区别确实不大。但换一个角度,读。那就明显不一样了。读别人代码,首先脑子里就是空的,你要解析代码再在脑里构思,这里就明显多了一步中英转换,这里影响很大。关键词还好,固定的,但变量就不一样了,就要去释放一遍转中文然后脑里构思。遇到大段注释那就更慢了。要是母语那一目十行就看完了,母语就少了一步转换。
xuanwu
2020-08-26 17:36:39 +08:00
@kiroter 的确。花在读代码的时间是花在写的十倍以上:
“Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. ...[Therefore,] making it easy to read makes it easier to write.”

― Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
iConnect
2020-08-26 18:00:42 +08:00
中文编程和英语编程对母语不同的人来说,门槛是不一样的。这方面对国人的确不利,没办法,近代数理化大多是老外搞出来的,只好用一堆稀奇古怪的符合来表达。回过头看了一下周髀算经,发现也行正式汉字是象形文字,不利于抽象化表达,而哪些希腊字母,阿拉伯符合本来就是抽象的,所以,比较容易表达。
sillydaddy
2020-08-26 18:16:22 +08:00
@kiroter #21,说得有道理,至少读的时候,母语应该可以做到快速扫掠。
@Mindjet 楼主有没有实际的代码例子? 可以把代码贴出来,直观感受下。刚才我看了下面的代码示例,
https://github.com/program-in-chinese/study/blob/master/1-%E5%9F%BA%E7%A1%80/%E5%9B%BE%E7%89%87%E5%A4%84%E7%90%86/%E7%BC%A9%E6%94%BE.py
但代码量比较小,不能形成视觉冲击力,尤其是关键字还保留着 english 的。

这个转换让我想到一个例子,就是目前使用的键盘,通过重新排布按键,打字速度是可以有很大提升空间的,但就是因为已经先入为主,导致现在几乎没办法更换——因为带来的好处不足以克服惯性。母语编程是不是也属于这类呢?
gggxxxx
2020-08-26 21:14:26 +08:00
我算知道为啥那么多人纠结中文英语的选择了,完全是教条思想所致嘛。是不是国内圈子里有个不好的风气,就是写代码必须用英语单词做变量名?
事实上对于中国人来说,最好用的编程命名语言不是英语,也不是中文汉字,而是拼音。
以#24 楼的例子来说,变量名直接可以写成拼音 tu,不仅比汉字省事,也比英语 image 啊 picture 啊简洁多了。从识别角度来说是最适合中国人的。比如,大家在网上看到 xjp 3 个字母,是不是脑海里第一时间浮现某个肥胖的人.....
前面说过了,代码的本质是数学公式,那么数学公式就应该用最简洁最有辨识度的字符串来标记,舍近求远的去用英语单词显然是事倍功半,强迫症全改汉字也是自己给自己制造困难和麻烦。就用拼音或者拼音字母的简写怎么就不行呢?害怕别人嘲笑么?我不觉得。简洁,含义准确,阅读顺畅,这些都满足了啊。
tuchg
2020-08-26 21:28:49 +08:00
@gggxxxx 用拼音不如用英语,拼音有多音字重音字各种组合,还容易和英语混淆
英语和拼音混搭那种是真的难受,只会增加阅读障碍,不会提升体验,也不简洁
gggxxxx
2020-08-26 22:28:51 +08:00
@tuchg 英语就从来不用缩写吗? us 这种不是也经常用? database 不也经常写成 db ?英语各种缩写怎么就不混淆了呢?
代码里用拼音,本质上和用英语是一样的,可以缩写,也可以字母写全。一般一个代码片段里,场景单一,就那么几个变量,重音的几率能有多高?。你们不是纠结英语阅读困难么?换成自己最熟悉的符号怎么就不方便了?
我的原意很简单,如果想追求中文写程序,还不如用拼音.....算了,各人按自己的喜好来吧....
tuchg
2020-08-26 22:39:46 +08:00
@gggxxxx 并不存在阅读困难,相比拼音我可能更熟悉英语🌚
jones2000
2020-08-27 02:29:51 +08:00
为什么要用中文, 英文不好吗,编程跟语言没什么关系,主要看逻辑思维,能画出流程图,这个程序基本就可以出来了。
这个东西除了可以去教育部拿经费,其他没什么用处了。
jones2000
2020-08-27 02:32:50 +08:00
这个东西符合目前的大形式,就是内循环,编程内循环, 排除老外,中国人自己玩。
ungrown
2020-08-27 09:18:56 +08:00
总觉得你这文不对题,想了想,这不是与自然语言解耦,而是和特定的自然语言(英文)解耦,或者就直观点叫做省却为变量命名找单词的过程

Python 支持 Unicode 变量名,写 Python 完全可以直接用。中文编程阻碍重重不是语言本身的问题,是输入法在从中作梗:英文变量直接敲字母就能补全,中文还得切换输入法至少打出一个汉字才行,这能忍?

其实也有折衷思路,变量以汉语拼音首字母组合开头,后接中文文本,ide 里面直接根据声母敲键盘就能自动补全了。

但还是不如全英文敲起来便捷。
tuchg
2020-08-27 10:06:43 +08:00
@ungrown vscode 和 jetbrains 都已有这类插件支持,输入拼音补全中文
charlie21
2020-08-27 23:16:38 +08:00
tikazyq
2020-08-28 20:24:01 +08:00
其实这个跟键盘的布局类似的,长期以来人们习惯了 qwerty,就不会过渡到更合理的 dvorak
yksoft1test
2020-08-29 10:44:41 +08:00
解耦前就像看宏汇编,解耦后就像看调试器 /反汇编器里面没有符号文件的汇编?
yksoft1test
2020-08-29 10:46:51 +08:00
@yksoft1test 最近在研究一个用宏汇编写的中型软件(口袋妖怪水晶)源代码,才会有这种感叹。
zoharSoul
2020-08-29 11:46:43 +08:00
有点意思

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

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

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

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

© 2021 V2EX