看了首页几个帖子有感,我也写点东西
在工程上,中文编程的合理性
先说观点:我支持“中文编程”
什么是中文编程
事实上,中文编程是一个模糊的概念,什么是中文编程?
- 所有代码都用英文写,但是有的数据或者数据结构是使用中文算中文编程吗?(大家都是这么干的)
- 所有代码都用英文写,但是有的注释是中文算中文编程吗?(我认为一定程度上注释是代码的一部分)(绝大多数大多数国内程序员是这么干的)
- 小部分变量名、函数名、类名采用中文命名,大部分采用英文命名以及或者中英文混合的命名算中文编程吗?(很少有人这么干)
- 所有变量名、类名、函数名使用中文命名,只有关键字采用原语言的的关键字算中文编程吗?(除了 Python2 和 Golang,其他流行语言都支持的很好)
- 所有变量名、类名、函数名、关键字、注释都使用中文才算中文编程吗?(易语言)
如果我说 2 甚至 1 也是中文编程也不过分吧?因为中文是我们生活的一部分,编程也是是人民群众生产生活的一部分,我们的语言、我们的解释、我们的交流的载体就是中文,无论如何都是绕不开的。全部使用英文是脱裤子放屁
我定义的中文编程是 3,或者说,实际是:“一定程度上合理采用中文的编程方式”。我认为在工程上,采用这种方式或许能够提高我们的工作效率、降低我们的沟通成本
程序设计里的难题
Phil Karlton: There are only two hard things in Computer Science: cache invalidation and naming things.
取名字
众所周知,取名字是很难的。我在 V 站看到无数次:老婆生了,是男(女)娃,求名字。
程序设计也是如此,我们写完程序会花很多时间读自己的代码,好的名字可以降低我们读代码的思考成本,使我们更专注于设计。因为我们生活在中国,写的程序大多也是给中国人用的,所以很多“实体”用中文描述可能是更合理的,我们的程序员中文才是母语,同样取名字,用中文很大几率能够取出比英语更合适、更贴切、更易懂的名字,甚至他的同事一看就知道他想表达什么。
多余的注释
类似如下的代码,传统的写法
// 下订单
var params = {
customer: '张三',
product: '00010001'
}
var order = placeOrder(params)
使用中文编程
var params = {
客户: '张三',
商品: '00010001'
}
var 订单 = 下订单(params)
如果使用中文编程,在有的时候,我们就可以把一些啰嗦注释省略掉了
难取的名字
如果我们做一个封神题材游戏,里面有很多神话人物,我们需要为每个神仙取个名字吗?或者是一个三国题材的游戏,武将的名字怎么取?
我认为最好的方法是:该叫啥叫啥
var 雷震子 = {
名字: '雷震子',
武器: ['雷公凿'],
阵营: '天庭'
}
var 哪吒 = {
名字: '哪吒',
技能: ['混天绫', '火尖枪'],
阵营: '天庭'
}
我实在不知道怎么翻译哪吒或者混天绫,只能使用拼音——拼音还不如汉字呢
为什么不全部使用中文?
答案很简单,因为编程需要英文。
抽象泄漏
我们的程序的基础是英语构建的。
- 我们的操作系统是 C 语言写的,源代码使用的是英语单词,注释也是英语,最好的文档也是英语
- 我们的网络协议栈是 C 语言写的,源代码使用的是英语单词,注释也是英语,最好的文档也是英语
- 我们的高级语言虚拟机、解释器是使用 C/C++写的,源代码使用的是英语单词,注释也是英语,最好的文档也是英语
做程序员离不开英语,当我们遇到问题(我们肯定会遇到问题),最后还是要解决这些棘手的“英文”问题。
试图依靠一层薄薄的封装彻底解决英文的问题(比如易语言)是天方夜谭,也是一种幼稚——除非他能把计算机科学的大厦的基石换掉,否则英文会渗透出来
我们的传统
在人民群众几十年的程序设计事件中,我们总结出很多有用的方法和设计,有些名字已经约定俗称,采用原名子是最合理也是最经济的
- 我们熟悉的流程控制关键词:
while,for,switch,if - 代理:
Proxy - 委托:
Delegate - 工厂:
Factory
使用中文不是一刀切,因为使用中文不是目的,是手段,程序员的目的是高效地写出程序,满足用户需求。只是在使用中文更加合适的场景使用中文,在使用传统的英文更合适的场景,应当使用英文
现状
绝大多数语言无痛满足符合定义 3 的中文编程,包括 Java、C++、JavaScript 等很流行的语言,只要想就可以做,而不是像有的人想的一刀切的方案,比如易语言
在实践中,我们可以慢慢引入中文,比如一些枚举、常量或者很难取英文名的变量
手段而非目的
中文编程只是手段,我们身边有很多编程工具和理论。他们很大程度上都是为了高效地写出健壮、可维护性好、满足用户需求的程序
中文编程也可以理解为一种方法理论,就像《代码整洁之道》里面的各种方法,中文编程在有的场景可以让代码更加清晰整洁,更好维护。
如果是这样,在工程上,何乐而不为呢?

