Разоблачение говнокода в 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
Подход к разбору говнокода
- Какова цель кода? Что должно сделаться
- Какой контекст? Прототип, prod, library
- Какие альтернативы? Без переписывания всего
- Почему автор так написал? Понять мотивацию
- Что улучшить? Минимальные правки
- Что НЕ менять? Зрелое решение, даже если не нравится
Конкретные кейсы
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