CTO Vetmanager, PHP Developer, Ironman 70.3

Кодстайл — это грамматика. Без неё код не читают, а расшифровывают

Кодстайл — это грамматика

Воабсче пазволю, сибе сваме несогласицца. Правела, рускогу йезыка предумманэ, спициальна длятогоштобы облихчидь, обшэниэ ивзаимапанеманейе меджу люудьми, вед есле кажный, будит писсать как, иму хочитьця, мы хуй поймйом, че, он хател скозать. Современем есле многа, читать, чилавечиский моск вырабатывоит устойчивыи ассоцыацыи кнаписаным набумаге, словам, иэта пазваляит нам читать, слова цылеком, незадержываясь, длятого шобы панять, смысл. Таким оброзом, кагда, взгляд натыкаеца наашыбку, он тутжэ, астанавливаитца и, скорасть чтениа, падоит. Паэтаму, нада, пейсать грамммотна — иначи, паниманийэ адного апзацца техста будит занематть, пьадь менут, вместа, здеситти сикунт.

Это я писал в Телеграме два года назад — в стиле, в котором на старом Луркоморье любили имитировать «олбанский».

Прочитали? Признайтесь — глаз буксовал на каждом втором слове, мозг собирал смысл с задержкой и потерями. 🤕 Запомните это ощущение. Так ваш коллега читает ваш код, если он написан мимо кодстайла команды.

Цветы для Элджернона 🐭

У того же приёма есть высокая классика — «Цветы для Элджернона» Дэниела Киза. Главный герой Чарли — умственно отсталый, ведёт дневник:

«прагрес рапорт 1 марта прафесар немур и мис кинниан гаварят я должен писать што я думаю и помню и пра все што саслучаецо со мной с этова дня я нинаю пачему но они гаварят это очинь важно штобы они узнали…»

Чарли соглашается на эксперимент, и его IQ начинает расти. Дневник медленно выправляется: появляются запятые, потом сложные предложения, потом метафоры. К середине книги он пишет лучше, чем профессор, который его лечит. А потом эффект сходит на нет — и язык в дневнике рассыпается обратно.

Сильный приём этой книги в том, что уровень мышления героя считывается по форме письма ещё до того, как ты дочитал смысл. Без подсказки «Чарли поглупел» — глаз ловит это сам.

И ещё одна штука, которую замечают читатели Киза: первые главы читать тяжело, но к стилю Чарли постепенно привыкаешь. К концу первой трети книги ты уже не спотыкаешься о каждое «нинаю» — мозг достроил шаблон и читает на автомате.

С коллегами — похожий эффект есть: если Петя пишет «не как все», но стабильно по-своему, мозг со временем достроит ему отдельный шаблон, и читать станет легче. 🧠 Но это не повод мириться. Эффект существует — а правило одно: каждый Петя обязан писать как принято в команде. Иначе вы платите вниманием за чужую самобытность.

Невыносимо становится тогда, когда у Пети нет даже своего стиля. Сегодня он пишет так, завтра по-другому, послезавтра — копипаста с Хабра. Вот это и есть «без кодстайла»: глаз не может зацепиться ни за один шаблон. Это уже не Чарли, это Чарли, который каждые два абзаца меняет IQ.

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

Зачем грамматика 🧠

Мозг читает не буквы. Мозг читает шаблоны.

Когда вы много раз видели слово «ветклиника» в одном виде — вы его больше не разбираете по буквам, вы видите его целиком. Натыкаетесь на «вит-клееника» — мозг тормозит, перечитывает, восстанавливает.

На одном слове это незаметно. На абзаце складывается в минуты вместо секунд. На рабочем дне — в часы.

Кодстайл — тот же шаблон, только для глаза, который читает код. Отступы, перенос фигурных скобок, имена переменных, порядок импортов. Когда всё одинаково — глаз не цепляется. Когда у Васи табы, у Пети пробелы, у клиники один стиль, а у питомца — другой, внимание уходит на форму, а не на логику.

«Но смысл-то понятен!» 🤷

Ну да. И в абзаце сверху смысл понятен. Если посидеть.

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

Кодстайл компании vs моё мировоззрение ⚔️

Самый частый спор, который я слышу: «у меня в коде красивее, а у компании в кодстайле — какое-то говно».

Возможно. Но кодстайл компании всегда побеждает. Не потому что начальник сказал, а потому что:

  • его уже изучили все остальные;
  • они читают его не глазами, а мышцами;
  • ваш «правильный» вариант для них — это «вит-клееника» из абзаца сверху.

Даже плохой кодстайл лучше его отсутствия. Даже бесполезные геттеры по правилам компании лучше, чем половина файла без геттеров и половина — с.

Это не значит, что кодстайл нельзя менять. Можно и нужно. Но через команду, а не через свой коммит. Договариваетесь, переписываете правило, прогоняете автоформат по всему репо, наслаждаетесь. А до этого — пишете как у всех. Хочется романтики — найдите единомышленников, устройте красивый дворцовый переворот, заприте техлида в темнице. Главное — потом единый кодстайл, а не «у каждого князя свой устав».

Ошибка кодстайла — это баг? 🐞

По-моему — да.

Баг — это поведение, которое отличается от ожидаемого. Код — это не только машинный артефакт, это ещё и текст для чтения. Ошибка в кодстайле тормозит чтение. Медленное чтение — это пропущенные ошибки на ревью, лишние секунды в навигации, лишние правки в комментариях к PR.

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

Линтер как редактор ✍️

В книгах грамматику вычитывает редактор. Не потому что автор тупой, а потому что глаз автора замыливается.

Линтер — это редактор, который никогда не устаёт.

Для PHP — PHP_CodeSniffer (phpcs/phpcbf) и PHP-CS-Fixer. В Laravel-мире — Pint. Поверх — Easy Coding Standard (ECS), если хочется свести их в один прогон.

Что важно:

  • Auto-format на сохранение. Никто и никогда не отформатирует руками. Серьёзно.
  • Pre-commit hook. Чтобы в репо не уехало неотформатированное.
  • Один прогон в CI. Иначе каждый PR — это спор о пробелах.

Без хука и автоформата кодстайл существует только в базе знаний. Толку — ноль.

Вывод 🎯

Пишите код так, чтобы коллега читал, а не расшифровывал.

  1. Кодстайл компании > ваш личный кодстайл. Всегда.
  2. Не нравится — двигайте команду менять. Не делайте по-своему молча.
  3. Линтер и автоформат должны стоять у каждого. Не «на словах», а в pre-commit и в IDE.
  4. Ошибка кодстайла — баг. Не «стилистическая претензия», а замедляющий чтение дефект.

И помните Чарли. Уровень мышления читается по форме. Если ваш код выглядит как «прагрес рапорт 1 марта» — никто не будет читать его как «Войну и мир». Будут думать, что вы Чарли. В начале эксперимента.