程序员对人名的错误想法
原文:Patrick McKenzie, Falsehoods Programmers Believe About Names
翻译:苏洲跃/Justin Zeus
原文链接, 2010年6月17日
译者注:这是一篇很多年以前的程序员老段子,我读到的时候笑到岔气,几年来时有温习,特别是写任何跟人名有关的功能的时候。最近我意识到这篇文章好像没有中文版!征得原作者同意之后,翻译并贴译文在此
约翰·格拉汉姆-卡明(John Graham-Cumming)今天写了篇吐槽文章,说他使用的一个电脑系统认为他的姓包含了非法字符。这显然是扯淡。按照名字的定义,不管别人说他们的名字是什么,他们的名字就是什么。可以想见,这事儿让约翰很烦恼。毕竟按道理讲,名字是我们身份的核心,他完全有烦恼的权利。
我作为职业程序员在日本生活了几年。那里有许多系统都因为想要录入我的名字而坏掉了。(大部分人叫我Patrick McKenzie,但是我可以接受我完整名字的六种不同写法。反正很多系统不接受其中任何一种写法。)我也见过一些巨无霸跨国公司,因为标榜全球业务,把他们的系统设计为理论上可以接受所有的人名。我还从没有见过一个电脑系统可以很好地处理人名,并且我很怀疑这种系统真的存在。
那么,作为一项公共服务,我将列出你所使用或设计的电脑系统可能对人名作出的假设。以下所有假设都是错的。以后你设计一个新的处理人名的系统的时候,可以试试看少犯这些错误。
1. 一个人有且只有一个规范的全名。
2. 一个人有且只有一个供人称呼的全名。
3. 一个人,在现在这个时间点,有且只有一个规范的全名。
4. 一个人,在现在这个时间点,有且只有一个供人称呼的全名。
5. 一个人的名字有N个部分(不论N是几)。
6. 人名可以写在特定大小的空间里。
7. 人名是不会变的。
8. 人名只会因为这里列出来的几个特定理由才会改变。
9. 人名都可以用ASCII字符集表示。
10. 人名都可以用某一个字符集表示。
11. 人名可以对应到Unicode的编码值。
12. 人名是大小写敏感的。
13. 人名是大小写不敏感的。
14. 人名有时候包含前缀或后缀,但是它们都可以被忽略。
15. 人名不包含数字。
16. 人名不会是全大写字母。
17. 人名不会是全小写字母。
18. 人名的各部分有顺序。如果选择一个顺序,就会自动和所有其他对同一名字选同样顺序的系统有兼容的顺序。
19. 人的姓和名应该要不一样。
20. 人有姓,或者氏,或者随便别的什么家族标记。
21. 一个人的名字是全球唯一的。
22. 一个人的名字几乎是全球唯一的。
23. 好吧好吧,至少人名应该多种多样,所以不会有几百万人的名字一模一样。
24. 我这个系统永远都不需要处理来自中国的名字。
25. 或者日本。
26. 或者韩国。
27. 或者爱尔兰,英国,美国,西班牙,墨西哥,巴西,秘鲁,俄罗斯,瑞典,博茨瓦纳,南非,特立尼达,海地,法国,或者克林贡帝国,因为这些国家都有好多奇奇怪怪的名字。
28. 克林贡帝国那个是开玩笑的对吧?
29. 文化共性!至少在我们这里,人们有一个通行的人名标准格式。
30. 存在一个算法,无损且可逆地转换人名格式。
31. 我可以安全地假设这一个糟糕词语集里面没有人的名字。
32. 人是在出生的时候被起名的。
33. OK,不一定是出生那一刻,但是应该是出生前后没差多久。
34. 好吧好吧,出生一年以内。
35. 五年以内?
36. 你tmd的在逗我对吧?
37. 两个系统如果包含了同一个人的数据,这两个系统里会使用同样的名字。
38. 两个数据输入者,如果试图输入同一个人名,必须在任何设计合理的系统上都产生出比特级一模一样的字符串。
39. 如果一个人名搞崩了我的系统,那是这个人名太古怪。人们应该有确实可用的名字,比如田中太郎。
40. 人有名字。
这个列表肯定不全。如果你想看看推翻以上任何一条假设的反例,我会很乐意给你看几个实例。欢迎在讨论区增加更多关于名字的错误假设。下回再有人设计数据库的时候一脸天才地建议你放一列‘姓’和一列‘名’,欢迎把这篇文章分享给他们。