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

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

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

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

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

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

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

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

14990 次点击
所在节点    程序员
193 条回复
defel
2018-12-18 04:07:18 +08:00
好,支持楼主尝试。反正也没什么坏处,想做就做呗,何必得到大家的认可。话说如果我有花不完的钱,我也搞点副业玩玩,现实是我还是用英语编程,毕竟还是要有饭吃才行。
ericgui
2018-12-18 04:19:46 +08:00
好好学英语,别扯这些没用的
binux
2018-12-18 04:34:17 +08:00
LZ 不会是哪个 NGO 雇来搞我们的吧。
arYUWang
2018-12-18 04:35:48 +08:00
如果是公司内部的话,CTO 同意,同事不反对就随便你搞。

开源软件的话还用中文?只把潜在开发者范围框到会中文的人,这还叫开源吗?没点国际精神了么?

至于要说为什么国际上就是用英文,那要怪成吉思汗或者秦始皇没有统一全世界了。
msg7086
2018-12-18 04:46:02 +08:00
@xuanwu
> 无论有多大, 中文命名可以极大降低这个群体参与开源项目的门槛.

还是那句话,你这项改变在成本上并不是免费的。你是牺牲了说英语的人口(包括那些有学力财力以至于能把英语学好,很可能是进入过高等教育机构学习的人),而换取了这个“无论有多大”的人口(包括那些没有学力财力,连高中或者大学课程都没有办法学习完的人)。为什么我感觉你是觉得这个“无论有多大”的群体加入是完全没有代价的?

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

第一手资料、文档、文献都来自于英语,中文的资料是如何凭空出现的?是不是还需要精通英语和中文的资深开发者来翻译和维护?

> 比如文档 /测试 /追加相似功能等等对开发经验要求相对低于一开始的架构搭建

连高中和大学课程都无法完成的人是如何做到编写文档、做测试、追加相似功能的?

> 中文命名可以极大挖掘国内人力资源优势

编程的门槛我觉得从来不是语言水平,而是编程水平。我一直觉得要在中国人中普及编程能力才是中文编程应该做的事情。

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

我从上海飞到韩国或日本比飞到广州还近。这么大一个国家,来自不同各地的人怎么面对面交流?何况现在都是互联网时代了,跨国的面对面会议我司已经用了好多年了,为什么还要局限于物理上的面对面交流。真要面对面有优势,那应该用广东话或者四川话编程,人员地域集中,更容易面对面交流。

==========

我们以前推广易语言,主要目的就是我上面说的,在中国人中普及编程能力。之后等他们有条件进入高校深造的时候,这份编程技术可以帮助他们快速发展。易语言之前的目标人群,就是中小学生。他们没有很好的英文基础,所以在学习(注意是学习,不是开发)过程中,会有语言障碍。易语言通过把学英语和学编程解构开,让中小学生可以更容易地学习编程。中文编程从来就不是一种排除非中文人口参与的手段。
AX5N
2018-12-18 05:57:16 +08:00
何故反对用中文 programme,因为这就跟喋るの時夹杂着 English 一样恶心。
TonyLiu2ca
2018-12-18 07:10:09 +08:00
中文的可以有
sutra
2018-12-18 07:17:44 +08:00
然后就只有看得懂中文的人才能参与维护了。
xuanwu
2018-12-18 07:41:28 +08:00
@defel 可以看看站里有多少抱怨命名难的帖子, 想象一下使用中文命名可以省去的麻烦(即便是个人项目). 也许会给你更多动力

@binux 我的背景在 "中文编程知乎专栏一岁了-我为什么投身于普及用中文编程"一帖. 一些出来发表反对意见的背景我也很有兴趣了解

@eugenewangfw
@sutra 参考"不利于非中文编程者贡献"一节. 有详述. 摘要如下:

"当然希望看到更多的国外开发者参与国人初创的项目. 不过,除去预测得到是否会有国外开发者参与的情况, 剩下的自己发起的项目, 首要考虑的是对自己的开发和维护最有利的编程方式. 因为在可以预见的将来, 我自己会是最主要的贡献者. 如果我自己的开发和维护成本随着项目变大而变得不可持续, 那么在项目成型和能够吸引其他开发者参与之前可能就夭折了. 个人的感觉是用中文命名是我更熟悉和容易的方式.

osc 上一些即使很热火的开源框架, 比如 JFinal, 大多只有极少的其他开发者贡献. 个人认为一个很重要的原因, 就是代码阅读的难度, 而英文命名是一个额外的障碍. 也许对于开发者本人来说, 随着项目的开展, 一些开始时有些别扭的英文命名自己也习惯了, 但是对于刚拿到整个代码的新开发者, 任何不妥当的英文命名都会导致迷惑和时间的浪费. 为了吸引理论上的国外开发者参与, 而不优先选择对身边的中文开发者(包括自己)阅读代码有利的编程方式, 个人认为这种思路是很值得商榷和分情况探讨的."

@msg7086
> 你是牺牲了说英语的人口(包括那些有学力财力以至于能把英语学好,很可能是进入过高等教育机构学习的人)

前面说过了, 无论英语有多好, 只要母语是中文, 用于代码命名就有可读性优势

> 是不是还需要精通英语和中文的资深开发者来翻译和维护?

起初当然要. 就像古代国外将中国文献翻译成外文一样. 随着中文命名的推广, 国内开源软件也会加速发展. 之后中文化程度会越来越高, 包括框架 API 等等. 逐渐国外的工具 /框架会被类似功能的中文工具替代, 在这过程中需要翻译学习的内容也会越来越少.

> 连高中和大学课程都无法完成的人是如何做到编写文档、做测试、追加相似功能的?

小学生会玩游戏, 就会测试.

> 编程的门槛我觉得从来不是语言水平,而是编程水平

请参考"没有好处"一节. 摘要:
"如果认为 API 以及内部方法 /变量的命名无关紧要. 有不少可读性相关的文章对这个误区进行了阐述, 比如 Writing for Readability
母语命名对代码清晰度和可维护性的提高在'Python3 选择支持非 ASCII 码标识符的缘由'中也有印证."

> 为什么还要局限于物理上的面对面交流

可以!=最优. 就像, I guess we can discuss this in English, but why do we do Chinese instead?

> 中文编程从来就不是一种排除非中文人口参与的手段

绝大多数国人的母语都是中文. 什么叫"非中文人口"?
tamlok
2018-12-18 07:45:19 +08:00
楼主有中文编程时候的录屏吗?很好奇怎么高效地输入中英文。给个录屏大家,估计大家都会判断中文编程是否高效。
xuanwu
2018-12-18 07:50:34 +08:00
@tamlok 关于编程效率问题. 参考"中文输入太慢, 降低开发效率"一节:

答: 首先, 如果考虑推敲命名的时间, 对母语是中文的程序员, 中文命名应该比能够更恰当更快, 综合各种因素哪种方式写代码更快还待实践证实. IDE 工具的辅助也可能使输入效率提升甚至超过英文输入: "用实例来看中文编程代码输入效率问题". 另外, 由于命名可读性的提升, 可以省去更多注释.

更不可忽视的是, 鉴于开发过程在整个软件生存周期中只占一小部分, 其他的部分(设计,调试,测试,维护)从良好的可读性获取的利远大于开发效率可能降低的弊. 设计时可以直接由业务描述(中文的)直接映射到构架 /接口的命名(省去了英文翻译的一步), 调试 /测试 /维护可以因为代码可读性的提高而减低理解和学习代码的成本.

为避免频繁切换中英文: 为了在输入中文的同时不用切换就可以输入特殊符号(){};等等, 搜狗输入法支持”中文时使用英文标点”
leavic
2018-12-18 07:53:47 +08:00
我来总结一下:扯淡。
kltt22
2018-12-18 07:56:17 +08:00
编程要从娃娃抓起,楼主请去幼教板块宣讲。这里都是老油子了,油盐不进,白耽误功夫。
xuanwu
2018-12-18 08:10:40 +08:00
@kltt22 中文命名当然在少儿编程教育以及辅助传统学科教育上有优势, 但将中文命名在现有商用和开源项目中使用也极有现实意义. 就像 #18 @AntiGameZ 的实例.
之前站里也看到各种实践, 只不过还多数是孤岛状态. 这些中文命名的实践者汇聚起来, 逐渐就可以有力量实现一些实用的开源项目.
falcon05
2018-12-18 08:11:53 +08:00
又不是非要精通英语才能编程,更不是要英语说得跟中文一样好才能编程,只要看看编程语言语法,才十几个关键字。死记硬背都能记下来了,没看到中文编程有什么必要性
gzf6
2018-12-18 08:15:39 +08:00
可能符合语境的英文加上适当精准的中文注释比较好
dremy
2018-12-18 08:18:40 +08:00
iOS12 的捷径,可以说就是一种中文编程,与之相比改版前的英文版 workflow 的上手难度的确是要高不少,因此我觉得没必要鄙视中文编程。

也许在英语过了四六级乃至雅思托福 GRE 的各位 985 硕博士生看来,不懂英文就该被喷,但整个中国不懂英文的人现阶段还是占绝大部分。如果让语言成为了普及全民编程的壁垒,想必还是得不偿失的。
xuanwu
2018-12-18 08:19:35 +08:00
@falcon05 学编程只要记下关键字和语法就够了吗? 上次还看到帖子说学一门语言就要为它核心库的 API 写几个笔记, 学到现在积累了几十本.

参考"没有好处"一节. 摘要:
"如果认为 API 以及内部方法 /变量的命名无关紧要. 有不少可读性相关的文章对这个误区进行了阐述, 比如 Writing for Readability
母语命名对代码清晰度和可维护性的提高在'Python3 选择支持非 ASCII 码标识符的缘由'中也有印证."
junmoxiao
2018-12-18 08:22:36 +08:00
实在看不下去了,你这是本末倒置,编程的难点从来不在英语上,你改成用中文毫无意义
Rheinmetal
2018-12-18 08:27:04 +08:00
纵观历史 一个工具或者框架能够流行 有几个重点
1 目标用户急需
2 极大提升效率
3 易用

现在问题是中文编程这一套 目标用户有多少的数量和质量 能否支撑一个项目 一套框架 甚至一个生态
用户画像大概是这样
由于各种原因 没有得到很好的英语教育 但是需要用中文编程

易用和效率的问题 其实也和 1 有关 用户体验反馈和改进需要投入很多

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

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

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

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

© 2021 V2EX