Разоблачение говнокода в Node.js

Большинство open source кода в Node.js — посредственный. Лучшие практики придумываются заново и забываются. автор регулярно разбирает «говнокод» как способ обучения.

Суть

Серия видео автора и AsForJS — разбор реального кода из популярных проектов и туториалов. Цель не «загасить автора», а показать паттерны плохого кода и научить распознавать их в своём коде.

Типичные категории говнокода

Преждевременная оптимизация

  • Микро-оптимизации без замеров
  • for вместо forEach без причины
  • Объявление const ради «производительности»
  • Битовые операции вместо понятных арифметических

Карго-культ паттернов

  • Strategy через иерархию классов в JS
  • Singleton там, где module-level переменная
  • Factory для каждого new
  • Observer там, где достаточно callback

Незнание языка

  • for...in для массивов
  • parseInt без второго аргумента
  • == без понимания coercion
  • Игнорирование строгого режима

Архитектурный мусор

  • Middleware как универсальный молоток в Express
  • Промежуточные слои без цели
  • 5 классов там, где 1 функция
  • Inheritance в стиле Java на JS

Подход к разбору говнокода

  1. Какова цель кода? Что должно сделаться
  2. Какой контекст? Прототип, prod, library
  3. Какие альтернативы? Без переписывания всего
  4. Почему автор так написал? Понять мотивацию
  5. Что улучшить? Минимальные правки
  6. Что НЕ менять? Зрелое решение, даже если не нравится

Конкретные кейсы

Middleware антипаттерн (Express/Nest 2026)

  • Middleware = универсальный молоток
  • Тащит логику бизнес-слоя в HTTP-слой
  • Сложно тестировать в изоляции
  • Альтернатива — явная декомпозиция слоёв

Diia code review

  • Открытый код украинского госприложения
  • Множество паттернов «не оптимально»
  • Бесполезные обёртки
  • Избыточная типизация

Node.js HTTP Proxy

  • Разбор примеров после курса автора
  • Что делают плохо, что хорошо
  • Объяснение через спецификацию Node
  • Применение паттернов в правильном месте

Async pool из библиотек

  • Реализация на колбэках в стиле начала 2010-х
  • Async/await делает её ненужной
  • Если оставлять — переписать на промисах
  • Альтернатива — Promise.all с лимитом

Принципы хорошего code review «говнокода»

  • Объяснять, почему плохо — не просто «не нравится»
  • Предлагать альтернативу — иначе зачем критика
  • Обсуждать контекст — может, было обоснованно
  • Не унижать автора — критика конструктивна
  • Учиться на чужих ошибках — это цель

Что искать в чужом коде

  • Дублирование — DRY нарушен
  • Магические числа — без объяснения
  • Глубокая вложенность — больше 3 уровней
  • Длинные функции — больше 50 строк
  • Слишком много аргументов — больше 4
  • Boolean-флаги — split на две функции

Принципы хорошего кода (по автору)

  • Короткие функции (5-15 строк)
  • Короткие модули (управляемые файлы)
  • Короткие строки (до 80-100 символов)
  • Правильный нейминг (между математикой и филологией)
  • Чистая декомпозиция (one thing per function)
  • Связность модулей (high cohesion, low coupling)

Антипаттерны критики чужого кода

  • Сразу хейтить без понимания контекста
  • Сравнивать с идеалом из книги
  • Игнорировать legacy-причины
  • Считать, что автор «не знал» — может знал
  • Делать культ из своих привычек

🎓 Источники

  • 🎓 [⚡️ Говнокод в Node.js — Разоблачение] · 2025-12-22 · YouTube
  • 🎓 [🧐 Ревью говнокода и другие мудрости] · 2025-12-19 · YouTube
  • 🎓 [🧑‍💻 Рефакторинг говнокода — Clean Code для JS/TS] · 2025-11-06 · YouTube
  • 🎓 [🛑 Middleware антипаттерн для Node.js в 2026] · 2026-03-12 · YouTube
  • 🎓 [👏 Дія відкрила код - Diia code review] · 2024-03-20 · YouTube
  • 🎓 [🧑‍💻 Node.js HTTP Proxy — ревью примеров кода] · 2023-11-29 · YouTube
  • 🎓 [🦄 Дядя Боб и розовые пони — Паттерны и чистый код] · 2025-02-18 · YouTube