Финальный урок курса: делаем production-сборку To Do List, возвращаем хранение задач в localStorage, настраиваем vite.config.js и выкладываем готовое приложение на GitHub Pages. В итоге — полноценный проект в продакшене, который можно добавить в портфолио.
#анонс_видео #react #react_курс
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤52👍18🔥12
Я последнее время всё чаще думаю, что засиделся. Не в формате «всё плохо, спасите», а просто… долго в одном месте. Работаешь, делаешь задачи, код живёт, что-то двигается — но ощущение движения куда-то пропадает.
В какой-то момент в голове появляется мысль, которую очень не хочется думать: а может, пора снова выходить на рынок.
Мне всегда было тяжело с этим. Потому что рынок — это место, где ты снова превращаешься в человека, который доказывает, что он не зря ел свой хлеб последние годы.
Ты живёшь в реальности, где твой код работает, твои решения влияют, твои правки доезжают в прод. А потом ты садишься на созвон, и тебе говорят: ну давай, расскажи, что ты делал.
Здесь обычно начинается ступор. Не потому что ты ничего не делал. А потому что ты всё это время именно делал, а не готовил презентацию о своей полезности.
В голове не аккуратные кейсы, а каша: спринты, фиксы, обсуждения, легаси, какие-то компромиссы, бесконечные «потом разберёмся». Попробуй это нормально разложить словами — и сразу понимаешь, почему осмысленное обновление резюме занимает недели.
Собеседования при этом каждый раз разные. Где-то тебя гоняют по топ-100-вопросам-по-фронтенду. Где-то просто разговаривают, как будто вы уже работаете вместе. Где-то мешанина из задач, теории и «а как бы ты сделал». Угадать формат невозможно, и это всегда немного нервирует.
И самое ироничное — опыт, знакомые, рефералки, даже медийка вообще ни разу не индульгенция. Тебя всё равно будут проверять. Иногда странно. Иногда формально. Иногда вопросами, которые ты последний раз проговаривал вслух лет пять назад.
И в какой-то момент ловишь себя на том, что дело даже не в собеседованиях. А в том, что тебе просто неприятно снова находиться в позиции человека, которого оценивают.
Очень не хочется здесь сейчас быть, но надо.
В какой-то момент в голове появляется мысль, которую очень не хочется думать: а может, пора снова выходить на рынок.
Мне всегда было тяжело с этим. Потому что рынок — это место, где ты снова превращаешься в человека, который доказывает, что он не зря ел свой хлеб последние годы.
Ты живёшь в реальности, где твой код работает, твои решения влияют, твои правки доезжают в прод. А потом ты садишься на созвон, и тебе говорят: ну давай, расскажи, что ты делал.
Здесь обычно начинается ступор. Не потому что ты ничего не делал. А потому что ты всё это время именно делал, а не готовил презентацию о своей полезности.
В голове не аккуратные кейсы, а каша: спринты, фиксы, обсуждения, легаси, какие-то компромиссы, бесконечные «потом разберёмся». Попробуй это нормально разложить словами — и сразу понимаешь, почему осмысленное обновление резюме занимает недели.
Собеседования при этом каждый раз разные. Где-то тебя гоняют по топ-100-вопросам-по-фронтенду. Где-то просто разговаривают, как будто вы уже работаете вместе. Где-то мешанина из задач, теории и «а как бы ты сделал». Угадать формат невозможно, и это всегда немного нервирует.
И самое ироничное — опыт, знакомые, рефералки, даже медийка вообще ни разу не индульгенция. Тебя всё равно будут проверять. Иногда странно. Иногда формально. Иногда вопросами, которые ты последний раз проговаривал вслух лет пять назад.
И в какой-то момент ловишь себя на том, что дело даже не в собеседованиях. А в том, что тебе просто неприятно снова находиться в позиции человека, которого оценивают.
Очень не хочется здесь сейчас быть, но надо.
1❤77👍27😢14🔥7 7🤯2🙏1
В какой-то момент я поймал себя на мысли, что перестал верить в «идеальную архитектуру» во фронтенде. Не в смысле «архитектура не нужна», а в смысле — та самая красивая, чистая, симметричная картинка из докладов и статей почти никогда не существует в реальных проектах.
На старте всё обычно выглядит отлично. Новый проект, чистый репозиторий, аккуратная структура, договорённости, нейминг, слои, ответственность. В этот момент очень легко поверить, что если всё сделать правильно сейчас, то дальше оно так и будет жить.
Рано или поздно приходит реальность. Появляются срочные задачи. Потом ещё одни. Потом «давай пока так, потом переделаем». Меняются приоритеты, команда, требования, ограничения. Архитектура не ломается в один момент, но начинает деформироваться — медленно и почти незаметно.
И вот здесь обычно начинается самый интересный этап — попытка во что бы то ни стало сохранить «идеальность». Когда решение выбирается не потому, что оно лучше решает задачу сейчас, а потому что «так правильнее с архитектурной точки зрения». В реальных проектах это почти всегда заканчивается усложнением, а не порядком.
Например, когда ради чистоты слоёв простое действие превращается в цепочку из трёх абстракций, одного сервиса, двух адаптеров и интерфейса «на будущее». Формально всё красиво. По факту — чтобы понять, откуда пришли данные, нужно открыть полрепозитория.
Или когда ради переиспользуемости компонент делают настолько универсальным, что его невозможно использовать без чтения документации. Архитектура вроде бы выдержана, но работать с этим неудобно никому — ни новым людям, ни старым.
Со временем я начал относиться к архитектуре иначе. Не как к цели, а как к инструменту. Не как к чему-то статичному, а как к живой штуке, которая неизбежно портится и требует компромиссов. И это не баг, а нормальное состояние системы, которая живёт дольше пары месяцев.
Иногда «хорошее» решение — это просто понятный код в неправильном месте. Например, вместо идеального слоя абстракции — прямой вызов, потому что задачу нужно закрыть сегодня, а не спроектировать идеально к следующему кварталу:
— подобное можно было бы завернуть это в сервис, фабрику и ещё один уровень индирекции. Возможно, когда-нибудь это даже понадобится. Но сейчас важнее, что код понятно читать и легко поменять.
Красивая архитектура без учёта контекста команды, сроков и бизнеса — это, по сути, упражнение для ума. Она может быть логичной, консистентной, «правильной», но при этом мешать работать. Особенно если её начинают защищать ради неё самой.
Сейчас для меня «хорошая архитектура» — это та, которая позволяет решать задачи без постоянной боли. Которую можно объяснить новому человеку за разумное время. Которую можно слегка испортить ради срочной задачи и потом не бояться к ней вернуться. Не идеальная, а достаточно жизнеспособная.
Она почти никогда не выглядит так красиво, как на схемах в статьях. Зато она переживает сроки, изменения требований и реальных пользователей. А это, как показала практика, куда важнее аккуратных стрелочек на диаграмме.
На старте всё обычно выглядит отлично. Новый проект, чистый репозиторий, аккуратная структура, договорённости, нейминг, слои, ответственность. В этот момент очень легко поверить, что если всё сделать правильно сейчас, то дальше оно так и будет жить.
Рано или поздно приходит реальность. Появляются срочные задачи. Потом ещё одни. Потом «давай пока так, потом переделаем». Меняются приоритеты, команда, требования, ограничения. Архитектура не ломается в один момент, но начинает деформироваться — медленно и почти незаметно.
И вот здесь обычно начинается самый интересный этап — попытка во что бы то ни стало сохранить «идеальность». Когда решение выбирается не потому, что оно лучше решает задачу сейчас, а потому что «так правильнее с архитектурной точки зрения». В реальных проектах это почти всегда заканчивается усложнением, а не порядком.
Например, когда ради чистоты слоёв простое действие превращается в цепочку из трёх абстракций, одного сервиса, двух адаптеров и интерфейса «на будущее». Формально всё красиво. По факту — чтобы понять, откуда пришли данные, нужно открыть полрепозитория.
Или когда ради переиспользуемости компонент делают настолько универсальным, что его невозможно использовать без чтения документации. Архитектура вроде бы выдержана, но работать с этим неудобно никому — ни новым людям, ни старым.
Со временем я начал относиться к архитектуре иначе. Не как к цели, а как к инструменту. Не как к чему-то статичному, а как к живой штуке, которая неизбежно портится и требует компромиссов. И это не баг, а нормальное состояние системы, которая живёт дольше пары месяцев.
Иногда «хорошее» решение — это просто понятный код в неправильном месте. Например, вместо идеального слоя абстракции — прямой вызов, потому что задачу нужно закрыть сегодня, а не спроектировать идеально к следующему кварталу:
// не идеально, зато читаемо и решает задачу
fetchUserProfile(userId).then(setUser)
— подобное можно было бы завернуть это в сервис, фабрику и ещё один уровень индирекции. Возможно, когда-нибудь это даже понадобится. Но сейчас важнее, что код понятно читать и легко поменять.
Красивая архитектура без учёта контекста команды, сроков и бизнеса — это, по сути, упражнение для ума. Она может быть логичной, консистентной, «правильной», но при этом мешать работать. Особенно если её начинают защищать ради неё самой.
Сейчас для меня «хорошая архитектура» — это та, которая позволяет решать задачи без постоянной боли. Которую можно объяснить новому человеку за разумное время. Которую можно слегка испортить ради срочной задачи и потом не бояться к ней вернуться. Не идеальная, а достаточно жизнеспособная.
Она почти никогда не выглядит так красиво, как на схемах в статьях. Зато она переживает сроки, изменения требований и реальных пользователей. А это, как показала практика, куда важнее аккуратных стрелочек на диаграмме.
3❤44👍26🔥5 3
Давно внутри и вне айтишного сообщества наблюдаю разговоры в духе «ИИ заменит программистов». Обычно это звучит либо как попытка себя напугать, либо как попытка себя успокоить. Реальность, как это часто бывает, неприятнее и прозаичнее.
ИИ не заменяет программистов. Он заменяет тех, кто принципиально отказывается с ним работать, и усиливает тех, кто научился его использовать. С этим уже, как мне кажется, поздно спорить.
ИИ просто быстрее. Он обрабатывает объёмы информации, которые человеку физически недоступны. Не потому что он умнее, а потому что у него нет человеческих ограничений на скорость и масштаб. В этом месте соревнование уже проиграно, и делать вид, мол «я и так нормально гуглю, этого хватит», выглядит странно.
При том ИИ почти всегда делает грязно. Если не загнать его в рамки, он спокойно сгенерирует код, который формально работает, но живёт ровно до первого серьёзного изменения. Он не знает контекста проекта, не чувствует договорённостей внутри команды, не понимает, что этот код в конце концов пишется для людей. Его критерий успеха — «задача вроде решена». Для модели этого достаточно. Для реального проекта — нет.
Отсюда следует простой и не очень приятный вывод: чем хуже ты формулируешь задачу, тем бесполезнее для тебя ИИ. Он не думает вместо тебя. Он просто очень быстро делает то, что ты ему сказал. Если ты сам не понимаешь, чего хочешь, результат будет соответствующий.
Проверка результата всё ещё остаётся на человеке. Выбор инструментов и стека — тоже. Ответственность никуда не делась. ИИ не знает, что у вас легаси, где у вас деньги и где бизнесу будет больно. Он не знает, что этот код придётся поддерживать через год. ИИ полезен ровно до тех пор, пока ты способен проверить его работу.
Самое значимое для разработчиков изменение, которое сейчас происходит — обесценивание синтаксиса. Знать, как писать код, всё ещё нужно, но это больше не конкурентное преимущество. Это базовый навык. Ценность смещается в другое место: в умение формулировать мысли, ставить задачи, выстраивать рамки и понимать, что именно и зачем ты делаешь.
ИИ не делает из слабого разработчика сильного. Он делает сильного быстрее, а слабого — ещё более уязвимым. И вот здесь начинается часть, о которой мало кто хочет говорить вслух. Если ты принципиально сопротивляешься этим инструментам, игнорируешь их или убеждаешь себя, что это временный хайп, ты не сохраняешь профессию. Ты просто остаёшься на месте, пока другие уезжают вперёд.
Прогресс не спрашивает, комфортно тебе или нет. Он просто едет дальше. И выбор сейчас довольно простой: либо ты учишься работать с ИИ как с инструментом, либо со временем тебя заменят те, кто это сделал.
P.S. Буду время от времени писать в таком формате — без суеты, эмодзи-приколов и лишнего форматирования. Интересно, как вам заходит.
ИИ не заменяет программистов. Он заменяет тех, кто принципиально отказывается с ним работать, и усиливает тех, кто научился его использовать. С этим уже, как мне кажется, поздно спорить.
ИИ просто быстрее. Он обрабатывает объёмы информации, которые человеку физически недоступны. Не потому что он умнее, а потому что у него нет человеческих ограничений на скорость и масштаб. В этом месте соревнование уже проиграно, и делать вид, мол «я и так нормально гуглю, этого хватит», выглядит странно.
При том ИИ почти всегда делает грязно. Если не загнать его в рамки, он спокойно сгенерирует код, который формально работает, но живёт ровно до первого серьёзного изменения. Он не знает контекста проекта, не чувствует договорённостей внутри команды, не понимает, что этот код в конце концов пишется для людей. Его критерий успеха — «задача вроде решена». Для модели этого достаточно. Для реального проекта — нет.
Отсюда следует простой и не очень приятный вывод: чем хуже ты формулируешь задачу, тем бесполезнее для тебя ИИ. Он не думает вместо тебя. Он просто очень быстро делает то, что ты ему сказал. Если ты сам не понимаешь, чего хочешь, результат будет соответствующий.
Проверка результата всё ещё остаётся на человеке. Выбор инструментов и стека — тоже. Ответственность никуда не делась. ИИ не знает, что у вас легаси, где у вас деньги и где бизнесу будет больно. Он не знает, что этот код придётся поддерживать через год. ИИ полезен ровно до тех пор, пока ты способен проверить его работу.
Самое значимое для разработчиков изменение, которое сейчас происходит — обесценивание синтаксиса. Знать, как писать код, всё ещё нужно, но это больше не конкурентное преимущество. Это базовый навык. Ценность смещается в другое место: в умение формулировать мысли, ставить задачи, выстраивать рамки и понимать, что именно и зачем ты делаешь.
ИИ не делает из слабого разработчика сильного. Он делает сильного быстрее, а слабого — ещё более уязвимым. И вот здесь начинается часть, о которой мало кто хочет говорить вслух. Если ты принципиально сопротивляешься этим инструментам, игнорируешь их или убеждаешь себя, что это временный хайп, ты не сохраняешь профессию. Ты просто остаёшься на месте, пока другие уезжают вперёд.
Прогресс не спрашивает, комфортно тебе или нет. Он просто едет дальше. И выбор сейчас довольно простой: либо ты учишься работать с ИИ как с инструментом, либо со временем тебя заменят те, кто это сделал.
P.S. Буду время от времени писать в таком формате — без суеты, эмодзи-приколов и лишнего форматирования. Интересно, как вам заходит.
12🔥143👍47❤29🤯3😁1😱1
Почти два месяца не было стримов. Я честно отдыхал, играл в Clair Obscur перед НГ, выдохнул немного и собирался с силами. Но пора возвращаться к нормальному формату.
В ближайшем стриме снова будем разбирать ваши проекты: HTML, CSS, JS/TS, React — всё, что болит и хочется показать. Но есть важное изменение.
Раньше я шёл строго по очереди: старые заявки => новые заявки. По итогу очередь разрослась до каких-то неприличных размеров. Теперь все непроверенные проекты участвуют в случайном отборе.
Это значит:
— Подал сегодня? Такой же шанс попасть на разбор, как у тех, кто ждал месяцами
— Никакой хронологии
— Чистый рандом (ну почти
Да, это не идеально справедливо. Да, кто-то ждал. Но иначе ближайшие 3–4 стрима мы бы разбирали «хвост прошлого года», и интерес к формату просто умер бы. Я хочу живой эфир – с интригой, с ощущением «а вдруг сегодня мой проект». Но... приоритет остаётся. Если хочется без лотереи — приоритетные разборы никуда не делись. На Boosty всё описано.
Заявки открыты постоянно:
Посмотреть список заявок:
Попасть в приоритете:
Как обычно, за вечер успеваем 4–8 проектов — зависит от глубины разборов и моего уровня занудства.
Если давно хотели показать свой код — сейчас самое время.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍23🔥8❤7 3
Александр Ламков — Friendly Frontend
Почти два месяца без стримов — и вот возвращаемся к разбору ваших проектов. HTML, CSS, JS/TS, React — всё, что накипело, всё, что хочется показать. За вечер обычно успеваем 4–8 работ — посмотрим, сколько осилим сегодня.
И напоминаю: теперь отбор проектов случайный. Если ты отправил заявку хоть вчера, хоть сегодня утром — шанс попасть на разбор такой же, как у всех. Очереди больше нет. Есть рандом
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤16👍10🔥6😁1
Александр Ламков — Friendly Frontend
Сегодня разбираем ваши фронтенд-проекты: HTML / CSS / JS / TS / React.
Отбор — случайный. У всех заявок одинаковый шанс попасть на разбор прямо сейчас.
Стрим закончен, всем спасибо!
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍15❤8🔥4😁1
Я к вам с новинкой фронтенда. Да, они ещё случаются
Есть такой UI-паттерн — «сетка как в Pinterest» (как на картинке выше). Карточки разной высоты, которые аккуратно заполняют пространство без дыр.
Раньше всё это дело костылили на JavaScript (либы Masonry.js, react-responsive-masonry и т.п). На это дело в рантайме у браузера уходила тонна вычислений, а при ресайзе окна вся эта сетка кряхтела-пердела и порой ломалась.
В CSS для этой задачи пророчили появление чего-то вроде display: masonry, но по итогу появился display: grid-lanes – полноценный родной CSS-механизм для masonry-подобных раскладок.
Пример на 3 строки CSS:
.gallery {
display: grid-lanes;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 16px;
}
...и всё! Браузер сам решает, в какую «полосу» положить элемент, чтобы он оказался как можно выше.
Самый кайф — не то, что это «masonry без JS», а то что grid-lanes остаётся полноценным Grid’ом.
• Разные ширины колонок
Хочешь 2fr 1fr 1fr — пожалуйста. Хочешь minmax() или auto-fill — без проблем. Алгоритм раскладки продолжает работать. Ты контролируешь структуру, браузер — размещение.
• span работает как обычно
Элемент можно растянуть на 2–3 колонки через grid-column: span 2 и это не превращается в боль с пересчётом позиций, как в JS-masonry – всё нативно, без костылей.
• Нормальный gap, а не отрицательные margin’ы
Никаких обёрток, никаких плясок с компенсацией отступов, просто gap: 16px — и всё.
По сути, это не «новый отдельный режим». Это старый добрый Grid, но с новым алгоритмом размещения элементов.
На сегодня grid-lanes есть в Safari Technology Preview 234. Chrome и другие браузеры движутся в ту же сторону, но ещё не везде стабильно включено по умолчанию. Так что в продакшене пока нужны фоллбеки или проверка через @supports.
#css #css_новинка
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥87👍26❤18💅3
Мне периодически на консультациях задают вопрос: «Посмотри мой код. Я уже мидл или ещё джун?». Каждый раз я немного зависаю. Не из-за того, что вопрос глупый, а потому что в нём изначально заложено странное представление о том, что вообще такое грейд.
Очень часто грейд воспринимают как стиль кода. Мол, если я пишу аккуратно, использую современные конструкции, понимаю замыкания и асинхронность — значит, уже мидл. Если ещё путаюсь и пишу коряво — значит джун.
Но грейд вообще не про это. Джун, мидл и сеньор вполне могут написать одинаковый код в одном и том же файле. Разница не в синтаксисе и не в том, сколько умных слов ты знаешь. Разница в масштабе задач и уровне ответственности, который тебе можно доверить.
Джун чаще пишет решение «в рамках задачи», не особо оглядываясь на систему целиком. Мидл уже смотрит глубже: что есть в проекте, что можно переиспользовать, какие есть ограничения. Сеньор часто вообще ставит под вопрос саму постановку задачи и может предложить решение, которое либо упростит всё, либо вообще уберёт необходимость писать код.
Можно писать не самый изящный JavaScript, но уметь в соло затащить сложную фичу от этапа обсуждения до прода. А можно писать очень аккуратно, но теряться, когда задача выходит за пределы одного файла.
Грейд — это не «насколько красиво ты написал функцию». Это скорее про то, насколько сложные проблемы ты способен решать и сколько последствий своего решения ты готов на себя взять.
И важно осознавать — грейд максимально субъективен. Сегодня ты прошёл на мидла в одну компанию, завтра в другой тебя оценивают как сеньора, а где-то ещё ты не проходишь вообще. Это не значит, что ты внезапно стал хуже или лучше. Это значит, что критерии разные.
Поэтому вопрос «я уже мидл?» в отрыве от конкретной компании вообще не имеет точного ответа. Есть только твой текущий уровень задач, которые ты можешь закрывать, и степень ответственности, которую ты реально выдерживаешь. Всё остальное — ярлыки, которые удобны рынку, но не очень полезны для внутренней оценки себя.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍88❤31🔥15
В Safari 17.4 завезли нативную поддержку свич-тогглов:
<input type="checkbox" switch />
Идея простая и красивая:
• это всё тот же
checkbox• добавляешь атрибут
switch• если браузер не знает про
switch —> рендерится обычный чекбоксЧистое прогрессивное улучшение без вероятности что-то сломать.
Но есть проблема – на данный момент Safari 17.4+ — единственный браузер, где это работает нативно.
Thomas Steiner выпустил полифилл, который:
• делает
<input type="checkbox" switch> максимально близким к нативному• корректно мапит ARIA-роль (
role="switch")• учитывает
prefers-contrast, high-contrast режимы• поддерживает vertical writing-mode и
dirС точки зрения доступности:
• checkbox —> checked / unchecked
• switch —> on / off (иная семантика)
• у switch нет состояния
indeterminateТо есть это не «косметика», а реально другой UI-элемент.
Поддержка пока почти нулевая и стандарт всё ещё под вопросом, но сам подход выглядит здоровым — без JS-костылей и объёмных CSS-обвязок, без поломок и с шансом реально упростить жизнь, если его дожмут.
#css #css_новинка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36🤯18💅7👍3❤2🤔2
Когда я смотрю код учебных проектов новичков, у меня регулярно возникает мысль, что процентов 80 из них – откровенный мусор. Я сейчас именно про код, а не про то, как приложение выглядит в браузере. UI может быть вполне ок, фичи могут работать, но если глянуть исходный код – там регулярное дублирование, спорные решения, переменные а-ля var1 и data3, куски логики, которые непонятно зачем вообще существуют.
И это норм! Учебный проект вообще не обязан быть красивым внутри. Более того – он почти всегда должен быть неправильным. Потому что в этот момент человек не «пишет хороший код», он проверяет гипотезы, пробуеь одно решение, потом другое, что-то ломает, что-то переписывает. Делает вещи, которые в реальном проекте никто бы не пропустил в прод. Так и выглядит обучение.
Настоящая беда, когда учебные проекты превращаются в фальшивую витрину: чистая архитектура, аккуратные компоненты, консистентный нейминг — ну буквально всё копипаста из туториала.
Проблема в том, что реальное обучение выглядит не так. Когда человек действительно учится, проект неоднократно рассыпается, ибо половина смелых решений заводит в тупик. Когда новичок спустя пару недель открывает свой же код и думает что за херню я тут написал — вот так и надо!
Когда человек реально учится, его код постепенно упрощается. Он начинает выкидывать лишнее, замечает дублирование, понимает, что половина «умных решений» была просто усложнением.
Когда человек имитирует бурную деятельность – происходит обратное. Код становится всё сложнее, появляются абстракции ради абстракций, архитектура ради архитектуры, сервисы, фабрики, слои «на будущее». Формально всё выглядит серьёзно, по факту человек просто пытается выглядеть разработчиком.
Самый полезный учебный проект – тот, на который через пару месяцев немного стыдно смотреть. Потому что этот стыд означает одну простую вещь: с тех пор ты вырос.
А вот если старые проекты кажутся идеальными – не очень хороший знак. Либо проект был слишком простым, либо обучение где-то остановилось.
Поэтому если ваш учебный код сейчас выглядит криво – скорее всего, всё идёт как надо. Главное, чтобы следующий проект был чуть менее кривым
#рефлексия #совет_новичкам
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤81👍37🔥8😁1🗿1
Как создатель обучающего контента для новичков, я стараюсь валидировать то, что пишу и говорю через призму «мой зритель/читатель – я 5 лет назад, а не я сегодняший». Потому что большая часть советов, которые дают «опытные разработчики», новичкам не помогает. Иногда – просто не подходит, иногда – откровенно тормозит рост.
Когда человек с опытом что-то советует, он говорит из своей реальности. У него уже есть база, насмотренность, куча принятых решений за плечами. Он видит систему целиком и автоматически достраивает недостающие куски в голове. Новичок же этого контекста не видит. И в итоге один и тот же совет в двух разных головах превращается в разные вещи.
Например, классическое: «не усложняй». Для условного мидла это означает: не городи лишние абстракции, если можно решить проще. Для новичка это часто превращается в «можно писать как попало, главное чтобы работало». И вместо упрощения получается грязь.
Или любимое: «не используй лишние библиотеки». Для человека с опытом это про контроль и понимание, что ты тащишь в проект. Для новичка это легко превращается в страдание и изобретение велосипеда там, где можно было просто взять готовое решение и пойти дальше.
Ещё один частый совет: «сначала пойми, потом пиши». Звучит логично, но по факту новичок часто не может «сначала понять». Ему нужно писать, ошибаться, ломать и через это уже доходить до понимания. Иначе получается бесконечное чтение теории без практики.
Со временем я осознал то, что для мидла – норма, для новичка же может быть преждевременной оптимизацией. А то, что для сеньора выглядит как «очевидно», для новичка вообще не существует как концепция. В этом месте советы начинают работать против. Потому что они даются без уточнения: на каком ты уровне и в каком контексте это вообще актуально.
Поэтому, если ты учишься, есть довольно полезный фильтр. Любой совет стоит прогонять через простой вопрос: это сейчас упрощает мне жизнь или усложняет? Если после «правильного» подхода у тебя резко стало сложнее, ты начал больше путаться и меньше понимать – возможно, этот совет просто не для твоего текущего уровня. И это ок, ведь никто обязан сразу работать «как сеньор». Сначала нужно научиться работать хоть как-то, а «лучше» – придёт потом.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥55❤26👍21
Чем больше я учусь, тем чаще ловлю себя на одной неприятной мысли: кажется, я на самом деле ничего толком не знаю. А самое обидное — это ощущение не проходит, а только усиливается.
Поначалу всё выглядит довольно просто. Есть базовый стек, понятные задачи, ты что-то собираешь — и в голове складывается приятное чувство «ну ок, разобрался, я в теме». А потом начинаешь копать глубже… и внезапно понимаешь, что раньше видел только верхушку айсберга. Просто раньше ты не замечал, сколько всего под ней скрывается.
Особенно жёстко я это прочувствовал, когда начал разбираться не только «как сделать», но и «почему так сделано». Архитктура, внутренности библиотек, чужие решения — и вот ты уже сидишь и смотришь на код, который вроде бы должен понимать, но не понимаешь. И в этот момент накрывает ощущение, что раньше ты был «сильнее», быстрее писал, меньше сомневался, увереннее двигался. Хотя по факту ты просто начал видеть больше слоёв, больше последствий, больше возможных ошибок.
Самая подлая часть в том, что это бьёт по уверенности. Хочется линейного роста: вчера не умел, а сегодня умею. А здесь наоборот: чем дальше идёшь, тем больше вопросов, тем меньше ощущения контроля. И мозг делает самый простой вывод — «я, видимо, стал хуже». Это очень удобная, но абсолютно ложная интерпретация происходящего.
Я для себя это переформулировал так: если тебе начинает казаться, что ты ни хрена не понимаешь — значит, ты хотя бы начал это замечать. Раньше ты спокойно проходил мимо всех этих нюансов с мыслью «да норм всё». уже не проходит. Это не значит, что ты стал хуже. Наоборот — у тебя наконец появилась глубина, которой раньше не было. Просто она чувствуется не как сила, а как постоянное трение и дискомфорт.
Это не самая приятная стадия. Здесь нет ощущения «я молодец, я вырос». Здесь скорее постоянный фон из сомнений и перегрузки. Но именно в этом месте обычно и происходит нормальный рост — не красивый и не вдохновляющий, а такой, от которого периодически хочется всё упростить и перестать лезть глубже.
Поначалу всё выглядит довольно просто. Есть базовый стек, понятные задачи, ты что-то собираешь — и в голове складывается приятное чувство «ну ок, разобрался, я в теме». А потом начинаешь копать глубже… и внезапно понимаешь, что раньше видел только верхушку айсберга. Просто раньше ты не замечал, сколько всего под ней скрывается.
Особенно жёстко я это прочувствовал, когда начал разбираться не только «как сделать», но и «почему так сделано». Архитктура, внутренности библиотек, чужие решения — и вот ты уже сидишь и смотришь на код, который вроде бы должен понимать, но не понимаешь. И в этот момент накрывает ощущение, что раньше ты был «сильнее», быстрее писал, меньше сомневался, увереннее двигался. Хотя по факту ты просто начал видеть больше слоёв, больше последствий, больше возможных ошибок.
Самая подлая часть в том, что это бьёт по уверенности. Хочется линейного роста: вчера не умел, а сегодня умею. А здесь наоборот: чем дальше идёшь, тем больше вопросов, тем меньше ощущения контроля. И мозг делает самый простой вывод — «я, видимо, стал хуже». Это очень удобная, но абсолютно ложная интерпретация происходящего.
Я для себя это переформулировал так: если тебе начинает казаться, что ты ни хрена не понимаешь — значит, ты хотя бы начал это замечать. Раньше ты спокойно проходил мимо всех этих нюансов с мыслью «да норм всё». уже не проходит. Это не значит, что ты стал хуже. Наоборот — у тебя наконец появилась глубина, которой раньше не было. Просто она чувствуется не как сила, а как постоянное трение и дискомфорт.
Это не самая приятная стадия. Здесь нет ощущения «я молодец, я вырос». Здесь скорее постоянный фон из сомнений и перегрузки. Но именно в этом месте обычно и происходит нормальный рост — не красивый и не вдохновляющий, а такой, от которого периодически хочется всё упростить и перестать лезть глубже.
2🔥103❤34👍19🙏3
Часто вижу, как новички боятся открыть чужое решение, будто это какое-то страшное преступление. Типа «если посмотрел — всё, ты считерил, теперь твоё обучение не считается». Из-за этого люди могут по 5–6 часов долбиться в одну задачу, даже когда уже давно встали намертво и ничего не понимают.
Давайте разделим две вещи: списывание и нормальное обучение. Списывание — это когда ты просто копируешь код, не вникая, лишь бы закрыть задачу. А обучение — это когда ты смотришь, как другой человек подумал, какие приёмы использовал и почему именно так. Действия внешне похожи, но на деле это совершенно разные вещи.
У меня тоже был период, когда я принципиально всё «дожимал сам». Звучит красиво и благородно, но на практике это часто превращалось в тупое топтание на месте. Ты не учишься новому — ты просто крутишься в рамках того, что уже знаешь.
Чужое решение — это, по сути, сгусток чужого опыта. За пару минут ты можешь увидеть подход, до которого сам бы доходил несколько часов… или вообще никогда не дошёл. Главное — не просто скопировать, а разобраться: почему так сделано, какие есть другие варианты и где это может сломаться. Вот в этот момент и происходит настоящее обучение.
Но есть и другая крайность, в которую легко скатиться — бездумная копипаста. Когда ты сразу берёшь готовое, вставляешь к себе и идёшь дальше, даже не пытаясь понять. В таком случае ты действительно ничему не учишься, а просто прячешь свои пробелы.
Поэтому я для себя вывел простое правило: если сильно застрял — нормально посмотреть решение. Но потом обязательно нужно его «присвоить»: переписать своими руками, упростить, попробовать сломать и собрать заново. Пока решение не стало по-настоящему твоим — толку от него почти никакого.
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥50👍22❤21
Короче, если вы заметили, что последние пару месяцев тут стало тише — вам не показалось. На YouTube два месяца ничего не выходило, в Telegram тоже писал через раз. Не потому что забросил или потерял интерес. Просто закончился ресурс.
Основная причина — смена работы. Новый проект, новая команда, новые процессы. Кто менял работу, тот знает: первое время ты вечером заканчиваешь работу, у тебя в голове остаётся ровно ноль свободного места. Вся энергия уходит на то, чтобы въехать в кодовую базу, запомнить имена людей и понять, как тут вообще всё устроено. Садиться после этого писать пост или монтировать видео — ну такое.
Я какое-то время пытался тянуть и контент, и адаптацию одновременно. Предсказуемо подвыгорел. В какой-то момент просто разрешил себе нажать паузу. Делать контент через силу — так себе стратегия, на выходе получается вымученная ерунда, которую и самому неприятно перечитывать.
Сейчас всё понемногу устаканивается. На работе уже не чувствую себя новичком, который боится что-то сломать. Появляется энергия, а вместе с ней — желание снова что-то делать. Причём за эти два месяца я дофига тем накопил в заметках — про которые прям хочется высказаться. Руки не доходили, но список рос. Так что с контентом проблема точно не в том, что нечего сказать. Ах, да, я ж ещё в марте планировал релизнуть курс по TS'у, но тогда не вывез. Сейчас думаю, что в мае всё точно будет. Не обещаю — скорее твердо обозначаю своё намерение.
Ещё скоро иду гостем на подкаст, третий раз в жизни. Такие штуки неплохо встряхивают и напоминают, что тебе вообще-то есть что сказать. Ну и в целом — я никуда не делся, просто жизнь временно забрала чуть больше, чем обычно. Возвращаюсь к нормальному темпу. Как-то так.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤169👍69🔥27🎉8🙏2🤩1
Когда начинал, я был уверен: работа фронтендера — это сесть с утра и писать код до вечера. Компоненты, логика, всё красиво. А потом вышел на первый проект и понял, что большую часть дня я вообще не пишу код. Читаю чужой, пытаюсь понять, почему компонент рендерится три раза. Сижу на созвоне, где полчаса спорим про название пропса. Ковыряю баг, который ловится только в Safari. И вот так — процентов 70 времени.
И ты такой сидишь, думаешь: «За неделю написал строк 50 нового кода, наверное я отстой». Не, ты нормальный. Просто задача — не строки производить, а разобраться и решить. Иногда решение — это вообще удалить код. Иногда — сходить к дизайнеру и выяснить, что фичу можно сильно упростить. Иногда — день убить на настройку линтера, зато потом вся команда скажет спасибо.
С ростом тоже прикол — ты его не замечаешь. Просто в какой-то момент ловишь себя на том, что чужой код читаешь быстрее. На ревью видишь проблемы до того, как они стрельнут. Можешь джуну нормально объяснить, почему сделали так, а не иначе. Это всё рост, просто он тихий.
Вообще самый жирный буст у меня был не от написания кода, а от копания в чужом. Лезешь в легаси, пытаешься понять логику решений. Споришь на ревью, оказываешься неправ — и доходит почему. Чинишь баг, про который вообще никто не знает, откуда он взялся. Вот тут и прокачка, а не в очередном todo-приложении на выходных.
Короче, если кажется что «мало кодишь» — забей. Все так работают. Просто в туториалах об этом не рассказывают.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤104👍44🔥15💅4
Вот ты выучил хуки, можешь useState/useEffect написать с закрытыми глазами, даже useRef не пугает. Открываешь резюме, пишешь "React" в навыки. А потом приходишь на проект — и оказывается, что знание React это процентов 15 от того, что реально нужно.
Потому что на проекте тебя никто не попросит «написать компонент с хуками». Тебя попросят разобраться, почему форма на три экрана тормозит. Или прикрутить авторизацию так, чтобы она не разваливалась на каждом редиректе. Или понять, почему стейт обновляется не тогда, когда ты ожидаешь, и данные мелькают как попало. И вот тут выясняется, что useState ты знаешь, а что делать — не очень.
Джуны часто переоценивают фреймворк, потому что он на виду. React — это то, что ты видишь в каждой вакансии, про него все курсы, все туториалы. И создаётся ощущение, что вот выучишь его — и ты фронтендер. Но React это просто инструмент рендеринга. Обёртка. А под ней — архитектура, работа с API, управление состоянием, обработка ошибок, доступность, перформанс. И вот это всё никакого отношения к React не имеет.
Я бы даже сказал так: чувак, который средне знает React, но хорошо понимает как работает браузер, как устроен HTTP, умеет нормально декомпозировать задачу и дебажить — он полезнее, чем тот, кто вызубрил все хуки наизусть, но теряется, когда что-то идёт не по туториалу. Потому что фреймворки меняются, а базовые навыки остаются.
Короче, React знать надо, никто не спорит. Но если ты думаешь, что это главное в твоём стеке — ты путаешь обёртку с содержимым.
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤75👍27🔥8😢1
Первый день на новом проекте. Открываешь репу — 200 файлов, папки вложены друг в друга как матрёшки, какие-то утилиты, хелперы, обёртки над обёртками. Ты смотришь на это и думаешь: «Я тупой». Спойлер — нет. Ты просто не знаешь контекст. И это вообще разные вещи.
Код сам по себе редко бывает прямо сложным. Ну серьёзно, там те же компоненты, те же функции, тот же fetch за данными. Безысходность от того, что ты не знаешь, зачем это всё написано именно так. Почему тут кастомный хук вместо обычного стейта. Почему этот компонент рендерит детей через функцию. Почему роутинг сделан через три слоя редиректов. Без контекста любое решение выглядит безумным. А когда узнаёшь историю — «а, там был баг на проде, пришлось костылить» — всё сразу встаёт на место.
Мозг вообще не умеет схватывать большие системы целиком, он так не работает. Ты не можешь открыть проект и сразу понять всё. Ты понимаешь кусками. Сначала один модуль, потом соседний, потом как они связаны. И постепенно в голове собирается карта. На это уходит недели, иногда месяц-два. Это нормальная скорость, а не признак того, что ты не тянешь.
Лучший способ въехать — не читать весь код подряд, а взять конкретную задачу и пройти по цепочке. Вот кнопка, вот обработчик, вот запрос, вот как данные возвращаются и рендерятся. Один сценарий от начала до конца. Потом второй. Потом третий. И через пару недель ты уже ориентируешься нормально, хотя 80% кодовой базы даже не открывал.
Все через это проходят, кстати. Даже сеньоры на новом проекте первые недели чувствуют себя стажёрами. Просто они уже привыкли к этому ощущению и не паникуют.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤69👍21🔥10
На днях консультировал начинающего фронтендера, и он прямо гордился тем, что знает все методы массивов наизусть. Прям вот сиял. И я сижу такой, киваю, а в голове одна мысль: ну и что? Я сам половину из них подсматриваю каждую неделю, и это не мешает мне закрывать задачи.
У меня на работе за последние полгода ни разу не было ситуации, где проблема упиралась в синтаксис. Зато было полно ситуаций, где надо было сесть и подумать — как разбить фичу на части, какие куски потащат за собой другие, что сломается, если поменять вот эту штуку. И вот тут никакое знание reduce vs forEach не спасает. Тут надо головой работать, а не памятью.
Я сейчас активно использую ИИ-агентов в работе, и знаете что стало самым важным? Не код, а то, что идёт до кода. Грамотно декомпозировать задачу, чётко описать что нужно, продумать граничные случаи — вот на это уходит основное время. Агент напишет тебе что угодно, но если ты сам не понимаешь, что должно получиться — на выходе будет мусор. Инструменты поменялись, а голова по-прежнему главная.
Я часто замечаю, что ребята, которые приходят за менторством, фокусируются не на том. Человек знает деструктуризацию и spread, а попросишь его спроектировать простую форму с тремя состояниями — ступор. Потому что вся энергия ушла в запоминание, а не в понимание. Синтаксис выучить легко, с этим справится кто угодно. А вот научиться думать над структурой — это уже другая история.
Я оглядываюсь на свой рост и понимаю, что больше всего мне дало не заучивание, а копание в чужом коде. Сидишь, смотришь, пытаешься понять — почему человек сделал именно так. Иногда понимаешь, иногда нет. Но голова начинает работать по-другому. А синтаксис… ну синтаксис подсмотришь.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥78❤30👍28
Когда я начинал, я думал, что программирование — это про алгоритмы, структуры данных, паттерны. Ну, про знания. Выучил — применил — работает. Как математика в школе: есть формула, подставил числа, получил ответ. Оказалось — нифига подобного.
Большую часть времени ты сидишь и не понимаешь, правильно ли ты вообще делаешь. Не в смысле «допустил баг» — это как раз решаемо. А в смысле: ты принял архитектурное решение, и у тебя нет способа узнать, было ли оно верным. Может, через три месяца всё развалится. Может, нет. Может, ты выбрал не тот подход, и через полгода придётся переписывать. А может, это и был лучший вариант из возможных, просто он выглядит криво.
И вот сидишь ты с этим ощущением. Каждый день.
Я помню, как писал свой первый более-менее серьёзный проект и раз в час гуглил «как правильно сделать X». Как будто где-то есть скрижаль с правильными ответами, а я просто пока не нашёл. Скрижали нет. Есть куча статей, где люди с одинаковой уверенностью говорят противоположные вещи.
Самое тяжёлое — это не «я не знаю, как решить задачу». Это «я решил задачу, но понятия не имею, хорошо ли я её решил». И никто тебе не скажет. Код работает? Ну ок. Тесты проходят? Ну ок. А нормально ли это спроектировано — ты узнаешь потом. Или не узнаешь, потому что проект закроют раньше.
И к этому вообще никак не готовят. Ни курсы, ни универ, ни ютуб. Там тебе дают задачу, ты её решаешь, тебе говорят «правильно» или «неправильно». А потом ты выходишь на работу — и всё. Обратной связи от вселенной больше нет. Есть код-ревью, но ревьюер часто сам не уверен, он просто более привык к этому состоянию.
Собственно, вот что по-настоящему отличает тех, кто остаётся в профессии, от тех, кто уходит. Не знание фреймворков. Не скорость печати. А способность нормально функционировать в ситуации, когда ты не уверен. Просто делать, принимать решения, двигаться дальше — и не сходить с ума от того, что «а вдруг неправильно».
Я до сих пор иногда ловлю себя на этом. Смотрю на свой код и думаю: это нормально или я просто привык к своим костылям? И честный ответ — я не знаю. И уже нормально с этим живу.
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤94👍34🔥8
Меня бесит эта фраза. Не потому что практика не нужна — нужна, очевидно. А потому что человек приходит с конкретным вопросом, а ему в ответ кидают это как мантру. Типа иди и делай, само придёт. Не придёт.
Я клепал тудушки пачками. Серьёзно, штук пять или шесть за полгода. Каждый раз одно и то же: стейт, рендер списка, кнопка удалить. И каждый раз я чувствовал, что вроде практикуюсь. А по факту просто гонял по кругу то, что уже умел. Ноль роста. Зато тудушек — целая коллекция.
Рост у меня начался, когда я полез в чужой код. Открыл один опенсорсный проект, ничего не понял, закрыл. Открыл снова через неделю, разобрал один компонент. Потом попробовал повторить архитектуру у себя — и вот тут голова реально заработала. Не от того что я писал код, а от того что я пытался понять, почему другой разработчик сделал именно так, а не иначе.
Ещё одна штука, которая сработала — после каждого проекта я стал записывать, что конкретно нового я в нём применил. Если список пустой — значит я просто потратил время. Не практиковался, а имитировал практику. Звучит грубо, но это буквально то, чем я занимался первый год.
Короче, практика работает только когда тебе некомфортно. Если садишься за проект и примерно знаешь, как всё сделать — это не практика, это повторение. Рост там, где ты тупишь, гуглишь, ломаешь и переделываешь. Всё остальное — самоуспокоение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112❤40🔥18