Skip to content

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

@Andy-AO

Description

@Andy-AO

前排提醒,怕来低级黑

  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 插件,这方面的人,也许会有点兴趣吧。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions