1. Путь данных и режимы 🧭 Думать можно как конвейер, который сначала упрощает задачу, а уже потом пишет код. Так получается стиль, где сначала строится максимально прямой сценарий и простой путь данных, а абстракции появляются только как «служанки», а не как хозяева кода.
1. Путь данных и режимы 🧭 Думать можно как конвейер, который сначала упрощает задачу, а уже потом пишет код. Так получается стиль, где сначала строится максимально прямой сценарий и простой путь данных, а абстракции появляются только как «служанки», а не как хозяева кода.
...Читать далее
- Путь данных и режимы
- Явно фиксируй входы/выходы функции и формат данных.
- Режимы (Прод/Тест/Dev) — только через простые флаги/enum + switch, без «магии» в глубине кода.
- Минимум абстракций
- Вводи абстракцию только когда есть 2–3 реальных повтора, а не «на всякий случай».
- Предпочитай простые функции и switch вместо монад, DI‑контейнеров и слоёв фабрик.
- Прямой контроль потока
- Предпочитай линейный код: if → return, ранние выходы, один очевидный путь.
- Для сложных ветвлений используй switch, а не лес вложенных if.
- Явные проверки и guard’ы
- На каждом важном шаге: проверка входных данных, лог ошибки, return/ошибка.
- Повторяющийся паттерн проверки вынести в маленький guard*‑хелпер, но не городить свою «монаду».
- Прозрачные побочные эффекты
- Любая функция, которая ходит в сеть/БД/файлы, должна быть явно помечена именем и расположена «на краю» системы.
- Никаких скрытых побочек в «утилитах» — только чистые преобразования данных.
- Простые структуры данных
- Сначала обычные массивы/структуры с понятными ключами; классы/VO — только если реально дают выигрыш.
- Формат структур документируй phpDoc/комментариями рядом с кодом.
- Логи вместо магии
- Любое нетривиальное условие сопровождай коротким логом: где мы, что проверяем, что пошло не так.
- Сообщения делай однотипными и легко ищущимися (функция + ключевая фраза).
- Отладочность важнее красоты
- Код должен легко трассироваться по шагам без долгого «распарсинга» абстракций в голове.
- Если абстрактное решение сложнее отладить, чем «тупой» бойлерплейт — выбирай бойлерплейт.
- Жёсткие, но простые контракты
- Каждая функция: чёткий контракт «принимаю X, возвращаю Y, в ошибке делаю Z».
- Не смешивай разные режимы поведения в одной функции без явного switch/флагов.
- Предсказуемый стиль
- Один стайлгайд, одна схема логирования, одна схема именования — по всему проекту.
- Никаких сюрпризов: читатель должен понмать код во время чтения без прыжков по кодовой базе.
1. Путь данных и режимы 🧭
- Мозг держит в рабочей памяти 3–5 элементов. Явный switch ($РЕЖИМ) избавляет от поиска скрытых флагов по коду и уменьшает количество вещей, которые надо помнить одновременно.
- Одна «линия истории» данных (от входа до выхода) воспринимается гораздо легче, чем куча неявных настроек и конфигов.
2. Минимум абстракций 🧱
- Каждая абстракция — лишний слой, который нужно ментально «распаковывать». Это прямой расход рабочей памяти и внимания.
- Чем меньше уровней «матрёшки», тем меньше переключений контекста и психической усталости.
3. Прямой контроль потока ↪️
- Линейные последовательности мозг переваривает отлично, а деревья ветвлений и глубокие if быстро грузят.
- Ранние return и плоский switch дают простой маршрут, по которому легко «пройтись глазами», не теряясь в глубине.
4. Явные проверки и guard’ы 🚧
- Повторяющиеся guard‑паттерны мозг начинает узнавать автоматически и почти не тратит ресурсы на их понимание.
- Это снижает шанс пропустить ошибку или интерпретировать одинаковые ситуации по‑разному.
5. Прозрачные побочные эффекты 🌐
- Скрытые эффекты (изменение глобалок, сетевые вызовы «из ниоткуда») заставляют постоянно держать в голове невидимое состояние системы.
- Когда все «грязные» места на краю и явно помечены, модель системы в голове становится компактнее и стабильнее.
6. Простые структуры данных 📦
- Плоские массивы/структуры с понятными ключами проще визуально сканировать и запоминать, чем густо связанный OO‑лес.
- Когда формат данных описан рядом, мозгу не нужно прыгать между кодом и «умственной схемой» этих данных.
7. Логи вместо магии 📜
- Короткие понятные логи — это внешняя «долгая память» для мозга: вместо вспоминания «что тут имелось в виду» можно просто прочитать сообщение.
- Поиск по шаблонам логов хорошо ложится на зрительное распознавание, разгружая рабочую память.
8. Отладочность важнее красоты 🪓
- Сложные абстракции красивы на бумаге, но требуют больше ментальных шагов при отладке (распаковка монад, DI, прокси и т.д.).
- «Тупой» прямой код сокращает количество таких шагов и уменьшает количество точек, где можно ошибиться или забыть про скрытое поведение.
9. Жёсткие, но простые контракты 📏
- Мозг плохо переносит неопределённость; чёткое «на входе X, на выходе Y, в ошибке Z» снижает уровень внутреннего стресса.
- Ясные и стабильные контракты быстро превращаются в автоматизмы и почти не требуют сознательного контроля.
10. Предсказуемый стиль 🧠⚙️
- Мозг любит шаблоны: когда стиль кода везде одинаковый, большая часть чтения уходит в режим «автопилота».
- Любые неожиданности (нестандартные фокусы, разные стили в одном проекте) выбрасывают тебя из автопилота и поднимают нагрузку на внимание.
Думать можно как конвейер, который сначала упрощает задачу, а уже потом пишет код.
1. Сформулировать задачу как сценарий
- Сначала словами: «что должно происходить по шагам» без терминов типа «моной», «слой», «интерфейс».
- Разбить на 5–7 простых шагов максимум: «получить данные → проверить → преобразовать → сравнить → отдать результат/ошибку».
2. Явно определить данные и режимы
- Что на входе (тип, структура), что на выходе, какие бывают ошибки.
- Какие режимы есть (Прод/Тест/Dev) и чем они отличаются именно по данным, а не по логике.
3. Сначала придумать линейный поток
- Мысленно представить «счастливый путь» без ошибок: шаг 1 → шаг 2 → шаг 3.
- Каждый шаг — простая операция над данными, без скрытых побочных эффектов и прыжков по слоям.
4. Добавить явные точки отказа
- На каждом важном шаге: «что будет, если что‑то пошло не так?»
- Решение всегда однотипное: лог + ранний выход (return [] / ошибка), без попыток «умно восстановиться» внутри функции.
5. Выделить «края» и «сердцевину»
- Края: всё, что ходит наружу (БД, сеть, файлы, конфиги, окружение). Там допускается «грязь», но всё максимально явно.
- Сердцевина: чистые преобразования данных, без I/O и глобалок, по возможности — простые функции.
6. Кодить в стиле «сначала тупо, потом аккуратно»
- Сначала написать прямой, «тупой» вариант: простой switch по режиму, явные if (empty(...)) return.
- Только если виден реальный, ощутимый дублирующийся паттерн — аккуратно вынести его в маленькую функцию/хелпер, не меняя общую форму.
7. Проверять себя вопросами
- «Могу ли я объяснить этот кусок кода устно за 10–20 секунд человеку, который не в теме абстракций?»
- «Понятно ли по одному взгляду, откуда берутся данные и куда они дальше идут?»
- «Есть ли здесь магия/слой, который придётся mentally "разворачивать" при отладке?»
8. Отладка как главный критерий
- Каждый раз, когда хочется сделать «красивее» или абстрактнее, мысленно проигрывать: «как я буду дебажить баг в этом месте через полгода?»
- Если для отладки нужно больше шагов в голове, чем в тупом варианте — откатиться к более примитивному решению.
Так получается стиль, где сначала строится максимально прямой сценарий и простой путь данных, а абстракции появляются только как «служанки», а не как хозяева кода.