Побрехенькі про імена у які вірять програмісти
Це переклад доволі старої і дуже відомої статті з 2010 року про неявні припущення які роблять програмісти при праці із іменами.
Сьогодні Джон Ґрем-Каммінґ написав статтю, в якій поскаржився на те, що комп’ютерна система, з якою він працював, визначила його прізвище як таке, що містить неприпустимі символи. Звісно, це не так - адже будь-що, що людина називає своїм іменем, за визначенням є правильним способом її ідентифікації. Ця ситуація закономірно обурила Джона, і він має на це повне право, бо імена - це основа нашої ідентичності, майже за визначенням.
Я кілька років жив у Японії, працюючи програмістом на професійному рівні, і зламав чимало систем просто тим, що моє ім’я було до них додано. (Більшість людей називають мене Патрік МакКензі, але я визнаю правильними щонайменше шість різних “повних” імен, і багато з систем, з якими я маю справу, не приймають жодного з них.) Я також працював з Великими Чортовими Корпораціями, які, з огляду на глобальний характер свого бізнесу, теоретично побудували свої системи так, щоб підтримувати всі можливі імена. Однак я жодного разу не бачив комп’ютерної системи, яка правильно працювала б з іменами, і щиро сумніваюся, що така взагалі існує.
Тож, як суспільну послугу, я наведу список припущень, які, ймовірно, роблять ваші системи щодо імен. Усі ці припущення - хибні. Спробуйте уникати їх наступного разу, коли писатимете систему, яка працює з іменами.
- У кожної людини є рівно одне канонічне повне ім’я.
- У кожної людини є рівно одне повне ім’я, яким вона користується.
- На даний момент у людини є рівно одне канонічне повне ім’я.
- На даний момент у людини є одне повне ім’я, яким вона користується.
- У кожної людини є рівно N імен, для будь-якого значення N.
- Імена людей вміщаються у певну заздалегідь визначену кількість символів.
- Імена людей не змінюються.
- Імена людей змінюються лише при певних перелічених подіях.
- Імена людей пишуться лише символами ASCII.
- Імена людей записані в одному певному наборі символів.
- Імена людей завжди можна представити у вигляді Unicode-кодів (code-points).
- Імена людей чутливі до регістру.
- Імена людей нечутливі до регістру.
- В іменах людей іноді є префікси чи суфікси, але їх можна безпечно ігнорувати.
- Імена людей не містять цифр.
- Імена людей не пишуться ВЕЛИКИМИ ЛІТЕРАМИ.
- Імена людей не пишуться лише малими літерами.
- Імена мають певний порядок. Вибравши будь-яку схему впорядкування, можна забезпечити узгоджене впорядкування між усіма системами - якщо всі вони використовують одну й ту ж схему.
- Ім’я та прізвище людини обов’язково різні.
- У всіх людей є прізвище, родове ім’я або щось подібне, що поділяють люди, визнані їхніми родичами.
- Імена людей є глобально унікальними.
- Імена людей майже глобально унікальні.
- Добре, добре, але ж, напевно, імена достатньо різноманітні, щоб мільйон людей не мали однакового імені.
- Моя система ніколи не буде мати справу з іменами з Китаю.
- Або з Японії.
- Або з Кореї.
- Або з Ірландії, Великої Британії, США, Іспанії, Мексики, Бразилії, Перу, Росії, Швеції, Ботсвани, Південної Африки, Тринідаду, Гаїті, Франції чи Імперії Клінгонів - усі з яких мають “дивні” схеми іменування.
- Імперія Клінгонів - це жарт, так?
- Досить цього культурного релятивізму! Принаймні в моєму суспільстві є загальноприйнятий стандарт для імен.
- Існує алгоритм, який може перетворювати імена та повертати їх назад без втрат. (Так, так, якщо алгоритм просто повертає вхід - молодець, тримай пиріжок.)
- Я можу з упевненістю припустити, що в цьому словнику лайливих слів немає жодного імені.
- Імена людям надаються при народженні.
- Гаразд, може не при народженні, але принаймні близько до нього.
- Ну добре, хоча б протягом року після народження.
- П’ять років?
- Та ви жартуєте, так?
- Дві різні системи, що зберігають дані про одну й ту ж людину, використовуватимуть для неї однакове ім’я.
- Два різні оператори введення даних, отримавши ім’я людини, обов’язково введуть ідентичні рядки на одній системі, якщо система добре спроєктована.
- Люди, чиї імена ламають мою систему - це дивні винятки. Вони мали б мати нормальні, прийнятні імена, на кшталт 田中太郎.
- У всіх людей є імена.
Цей список далеко не вичерпний. Якщо вам потрібні приклади реальних імен, які спростовують будь-яке з наведених вище поширених припущень - я з радістю познайомлю вас з кількома. Не соромтеся додавати інші хибні уявлення в коментарях - і обов’язково показуйте цю статтю кожного разу, коли хтось пропонує «геніальну» ідею на кшталт створення таблиці бази даних з полями first_name та last_name.