Лингвистика программирования — нейминг

Программирование — это лингвистика. Красота кода — лингвистическая, не математическая. Правильный нейминг + структура помогают и команде, и AI.

Суть

автор и Безуглый считают программирование во многом лингвистикой. Это меняет фокус: красота кода = выразительность языка, а не лаконичность математики. Хороший нейминг — между крайностями математиков (a+b) и филологов (numberOfIdentifierOfClient).

Программирование как язык

  • Синтаксические конструкции
  • Семантика — что значит каждое слово
  • Идиомы — как «принято говорить»
  • Стилистика — короткие и длинные имена
  • Прагматика — для кого пишешь

Пропорции

  • Функция — не слишком большая, не слишком маленькая
  • Модуль — оптимальный размер для понимания
  • Рядок — не длинный однострочник на 200 символов
  • Файл — управляемое количество строк
  • Имя — между лаконичностью и полнотой

Имена переменных

Слишком короткие (математики)

  • a, b, c, x, y
  • n, m для размеров
  • i, j для индексов
  • Хорошо для математических формул
  • Плохо для бизнес-логики

Слишком длинные (филологи)

  • numberOfIdentifierOfClient
  • theCurrentValueThatIsBeingProcessed
  • defaultConfigurationForApplicationStartup
  • Хорошо для документации
  • Плохо для чтения кода

Хорошие имена

  • Отражают суть, не детали реализации
  • Глаголы для функций (fetchUser, validate)
  • Существительные для переменных (user, config)
  • Прилагательные для свойств (isValid, hasPermission)
  • Контекст из модуля и класса

Правила нейминга

  • Глагол + существительное для функций
  • Множественное число для массивов: users, не userList
  • boolean с is/has/can: isAuthenticated, hasAccess
  • Без сокращений: custcustomer
  • Без венгерской нотации: strNamename
  • CamelCase для функций/переменных, PascalCase для классов/типов

Чек-листы микроархитектуры

  • Имена — есть/осмысленны/единообразны
  • Связывание — модули знают друг о друге минимум
  • Декомпозиция — функции делают одну вещь
  • Разделение — данные отделены от поведения (или нет)
  • Объединение — общая логика вынесена

Связь с AI

  • Правильный нейминг = правильная генерация
  • AI парсит лингвистические модели
  • По хорошему имени переменной генерирует логичное продолжение
  • По плохому имени — путаница, нарушение интента
  • Tab-комплит работает в разы лучше с осмысленным контекстом

Стиль Java vs стиль JS

  • Java — мысли о качестве и maintainability, но в 10 раз больше кода
  • JS — короче, но требует больше дисциплины
  • В JS легко скатиться в a+b или в анонимные функции везде
  • Принцип «короткой функции» работает в обеих
  • Стиль Angular — это Java-культура

Антипаттерны нейминга

  • data, info, temp, result — нулевая информативность
  • process, handle, manage — слишком общо
  • myFunction, myVar — артефакты туториалов
  • Транслит: polzovatel, nazvanie — для внутренней команды плохо
  • Hungarian notation в JS

Принципы коротких функций

  • 5-15 строк — идеал
  • Один уровень абстракции на функцию
  • Имя описывает, что делает
  • Возвращает один тип значения
  • Не более 3 аргументов

🎓 Источники

  • 🎓 [🎙️ Найм зламаний] + Безуглый · 2025-01-16 · YouTube
    • Тезисы: программирование — лингвистика; пропорции функция/модуль/строка; нейминг между математиками и филологами; чек-листы микроархитектуры; правильный нейминг помогает AI
  • 🎓 [🎈 Программирование — это удовольствие] · 2025-12-02 · YouTube
    • Тезисы: программирование = лингвистика; культура мышления через язык
  • 🎓 [🧑‍🎓 Как научить программиста включать мозг] + Брагилевский · 2025-11-27 · YouTube
    • Тезисы: программирование как язык; Хомский, Витгенштейн