在代码中推广中文命名对中国开源软件的意义

2018-12-18 01:31:26 +08:00
 xuanwu

对在代码中使用中文命名的质疑与回应中有问意义何在的, 正好看到为何国内没有好的开源社区和氛围一贴, 正好应景.

先举个亲身实例. 之前在 v2 碰到一个小程序开发请求帖(结贴), 之后催生了五笔编码编辑器这个微型开源项目. 项目开始时, @v2register 并无编程经验, 在原型搭建时, 我提到会使用中文命名, 之后的维护希望由他多出力, 感觉那时他的动力并不大. 但最后实现基本功能后, 他提交了之后的一系列改进 PR 及相关测试, 基本上我除了合并和审核之外没有投入其他精力.

可见中文命名对于鼓励非专业程序员参与开源项目的作用. 并不是说英文命名肯定会阻止参与, 但肯定会让很大一部分非专业程序员望而却步. 而且开源项目很大一部分工作量就在于后期维护, 界面改进, 类似功能的堆积, 以及相关的测试. 这部分本可以由原作者之外的参与者(用户)来实现, 而原作者就可以专心投入到整体的优化改进上.

至于中文命名对用户使用 API 的优势就更不用说了.

对于还处于观望状态的能人们, 只有一句话: 现在开发的任何领域的框架 /工具 /语言, 如果使用了中文命名并开源, 会有更大的多的机会成为该领域的领头开源项目.

期待看到此类项目井喷的一天.

14953 次点击
所在节点    程序员
193 条回复
sagaxu
2018-12-18 01:37:09 +08:00
九年义务教育已经普及很多年了,作为一个合格的初中毕业生,英文变量名应该不会成为障碍。不是只有程序员看得懂英语。
bbsfoo
2018-12-18 01:44:30 +08:00
@sagaxu 作为一个写“管理信息系统”的低级码农,只能使用拼音变量名。
jimchen9999
2018-12-18 01:46:48 +08:00
支持 必须用华为电脑写中文编程 中必赢
sagaxu
2018-12-18 01:55:06 +08:00
@bbsfoo 拼音并不低级,专业名词都用拼音或者缩写,然后注释里写上对应的完整术语,也是比较好的代码风格。
xuanwu
2018-12-18 02:02:14 +08:00
@sagaxu 拼音+注释在可读性上, 应该不会比直接用中文命名好, 而且维护量大的多. 拼音本身的歧义多, 注释方面, 详见文首链接的"附上中文注释就够了"一节.

> 作为一个合格的初中毕业生,英文变量名应该不会成为障碍。不是只有程序员看得懂英语。

无论英语程度如何, 中文作为母语的优势在代码可读性上总有体现. 见文首链接的"没有好处"一节, 更不用说中文命名在专业术语方面的优势.
sagaxu
2018-12-18 02:17:41 +08:00
@xuanwu 母语有优势不假,但也有劣势,否则不至于几乎没人用。假如真的能提高代码的可读性,降低开发成本,利益会驱使公司们尝试,推了二十几年都没动,可见无利可图,甚至弊大于利。
xuanwu
2018-12-18 02:25:32 +08:00
@sagaxu 请分享一下哪些组织 /个人推动了?
我倒是看到各种水文(十)数年如一日地对中文编程语言以及中文命名的抹黑, 最近的一篇影响较广的被我起底在"最近一波对中文编程(包括中文命名)的攻势"一文, 可以带引号搜索此文. 还有更没有技术含量的一篇, 我也发文反驳过:"又见套路:如果计算机是用中文编程,你能成为计算机编程专家吗?"
msg7086
2018-12-18 02:34:29 +08:00
先吐个槽。作为推广中文的人,为什么帖子里用的都是西文标点符号呢,为什么不用规范的中文标点符号呢。

英文命名让很大一部分非专业程序员望而却步。
中文命名可以让全球所有不懂中文的人,不仅望而却步,而且连望都望不了。
也就是说,为了让全球 20%懂中文人口中那么一小撮不专业又不太懂英语的程序员看懂程序,而把全球 80%的不懂中文的人拒之门外,这是什么精神。

先不说为什么我的项目要特地去吸引那些非专业程序员。就不能吸引点专业的来嘛……

就说“如果使用了中文命名并开源, 会有更大的多的机会成为该领域的领头开源项目”,可为啥现在领头开源项目都是英语而不是母语的? Linux 不是用芬兰语和瑞典语写的,Nginx 也不是用俄语写的,Python 也不是用荷兰语写的。好奇怪哦……这句话只是你的中国梦吗……
sagaxu
2018-12-18 02:40:34 +08:00
@xuanwu 易语言不是推了十几年了吗?你不也布道过一段时间了?正如你所见,黑的人多支持的少,你有没有想过一个问题,这么有好处的事情,为何大多数人身体和嘴巴都反对呢?

我觉得你可以动手试试,去几家小公司负责技术,然后要求用中文。同时 fork 汉化几个开源项目,看看是否对项目发展利大于弊。

在实践中检验,比纸上谈兵更有说服力。
xuanwu
2018-12-18 02:44:16 +08:00
@msg7086
> 也就是说,为了让全球 20%懂中文人口中那么一小撮不专业又不太懂英语的程序员看懂程序,而把全球 80%的不懂中文的人拒之门外,这是什么精神。

英语的母语使用者: 360 – 400 million 第二语言使用者: 400 million; 作为外语使用者: 600 – 700 million, 总计算 15 亿
中文的仅仅算母语使用者: 12 亿, 而且还集中在一个国家(额外优势之一), 第二语言和外语使用者还在加速增加.

> Linux 不是用芬兰语和瑞典语写的,Nginx 也不是用俄语写的,Python 也不是用荷兰语写的

见文首链接"芬兰人 Linus,使用英语而非自己的母语来编写 Linux 代码"一节. 类似的人口基数问题.
Yvette
2018-12-18 02:56:41 +08:00
英文作为一门通识教育,以一个优秀的编程人员的智力来推断,这门功课肯定是过关的。得证,如果一个人连英语都成问题,那肯定不是优秀的编程人员。一个不优秀的编程人员开发的开源项目有很大几率是没有可维护性的。

那些编程能力过硬,但是英语成问题的编程人员,并不是事实意义上的常态,让接受通识教育的大多数人来迁就他们是不合常理的。

另外,至少承认一点,现在互联网世界的在中国的发展确实是如日中天,但是创新的中心,以及各种基础设施的发明和维护 /改进,这些中心还是在英文世界,所以反其道而行之将会是无用功。
xuanwu
2018-12-18 03:03:07 +08:00
@sagaxu
> 易语言不是推了十几年了吗?你不也布道过一段时间了?

呵呵, 把我和易语言相提并论真是高抬我了. 易语言作为中文编程的一个标杆, 很可惜在最佳推广期被各种负面材料所困, 也导致它被边缘化. 现在各个领域已经基本被英文编程语言工具垄断的情况下, 好在早已经有其他各国的开发者推动了对 Unicode 命名的支持. 但大多数新手却仍然对中文命名视作禁区, 我能做的首先就是让更多人知道中文命名的可行性和优势. 以我一个草根在一年半之前才开始推广的效果来看, 我已经很满意了.

> 为何大多数人身体和嘴巴都反对呢

从我专栏的关注来看, 看到的是越来越多业界和大学学生对这个问题的兴趣. 从我帖子的支持程度来看, 也是有越来越多人默默支持.

> 我觉得你可以动手试试,去几家小公司负责技术,然后要求用中文

不用我动手, 已经有公司在实践了. 早的有那个 2012 年的 C#帖, 最近也在站里看到类似帖子. 这样的实践肯定会越来越多.

> 同时 fork 汉化几个开源项目,看看是否对项目发展利大于弊。

之前尝试了 vuejs 的源码汉化开头, 就反馈来看, 也有不少支持.

> 在实践中检验,比纸上谈兵更有说服力。

我们讨论组一直在实践, 包括在开源项目中使用中文命名, 开发相关 IDE 插件, 实验性的中文语法编程语言等等.
e9e499d78f
2018-12-18 03:09:43 +08:00
弄 IDE 插件就叫搞中文编程啊?
xuanwu
2018-12-18 03:20:11 +08:00
@Yvette
首先, 开发者英文过关当然对获取参考资料和与国外社区交流有益, 但并不意味着开源项目中的代码必须用英文命名.

在代码中使用中文命名和在日常交流中使用中文没有本质区别. 同是母语为中文的开发者发帖交流也是用中文, 为何不用英文呢? 所谓母语的优势, 就在于, 即使第二语言"过了关", 在理解运用上, 也始终是母语的交流成本更低. 同理, 母语命名可以提升代码可读性, 也减少维护成本.

使用中文命名可以让更多的精力投入到对代码本身的改进, 省去命名不当带来的维护代价和合作障碍. 如顶楼实例, 使用中文命名也可以让更多原本的纯用户参与到开发中来.

创新的中心在英文世界? 即便现在是, 中文命名也可以加速开源软件在中国的壮大, 从而加速扭转这一现状.
crisfun
2018-12-18 03:22:59 +08:00
如果命名有难度,那么母语肯定强过外语。
msg7086
2018-12-18 03:24:29 +08:00
@xuanwu 中国的中小学英语是强制学习的,也就是说只需再过几年十几年,中国有能力读写英语的人数将越来越接近中文母语使用者。如果再具体一点分析,中国不懂英语的人口大多是文化程度不高,没有上过高等教育甚至是中学的群体,这个群体对编程这样一个专业的工作有多少贡献呢。反过来说,学习过编程,有能力理解程序代码的人,却连英语都不会,这个群体到底又有多大呢。编程也好,其他专业也好,第一手资料都是英语的。不懂英语的人,他的水平能提升到什么程度,能像你说的,把一个开源项目发展到某个领域的领头项目吗?

软件开发可不是靠人口战术的。一个项目里五百个农民伯伯,另一个项目里十个硕博士,你说前者会赢反正我是不信的。

而且中文作为母语,学好的人又有多少。我们姑且算是半个语言工作者吧,招募翻译,要求能从日语翻译成中文。他们要接受的第一份考核是中文纠错,把病句错字挑出来改正。实际结果只能算是差强人意,不少人中文水平都满足不了要求,能挑出所有错并能改正的凤毛麟角。你要说英语水平一般的人在英语项目中会写错字病句,我看很多中文水平一般的人在中文项目中也不会好到哪里去。

另外你为什么会觉得集中在一个国家是一项优势?
Yvette
2018-12-18 03:33:18 +08:00
@xuanwu 当然,如果提前定义一个项目是只有中国人参与的协作,那用中文或者英文甚至方言就无所谓了。

如果扭转「这一现状」的结果是得到一个更加封闭的互联网,客观上阻止了全球化的协作,让互联网的圈子局限于中文社区,这样做的除了狭隘的民族主义者,恐怕没有其他人会得到好处吧。除非能够弯道超车,在一个新的跑道引领世界的发展,例如 5G,量子计算?这些都太远,没有太大的现实讨论价值。毕竟现在世界语言是英语,就算中国在这方面领先世界,最后还是需要用英文。原因很简单,外国人的基础教育里面没有中文。

另外,我还是要重复一下,作为通识教育存在与中文社会的英文这门学科,如同数学和语文一样,是为了社会协作的效率而存在的。现在互联网世界的基础建设并不是中国人主要参与建设的,大家维护也都是默认用的英文,这也是为了更好地协作,所有讨论都是建立在在这个事实基础上的。如果要求只用中国人认识的拼音来进行开发,难道不是违背开源的精神吗?
AntiGameZ
2018-12-18 03:38:06 +08:00
自己在行业项目上用中文变量已经很多年了,什么稀奇古怪的专业术语,与其费劲翻译,还不如直接用母语来的直截了当。

这和英语学的好不好没有什么必然的联系。软件项目开发某些程度上也是一门沟通的艺术,用双方都认可,尽可能减少歧义的方式交流,我不明白有什么坏处。

有了这么一点基础认知上,中文编程就未必那么可笑了。既然注释可以用中文写,变量为什么不能呢?不过把 keywords 也改成中文是有点过头了,不过仔细想想,其实也没有什么本质性的问题。
precisi0nux
2018-12-18 03:52:13 +08:00
我就问你们写个代码反复切换输入法不烦吗?
xuanwu
2018-12-18 03:59:13 +08:00
@e9e499d78f 为在代码中使用中文提供辅助的 IDE 插件当然是一个重要部分. 可以参考日本 2017 年的论文"ローマ字入力時の日本語識別子入力補完プラグインの 開発"就专门开发了辅助插件以改进 IDE 对输入日语命名的支持. 它的摘要很有参考意义, 机翻如下:

"在这项研究中,我们开发了一个插件,可以在输入日语标识符时减轻程序员的负担。近年来软件开发项目的复杂性增加了维护软件的时间成本,并且提高源代码的可读性以降低成本是很重要的。有几个报告说,在日语源代码中编写变量和函数的标识符名称是有用的,这是提高源代码可读性的一种方法。然而,当以日语输入标识符时,存在字符转换麻烦且输入补充无效的问题,并且发生对编程器的输入负担。在这项研究中,我们开发了一个插件,通过使用日语标识符的增量搜索甚至使用罗马字符输入实现输入完成,使用 Migemo 的两种方法使用日语增量搜索工具和使用形态分析的方法尝试解决问题。"

@msg7086
楼上已述, 会英语不意味着必须在代码中用英文命名, "会英语因此我要始终在代码中用英文命名"是一个非常大的误区.

> 中国有能力读写英语的人数将越来越接近中文母语使用者

中文的母语地位决定了任何第二语言都很难达到中文水平. 中文命名对代码的可读性提高是可以立竿见影的, 为何不在现在开始呢?

> 有能力理解程序代码的人,却连英语都不会,这个群体到底又有多大呢

无论有多大, 中文命名可以极大降低这个群体参与开源项目的门槛.

> 不懂英语的人,他的水平能提升到什么程度

随着中文命名的推广, 会有越来越多纯中文接口的框架和工具, 以及使用中文命名的编程教程, 英文在编程学习中的作用会随之下降.

> 软件开发可不是靠人口战术的。一个项目里五百个农民伯伯,另一个项目里十个硕博士,你说前者会赢反正我是不信的。

与商业项目类似, 开源项目需要各个方面人才. 比如文档 /测试 /追加相似功能等等对开发经验要求相对低于一开始的架构搭建. 中文命名可以极大挖掘国内人力资源优势, 与顶楼实例类似, 鼓励更多原本的纯用户加入项目维护的队伍中.

> 另外你为什么会觉得集中在一个国家是一项优势?

面对面的交流效率永远高于其他形式.

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

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

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

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

© 2021 V2EX