1. 为沟通选择语言
我们在一个海员管理系统的开发中遇到了问题,这个领域的专业术语我们很 难翻译。即使勉强翻译出了,也感觉辞不达意,无论是初看上去,还是过一段时 间再看都一头雾水。比如,我们写出了下面的测试用例:
public void test_should_return_NOT_pass_if_duty_higher_than_second_mate_or_second_ engineer_and_education_level_is_secondary_and_guraduated_after_2002_02 _01() {
……
}
但其中second mate/second engineer是什么意思呢? secondary的education level具体又是什么?
还有:
public void test_should_return_third_mate_course_for_jianxi_third_mate() {
……
}
jianxi_third_mate是什么? 等等。
当然,我们可以制定一个术语表,请专业人士先帮我们翻译好,然后在代码 中遵循这个术语表。然而随着需求的增加,术语层出不穷,并且有特定中国特色 的名词根本就没有对应的翻译,于是这个问题就一直困扰着我们。
而直到有一天,在一次重构中我们把上面的第一个测试用例重命名了一下, 一切似乎突然间开朗了:
public void test_应该算未通过_if_职务高于二副二管轮_而_学历只 是中专_并且_毕业时间晚于2002年2月1日() {
……
}
Team里的人纷纷围过来,看着这个跟需求描述里的验收条件几乎一模一样的 测试用例名称,感受到一种前所未有的清澈。大家几乎在几秒钟之内就做出了选 择:这种形式是可以接受的,而且表达能力更强,交流效果不错。
什么?使用中文作为函数名?这似乎只是那些被主流舆论鄙视的"汉语编程"研 究者才搞的东西,我们一直就被教育离这些东西远点,甚至汉语拼音都不推荐使 用,一个经常拿来做反面教材的例子就是数据库表的列名使用汉语拼音,这被看 作不专业的表现。又或者,以后团队中加入外国开发者怎么办?
幸运的是,我们是软件工程师,不是计算机科学家。学术理论可以极端,而 工程一定是某种折衷。定理由自然界精确遵守,而工程却是各种应力的人为平衡 。
具体到这个案例,让我们正视现实:
团队成员并不善长本项目领域的专业英语。
任何翻译都会造成一定的信息损失,尤其在一些具有中国特色的领域,比如" 中专"翻译为英语就很难像中文一样简洁直观。
在可预见的将来,不会有老外加入开发团队。
而选用中文却能够让我们更好的坚持以下原则:
代码除了完成功能, 另外一个重要的功能是交流。(我们选择了对团队来说 最有效的交流方式)
用测试用例的名字来描述需求。(用中文描述更精确, 易于理解)
当然我们也会失去一些东西,比如对上面提到的"应该坚持使用英文"原则的 放弃。在这里我们认为放弃这条原则的收益大于损失。一种损失就是失去了学习 英文的机会,比如上面最后一个测试用例,用中文写出来就是:
public void test_见习三副应该参加三副的培训() {
……
}
或者有人会说:"见习"的英语是"intern",常用词啊。然而系统中还有另外 一类角色,叫"实习三副"等,那才是"intern"。实习是实际动手,担当实际的职 责;见习是只看不练,跟在后面观摩学习。见习的英文单词是"noviciate",并 不为项目组所熟悉,而我们也不再关心它。
总之,在实践中应当权衡各种利弊,选择对你来说最有效的方式。