Две недели назад на Хабре публиковался перевод «Заблуждения программистов о времени», который по своей структуре и стилю основан на этом классическом тексте Патрика Макензи, опубликованном два года назад. Поскольку заметка о времени была крайне благоприятно воспринята аудиторией, то, очевидно, имеет смысл перевести и исходную статью об именах и фамилиях.
Джон Грэхем-Камминг (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. Ты шутишь, верно?
37. Две различные системы, в которых указано имя одного и того же человека, будут использовать для него одно и то же имя.
38. Два различных оператора ввода данных, если им дать имя человека, обязательно впишут один и тот же набор символов, если система хорошо спроектирована.
39. Люди, чьи имена ломают мою систему, — странные чужаки. У них должны быть нормальные, приемлемые имена, вроде 田中太郎.
40. У людей есть имена.
Список ни в коем случае не исчерпывающий. Если вам нужны примеры реальных имён, которые опровергают любой из этих пунктов, я с удовольствием назову их. Можете добавлять в комментариях другие пункты для этого списка заблуждений, и отправляйте людям ссылку на этот список в следующий раз, когда им придёт в голову гениальная идея сделать базу данных с колонками first_name и last_name.
Джон Грэхем-Камминг (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. Ты шутишь, верно?
37. Две различные системы, в которых указано имя одного и того же человека, будут использовать для него одно и то же имя.
38. Два различных оператора ввода данных, если им дать имя человека, обязательно впишут один и тот же набор символов, если система хорошо спроектирована.
39. Люди, чьи имена ломают мою систему, — странные чужаки. У них должны быть нормальные, приемлемые имена, вроде 田中太郎.
40. У людей есть имена.
Список ни в коем случае не исчерпывающий. Если вам нужны примеры реальных имён, которые опровергают любой из этих пунктов, я с удовольствием назову их. Можете добавлять в комментариях другие пункты для этого списка заблуждений, и отправляйте людям ссылку на этот список в следующий раз, когда им придёт в голову гениальная идея сделать базу данных с колонками first_name и last_name.