- PVSM.RU - https://www.pvsm.ru -

Привет!
Меня зовут Артем Лакомов, я филолог из МГУ. Да, вы не ослышались. И сегодня я хочу поговорить с вами о самой главной (и самой дорогой) боли в IT, но с совершенно неожиданной стороны.
Каждый из вас хоть раз в жизни видел код, от которого хотелось плакать или же тихо ненавидеть свою работу. Код с переменными вроде data, res, temp. Код, где есть один гигантский класс, который делает абсолютно всё, и коллеги с любовью (или ужасом) называют его godObject.
Все привыкли думать, что это просто «плохой стиль» или «технический долг». Но что, если я скажу вам, что это — не техническая, а языковая проблема? И что у монструозного godObject гораздо больше общего со школьным прозвищем «Толстый», чем вы думаете?
Последние несколько лет я занимаюсь тем, что применяю классическую лингвистику к программному коду. И я обнаружил поразительную вещь: правила, по которым вы даете имена переменным и классам, практически дословно повторяют законы, по которым в любом человеческом коллективе — от школьного класса до команды разработчиков — возникают прозвища.
Давайте я покажу вам, как теория прозвищ, разработанная великим отечественным лингвистом А.В. Суперанской, вскрывает то, о чем инженеры только догадывались интуитивно, но, увы, не могли сформулировать.
Суперанская пишет, что самый базовый тип прозвищ отражает очевидные, бросающиеся в глаза свойства: Громадила, Рыжий, Очкарик. Узнаете?
Это ваш godObject. Это ваш spaghettiCode.

Это имя-диагноз, которое дается не за функцию, а за внешний вид и внутреннее устройство — его чудовищный размер или запутанную структуру. Это точная копия прозвища Громадила или Трёхтонка. Имя здесь — не просто ярлык, а оценочное суждение всего коллектива.
А еще это ваши utils, manager, handler — имена, которые ничего не говорят о функции, но многое — о том, что автор не знал, как назвать. Как прозвище «Тихоня» для того, кто просто не любит говорить.
Как назвать сложный процесс обработки данных? Конечно, DataPipeline (конвейер данных). А систему защиты? Firewall (огнеупорная стена). Здесь мы просто берем понятный объект из физического мира и переносим его свойства на абстрактную цифровую сущность.
Это в точности ономастическая модель «от вещи», как прозвище Колхида для водителя грузовика этой марки. И хороший инженер отличается от плохого именно умением найти точную, интуитивно понятную метафору.
А вот тут начинается самое интересное. Это высший пилотаж именования.
Heisenbug: Ошибка, которая исчезает, когда вы пытаетесь на нее посмотреть. Это прямая отсылка к принципу неопределенности Гейзенберга из квантовой физики.
Yoda Conditions: Конструкция if ("constant" == variable). Названа в честь магистра Йоды за инвертированный порядок слов.
Или возьмите zombie processes — процессы-зомби в Unix, которые формально мертвы, но все еще занимают место в таблице процессов. Или daemon — демоны, фоновые процессы, названные в честь добрых духов из греческой мифологии. Каждое такое имя — это культурный код, понятный только посвященным.
Зачем мы это делаем? Суперанская отвечает: такие прозвища (Аниськин, Белинский) работают как маркер принадлежности к группе. Они выполняют две важнейшие функции.
Сжимают информацию: Сказал Heisenbug — и коллега мгновенно понял всю сложность проблемы.
Разделяют на «своих» и «чужих»: Если ты понимаешь аллюзию (культурную отсылку) в Yoda Conditions — ты «свой», ты часть этой общей культуры. Если нет — тебе еще многому предстоит научиться.
У Суперанской есть и четвертая, самая редкая и интересная модель: прозвище, данное по какому-то уникальному событию или истории. Например, «Клубничник» — потому что когда-то попался на воровстве клубники. Такое имя — это маленький рассказ, понятный только тем, кто знает его предысторию.
В коде это — один из самых мощных прагматических инструментов. Каждый раз, когда вы видите имена вроде:
legacyAuthFix
hotfixForTicketJIRA123
tempWorkaroundForIE6
...перед вами не просто имя, а имя-нарратив. Оно рассказывает целую историю: «Этот код — костыль, потому что старая система аутентификации отвалилась», «Это срочная заплатка для конкретной задачи в Jira, не трогай ее, пока не прочитаешь тикет», «Это временное решение для проклятого Internet Explorer 6, и мы все надеемся его когда-нибудь удалить».
Или же возьмем для примера следующие наименования:
quickFixForDemo
dontTouchThisItWorks
// TODO: refactor this mess
Каждое такое имя — это предупреждение будущим поколениям разработчиков: «Здесь была битва. Здесь принимались сложные решения. Осторожно.»

Такие имена — это шрамы на теле проекта, которые рассказывают о его битвах. И умение читать и оставлять такие «шрамы» — это признак глубокой вовлеченности в проект. Это снова демаркация «свой-чужой»: новичок не поймет, почему этот код нельзя трогать, а «свой» по одному имени считает весь исторический контекст.
Хорошо, скажете вы, это все очень интересно, но что мне с этим делать завтра на код-ревью?
Все эти параллели между прозвищами и идентификаторами — не просто красивое наблюдение. Они приводят нас к трем очень практическим выводам, которые вы можете начать применять прямо сейчас.
Осознайте свою роль. Вы — Ономат (name-giver).
Каждый раз, когда вы пишете let data = ..., вы не просто создаете переменную. Вы совершаете акт номинации. Вы даете имя новой сущности в вашем маленьком мире. Подойдите к этому не как к рутине, а как к важнейшей части вашей работы. Ваше имя — это первое, что увидит другой человек. Это ваш шанс объяснить ему суть, помочь или, наоборот, навсегда запутать. Подобно автору, выступающего в роли того, кто дает имя, вы создаете уникальных персонажей в своем собственном произведении.
Думайте о «читателе», а не только о «писателе».
Самая частая ошибка — давать имя, понятное только вам в данный момент. Теория Суперанской и практика IT доказывают: имя существует не для вас, а для коллектива. Перед тем как назвать переменную temp, спросите себя: «Поймет ли мой коллега через полгода, что здесь имелось в виду, без моих устных комментариев?». Если ответ «нет» — ищите другое имя.
Исповедуйте «Принцип семантической полноты».
В итоге, все сводится к одному. Хорошее имя — это то, которое обладает семантической полнотой и предсказуемостью. Оно должно исчерпывающе отвечать на вопрос «что это?» и позволять предсказать, «как оно себя ведет». Имя archive_inactive_users_and_notify() длинное, но оно идеально. Оно полное и предсказуемое. Имя proc_users() — короткое, но бесполезное. Оно скрывает суть, а не раскрывает ее.
Чтобы разница была еще нагляднее, давайте просто посмотрим на примеры в таблице:
|
Плохо (Имена-диагнозы, скрывающие суть) |
Хорошо (Имена-действия, раскрывающие суть) |
|---|---|
|
|
|
|
|
|
|
|
|
Вывод очевиден: имена из левой колонки заставляют вас лезть внутрь кода, чтобы понять, что происходит. Имена из правой — рассказывают историю сами. Первые говорят: «я — какая-то сущность». Вторые говорят: «вот, что я делаю, и вот, для чего я нужен».

Освоение этих трех принципов и есть ваш первый шаг к превращению из рядового, среднестатистического кодера в ведущего инженера-мыслителя.

Мы привыкли думать о программировании как о чисто технической сфере. Но чем дальше, тем очевиднее становится то, о чем писал еще Дональд Кнут:
программы пишутся для людей.
Анализ кода через призму филологии — это не экзотика. Это острейшая необходимость. Потому что самые дорогие проблемы в индустрии IT возникают не там, где ломаются алгоритмы, а там, где ломается коммуникация. И главный инструмент этой коммуникации — точные, честные и осмысленные имена, которые мы даем вещам. Именно поэтому хороший код подчиняется законам хорошей литературы.
И всегда помните: каждый раз, когда вы пишете let data = ... , где-то плачет филолог. Не потому что это технически неверно, а потому что вы упускаете шанс рассказать историю. А хороший код, как и хорошая литература, всегда рассказывает историю.
Спасибо за ваше время!
А теперь идите и посмотрите на свой код свежим, филологическим взглядом. Уверен, вы увидите много интересного.
(И, конечно, жду ваших любимых примеров странных, гениальных или ужасных имен в комментариях!)
аспирант кафедры английского языкознания филологического факультета МГУ им. М.В. Ломоносова, преподаватель РТУ МИРЭА
Эта статья — часть большой научной работы и первая в запланированном цикле, посвященном созданию нового подхода на стыке IT и лингвистики. Сегодня мы поговорили о «слове» в коде. В следующих статьях мы перейдем к анализу «высказывания» (почему один код — поэзия, а другой — шум) и, самое главное, наконец-то объясним с научной точки зрения феномен «естественности кода» — ту самую «магию», которая зафиксирована во многих исследованиях, но до сих пор не имела строгого объяснения.
Моя цель — доказать, что филология может дать IT-индустрии мощнейший инструментарий для решения практических задач: снижения сложности, ускорения разработки и создания по-настоящему надежных систем. Если вам интересна эта тема, подписывайтесь на мой профиль, чтобы не пропустить продолжение, и до встречи в комментариях!
Автор: art_lak
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/imenovanie/429197
Ссылки в тексте:
[1] Источник: https://habr.com/ru/articles/940782/?utm_campaign=940782&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.