TypeScript !== PHP. Сказ о душном ревью (часть 1)
В чужом монастыре.
Жил-был Frontend-разработчик. Его стихия — Vue, Nuxt и чистокровный TypeScript. Писал код красиво, современно и искренне кайфовал от того, насколько удобный и быстрый Vue и как компилятор TS сам понимает его с полуслова. Возможно, не все его решения выглядели идеально и изящно, но он честно старался и всегда искал лучшие практики.
И занесло его в рамках аутсорс-подмоги на проект, где безраздельно правил Тимлид. Лид был матерым бэкендером, который собаку съел на PHP. Фронтенд он «тоже понимал»: мог легко собрать раздел админки на Bootstrap и jQuery, да и сам не брезговал залезть руками и поправить существующую логику. В общем, мастер на все руки. При этом абсолютно все задачи на проекте проходили через его жесткое код-ревью. Без личного апрува лида ни одна фича не могла попасть в прод.
Фронт засучил рукава, прочитал скудное ТЗ в стиле «делаем хорошо, плохо не делаем» и запилил фичу. Код соответствовал канонам экосистемы Vue/TS. Но на код-ревью пришел Лид и понеслось…
Лид открыл пул-реквест и начал натягивать ментальную модель PHP на TypeScript. Из-за нехватки опыта во фронтенде он искренне считал: если тип не написан руками, значит, код не типизирован.
В комментариях к ревью начался парад абсурда: - Лид: const OVERLAY_ID = ‘auth-overlay’; а где тип? Напиши : string.
- Фронт: Зачем? TS выводит тип-литерал ‘auth-overlay’. Это строже, чем string, безопаснее!
- Лид: const email = ref(‘’); — опять без типа! И для useRouter() тип не указан! Пиши все типы руками!
- Фронт: Но Vue автоматически выводит Ref<string>. Зачем дублировать код и плодить визуальный шум?
- Лид: А что это за конструкция: type ProjectStage = ‘preorder’ | ‘start’ | ‘complete’? У нас в PHP так не пишут. Это должен быть ENUM. Переделывай всё под энумы, как на бэке! И где классы? Почему нет нормального ООП? У нас в PHP вся архитектура строится на классах — это красиво, читаемо и расширяемо. А у тебя тут всё просто сложено в функции. Как вообще понимать связи между ними?
- Фронт: В современной экосистеме Vue всю логику принято строить через композицию. Мы выносим переиспользуемый код в функции-композаблы (Composables). Это позволяет гибко собирать компоненты как конструктор, избегая ада с наследованием, и код не превращается в спагетти.
- Лид: ООП проверено временем! Функции — это для лендосов, а у нас солидный проект со сложной логикой. Не хочется, чтобы это всё развалилось через полгода.
Фронт пытался аргументировать. Кидал ссылки на официальную документацию Vue и TypeScript. Объяснял, что ENUM в TS раздувает бандл и ломает tree-shaking, а “as const” и Union types — это стандарт индустрии. Напоминал, что код пишется для компилятора TS, а не для интерпретатора PHP. Доказывал, что компилятор прекрасно видит возвращаемые значения функций, а избыточная типизация нужна лишь в редких случаях.
Лид был непреклонен. Возможно, он банально побоялся потерять авторитет, согласившись с мнением пришлого аутсорсера. Его профессиональное эго раздулось до небес и затмило всякий здравый смысл. В голове лида крутилось лишь одно: «Как смеет какой-то формошлеп подвергать мое мнение критике? Я делал сайты, когда вашего Vue и в помине не было, я знаю, как нужно делать!»
В ответ он гуглил сомнительные статьи, подтверждающие его «бэкенд-правоту», и бросал в чат фразы в духе: «После вас, аутсорсеров, потом концов не найдешь, всё за вами править надо».
Спор зашел в глухой тупик. На замечания PM в духе «ребята, почему стопорится прогресс по задаче?» со стороны Лида тут же следовали заявления о том, что пришлый фронтендер пытается саботировать проект. Поняв, что достучаться невозможно, фронт решил: проще уступить. Написать эти несчастные типы руками, обмазать всё классами, закрыть задачу, получить деньги и выдохнуть. Споры о чистоте кода на чужом проекте не стоили его нервов.
· 11 ч
Зачем вообще спорить с дураком, если ты на проекте аутсорс и тебе с ним потом не мучиться? Сделал бы как просит тот лид и забыл как страшный сон после завершения контракта
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 10 ч
Аутсорс может перейти в постоянное сотрудничество. Насчёт "сделал как просили" в любом случае лучше предупредить о последствиях, чтобы не было потом претензий.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 9 ч
Предупредить, конечно, да. Но, вот, бодаться за истину уже не всегда энергоэффективно)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён