«Плачущий мальчик», Джованни Браголин.
«Плачущий мальчик», Джованни Браголин.

1. Первый рабочий день — обман ожиданий

Ты приходишь в новую компанию, всё кажется крутым: светлый офис (или уютный хоум‑офис), дружелюбная команда, проекты мечты. И тут начинается:

Настройка окружения

Ты клонируешь репозиторий, уверенный, что всё пойдёт гладко. Но через полчаса ты уже гуглишь ошибки с NPM и Node.js, сталкиваешься с конфигами Webpack, которые больше похожи на книгу по черной магии, и думаешь: «Как оно вообще работает?». Ты пишешь в чат команды:

  • «Ребят, а кто‑нибудь сталкивался с этим багом при установке зависимостей?» И тут приходит ответ:

  • «А у нас инструкция в Confluence есть, сейчас скину ссылку».

Ты открываешь её, а там… статья 2018 года с командами, которые уже не работают, но с комментарием: «Если что‑то не запускается, напишите Саше». Саша уже уволился, а ты остаёшься с этой головоломкой один на один.

Первый таск

Тебе дают задачу, чтобы ты «плавно вошёл в процесс». Та самая задачка на полчасика:

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

  • Поправить баг в модуле, который не трогали уже три года. Ты находишь файл с кодом и видишь: const magicNumber = 42; // не трогать, иначе всё сломается. Вопрос «почему?» остаётся без ответа.

  • Сверстать форму, но вот беда: макета нет. Дизайнер уехал в отпуск, и тебе говорят: «Придумай сам, как будет красиво». Нет, я не плачу... Просто «неочевидная валидация» в глаз попала.

Онбординг: как он есть

  • С тобой проводят созвон, рассказывают о проекте и компании, но ты понимаешь половину слов, потому что всё звучит как: «Мы используем кастомные хуки для обработки data‑layer в Redux Middleware, но на проде это через proxy». Ты делаешь вид, что понял, а потом открываешь Google и пытаешься вникнуть.

  • Тимлид подбадривает: «Не переживай, мы тут все с чего‑то начинали». А сам пишет код так, что кажется, будто он изобрёл новую ветку математики.

Итоги первого дня

В конце первого дня ты уходишь с квадратной головой, думая: «Может, это просто я тупой?». Но потом узнаёшь, что у всех так. Главное — пережить первую неделю.

2. Дизайнеры и их "чуть-чуть"

Работа с дизайнерами — это как пытаться понять язык инопланетян. Всё красиво и логично, пока ты не начинаешь в этом копаться. Тебе может повезти, а может и нет.

"Небольшие изменения"

Дизайнеры, как правило, начинают с фразы: «Тут просто немного поменяли, ничего серьёзного». Ты видишь новый макет и чувствуешь, что это «чуть‑чуть» — это как если бы тебе сказали: «Ты всего лишь перестроишь здание, но стены уже стоят».

  • Ты открываешь файл и понимаешь, что переделывать нужно не одну кнопку, а абсолютно все экраны. Эта кнопка часть корпоративной UI библиотеки. Тебе надо менять StoryBook. А новое изменение в UI ломает отображение в 70% всех компонентов. Весь макет перевёрнут, новые шрифты, изменения в отступах, шторки, элементы интерфейса… Словом, всё. Это уже не «чуть‑чуть», а новый проект.

  • Вместо стандартных 20 пикселей отступа теперь стало 15, а то и 25. И вот ты начинаешь искать, где этот отступ по всему коду, пытаясь не сломать остальные части интерфейса. А когда меняешь ломается весь контейнер.

Версия 2.0 макета

Когда ты почти завершил верстку, появляется новый файл: «Тут пару деталей, я немного подправил цвета». Открываешь и видишь, что дизайнер, как по волшебству, изменил буквально всё:

  • Цвет кнопок: с голубого на красный.

  • Тень у карточек: добавили, но не сказали.

  • Логотип не просто увеличили, а поменяли векторную графику на совершенно другую.

И тут уже не помогает даже хорошо настроенный git. Ты начинаешь менять элементы и понимаешь, что половина кода больше не имеет смысла. Вроде не сложно, но объём работы сразу увеличивается в 2–3 раза. Ты сидишь и думаешь: «Вот это я попал!».

Иконки и пиксели

А самое весёлое — это иконки.

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

  • «А можно иконку сделать на 2 пикселя меньше?» — кажется, что ты сошёл с ума, потому что все размеры теперь не сходятся.

Как это выглядит с другой стороны

Дизайнеры точно такие же люди, как и мы. Но они видят картину в целом и не всегда понимают, как мелкие изменения могут повлиять на большую структуру.

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

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

3. Legacy-код — мой личный монстр

Работа с legacy‑кодом — это как встреча с духом прошлого. Он не просто существует, а активно вмешивается в твою работу, заставляя тебя делать вещи, о которых ты бы никогда не подумал. Всё здесь знакомо, но всё при этом абсолютно чуждо.

Когда всё ломается, а причины нет

Вся суть legacy‑кода в том, что он вроде бы работает, но никто точно не понимает, как именно. Ты начинаешь исследовать старый код и натыкаешься на такие комментарии, как:

  • // TODO: разобраться, почему это работает.

  • // Этот баг возник ещё в 2015, но до сих пор никто не починил, так что лучше не трогать.

  • Или самый любимый: // Не меняй эту часть, если не хочешь поломать весь проект.

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

Кастомные решения, которые ломаются со временем

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

  • Ты можешь найти что‑то вроде:

    const data = someData || []; // на всякий случай, потому что иногда someData == undefined

    Это «костыль», который вроде бы решает проблему, но он работает в определённых условиях, а ты не знаешь этих условий. Пытаешься разобраться, а баг появляется в самом непредсказуемом месте.

Никто не помнит, почему так

Ещё одна классика — это когда ты изменяешь что‑то, и всё работает «как раньше», но через некоторое время появляются странные баги, о которых никто не мог бы подумать. Старые функции и компоненты могут работать только потому, что ты их не трогаешь, но как только ты начинаешь модернизировать код, появляется куча проблем.

  • Ты заглядываешь в репозиторий и видишь сотни маленьких PR, в которых всё‑таки исправляли что‑то, но каждый раз только усложняли ситуацию.

  • Ты сталкиваешься с тем, что документации нет, а старые разработчики уже не работают в команде. А те, кто остались, не помнят деталей, потому что писали код ещё 5 лет назад.

"Не трогай, оно работает"

Ты начинаешь всё переписывать, потому что видишь, как можно улучшить код, но здесь приходит главный момент — команда!

  • Тимлид говорит: «Не меняй, оно работает!». И ты слышишь этот страшный голос из прошлого: «Мы не трогали это полгода, и всё нормально, так что и ты не трогай».

  • Проблема в том, что код не только старый, но ещё и с неочевидными зависимостями. Например, одна библиотека завязана на старую версию React, а другая требует обновления, но если ты её обновишь, то сломается весь проект.

Тесты и баги

Обычно в legacy‑коде тестов нет или они написаны так, что от них только хуже.

  • Ты пытаешься разобраться с багом, а оказывается, что система не тестируется никак. И всё, что ты можешь — это писать тесты самостоятельно, а это требует времени.

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

Клиенты и пользователи

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

4. Таски и дедлайны — вечно не успеваешь и всё срочно

Когда ты начинаешь свой рабочий день, кажется, что у тебя всё под контролем: задач не так много, код работает, окружение настроено. Но к обеду ты уже в сплошном потоке тасков, и они никак не заканчиваются.

Новая задача за час до дедлайна

Время близится к концу рабочего дня, ты почти завершил важную задачу, и вот он, последний штрих. Ты уже можешь на 100% уверенно сказать: «Задача сдана, можно выдохнуть». Но тут приходит уведомление:

  • «Кстати, нужно ещё добавить анимацию на этот элемент».

  • Или: «Ты можешь поменять текст в карточке? Поменялся заголовок на сайте».

Вроде бы ничего серьёзного, но ты тут же понимаешь, что анимацию нужно сделать не просто «красивой», а ещё и кроссбраузерной, чтобы работала во всех версиях браузеров от 2015 года. А заголовок не такой простой, как кажется, потому что он завязан на API и нужно ещё сделать кучу проверок, чтобы данные не ломались. И в итоге ты снова перераспределяешь время и оказываешься в состоянии постоянного сжатого графика.

Когда задачи не горят... но вдруг загораются

Ты приходишь в офис (или открываешь рабочее пространство на удалёнке), и тебе говорят, что «эти задачи не срочные». Вроде бы тебе дали пару дней, чтобы на расслабоне всё сделать. Но как только ты начинаешь работать, приходит новая, более срочная просьба.

Например:

  • «Нам нужно срочно сделать интеграцию с новым API, потому что у клиента завтра демо».

  • Или: «Проектный менеджер сказал, что к следующему месяцу должна быть новая фича на проде».

  • «Твои текущие задачи теперь в завтрашнем релизе»

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

Нереалистичные сроки

Иногда разработка фичи по расписанию — это вообще отдельная трагедия. Например, тебе говорят: «Нужно за неделю сделать новую версию интерфейса». Ты спрашиваешь: «А у нас есть макет?». Ответ: «Есть, но дизайнер только закончил, поэтому будут мелкие правки».


Задача, казалось бы, простая, но ты сразу понимаешь, что она окажется сложной, потому что:

  • Макет еще не согласован, и ты не можешь начать верстать, пока нет окончательной версии.

  • Фичу надо привязать к старой логике, которая запутана и требует рефакторинга.

  • Нужно ещё настроить юнит‑тесты, чтобы не поломать старое приложение.

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

Многозадачность — угроза твоему здоровью

Многозадачность на фронтенде — это когда тебе нужно одновременно:

  • Добавить новый компонент.

  • Исправить баг в старом компоненте.

  • Реализовать новую фичу с запросами на сервер.

  • Написать тесты.

  • Внести мелкие правки в дизайн, чтобы всё стало идеально.

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

Неудачные приоритеты

Иногда, когда ты задаешься вопросом: «Почему мне дали задачу, которая не имеет отношения к проекту?», ты начинаешь понимать, что ты просто в неправильном приоритете. Важно помнить, что на всех уровнях приходится работать с чужими приоритетами, а не с теми, которые ты сам себе ставишь. Например:

  • «Мы понимаем, что вы тут делаете новую фичу, но на проде лежит баг, который по мнению клиента — критичный».

  • Или: «Всем в команде нужно срочно настроить интеграцию с новым инструментом для тестирования». И тебе нужно жонглировать задачами, где что‑то важное отходит на второй план, потому что появилось более актуальное. Это ежедневная борьба, где ты хочешь попасть в золотую середину между качеством работы и выполнением всех запросов.

5. Команда — спасение и разочарование

  • Когда ты потратил 3 дня на идеальный код, а сеньор в PR пишет: «Код хороший, но можно проще». Ты делал всё по максимуму, а оказывается, что можно было бы и проще — и вся твоя усердная работа просто сводится к минимуму.

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

  • Когда команде нужно срочно что‑то сделать, и ты забрасываешь свои идеальные идеи, чтобы просто закончить задачу. Все ждут, что ты дашь решение, и ты не можешь тянуть, потому что проект не ждёт. И даже если решение не идеальное — главное, чтобы работало.

6. Кроссбраузерность — проклятие всех фронтендеров

Тебе кажется, что всё работает идеально, а потом кто‑то открывает сайт в старом IE или на Android, и тут начинается кошмар.

  • Когда ты проверяешь код на последних версиях браузеров, всё отлично, сайт работает идеально, и ты гордишься собой. Но приходит тестировщик и говорит: «В Chrome работает, а в Firefox — нет». Ты перечитываешь свои стили и начинаешь кидаться матами.

  • Когда приходится искать решение для старых браузеров, которые уже должны быть мертвыми. Ты стоишь перед выбором: или разрабатывать решение для чего‑то, что давно должно быть забыто, или просить пользователей обновить браузеры. И в этот момент ты понимаешь, что твоя жизнь как фронтендера — это непрерывная борьба с устаревшими технологиями.

  • Когда CSS работает не так, как ты ожидал. Один стиль — и всё рушится, но тебе нужно вычленить, в каком браузере это ломается, а ещё отследить, что это не твоя ошибка.

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

8. Заключение: Почему мы всё ещё здесь?

Ты думаешь, что всё должно быть проще, но всегда что‑то ломается. В конечном итоге, каждый день — это борьба с неопределённостью, багами, новыми требованиями, а также попытки найти баланс между идеальным решением и тем, что просто работает.

Ты сидишь перед компьютером, иногда чувствуешь себя как тот персонаж в компьютерной игре, который пытается пройти уровень, но каждый раз попадает в ловушку. Но в какой‑то момент ты осознаёшь: это твоя игра. И если ты не будешь бороться с этим, то кто? В конце концов, ты нашёл свой путь — через все баги и бессонные ночи.

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

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

Комментарии (56)


  1. Sharn
    15.11.2024 13:45

    Я помню времена когда под постом на хабре были обсуждения в 600+ комментов


    1. moby76
      15.11.2024 13:45

      И сейчас такие есть, но эти посты и новости частично или полностью про политику. Под текущим постом трудно повестку отработать.


      1. vikarti
        15.11.2024 13:45

        Ну почему ? :)

        Почему приходится писать на веб-технологиях там где им не место? А потому что из аппстора и плейстора поперли а в русторе обновления хуже автоматизированы. А кто виноват что поперли? Все же знают кто на самом деле виноват? (вот только находятся отдельные несознательные элементы кто думает иначе)


        1. supercat1337
          15.11.2024 13:45

          Кто виноват? Расскажите. Поделитесь инфой


  1. savostin
    15.11.2024 13:45

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

    Да и у бэкендеров точно такие же проблемы.


    1. DmitryR3989 Автор
      15.11.2024 13:45

      Справедливо! Я согласен, что я ничем не отличаюсь от тех кто создает легаси и принимает не самые удачные решения. Тут даже спорить не буду


  1. vasille
    15.11.2024 13:45

    Мне кажется что столько боли и радости может принести только программирование...


    1. Jubilus
      15.11.2024 13:45

      И линукс)


  1. Metotron0
    15.11.2024 13:45

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

    не умеешь ничего другого


  1. TrueRomanus
    15.11.2024 13:45

    Если заменить дизайнера на аналитика, UI на структуру БД то получиться ровно тоже самое только на бекэнде.


  1. sfi0zy
    15.11.2024 13:45

    Потратил день собирая проект? Напиши инструкцию. Пока ты еще в контексте. Твой преемник будет эффективнее. 5 минут на инструкцию сейчас экономят день потом.

    Дизайнеры творят что-то странное? Проконсультируй их. Покажи им, как система на самом деле работает. Может им контекста не хватает. А может ты и сам чего-то не знаешь, и там есть простая логика, но ты ее за своими пикселями упустил. Поделись ей с соседом. Неси свет знаний во все стороны. С просветленными коллегами всегда спокойнее работать.

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

    Старый код попахивает? Изолируй его. В новых модулях не наступай на те же самые грабли.

    Разобрался с багом с долгой историей? Задокументируй суть бага и решения. Вдруг опять всплывет.

    Недооценил задачу? Уведоми лида. Сразу. Постфактум запишите, что там за контекст, чтобы на будущее знать и не ошибаться дважды в одном месте.

    Менеджер меняет приоритеты задач? Это его работа. Он несет ответственность за это. Если видишь технически невозможное - уведоми его. Это ты здесь - технический специалист, ты вносишь технический контекст в его восприятие проекта, а не наоборот. Впихивая невпихуемое ты повышаешь риски возгорания и делаешь подлянку всем вокруг.

    Если ты не сделаешь мир лучше - никто не сделает. Нытье не решает проблем.


    1. gochaorg
      15.11.2024 13:45

      При условии, если команда видит в тебе человека - то ... может быть.... эти совету сработают


    1. Varrah
      15.11.2024 13:45

      Плюсую - своим падаванам тоже всегда говорю - ты сам не сделаешь - считай никто не сделает. Только беря на себя ответственность за проект, ты начинаешь по-настоящему работать над проектом. И если каждый в команде взялся и делает, тогда и проект движется, и люди растут.


    1. Mr_Qwerty
      15.11.2024 13:45

      Короче, нужно освободить лидов, манагеров, дизайнеров от части их работы. Взять на себя управление проектом и обломаться с повышением з/п потому, что тебя, как потом оказывается, никто не просил делать. Держите плохих специалистов, которых должен скомпенсировать разраб? Ну тогда выдержите еще одного, не сломаетесь. Разраб тоже не хочет за всех работать за оклад разраба. Главное не ныть - нытье не решает проблем. Так и передайте заказчику. Работа менеджера в управлении, то есть в осуществлении всех его функций. Всегда прошу пустить меня на собесы с манагерами и лидами пообщаться за управление. А то меня наизнанку выворачивают вопросами из глубин документации и литкода на собесах. У них же беседа типа скажи что-нибудь на манагерском. "Мы - команда! Василий, очень нуна успеть. Обязательно повысим з/п и дадим премию! <мем с лицом обманщика> Ты же профессионал! Кто, если не ты?" Если менеджер не может управлять, то разработчик в его команде может не знать язык программирования. Ведь какая в таком случае разница - сколько неквалифицированных дилетантов на проекте?


      1. sfi0zy
        15.11.2024 13:45

        Позвольте спросить, а как вы смогли посылы "записывай, не повторяй одну ошибку дважды" и "дай коллегам контекст, чтобы они эффективно выполняли свою часть работы" смогли перевернуть в то, что нужно делать работу людей с другими специальностями и еще привязали к этому квалификацию? Это абсолютно перпендикулярные друг другу вещи.


    1. Format-X22
      15.11.2024 13:45

      Про изолирование кода - в далеком 2015 мне достался проект на ExtJS, который писало 35 разных человек 7 лет. И там на фронте было сразу три версии фреймворка в формате SPA, при этом старая версия была виртуализированна в эдаком сандбоксе чтобы не влиять на код в других местах. Но влияла, потому что протекали стили и когда подгружалась старая версия - в микро-моментах это становилось заметно. А подгружалаось там всё на лету модульно потому что были очень толстые бандлы с логикой и стартовым кодом, не на каждой странице тебе это было надо, к тому же могло не быть прав. И если всё грузить, то бут-код после загрузки время старта занимал. Грузилось модулями из рееста модулей, некоторые были запакованы чтобы логика легаси не протекала. При этом часть кода была статичной, а часть генерилась на конфигах что приходили с бекенда - приходит здоровенный JSON и по нему ты рендеришь интерфейс, подгружаешь скрипты, генерируешь исполняемый код. Но такое только для части кода. При этом было хорошо заметно в какие из годов среди 7 лет в команде был архитектор. А ещё там было всё на эвент-системе и ты слал сигнал, который ретранслировался и роутился по пути и на этот сигнал могло быть много что подписано и ты мог не знать что, потому менять было опасно, а трейсинг сигналов был интересным квестом. Ну и конечно взаимодействия между виртуализированной старой версией фреймворка и новой. Сверху ещё глобальная либа с именем js.js, благодаря которой я узнал что у объектов бывают методы с именем в виде пустой строки. Ну и сверху система локализации на разные языки, которая пронизывала весь интерфейс. Про то как там билдилось это всё с помощью Java и о слоях логики… разнообразно в общем.

      Вот ЭТО было легаси. С большой буквой ЛЕГАСИ. Которое я полтора года в одного поддерживал. И получил грейд сеньёра. А про то как пишут что аж целый день на настройку было потрачено… эх, не видел автор большого энтерпрайза.


  1. v_malzam
    15.11.2024 13:45

    Статья бэкендера - "как я проходил собеседование в 8 этапов, с жонглированием на моноколесе".
    Статья фронтендера - "меня взяли на работу, а я ничего не могу, и никто не помогает".
    p.s.
    Не в обиду фронтендерам, знаю там есть профессионалы.


    1. Spaceoddity
      15.11.2024 13:45

      Во фронте гораздо меньше строгой логики, из-за чего постоянно возникает куча разночтений - от интерпретации дизайнерских задумок, до прилёта с бэка данных с несовпадающим типом...


  1. gun_dose
    15.11.2024 13:45

    По первому пункту рекомендую использовать докер и docker-compose.yml для рабочего окружения хранить в репе. Забудете про ошибки совместимости node.js раз и навсегда.

    Опять же, когда начинаешь работать с каким-то старым проектом, проще узнать какая нужна нода и поднять её в докере. Если не у кого узнать, смотришь дату изменений в проекте, когда основная работа велась и ставишь ту ноду, которая была LTS в том году, когда это делалось.


    1. Spaceoddity
      15.11.2024 13:45

      Буквально неделю назад в новом проекте битый час промудохался с докером. Спросил в чате - оказывается он нафиг не нужен)) Через npm всё поднимается (с красной консолью, но без ошибок).


      1. gun_dose
        15.11.2024 13:45

        Докер не нужен, пока ты работаешь с одним-двумя проектами. Когда их у тебя десятки и надо жонглировать разными версиями, а ещё бэкенд, эластик какой-нибудь, мэйл-кэтчер. Ставить всё это в систему очень увлекательно, особенно, если твоя система - это винда или мак.


        1. artptr86
          15.11.2024 13:45

          Обычно фронтендеры не разворачивают бекенд у себя, а используют удалённо развёрнутый.


          1. gun_dose
            15.11.2024 13:45

            Обычно

            Не обычно, а в тех случаях, когда фронтенд отделён от бэкенда. Большинство сайтов всё ещё работает по старой схеме, где всё вместе.


            1. artptr86
              15.11.2024 13:45

              Судя по тексту автора, у них используются webpack, react и redux. Я скорее склоняюсь к тому, что в этом случае фронтенд отделён от бэка.


              1. Spaceoddity
                15.11.2024 13:45

                Вы про меня? Это был nginx, webpack и vue. Там правда в зависимостях ещё были vite и pinia, но они не использовались - наверное vue cli по дефолту собирался))

                Ну и да, в подавляющем большинстве случаев (я фрилансю - поэтому выборка у меня приличная) бэк действительно удалённо работает. Но не всегда! И вот в этом засада - пока самостоятельно расковыряешь "что тут и как?"... Зачем вот во фронтовую репу тогда класть утилиты для бэкенда, если он юзается отдельно?..


                1. artptr86
                  15.11.2024 13:45

                  Нет, я про DmitryR3989, автора статьи


                  1. DmitryR3989 Автор
                    15.11.2024 13:45

                    Как правило отдельно фронт и удаленный бек, но так же были проекты, где локальный бек и монолит


          1. Mr_Qwerty
            15.11.2024 13:45

            А как быть, если моя самооценка зависит напрямую от количества одновременно применяемых технологий на проекте?



        1. TimReset
          15.11.2024 13:45

          Я мимокрокодил из java бекенда. И там у нас тоже есть разные зависимости. Но самое страшное что я делал - просто разные пути к разным Java указывал при билде проекта. И этого хватало для всех проектов. Обычно даже хватало билдится на последней версии jvm, но указывать версию старше - типа jvm 17, но говорю чтобы сбилдил под 11. И это работает.

          Но когда я пробовал кодить typescript с npm, у меня так просто это не вышло - оказываемся в некоторых либах прописаны shell script которые вызываются при их установке. Я хз - стандартная это практика или нет, но в мире java это даже теоретически нельзя сделать - чтобы Gradle или Maven запустил какой-то кастомный код при скачивание jar файла. Собственно эти shell script у меня под виндой в cmd и не заработали.

          Не могли бы вы подробнее рассказать, в чём проблемы иметь разные версии npm и всего остального? И почему вообще эти проблемы в возникли? Мне интересно, так как на момент изобретения npm уже существовали примеры хороших систем сборки, типа maven. Вот и Rust, который сделали позже, тоже хорошо сделан, нам мой не опытный взгляд - модули, поддержка разных версий компилятора. Всё из коробки.


          1. Spaceoddity
            15.11.2024 13:45

            Не могли бы вы подробнее рассказать, в чём проблемы иметь разные версии npm и всего остального? И почему вообще эти проблемы в возникли?

            Огромный зоопарк пакетов. Плюс очень динамично развиваемый es/ts. Какая-нибудь либа требует пакет, который уже depacated, а какая-то ссылается на то, чего твоя версия npm ещё не понимает.

            Наиболее часто встречаемая мной ошибка при сборке - это старые проекты с sass/scss, которые требуют node-sass, который deprecated... Альтернативные решения есть и решается эта проблема довольно просто. Но в первый раз, по незнанке, можно и затупить))

            И да, такого достаточно. Я никогда не знаю заранее - соберётся ли у меня проект локально. Это всегда лотерея)) Я первым делом, ещё до разговора о задачах, всегда пробую собрать проект. Если он билдится с ошибками - надо смотреть, а стоит ли вообще овчинка выделки (стоит ли тратить время на их фикс)... И да, приходилось и даунгрейдиться, и апгрейдиться...

            С другой стороны, у меня сейчас на винде в окружении прописаны три версии питона (2.7, 3.10, 3.11) - хотя я вообще ни разу не бекендер...


            1. gun_dose
              15.11.2024 13:45

              Вот мне недавно надо было перебилдить проект 2018 года, там как раз была node-sass, да ещё и Gulp 3. Поднял в докере 14-ю ноду и всё сразу завелось.


            1. Kenya-West
              15.11.2024 13:45

              Наиболее часто встречаемая мной ошибка при сборке - это старые проекты с sass/scss, которые требуют node-sass, который deprecated

              О-о-о-о-ох, сейчас как вспомню эти вьетнамские флешбеки с компиляцией каких-то питоновских сорцов через какие-то библиотеки C++ с такими лютыми ошибками компиляции... причём сразу после установки node-sass, который даже не объявлен у тебя в package.json... Аж остатки волос на голове вздыбаются. Четыре года с этой ошибкой то в одном проекте, то в другом сталкивался, lock-файлы не помогали.

              Так в итоге и не понял, кто был виноват: корпоративный VPN со своим сертификатом, даунскость какого-то SCSS-пакета, общая дичь в архитектуре node-sass и/или его несовместимость с Виндой?

              В общем, проблему решил временной сменой проектов с Angular на Vue, а потом перескок на обновленный Angular через пару лет.


          1. vikarti
            15.11.2024 13:45

            У меня как то был случай когда мне надо было отучить одну программу от подписки.

            Программа на 90+% на TypeScript хотя выглядит клиентским приложением, под AGPL3(а вот так, с комментами даже), предложение про подписку автор сам предложил в ответ на вопрос как ему из России то платить.

            Ушло примерно 2 вечера, ах да TypeScript я не знаю (в работе более другие языки использую)


  1. Cringeon
    15.11.2024 13:45

    Человек не может одну кнопку покрасить неделю (предполагаю, что за 300кк в наносек), а кто-то пишет, что порог входа увеличивается...


    1. GothicJS
      15.11.2024 13:45

      Он потому и увеличился, что одну кнопку покрасить это уже не так просто стало)


  1. dalerank
    15.11.2024 13:45

    Приходи в игрострой, мы тебе ещё рендера и математики отсыпем.


    1. feelamee
      15.11.2024 13:45

      с радостью, если бы туда брали)


      1. Xuxicheta
        15.11.2024 13:45

        если бы там платили


  1. AnthonyDS
    15.11.2024 13:45

    Главная боль фронтенда, это JavaScript... Надеюсь TypeScript однажды заработает из коробки, либо webAssembly научится работать с dom.


    1. Zukomux
      15.11.2024 13:45

      А в чем проблема? Сейчас все фреймворки умеют в TS. Другое дело, что его не хотят молодые. Это же так сложно!)


      1. Mr_Qwerty
        15.11.2024 13:45

        TS превратился в отдельный объект фапа. Тип извлеченный из типа объединённый с другим типом, извлеченным из какого-то объекта со своим интерфейсом. Зачем это? Чтобы можно было поменять в одном месте. Ага, если я смогу в итоге найти это место. Новый вид современного искусства - ts как самоцель. Берем четыре закона логики и идем к такому аффтору за объяснениями. Десяток вопросов и человек уже пишет не как графоман от кодинга.


        1. Free_ze
          15.11.2024 13:45

          Зачем это? Чтобы можно было поменять в одном месте.

          ... даже если сущности между собой прямой связи не имеют. Вообще, "экономия на типах" - это популярная патология, которую "волшебные дженерики" еще и подстегивают, приоткрывая форточку в мир дикого JS.


    1. supercat1337
      15.11.2024 13:45

      О, ts решает все проблемы, да?


    1. GothicJS
      15.11.2024 13:45

      JavaScript прекрасный язык) Просто его не все понимают, особенно с колокольни джавы или шарпа)


  1. gmtd
    15.11.2024 13:45

    Заключение: Почему мы всё ещё здесь?

    Потому что когда ты начинаешь новый [pet] проект, берешь любимый фреймворк/библиотеки и делаешь офигительную штуку, это приносит огромное удовольствие


  1. ooko
    15.11.2024 13:45

    Первая задача для новичка в проекте это - поднять окружение, поправить документацию как поднять окружение.


    1. Den_CH
      15.11.2024 13:45

      Супер. Заберу в цитатник, если не против.


  1. DmitryOlkhovoi
    15.11.2024 13:45

    Самый главный минус, и в целом обобщающий - нужно работать


    1. Mr_Qwerty
      15.11.2024 13:45

      Ага, и платить за работу.


  1. GothicJS
    15.11.2024 13:45

    А потом придет какой-нибудь озлобленный пафосный гейткипер и скажет, что ты ненастоящий, потому что математику не знаешь)