Це переклад доволі старої і дуже відомої статті з 2010 року про неявні припущення які роблять програмісти при праці із іменами.

Сьогодні Джон Ґрем-Каммінґ написав статтю, в якій поскаржився на те, що комп’ютерна система, з якою він працював, визначила його прізвище як таке, що містить неприпустимі символи. Звісно, це не так - адже будь-що, що людина називає своїм іменем, за визначенням є правильним способом її ідентифікації. Ця ситуація закономірно обурила Джона, і він має на це повне право, бо імена - це основа нашої ідентичності, майже за визначенням.

Я кілька років жив у Японії, працюючи програмістом на професійному рівні, і зламав чимало систем просто тим, що моє ім’я було до них додано. (Більшість людей називають мене Патрік МакКензі, але я визнаю правильними щонайменше шість різних “повних” імен, і багато з систем, з якими я маю справу, не приймають жодного з них.) Я також працював з Великими Чортовими Корпораціями, які, з огляду на глобальний характер свого бізнесу, теоретично побудували свої системи так, щоб підтримувати всі можливі імена. Однак я жодного разу не бачив комп’ютерної системи, яка правильно працювала б з іменами, і щиро сумніваюся, що така взагалі існує.

Тож, як суспільну послугу, я наведу список припущень, які, ймовірно, роблять ваші системи щодо імен. Усі ці припущення - хибні. Спробуйте уникати їх наступного разу, коли писатимете систему, яка працює з іменами.

  1. У кожної людини є рівно одне канонічне повне ім’я.
  2. У кожної людини є рівно одне повне ім’я, яким вона користується.
  3. На даний момент у людини є рівно одне канонічне повне ім’я.
  4. На даний момент у людини є одне повне ім’я, яким вона користується.
  5. У кожної людини є рівно N імен, для будь-якого значення N.
  6. Імена людей вміщаються у певну заздалегідь визначену кількість символів.
  7. Імена людей не змінюються.
  8. Імена людей змінюються лише при певних перелічених подіях.
  9. Імена людей пишуться лише символами ASCII.
  10. Імена людей записані в одному певному наборі символів.
  11. Імена людей завжди можна представити у вигляді Unicode-кодів (code-points).
  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.