mercury13_kiev (mercury13_kiev) wrote,
mercury13_kiev
mercury13_kiev

Category:

Патрик Маккензи. Заблуждения программистов об именах людей.

Оригинал: Patrick McKenzie. Falsehoods Programmers Believe About Names

От переводчика. Я интересуюсь фигурным катанием. А в последнее время там появилось много спортсменов из Китая и Кореи: Yuna Kim = Ким Ён А, Jian Tong = Тун Цзянь… А основная профессия — программист. Автора одного из алгоритмов поиска подстроки зовут J Moore = Джей Мур. Как-то на досуге я поразмысил, как можно в БД записать, например, фигуристов, и система получилась тяжёлая, в ней было name1, name2, name3 и naming_tradition.

Джон Грэм-Камминг написал заметку: сайты жаловались, что в его фамилии недопустимый символ. Конечно же, нет: если кто-то говорит, что это его имя, то — по определению — это допустимый идентификатор для него. Джон, разумеется, был расстроен такой ситуацией, и у него на это есть все права, просто по определению.

Несколько лет я жил в Японии, программировал там, и «поломал» кучу систем, просто представившись им. Обычно меня зовут Патрик Маккензи, но я принимал ещё шесть «полных» имён, которыми меня называли японцы. И большинство систем, с которыми я имел дело, не приняли бы ни одного из этих имён. Работать приходилось и в Корпоративном Секторе, который, распустив щупальца по всему миру, разрабатывает свои системы так, чтобы — теоретически — подходило любое имя. Но всё равно я не видел ни одной компьютерной системы, которая корректно отрабатывает имена. И сомневаюсь, что такая найдётся.

Итак, ради народа, я хочу продемонстрировать, какие предположения бывают у программистах о человеческих именах. Все они неверны. Постарайтесь, разрабатывая систему, в которой фигурируют имена, «вшить» в неё поменьше из этого списка.

  1. У человека ровно одно каноническое полное имя.
  2. Человек использует ровно одно полное имя.
  3. В любой момент времени у человека ровно одно каноническое полное имя.
  4. В любой момент времени у человека ровно одно полное имя, которое он использует.
  5. У людей ровно N имён, для любого N.
  6. Имя должно умещаться в N символов.
  7. Имена не меняются.
  8. Имена меняются только при определённых событиях.
  9. Имена записываются символами ASCII.
  10. Имена записываются любой однобайтовой кодировкой.
  11. Имена записываются Юникодом.
  12. Имена чувствительны к регистру.
  13. Имена нечувствительны к регистру.
  14. В именах людей есть префиксы и суффиксы, но их можно спокойно упустить.
  15. Имена не содержат цифр.
  16. Имена не пишутся ЗАГЛАВНЫМИ БУКВАМИ.
  17. Имена не пишутся строчными буквами.
  18. Имена пишутся в определённом порядке. Во всех системах для одного и того же имени применяется один и тот же порядок.
  19. Имя и фамилия, конечно же, должны быть разными.
  20. У людей есть фамилии (или что-то ещё, что у родственников одинаковое).
  21. У всех людей имена разные.
  22. Ну, почти у всех.
  23. Да, да, но человеческие имена настолько разнообразны, что не найдётся миллиона людей с одинаковым именем.
  24. Моя система не будет работать с китайцами.
  25. Или с японцами.
  26. Или с корейцами.
  27. Или с ирландцами, американцами, испанцами, мексиканцами, бразильцами, перуанцами, русскими, шведами, ботсванцами, южноафриканцами, тринидадцами, французами, клингонами и прочими, у кого «необычные» имена.
  28. А с клингонами ты пошутил, так ведь?
  29. Кончай с культурным релятивизмом! В моей стране выработали один привычный стандарт имён.
  30. Есть алгоритм, который преобразовывает имена и делает это без потерь. (Кто сказал: «Возвращает то же, что было на входе»,— тому медаль.)
  31. В словаре ругательств нет человеческих имён.
  32. Имена даются при рождении.
  33. Ну, не при рождении, но незадолго после рождения.
  34. Хорошо, хорошо, через год после рождения.
  35. Пять лет?
  36. Ты не шутишь?
  37. Две системы, хранящие информацию об одном и том же человеке, будут звать его одним и тем же именем.
  38. Два оператора, услышав имя человека, на одной и той же системе введут его бит в бит одинаково.
  39. Люди, чьи имена «ломают» мою систему,— редкие и необычные. Но у них-то всё равно должно быть жёсткое имя наподобие 田中太郎.
  40. У людей вообще есть имена.

Этот список не исчерпывающий. Если нужны примеры, которые опровергают любое из этих заблуждений — я приведу парочку. Если я что-то упустил — поправляйте в комментариях. А если у кого-то в БД будет «гениальная мысль» с колонками first_name и last_name, направляйте их на эту заметку.

Самые интересные комментарии

  • Во всех странах человека называют одинаково. В Голландии меня зовут Герт. В Дании — Герардус. В Германии вообще отказываются произносить моё имя.
  • И, конечно, имена должны проверяться, прежде чем попадать в БД. Так что первое правило: не нужно рассчитывать, что через это поле не будут проверять БД на прочность. И второе правило: не нужно рассчитывать, что люди введут сюда правду. То есть: 142 человека, которые ввели «Барак Хуссейн Обама», не обязательно будут использовать это имя вне системы. Не нужно и говорить: не надо рассчитывать, что под одним именем в системе зарегистрирован ровно один человек. Уникальным может быть только ник или имя пользователя. И наконец: не надо рассчитывать, что человек введёт своё имя два раза абсолютно одинаково.
  • №11 (с Юникодом): китайские и японские имена с редкими или устаревшими иероглифами.
  • Имя и фамилия всегда на одном и том же языке. Можно загуглить.
  • Имена всегда длиннее одного символа. Я знал девушку, которую звали K (Кей). Думаю, когда она устроится на работу, она заменит своё имя на Kay, после того как IT-отдел в 27-й раз откажется выдать ей электронную почту.
  • В Израиле, где живут люди со всего мира, используют пять алфавитов. Кажется, госструктуры вообще отказались от имён. Да, есть поле «Имя», но в него можно ввести что угодно (DROP TABLE я не пробовал). Эти имена — вещь чисто информационная, людей различают по идентификационному коду. При рождении (начиная с 1995) моим дочерям дали идентификационные коды, зарегистрировали в МВД, записали в больнице и выдали полисы медицинского страхования — ещё до того, как им дали имена. И, пока у государства есть компьютеры, мои девчонки будут идти по жизни как «206121451 и 327920849, дочери 50836287 и 54308333».
  • А моего отца зовут John Æneas Byron O’Keefe (Джон Энеас Байрон О‘Киф), с основным именем «Байрон». Я сыт по горло американским ПО, которое продаётся здесь, в Новой Зеландии, и переименовало меня в Okeefe. Что, в США нет ирландцев? Каждый раз, когда такое случается, я иду в компанию, которая это сделала, прошу заменить имя, а они говорят: компьютер не даёт. Апостроф в ASCII с 1963 года, так что никаких отговорок.

P.S. Есть аналогичная статья о метках времени.

P.P.S. А в шорт-треке есть китаяночки Ян Ян (A) и Ян Ян (S).

Tags: переводы, разработка ПО
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments