Блог Lead JS-разработчика из Хельсинки Автор: @bekharsky По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv Чат: https://t.me/htmlshitchat
#инструмент дня
Ладно, предыдущий пост-бородач действительно произошёл слишком рано, но и вы поймите — постоянно приходят новые люди.
Зато сейчас я принёс действительно пушечную штуку: React Internals Explorer.
По названию уже можно догадаться, что эта штука визуализирует процессы, происходящие в React по каким-либо внешним или внутренним событиям.
Очень рекомендую посмотреть видео от автора с объяснением или хотя бы почитать пост в его блоге.
Видео прикреплено к этому посту, но если предпочитаете ютуб — вот https://www.youtube.com/watch?v=qIlfTZxb8_0
Ну и ссылка на сам инструмент: https://jser.pro/ddir/rie
Да, у нас уже были попытки реализации подобного, например от Алекса Сидоренко: /channel/htmlshit/1970
Но представленный инструмент намного глубже погружается в проблему. Заодно, уже сейчас можно посмотреть, как по-разному React 18 и 19 рендерят компоненты.
Не забудьте нажать на кнопку Snippets, ага.
#react #tool #explorer
#инструмент дня
С места в карьер: утилита qnm предназначена для поиска установленных пакетов в node_modules. Зачем?
Ну, как минимум, это офигенно быстрый способ просмотреть версии всех установленных лично и не очень лично модулей: https://github.com/ranyitz/qnm
Почему ремарка про "не очень лично"? Потому что какой-либо пакет может запросто тянуть за собой более старую или более новую версию некой утилиты, на которую вы так сильно опирались.
Почему-то меня в этом отношении очень раздражает emotion. Его тащат просто куда ни попадя, а у людей потом на CSS-in-JS аллергия...
Так или иначе, посмотреть, почему тот или иной модуль был установлен — это очень полезно.
Моя рекомендация!
#npm #node #package #бородач
Фронтенд задачки в картинках — просто, наглядно и понятно. Проверяй свои знания в интерактивном формате каждый день.
Присоединяйтесь: @Frontend_Task
#заметка дня
Элемент marquee, который когда-то давно долгое время использовался для создания бесконечной бегущей строки, давно объявлен устаревшим. При этом, желание создавать бегущие строки у дизайнеров и заказчиков никуда не исчезло.
Давайте сразу определимся: хоть он и устаревший, он всё ещё прекрасно работает... в Chrome. Кому-то из разработчиков было весьма интересно переделать его на Shadow DOM и оптимизировать. В Safari и Firefox всё довольно плохо, тормозит безбожно. Поэтому, если ваша задача сделать киоск или использовать в приложении на Electron — не мучайте себя, берите его.
Поэтому долгое время бегущие сроки создавали, используя translate на контейнер и дублирование содержимого. Например, так: https://codepen.io/studiojvla/pen/qVbQqW
Но мы же с вами ровные, зачем нам такие технологии? Можно же жить в 2024 году и не дублировать контент почём зря!
А сделать это можно просто: через CSS-переменные и анимацию индивидуальных элементов! Для этого прямо в разметке указываем порядковый номер элемента и передаём его в определение анимации: https://codepen.io/thebabydino/pen/BaMqgPO?editors=1100
Пример выше — от Аны Тюдор. Вот то же самое, но без Pug, чтобы легче было понять принцип: https://codepen.io/alinaki/pen/poYyaMJ?editors=1100
В чём плюс такого подхода?
1. Никакого дублирования
2. Короткий код
3. Можно применить любые трансформации к каждому элементу, помимо сдвига
4. Фон принадлежит контейнеру и никуда не сдвигается. Можно прозрачность наложить, можно маски, можно глассморфизм... далее — везде.
Не нужны даже псевдоэлементы чтобы затухание сделать (собственно, маска).
Крутота же, котаны? Крутота.
#marquee #бородач
#codepen дня
На WWDC24 Apple похвастались тем, что на SwiftUI теперь можно создавать параллакс-галереи буквально несколькими строчками кода.
Но мы же с вами все знаем, что Web намного круче, как платформа. Мы тоже так умеем!
Правда, только в Chrome...
Ведь у нас есть CSS-переменные и Scroll Timeline API, который мы рассматривали вот тут, даже с полифиллом: /channel/htmlshit/621
Итак, вашему вниманию конфигурируемая параллакс-галерея от Джея: https://codepen.io/jh3y/pen/XWwzYZo
Весь JS там — это часть универсальной панели управления, чтобы задавать параметры.
#css #scroll #animation
Заметки тестировщика - авторский канал тестировщика, который ушел в IT с опытом журналиста 👩💻
Вот уже почти 4 года в профессии, успела поработать в социальной сети и в американской компании.
Сейчас я Senior QA в Wildberries, но продолжаю учиться новому, изучаю автотестирование, базы данных и другие инструменты. В своем канале делюсь опытом, теорией, наблюдениями и ситуациями из жизни.
💡Подписывайся: @qanote
erid: LjN8JzHVV
Бесплатный практический вебинар: Профессия «Frontend-разработчик».
⏰ Когда: 18 июня в 19:00 по мск.
Погрузитесь в решение реальной задачи и напишите мини-игру, которая работает прямо в браузере.
Расскажем, что ждут работодатели от джунов, какие есть грейды во фронтенд-разработке и на какую зарплату рассчитывать в перспективе. Какие JS фреймворки учить: Vue, React, а может, Angular?
Задайте вопросы опытному спикеру,сделайте первый шаг в направлении новой профессии.
🎁 Всем, кто зарегистрировался - Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику - Карта компетенций начинающего Frontend-разработчика.
#такое дня
Продолбал вечер пятницы из-за одного довольно тупого решения почти годичной давности.
Итак, на проекте используется react-hook-form и кастомный селект на базе Downshift (useSelect). К react-hook-form, по причине контролируемой реализации виджета, он подключается через Controller.
В октябре прошлого года по причине, которую никто уже не помнит, мы закрепили react-hook-form на версии 7.47.0.
Ну и всё шло гладко, пока мне не потребовалось прокидывать disabled-состояние на те самые селекты. Казалось бы, однозначный код:
<Controller
name={name}
control={control}
disabled={disabled}
defaultValue={options[0].value}
shouldUnregister={true}
render={({ field: { onChange, value } }) => (
<Select
options={options}
defaultValue={value}
onChange={({ value }) => {
onChange(value);
}}
/>
)}
/>
disabled
, значение контроллера по-умолчанию точно так же никуда не передавалось.#ссылка дня
Когда-то мы обсуждали новость о том, что ESLint хочет перейти на новый, плоский формат конфига в своей 9 версии.
Естественно, я случайно грохнул старый чат с комментариям, но — поверьте — обсуждали.
Это, казалось бы, удобное нововведение вызвало бурю негодования. Кто-то решил остаться на восьмой версии, кто-то нашёл это идеальным поводом чтобы уйти на какой-нибудь Biome.
Но... ESLint нас услышал! И они выкатили инструмент для миграции конфигов: https://eslint.org/blog/2024/05/eslint-configuration-migrator/
Естественно, не без ограничений (основное — поддерживается только корневая директория), но всё же.
Буду пробовать и сообщу. Я тут осознал, что вообще до сих пор на седьмом...
#eslint #tool
А формула проста, и имя ей RICE-фреймворк.
Берём коэффициенты:
Reach: сколько людей будет затронуто, число
Impact: насколько сильно,0.25, 0.5, 1, 2, 3
Confidence: степень уверенности в этом, в процентах
Effort: сколько сил потребуется, любое положительное число, сторипоинты, человеко-месяцы, часы; что угодно используемое в конторе
И считаем: (R*I*C)/E
. Больше число — больше уверенности в успехе. Или как минимум в целесообразности начала разработки.
А вот что такое готовность и успех можно поговорить позже.
Правда это всё не включает Developer’s Enjoyment 🥲
Подробнее тут: https://hello.ducalis.io/knowledge-base/rice-scoring-prioritization-framework
#такое дня
Олды тут?
Волновало ли вас мнение разработчиков-зумеров о вашем подходе к работе?
Спойлер: нет.
А вот Gergely Orosz (я боюсь это транслитерировать) решил собрать мнение обеих сторон, и людей старшего поколения о молодом, и наоборот.
И выпустил две огромные статьи:
GenZ глазами миллениалов и GenX
https://newsletter.pragmaticengineer.com/p/genz
Миллениалы и GenX глазами GenZ:
https://newsletter.pragmaticengineer.com/p/genz-part-2
Поскольку мне аж 36 лет, и я смотрел доклад 36 два раза, иллюстрацией к этому посту я выбрал именно выводы из второй части.
Поиграем в бинго, олды? У меня пять из шести.
По-моему, в целом, весь спор поколений немного переоценён, но некоторые общности имеют место быть. И их приходится учитывать и в бизнесе, и в общении.
Впрочем, гораздо большую роль, на мой взгляд, играет культурный бэкграунд.
#life
#заметка дня
Тут Иван Акулов из Framer поделился, как они доставляют AVIF-изображения, добиваясь ещё большей, чем WEBP, экономии трафика.
Да, я в курсе, что многие генерируют картинки при сборке, кто-то использует сервисы и так далее, но давайте не забывать, что:
1. Есть пользовательский контент
2. Облака могут встать дорого
Итак, в чём же проблема? А в том что AVIF ну очень долго кодируется, что не есть хорошо. Там, где на генерацию WEBP уйдёт 100-300 мс, на AVIF — 1-3 секунды.
В итоге, если генерировать изображения по запросу и сохранять на CDN (тем же nginx, например), будет не очень вежливо заставлять посетителя ждать.
Поэтому было решено применять подход, знакомый нам как stale-while-revalidate.
1. С первым запросом генерируем WEBP-картинку, но устанавливаем кеширующие заголовки как Cache-Control to max-age=0, stale-while-revalidate=31536000.
2. Поскольку max-age выставлен в 0, картинка моментально "протухнет", CDN с этим не согласится и отправит второй запрос, чтобы, собственно, закешировать.
3. И вот тут уже начинаем генерировать AVIF.
4. И отправляем его с max-age=31536000, ну, почти навсегда.
Ну и общая статья на тему: https://www.framer.com/help/articles/how-are-images-optimized-in-framer/
Я тут пока готовил этот обзор, хотел найти свой конфиг nginx для генерации и кропа картинок на лету, но... потерял. Кажется, пришло время потренироваться и написать обновлённый, по мотивам.
А как вы доставляете картинки, котаны?
#image #optimization
Ребят, в начале или середине своего пути вам часто нужно смотреть на примеры кода и реализацию разных возможностей
⚠️ Это повышает вашу насмотренность, понимание кода, да и вы всегда можете сохранить заготовки себе на будущие проекты
Существует множество полезных сайтов, но теперь есть специальный канал для этого: @code_ready
У вас будет все под рукой, с оформленным кодом, примерами, шпаргалками и без занудства
➡️ Так что подписываемся
#такое дня
Не, не могу молчать. Андрей Ситник снова пошёл священной претензией на сообщество фронтенда.
И снова с Линуксом.
Итак, суть подачи: «Во фронтенде бесит, что люди так много говорят про diversity и адаптивность к разным системам, а все сидят на Маках».
Начнём с того, что не все сидят на маках, но все, кто выступает на конференциях 🙂 Ошибка выжившего как она есть.
А дальше... давайте сначала ваше мнение, котаны. Выше — опрос про вашу ОС для работы.
Если вам будет интересно — напишу свой путь и выбор инструментов.
#фишка дня
Иногда встаёт задача не просто проиллюстрировать статью, но обрезать (кропнуть) исходное изображение. И желательно так, чтобы результат был адаптивен и адекватно реагировал на масштабирование.
Джейк Арчибальд предлагает решение на SVG и foreignObject: https://codepen.io/alinaki/pen/KKLXvwz
Вообще, весьма красиво. Да, можно генерировать кропы на сервере, но это, как минимум, лишние телодвижения. А тут – одна картинка, чистый и понятный код.
#svg #img #foreignObject #crop
🚀 Знакомьтесь с AB-TASK: Вашим универсальным инструментом для коммуникации в команде! 🚀
Устали от необходимости использовать несколько приложений для общения в команде, управления задачами и документами?
AB-TASK придет на помощь и избавит вас от хаоса!
Больше нет необходимости переключаться между приложениями и оплачивать накапливающиеся подписки. Больше нет потерянных сообщений.
✅ Почему AB-TASK идеально подходит для команд:
Все вместе: Чаты, задачи, документы.
Максимальная простота: Настолько просто, что пользоваться может каждый. Без технических затруднений.
В реальном времени: Мгновенные обновления, совместное редактирование. Общение в чате такое же эффективное, как реальный разговор.
Полная гибкость: Настройте под нужды ИМЕННО ВАШЕЙ команды.
🌟 Будь то стартап, удаленная команда или любая группа людей, стремящаяся оптимизировать свое общение, AB-TASK к вашим услугам.
🌍 Доступен для всех стран без ограничений.
👉 Попробуйте БЕСПЛАТНО
https://ab-task.com/
#инструмент дня
Сколько вы берёте за разработку лендинга?
$100? $300? $3000? $10000?
Ну ладно, у меня были сметы и по $20000, но это были проекты на целую веб-студию, а не мне одному 😭
И тут я натыкаюсь на это: https://x.com/alex_barashkov/status/1801219973236342910
$89,775
Девяносто кусков! За лендинг 🫠
Который, правда, чуток подтормаживает на MacBook Pro M2. Как быстро мой ноутбук устарел, а...
Ладно, на самом деле пост не об этом. Меня повеселило, что, по факту, ребята не только сделалил лендинг, но и по пути взлетели на полмиллиона просмотров твита, пропиарив продукт и заодно наняв нескольких инженеров.
Но название: Huly... Кремниевую долину пересмотрели?
Учитывая, что хайринг инженера стоит $5000-$10000, инвестиция уже отбилась!
Типичный диалог под обсуждением лендинга выглядел так:
— С точки зрения донесения информации полная ерунда.
— Слыш, а ты сам так умеешь?
...
— О, умеешь. Давай к нам.
Кроме шуток, у меня пруфы есть: https://x.com/platoff/status/1801240777026080980
Ладно, даже сейчас пост не об этом!
Утомил, да?
Короче, меня там заинтересовал текстовый редактор в виде плавающей панельки. Я полез в их гитхаб (а хули, хули — опенсорсный продукт) и нашёл это: https://tiptap.dev/docs/editor/introduction
TipTap это, как нынче считается хорошим тоном, не готовый текстовый редактор, а фреймворк для их построения (на базе ещё более низкоуровневого решения https://prosemirror.net/).
Хочешь — плавающая панель, хочешь — тулбар. Удобно. Крайне интересная вещь.
Вот так вот, интересно, когда есть в чём покопаться.
#web #editor #wysiwyg
#заметка дня
Посмотрите внимательно на картинки, ничего необычного не замечаете?
А тут происходит ого-го какая драма!
Если вы хоть раз пробовали проанализировать запросы и понять метрику "водопад", то становится понятно: запросы на картинке слева идут параллельно, а справа — последовательно.
Итого, 2.5 секунды против 3.5.
— Да что ты сказать-то хочешь?
Я хочу сказать, что изменение это произошло не просто так. Это — график ухудшения производительности некоего приложения после обновления React до 19 Beta. Вот подробнее: https://github.com/facebook/react/issues/29898
Итак, мякотка-то в чём. Раньше компонент React Suspense пререндерил всех своих детей вне зависимости от статуса основной загрузки. Люди прекрасно этим пользовались, загружая разные сопутствующие файлы: картинки, конфигурацию, модели. И все были счастливы.
Но ребята из React решили, что нынче ветер дует в сторону серверного рендеринга, что все используют Next.js и хотят, чтобы потомки асинхронного компонента были отрендерены вместе с родителем, ведь это так удобно в SSR/SSG.
Ага, хер там плавал!
Ну то есть вы понимаете, они буквально забили на всех людей, кому нужны SPA-приложения, кого они устраивают, кому серверный рендеринг не нужен или невозможен к реализации. Ну, вот буквально PR: https://github.com/facebook/react/pull/26380
И очень хорошо, что это решение моментально подняло бурю негодования от разработчиков по всему миру. Это к слову о том, как важно общаться. Желательно вербально, иначе вас не услышат.
И мой горячий привет всем инфлюенсерам, которым лишь бы было на чём хайповать. Больше, больше нового!
В общем, ребята из React откатили изменение и принесли свои извинения с буквальной формулировкой: «Мы недооценили, сколько людей используют SPA и такой паттерн».
Вот: https://x.com/sophiebits/status/1801663976973209620
А, ну и да. Релиз React 19 из-за этого немного задерживается :)
#react #suspense
Канал «🇫🇮Пиво | Olut | Beer🍻» - это пивное окно в Европу на русском языке. Уникальный тематический блог, переехавший из Карелии в Финляндию.
Автор живëт в городе Тампере и прямо сейчас проходит стажировку на финской крафтовой пивоварне. Фото, видео и тексты о тонкостях производства публикуются ежедневно. И про сахти тоже есть 🙂
Репортажи из путешествий по Европе и обзоры на пиво из разных стран прилагаются.
Подписывайтесь, если хотите читать о том, чего не найдёте на других Telegram-каналах про пиво.
#vscode дня
Если вы умеете пользоваться поиском — вы уже миддл. Если поиском с заменой — смело называйте себя сеньором.
Я щас не шучу, know your tools!
Огромное количество разработчиков вообще с трудом понимает, что код — это просто текст, без подсказок IDE не справляются. Но не будем о наболевшем.
Сейчас я вам покажу нечто, что выведет поиск кода на новый уровень: расширение CodeQue!
Ссылка: https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque
Я иллюстрацию файлом приложу, ибо иначе мелко. Но в чём соль: вы можете искать код, который напоминает тот, что написан в области поиска!
Например, в примере — ищем div, внутри которого есть ещё div с атрибутом className, установленным через clsx. Или ещё, можнот найти все формы, внутри которых есть select (необязательно, HTML-тег или компонент).
Я честно говоря сразу вообще не понял, нафига это надо — есть же RegExp.
Но потом ка-а-ак понял!
#search #extension #бородач
#ссылка дня
Мы тут немного повеселились с XSS в разных продуктах и сайтах, результаты удивили. Распространяться я не буду, неприлично, но парочкой полезных ссылок поделюсь.
1. Расширение для Chrome, позволяющее быстро выбрать и вставить XSS-строку в нужное вам текстовое поле: https://chrome.google.com/webstore/detail/bug-magnet/efhedldbjahpgjcneebmbolkalbhckfi?hl=en
2. Постоянно обновляемый репозиторий на ту же тему: https://github.com/minimaxir/big-list-of-naughty-strings
Впрочем, там не только XSS. Помните, например, в чатах люди свои ники пишут с “грязью”? Красиво поломать интерфейс — это туда. Вставить эмодзи, смайлы, управляющие символы.
Ломайте свои интерфейсы сами и избегайте XSS, котаны.
#xss #naughty #injection #бородач
#статья дня
Прекрасный материал от Ван Дамма. Брамуса. Того самого, который нам много рассказывает про CSS Scroll Timeline API.
Те, кто в вёрстке давно, могут помнить баталии на тему что же такое календарь: список или таблица? Я был приверженцем второго варианта, потому что привычный календарь – он ходит как таблица, ест как таблица и крякает как таблица (надеюсь, отсылку вы поймёте 🧐)
Так вот, Брамус заявляет: “Календарь – это сетка!”.
Семантически календарь это список дней, но для представления максимально логично использовать возможности CSS Grid.
https://www.bram.us/2020/12/08/a-calendar-in-three-lines-of-css/
На всё про всё буквально три значащих строчки. Хочется, чтобы неделя начиналась с воскресенья? Нет проблем, сдвигаем начало сетки!
В общем, на этом войне календарей должен быть положен конец.
#css #grid #calendar
Начали свой путь в разработке на JS? Хотите продвинуться дальше?
Тогда ждём вас на открытом практическом уроке «Объектно-ориентированный JavaScript и функции конструкторов» от OTUS, где мы разберем:
🔹как наследуются свойства в объектах;
🔹объектную модель JavaScript;
🔹написание ООП-кода с экономией памяти;
🔹создание объектов при помощи функций конструкторов с наследованием свойств.
Встречаемся 18 июня в 20:00 мск в рамках курса «Специализация Fullstack Developer». Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок
Верстаешь?
Оцени 7 причин пройти наш бесплатный интенсив по Frontend-разработке:
1. Ты с нуля сверстаешь веб-сайт на HTML + CSS;
2. Оживишь страницу с помощью JavaScript;
3. Создашь проект на Angular;
4. Подключишь Backend и загрузишь сайт на хостинг;
5. Сделаешь сайту адаптив;
6. Получишь проверку домашек от кураторов;
7. В итоге своими руками разработаешь качественный сайт, который не стыдно добавить в портфолио или продать.
А главное, ты узнаешь, что тебе делать, чтобы уже в этом году гарантировано зарабатывать от 1000$/мес. на фронтенд-разработке, не выходя из дома.
Начинаем уже завтра.
👉 Успей проскочить на интенсив бесплатно
Бонусом для портфолио тебе выдадут именной сертификат после окончания интенсива и успешной сдачи всех домашних работ.
Реклама. ИП Чернова О. А., ИНН:771399721044
#статья дня
Давай сегодня тему пошире. Если ты работаешь с проектами крупнее одного лендинга за раз, или более того — с продуктами, резко встаёт вопрос целесообразности внедрения той или иной фишки.
Просто «потому что хочется» работает на самых первых этапах, ведь проекты создаются для того, чтоб решить какую-то конкретную боль клиента. Иногда клиент — основатель стартапа.
А вот потом начинается производственный ад. Виной которому менеджеры продукта.
Ну конечно же не они, но именно они будут отвечать за ведение проекта и внедрение результатов. И за аналитику на первом этапе, конечно же. Так как же с ними договариваться и как они будут принимать это решение? Ну или, как минимум, приоритизировать задачи?
в один пост не вместилось, далее… ⏭
Осваиваешь бэкенд? Го на «Технолето» — оплачиваемую стажировку от Яндекса
«Технолето» — программа карьерных и развлекательных активностей для стажеров Яндекса. В программе: образовательные выезды в гараж роботов-доставщиков, экскурсии по ночному офису и не только.
Начинающие бэкенд-специалисты узнают о тонкостях написания кода для высоконагруженных веб-сервисов, освоят навыки эксплуатации сложных систем, а также приобретут востребованные в индустрии скиллы.
Стажировка оплачивается и длится 3, 4 или 6 месяцев в зависимости от занятости студента. Участникам из других городов Яндекс оплатит дорогу и проживание в московской «Айтиобщаге 2.0» — технологическом хостеле с девайсами умного дома.
А если отлично проявите себя на стажировке, то у вас высокий шанс получить оффер. Не упускайте возможность и оставляйте заявку на участие.
#такое дня
Теперь, когда вас попросят на собеседовании написать код, который выводит сам себя — вы знаете, что делать:
($=_=>`($=${$})()`)()
#ретро дня
В комментариях к предыдущему посту встал вопрос: "А как тестировать Safari в Windows и Linux?"
Что ж, на этот вопрос есть частичный ответ. И пару лет назад я делал серию постов, посвящённую этой проблеме.
TL;DR: Safari не единственный браузер на WebKit, есть ещё Epiphany aka GNOME Web. И если на Linux он вполне себе нативно запускается, то на Windows нужно немного плясок.
Собственно, посты из серии:
Краткая история Safari: /channel/htmlshit/704
Установка GNOME Web на Windows WSL2: /channel/htmlshit/709
Использование WebKit Demo Browser через Playwright: /channel/htmlshit/714
Просто готовая сборка WebKit: /channel/htmlshit/715
Если кто попробует и дополнит инструкцию — я буду очень рад 🥺
P. S. там же есть инфа, как получить бесплатный доступ к сервису Browserstack: /channel/htmlshit/718
Открытый курс по JavaScript запустила команда AvitoTech (а это уже гарантия качественного контента).
• Для всех уровней разработки (но с базой в программировании будет попроще)
• Доступным языком
• Про JavaScript / HTML / CSS
Первый выпуск посвящён базовым понятиям: технология веба, браузер, клиент, сервер. Лекция уже доступна на канале AvitoTech.
Смотрите, это бесплатно!
#статья дня
Я много раз начинал и забрасывал статью о том, как справляться с рутиной. Но писать статью — это не в чате «деда» включать. Всё-таки важная штука — аудитория.
Впрочем, здесь мне помогут Александр Беспоясов, Вадим Юмадилов и Андрей Романов. Фамилия Беспоясова должна быть вам знакома – он отметился в Солидбуке.
Итак, какие вопросы разбираются в их лонгриде Фронтенд — это не больно:
— Как решать задачи, а не писать код
— Как не умереть в пиксель-перфекте
— Как вести диалог с дизайнерами
Можно, конечно, просто посоветовать перестать ныть и начать вникать, но это будет слишком грубым описанием этой прекрасной работы.
И обязательно обратите внимание на прикреплённые к статье материалы. В них есть всё.
#work #frontend #psychology #бородач