Фронтенд-разработчик должен заботиться о UX. Но не все специалисты представляют, как именно фронтендер влияет на пользовательский опыт, на что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX. Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта. Специалисты ответили на вопросы и дали конкретные рекомендации начинающим фронтендерам.
UX (англ. User Experience, пользовательский опыт) — восприятие пользователем взаимодействия с продуктом, системой или сервисом. Пользовательский опыт включает эмоции, предпочтения, физические, эмоциональные и поведенческие реакции, которые происходят до, во время и после взаимодействия пользователя с продуктом. Определение ISO 9241-210
Ergonomics of human-system interaction.
Содержание
Эксперты о пользовательском опыте
О работе с UX читателям блога Хекслета рассказали известные в отрасли экспертов: фронтенд-разработчики и UX-дизайнеры. Специалисты ответили на несколько вопросов:
- UX (user experience, пользовательский опыт) — широкое понятие. На пользовательский опыт влияет огромное количество факторов. Например, если речь идёт об интернет-магазине, на UX влияет ассортимент товаров, цены, скорость реакции службы поддержки, работа службы доставки и так далее. Может ли фронтенд-разработчик тоже влиять на UX? Если да, как это происходит?
- Если на пользовательский опыт влияют абсолютно разные факторы — от ассортимента и цены товаров до интерфейсов и скорости загрузки сайта, кто в целом отвечает за UX? Фронтендер? UX-дизайнер? UI-дизайнер? Продуктовый дизайнер? Менеджер продукта? Может, топ или владелец бизнеса?
- UX — пользовательский опыт. Как вы считаете, можно ли сказать, что опыт — субъективное понятие? Кому-то удобно, когда сайдбар находится слева, кому-то — справа. Как можно объективно улучшить UX, если опыт субъективен?
- Как вы считаете, для проектирования классных интерфейсов, которые обеспечивают отличный UX, достаточно пользоваться какими-то рекомендациями, обобщёнными результатами исследований, закономерностями? Или при разработке каждого конкретного проекта надо интересоваться у пользователей этого проекта, пытаться понять, как та или иная фича влияет на их UX? Ведь, например, у сайтов пенсионного фонда и интернет-магазина для юных альпинистов разная аудитория.
- Что фронтенд-разработчику нужно знать о UX? Что бы вы порекомендовали новичку изучить по этой теме в первый месяц работы? А где можно прокачаться не новичкам, а более или менее опытным специалистам?
Андрей Ситник: фронтендер — последний рубеж, который может остановить дизайн-ошибку
О влиянии фронтендера на пользовательский опыт
С ходу приходят в голову следующие вещи:
- Скорость загрузки
- Фризы UI по мере работы приложения (в отличие от скорости загрузки этой теме отводится слишком мало внимания в нашем сообществе)
- Интеграция с ОС и другими сервисами (например, поддержка Chromecast в видео-сервисе)
- Возможность быстро работать с приложением с помощью клавиатуры для постоянных клиентов
- Автозавершение полей и поддержка менеджерой паролей
Но гораздо важнее другое. Любой человек в команде ошибается. Отдел дизайна и продукт-менеджмента тоже. Им сложно заметить ошибки в дизайне, пока новый дизайн сделан в виде картинок, а не реального приложения.
Фронтендер — последний рубеж, который может остановить дизайн-ошибку. С одной стороны он, в отличие от дизайнера, видит все возможные состояния приложения. Например, в списке друзей может быть ситуация, когда пользователь только зарегистрировался, и его список будет пустым. В этом случае вывести «у вас нет друзей» будет ошибкой. Надо использовать этот экран для объяснения социальных взаимодействий в продукте.
С другой стороны, вы первый человек, который по-настоящему взаимодействует с дизайном. Вы видите, что какие-то кнопки неудобно нажимать на телефоне. Что какие-то дизайн-идеи неочевидные.
Возможность сказать, что у нас тут ошибка в дизайне, как мне кажется, — самое важное влияние фронтенд-команды на UX.
О сферах ответственности
Нет одного универсального UX, чтобы кто-то был за него ответственным. Точно так же нет одного UX, у каждого пользователя свой опыт.
Я считаю, что на фронтенд-команде лежит ответственность за опыт взаимодействия с интерфейсом. Если что-то не понятно — это потому что мы не сказали нет дизайнеру. Если что-то на странице тормозит или медленно грузится — это наши неправильные технически решения.
Если сайт не работает в популярных экосистемах, например, менеджер паролей не заполняет форму — это тоже ответственность фронтендера.
О субъективности и объективности UX
Верно, UX — не область естественных наук. Часть вещей можно свести к строгим сравнительным характеристикам — скорость загрузки к метрикам Lighthouse, производительность UI к длине фриза и количеству FPS, удобство к количеству кликов.
Но ту же понятность нельзя выразить такими метриками. Да и метрики в целом не всегда отражают реальность. Тот же вынос кода в параллельный поток Web Worker по факту снижает время выполнения задачи — но повышает субъективное ощущение от тормозов приложения.
Но человечество не в первый раз сталкивается с необходимостью работы с субъективными характеристиками. Для этого есть целый набор наук, которые мы называем гуманитарными. Читайте больше про гуманитарные науки и их методы.
О связи между пользовательским опытом и целевой аудиторией
Тут всё как с оптимизацией — она должна строится на профилировании, а не советах типа «двойные кавычки медленнее одинарных».
Рекомендации и советы тоже важны, но они по-другому работают. Это не ответы. Но они создают у вас интуицию, которая позволяет предугадать, где источник проблемы (но он может быть не там).
Самый лучший способ — дайте приложение друзьям, попросите что-то делать и смотрите как они им пользуются.
Для тестов производительности, купите старый дешёвый китайский андроид-телефон.
Отойдите туда, где плохая связь (в Питере я спускаюсь в метро) и попробуйте попользоваться вашим сайтом.
Где и как прокачиваться в UX
Я сам фанат клипового мышления. Поэтому я просто стараюсь погружаться в сообщество — читать больше соцсетей и блогов дизайнеров.
Об эксперте
Андрей Ситник, ведущий фронтендер Злых марсиан, автор Автопрефиксера, PostCSS и Логакса.
Никита Дубко: фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся
О влиянии фронтендера на пользовательский опыт
UX — это то, как быстро и с каким эмоциями пользователь решит задачу, которую хочет решить. Когда мы говорим о веб-сайтах, то именно фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся. Справедливо и обратное: если разработчик задумается о том, чтобы обеспечить клиенту комфорт на сайте в виде удобного незабагованного интерфейса, уместного управления с клавиатуры, производительных анимаций, почти моментальной загрузки и плавных переходов между страницами — клиент обязательно вернётся и друзей приведёт.
О сферах ответственности
Мне кажется, за пользовательский опыт отвечает вся команда. Задача команды — обеспечить рост бизнесу. Рост возможен, когда клиент доволен. Поэтому очень круто, когда дизайнер старается продумать путь клиента по сайту до достижения цели, обсуждает это с разработчиками, спрашивает, смогут ли они такое реализовать, уточняет у продакт-оунера, действительно ли новая фича приносит пользу, а не тешит самолюбие автора идеи, и так далее. Фронтендер, как то звено, которое ближе всех к конечному пользователю, должен влиять на продукт, на его дизайн и будущую функциональность как минимум через общение внутри команды и донесение своих аргументов и идей.
О субъективности и объективности UX
Про субъективность правда. Никогда не получится сделать продукт, который будет нравится абсолютно всем. Тот же крестик для закрытия окна в Windows изначально вообще был не крестиком, а квадратиком с полоской и находился в левом углу, а на яблочных системах — кружочек в левом. Важная функция, важный элемент интерфейса, а общего мнения до сих пор нет.
Нужно наблюдать за своей целевой аудиторией. Если есть возможность — опрашивать и проводить исследования интерфейсов с живыми людьми, задавать им вопросы в процессе. Виталий Фридман из Smashing Magazine делился таким опытом на своих мастер-классах, и такие исследовательские сессии порой рождают абсолютно неочевидные идеи, которые помогают сделать ваш интерфейс лучше. Скорее всего, вы можете себе позволить проводить AB-тестирование и смотреть влияние правок на продуктовые метрики. На худой конец можно посмотреть в какой-нибудь Яндекс.Метрике реальные пользовательские сессии и глазами увидеть, какие операции на сайте реально вызывают сложности.
Ключевая идея — замерять эффекты на большой аудитории и принимать решения по результатам замеров. То есть не насаждать пользователю добро, потому что вы так субъективно решили по своему опыту, а проверить, действительно ли вы приносите пользователю и продукту добро.
О связи между пользовательским опытом и целевой аудиторией
Вопрос, в котором скрыт ответ. Когда проект только начинается, вы ещё не знаете свою аудиторию, у вас есть только догадки о том, какая она будет. В этот момент вполне нормально опираться на уже существующие исследования. Скорее всего, если вы будете использовать хорошие практики, вроде быстрой загрузки, доступности, экономии трафика, семантичной вёрстки, адаптивности и прочих — вы уже сделаете неплохой задел для продуктовых улучшений без оглядки на базовые вещи. Дальше, с ростом продукта, нужно более серьёзно изучать целевую аудиторию и подстраиваться под её требования. Вряд ли клиент попросит сделать сайт медленным, скорее — добавить новую функциональность.
Где и как прокачиваться в UX
Рано или поздно разработчик становится пользователем. Поэтому главное правило — делать так, чтобы самому себе было удобно и приятно пользоваться результатами своего труда. Любой дискомфорт — сигнал, что можно сделать лучше.
Новичку в первые месяцы работы всё же советую прокачивать базовые знания и набивать руку. UX ближе к психологии, чем к технологиям, мне кажется, поэтому постепенно это знание будет приходить на основе опыта и набитых шишек.
Я сам беру многое из пабликов «Веб-стандарты» и For Web, сайтов Smashing Magazine, A List Apart, подписываюсь в твиттере на интересных мне разработчиков и слежу за их публикациями. На YouTube есть немало записей с конференций дизайнеров, оттуда можно почерпнуть полезные знания из иногда чуждого разработчику мира — полезно посмотреть на свою работу с другого ракурса.
Об эксперте
Никита Дубко, разработчик интерфейсов в Яндексе, ведущий подкаста «Веб-стандарты».
Эксперты Nielsen Norman Group говорят, что не стоит путать UX и юзабилити. По их данным, юзабилити — качественная характеристика пользовательского интерфейса, которая показывает, насколько легко, эффективно, приятно пользоваться системой. То есть UX — более широкое понятие, а юзабилити — его часть.
Наталия Короткова: надо учитывать, что мнение пользователей может быть ошибочным
О влиянии фронтендера на пользовательский опыт
Фронтенд-разработчик влияет на UX через элементы пользовательского интерфейса, различные их состояния, навигацию, интерактивность и производительность страницы.
О сферах ответственности
За UX отвечает продуктовый дизайнер. Иногда такой роли нет, и она распределена между другими членами команды. В любом случае, это коллективная работа и ответственность. Фронтенд-разработчик создает пользовательский опыт на основе известных ему UI-паттернов, затем продуктовый дизайнер проводит исследования и предлагает улучшения.
Разработчик, как узкий специалист, может подсказать проблемные места в предстоящей реализации идеи, поэтому результат зависит от правильно выстроенной коммуникации.
Я думаю, что ценообразование и ассортимент регулируются экономикой проекта и не относятся к факторам UX.
О субъективности и объективности UX
Один из способов принять решение объективно — запустить A/B тест. Всем не угодишь, но цифры наглядно покажут какой вариант эффективнее. Есть и другие интересные способы, например eye-tracking тестирование, которое расскажет многое о перемещении пользователя по странице.
О связи между пользовательским опытом и целевой аудиторией
Конечно нужно интересоваться у пользователей. Однако надо учитывать, что мнение пользователей может быть ошибочным. Нередки ситуации, когда люди очень просят что-то, но когда получают, продукт перестает им нравиться. Хороший UX строится на фундаменте из общеизвестных принципов и исследовании конкурентов, а после улучшается с помощью данных полученных от реальной аудитории. Это включает в себя не только опросы людей, но и аналитику их поведения из различных инструментов, опыт и интуицию UX специалиста.
Где и как прокачиваться в UX
Советую обратить внимание на метрики страницы (Web Vitals, аудит в Lighthouse), производительность анимаций, доступность и дизайн-системы. Новичку рекомендую начать с изучения популярных UI-библиотек, обращая внимание на набор компонентов, типографические стили и анимации.
Прокачиваться можно, анализируя решения в продуктах конкурентов, читая разборы типичных UX ошибок, а также через нетворкинг с UX-специалистами. Опытным можно поэкспериментировать на личном проекте, чтобы попрактиковаться и, возможно, заработать миллиард долларов.
Об эксперте
Наталия Короткова, Senior Frontend Developer.
Ник Мостовой: разработчик отвечает не за код, а за продукт
О влиянии фронтендера на пользовательский опыт
Сила влияния разработчика на UX часто зависит от компании. Где-то это ярко выражено, где-то меньше. Разработчик отвечает не за код, а за продукт. То есть он смотрит, как продукт развивается, насколько легко вносить изменения или что-то добавлять в него. Разработчик, конечно же, может предлагать и обсуждать решения. Продукт — это то, что трогает пользователь, что приносит деньги компании. Код в данном случае вторичен.
Фронтенд-инженеры обычно «качаются» в нескольких направлениях. Они:
- могут писать код
- понимают, как работают интерфейсы, a11y и так далее
- общаются с заказчиками, менеджерами, дизайнерами, уточняют требования к продукту, описывают user stories
- имеют представление о направлении бизнеса, в котором работают. Даже если разработчик приходит без понимания процессов в бизнесе в компании, то со временем такие компетенции появляются за счет погружения в среду и общения
На этапе общения с менеджерами и заказчиками, когда команда разработки формирует видение будущей фичи, разработчики могут влиять на продукт. Например, они могут сказать:
- вот тут у нас есть селект, нам важно сделать так, чтобы он был доступен, чтобы любой пользователь смог выбрать корректно элемент
- здесь у нас появляется всплывающее окно и три кнопки, давайте выделим эту кнопку как основную, тем самым стимулируем пользователя выполнить запланированное действие
Сценариев может быть немало. Если первый сценарий в примере про доступность интерфейсов, то второй больше про какие-то субъективные решения разработчика. Это решение обсуждают на встрече и принимают решение — попробовать, протестировать или не внедрять.
Если идею решили внедрять, то ее важно верифицировать. Верификации происходят по разному. Это зависит от аудитории проекта, её объемов, вышел ли продукт на рынок или это только прототип.
Назову пару наиболее популярных способов:
- фокус-группы — берем N потенциальных пользователей продукта, показываем интерфейс(ы) просим выполнить действия. Следим за действиями. Здесь мы получаем не количественную метрику, но качественную
- АБ-тесты. Количественная метрика, которая помогает решить, сработала ли выделенная кнопка, стали ли пользователи выполнять целевые действия лучше
Как фронтенд-инженеру начать влиять на продукт? Интересуйтесь процессами в компании. Узнайте, как происходит «придумывание» и описание будущих фич. Кто отвечает за них, как распределяются роли в проекте. Все это называется product discovery — процесс, когда новая фича проходит этапы от «появилась идея» до «задача проработана и готова к разработке». Не зацикливайтесь только на product delivery этапах или, по-другому, на разработке.
И, конечно же, общайтесь со своими дизайнерами. Фронтендеры и дизайнеры выполняют общее дело — сделать так, чтобы пользователь мог выполнить свои задачи на сайте эффективно.
О сферах ответственности
Отвечают все сразу. Здесь самое важное — не стать лебедем, раком и щукой. Часто можно услышать: разработчик хочет сделать красивый код, дизайнер анимации и чтобы выглядело эффектно, а менеджер — чтобы было вчера.
На самом деле, это показатель зрелости коллектива. Разработчик должен понимать, зачем дизайнер добавляет для этой «выпадашки» анимацию (например, чтобы сфокусировать внимание пользователя, потому что на странице очень много элементов), дизайнер также может понять стремление разработчика все унифицировать. Они могут даже собраться вместе, обсудить проблемы и найти точки соприкосновения. Аналогично и с менеджером. Менеджеру нужен работающий продукт, которым пользуются. Эти специалисты могут идти на компромиссы:
- сделать прототип, чтобы после выхода на рынок поправить техдолг
- упростить некоторые интерфейсы, чтобы провести больше АБ тестов, развить удачные идеи
В зрелом коллективе команда принимает решения. UX не исключение. И важный момент в конце — разработчик должен видеть в дизайнере профессионала и доверять его действиям. Дизайнер — в разработчике. Разработчик и дизайнер в менеджере, менеджер в разработчике и дизайнере. Без доверия никакого «принимает решения» и «командной ответственности» не будет.
Здесь ещё можно заметить, что основным ответственным за проект всегда будет владелец продукта или владелец бизнеса. Потому что они отвечают за проект своей компанией, бюджетом. UX — важная часть продукта. Но сказать, что владелец продукта отвечает за UX, не совсем корректно. Если бы я был владельцем компании и отвечал за UX и все остальное, то зачем мне нанимать других специалистов? Они нанимаются для делегирования обязанностей и выполнения задач.
О субъективности и объективности UX
Посмотрите на UX сайтов 90-х или начала нулевых. Вы заметите большое количество экспериментов, так как «UX субъективен». Посмотреть можно здесь.
Со временем эти эксперименты эволюционировали, интерфейс превратился в унифицированные детали. Так и для пользователей — несмотря на то, что современные сайты окрашены по-разному, основные паттерны у пользователя остаются неизменными.
Помочь в оценке всегда могут качественные и количественные методы. Также обратите внимание на вот это видео. Внимание — это тоже пользовательский опыт.
О связи между пользовательским опытом и целевой аудиторией
Нужно понимать свою аудиторию и проводить работу с ней, а не ориентироваться на абстрактные данные. Есть паттерны, которые справедливы для большинства пользователей, есть те, которые применимы для конкретной аудитории. В большинстве случаев поведение пользователя зависит от контекста.
Где и как прокачиваться в UX
Новичку — подружиться с своим дизайнером, общаться больше с менеджером и разобраться как и почему те или иные решения принимаются. Понимание продуктовой сферы приведет к пониманию аудитории.
Затем набраться опыта построения интерфейсов. Здесь — читать про best practices и применять их в компании. Построение интерфейсов и хорошее знание предметной области приведет к прокачке своих UX-навыков.
Также можно посоветовать подписаться на блоги и сайты известных дизайнеров, например Илью Бирмана, но я думаю, это довольно общий совет. Опыт, на мой взгляд, важнее.
Для опытного специалиста совет будет аналогичным. Хороший специалист понимает что и каким образом он может сделать для компании, чтобы улучшить продукт, увеличить доходы. Несмотря на то, что он командный игрок, у него все еще есть автономность.
Об эксперте
Ник Мостовой, член программного комитета HolyJs, спикер и ex-lead developer в http://hh.ru. Twitter, Telegram.
Ярослав Шуваев: лучшая практика — когда все отвечают за UX
О влиянии фронтендера на пользовательский опыт
Надо сказать, что есть несколько факторов, на которые может повлиять фронтенд-разработчик. Первый и самый основной: важную часть качества пользовательского опыта составляет техническая доступность и скорость программного обеспечения. То есть то, насколько быстро и стабильно работает программный продукт. Разработчик может прямо влиять на это, создавая оптимальные в плане скорости загрузки продукты, в плане распределения запросов внутри системы. То есть разработчик может делать так, чтобы каждый экран отправлял минимум запросов к базе данных.
О сферах ответственности
Конечно, основной фокус здесь падает на дизайн — это дизайнер внутри команды разработки. И второй фокус — это владелец продукта, который занимается развитием и отвечает за бизнес-результат. Но самая лучшая практика — когда все отвечают за UX, когда нет бутылочного горлышка. То есть когда все в команде имеют экспертизу в области UX, все заинтересованы в том, чтобы пользовательский опыт был максимально качественным, а продукт максимально жизнеспособным.
О субъективности и объективности UX
Да, с одной стороны может показаться, что пользовательский опыт — субъективное понятие. Но с другой стороны можно свести качество UX к неким метрикам. Например, к самым популярным метрикам относится время удовлетворения потребности пользователя. Можно даже сказать, что основной фактор, влияющий на качество пользовательского опыта — дофамин. Чем быстрее пользователь удовлетворяет потребность, тем больше дофамина она получает.
Есть дополнительный фактор: ресурсоёмкость, когнитивная нагрузка, которая падает на пользователя. Здесь уже играет роль не только время. Здесь считается энергоёмкость выполнения тех или иных задач. Здесь сложнее посчитать, нужно использовать более сложные вычисления.
Эти два фактора позволяют достаточно точно измерить качество пользовательского опыта.
О связи между пользовательским опытом и целевой аудиторией
Что касается поведенческих паттернов, то есть как люди привыкли видеть какой-то элемент — справа или слева, как раз здесь могут хорошо помочь разработчики. Потому что Android-разработчики, iOS-разработчики и так далее используют стандартные для операционной системы паттерны. Так они снимают с пользователя нагрузку, связанную с адаптацией к новым интерфейсам. Поэтому здесь можно сказать, что разработчик делает жизнь пользователя проще за счёт того, что применяет стандартные паттерны, которые понятны пользователю.
Конечно, есть разные нюансы. Кто-то воспитывался в среде, где принято вешать логотип справа в верхнем углу. Но исследования показывают, что со временем большинство пользователей привыкает к стандартному паттерну. То есть на меньшинство не всегда стоит ориентироваться. Надо стараться сделать счастливыми максимальное количество пользователей.
Где и как прокачиваться в UX
Проектирование цифровых продуктов состоит из нескольких слоёв. Самый верхний — стиль продукта, визуальное оформление. Следующий слой — компоновка продукта, расположение элементов на экране. Третий слой — информационная архитектура, структура разделов и каталогов, различные фильтры. На четвёртом уровне — функциональность продукта. На пятом уровне стратегии, то есть на каком уровне какие проблемы решаются. На каждом уровне используются самые актуальные практики дизайна или, если по-русски, проектирования. У нас в UX Academy есть курс, который раскрывает эти практики для каждого уровня. Также есть есть методичка или небольшой гайд, который позволяет пробежаться и узнать какие-то основные инструменты для каждого слоя.
Об эксперте
Ярослав Шуваев, руководитель центра компетенций Внутренних Инноваций Ак Барс Цифровые Технологии, куратор курса UX&UI в BHSAD.
Что нужно знать о пользовательском опыте новичкам: рекомендации специалистов Хекслета
Преподаватель вёрстки на Хекслете Никита Михайлов и фронтенд-разработчик Хекслета Роман Макаров в формате вопрос-ответ дали конкретные рекомендации новичкам об изучении UX и применении лучших практик в работе.
Никита Михайлов: вёрстка — воплощение дизайна в браузере или в мобильных приложениях
— Как вёрстка связана с пользовательским опытом, как она влияет на UX?
— По сути, вёрстка — воплощение дизайна в браузере или в мобильных приложениях. То есть это последний шаг перед тем, как пользователь увидит готовый продукт. На верстальщике висит задача не только перенести то, что нарисовал дизайнер. Он должен ещё и адаптировать дизайн под правильное использование.
Например, если речь идёт о формах, верстальщик должен следить, чтобы форма всегда была понятной. Чтобы не было ситуации, когда пользователь ввёл какое-то значение, потом удалил его и не может понять, а что это за поле. Это очень распространённая проблема, когда верстальщики используют плейсхолдер и больше ничего. А пользователи не могут понять, что нужно указать в каком-то поле.
Верстальщик должен подписывать все элементы, чтобы обеспечить доступность. Когда мы говорим UX, то подразумеваем пользовательский опыт всех людей, включая людей с особенными потребностями. Для таких людей пользовательский опыт немного другой, а верстальщик должен хорошо знать эти отличия. Он должен понимать, как организовать интерфейс так, чтобы им было удобно пользоваться всем людям.
— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?
— На мой взгляд, это коллективная ответственность. Если делить зоны ответственности, можно попасть в ситуацию, когда каждый сделал как бы свою часть работы и забил на всё остальное. Но в процессе работы верстальщик может увидеть, что вот здесь неплохо что-то переделать. Распространённая ситуация — дизайнер работает на аутсорсе. В таких условиях верстальщику нужно что-то самому переделывать. А он может что-то неправильно интерпретировать. Поэтому все отделы должны взаимодействовать.
— Первое, что приходит в голову о взаимосвязи между вёрсткой и UX — адаптивность страниц. То есть верстальщик влияет на то, чтобы пользователю было удобно работать со страницей на любом экране. Можно ли выделить ключевые рекомендации, которые должен держать в уме верстальщик, когда создаёт адаптивную страницу?
— Первое: наверное, главное, что забывают начинающие специалисты — проверять страницу не только на тех разрешениях, которые дал дизайнер. У нас очень много разных устройств, пользователи по разному взаимодействуют с сайтом. Например, некоторые люди разбивают окно браузера на несколько частей. Если мы берём стандартные вещи, смотрим, чтобы у нас всё отображалось на 1280 пикселей, на 320, 540, но при этом забываем про другие пограничные состояния, это может привести к тому, что у части пользователей всё будет рушиться. Например, появятся очень большие карточки или очень мелкий текст, когда разрешение экрана позволяет сделать его больше.
Второе: надо помнить, что мобильные устройства имеют две ориентации — вертикальную и горизонтальную. Часто верстают под вертикальную ориентацию, забывая про горизонтальную. В этом случае высота видимой области страницы становится ниже, чем необходимо. Это не очень удобно для пользователей, особенно если на странице есть плавающее меню. Оно может закрыть весь контент.
Третье: надо помнить, что пользователи могут увеличивать страницу. Нужно проверять, чтобы на таких разрешениях вёрстка не разваливалась. То есть если мы сверстали страницу под определённую ширину, но не учли возможность масштабирования, работа не сделана. Желательно проверять на стандартных разрешениях хотя бы двукратное увеличение, смотреть, чтобы здесь всё корректно отображалось.
— Ещё один аспект, влияющий на пользовательский опыт — скорость загрузки. Что в этом контексте может сделать верстальщик? Можно прямо несколько рекомендаций.
— Первое: здесь от верстальщика зависит объём контента, который подгружается на страницу. Всегда нужно следить за размером страницы. Плохо, если на странице две или три картинки, которые весят по 12 Мбайт. Обязанность верстальщика — следить за размерами и оптимизацией изображений. Надо использовать сжатие. Если у изображения нет прозрачного фона, нет смысла держать её в png. Надо следить за размером файлов CSS и HTML, использовать минификацию.
Второе: надо помнить, что обработка HTML — затратная операция для браузеров. Чем глубже вложенность блоков, тем дольше браузер этот код обрабатывает. Даже в Google PageSpeed есть показатель вложенности HTML. То есть надо делать простую вёрстку и не плодить вложенности. Чем чище и проще наш код, тем быстрее браузер его обработает и выведет результат на экран. Это справедливо даже при проблемах с сетью.
— Формы — отдельная тема, вокруг неё сломано много копий. Как ты считаешь, что может сделать верстальщик, чтобы с формами было удобно работать, чтобы у пользователя был позитивный опыт взаимодействия с ними?
— Внешний вид формы — это работа дизайнера. Но все в команде должны работать вместе. При разработке форм верстальщик должен помнить несколько вещей.
Первое: подписи полей. Нельзя полностью рассчитывать на плейсхолдеры. Когда страница с формой загружается, благодаря плейсхолдеру пользователь видит, что требуется в конкретном поле. Но как только он начинает что-то вводить, плейсхолдер исчезает. Если стереть ввод, невозможно понять, о чём поле. Поэтому надо использовать лейбл.
Второе: пользователю удобно, если поля сгруппированы. Не стоит давать пользователю поля сплошной массой. Если мы не делим поля на группы, в них легко запутаться. Стоит выделять группы заголовками. И при этом нельзя забывать про лейблы.
Третье: если у нас есть огромная форма, не стоит сразу вываливать её на пользователя. Лучше дать возможность человеку заполнить часть формы, потом нажать кнопку «Далее» и показать следующую часть. Большое количество полей может отпугнуть пользователя. Он увидит, что надо заполнить 20 или 30 полей, и уйдёт.
Четвёртое: кнопки должны быть информативными. Если у нас есть кнопки «Отправить» или «Очистить», они не должны выглядеть одинаково. Пользователь должен легко отличать их по цвету. А если цвета будут семантичными, пользователю будет намного проще понять, что одна кнопка сбрасывает, а другая отправляет форму.
— Наверное, нельзя не упомянуть навигацию — как здесь верстальщик может позаботиться о хорошем пользовательском опыте?
— Первое: с точки зрения качества пользовательского опыта важно, чтобы все ссылки на странице были понятными. Не должно быть ситуации, когда ссылка похожа на текст. Часто в угоду дизайна удаляют подчёркивание. Но даже в этом случае ссылка должна отличаться от простого текста, пользователь должен видеть её.
Второе: надо помнить про семантическую вёрстку, это прямая обязанность верстальщика. Хороший UX всегда построен на грамотной вёрстке, в том числе на семантической вёрстке. Разные устройства могут считывать информацию, ориентируясь на теги, которые мы использовали для вёрстки. Например, режим чтения в телефоне часто ориентируется на то, какие семантические теги мы использовали, в том числе теги навигации.
Третье: верстальщик должен помнить, что у любой ссылки или кнопки должно быть несколько состояний. Задача верстальщика — сделать какое-то дефолтное поведение, даже если дизайнер этого не нарисовал. Например, если пользователь наводит курсор на ссылку, она должна меняться, должна показывать, что с ней взаимодействуют. Или когда пользователь использует фокус с помощью клавиатуры, ссылка должна реагировать на это.
Четвёртое: если у нас есть подменю, оно должно быть именно подменю. Нельзя его вываливать на пользователя всем списком. Плохо, если у нас в шапке сайта 50 ссылок, и по ним трудно понять, как они относятся друг к другу. Главное меню должно быть главным, то есть в нём нужно показывать основные разделы сайта. А подразделы лучше показывать на страницах основных разделов.
— Доступность — как она влияет на пользовательский опыт? Есть ли набор рекомендаций по улучшению доступности?
Первое: верстальщик должен проверять сайт, над которым работает. Например, попробовать пройти по сайту с помощью клавиатуры. Если здесь он может увидеть все интерактивные элементы, они все выделяются, это уже большой плюс.
Второе: валидная семантическая вёрстка — это уже работа над доступностью. Поэтому всегда проверяйте сайт с помощью валидатора. Если он не находит ошибок, это ещё один плюс в копилку доступности. То есть это гарантирует, что многие скринридеры смогут правильно воспроизвести сайт.
Часто верстальщики используют неподходящие элементы. Например, вместо кнопки они используют простой <div>. Скринридеры не понимают, что этот элемент — кнопка.
Третье: указывайте атрибуты alt у изображений. В этом атрибуте нужно указывать осмысленную информацию — описание картинки. Его «прочитает» незрячий пользователь, когда попадёт на эту картинку. Понятно, что alt «фото 123» ничем такому пользователю не поможет.
— Где можно прокачиваться верстальщику, как узнавать больше о вёрстке в контексте UX?
— Первое, что приходит в голову — Google. Потом идёт знаменитая книга Стивена Круга «Не заставляйте меня думать». Также нужно интересоваться дизайном, смотреть результаты исследований, не думать, что это чисто работа дизайнера.
Нужно читать книги о дизайне интерфейсов. Здесь я рекомендую «Бюро Горбунова». У них есть отличные книги на тему типографики, пользовательских интерфейсов. У них есть курсы дизайна.
Также рекомендую смотреть сайт Awwwards. Здесь можно найти примеры отличных дизайнов и вёрсток. Наконец, отличная практика — изучать современные фреймворки, тот же Bootstrap. Этот фреймворк очень популярный, а его компоненты сделаны с учётом лучших практик UX.
Начните изучать разработку с бесплатного курса «Основы современной вёрстки». Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.
Роман Макаров: разработчик должен ставить себя на место пользователей и проверять интерфейсы
— Как фронтенд-программист влияет на UX?
— С одной стороны, фронтенд-разработчик должен выполнять поставленные техзадания, а эти задания ставят люди, которые разбираются в UX. С другой стороны, есть базовые вещи, которые фронтенд-разработчик должен знать и по умолчанию делать какие-то вещи удобными для пользователей.
— То есть фронтендер делает то, что уже спроектировали дизайнеры?
— Даже не дизайнеры, а специалисты по пользовательскому опыту. Также есть аналитики, бизнес-аналитики, которые могут подсказать, как совместить видение фронтендера с интересами бизнеса.
— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?
— Каждый из упомянутых специалистов отвечает за достаточно широкий фронт работ. Иногда люди выполняют смежные задачи. Например, у нас на проекте нет UX-дизайнера, поэтому мы работаем в связке: фронтенд-программист, верстальщик и ребята от бизнеса.
— Наверное, стоит начать с форм: можно ли дать несколько конкретных рекомендаций по проектированию форм? Как фронтенд-программист может здесь улучшить пользовательский опыт?
— Форма — сложный компонент веб-страницы, она объединяет сразу несколько интерактивных элементов. Здесь могут быть кнопки, радиокнопки, чекбоксы, текстовые инпуты, селекты и так далее. Наверное, самое большое число интерактивных элементов приходится на форму.
Первое: интерфейс должен вести себя предсказуемо, он не должен удивлять пользователя. Поэтому важно самому проверять интерфейсы, которые вы разрабатываете. Надо спрашивать себя, удобно ли пользоваться этой формой, предсказуемо ли она работает.
Второе: если в форме есть обязательные поля, их надо обозначать как обязательные.
Третье: должна быть стратегия валидации формы. Например, у новичков часто встречается ошибка — они начинают валидировать форму до момента, когда пользователь покинул поля или когда он нажал кнопку «Отправить». В этом случае пользователь вводит первый символ, а ему сразу показывается сообщение о невалидной информации, так как минимальное число символов в поле 20. С моей точки зрения, это удивляет пользователя: он только начал писать, а ему уже показывается красная плашка.
Четвёртое: если форма невалидная, у пользователя не должно быть возможности отправить её на сервер. Это можно реализовать с помощью заблокированной кнопки отправки. Также интерфейс должен подсказывать пользователю, какие поля невалидные.
Например, у нас в четвёртом проекте достаточно простой интерфейс. В нём есть однотипные модальные окна и текстовое поле для отправки сообщений. Но новички делают достаточно много ошибок даже на этом минимуме элементов. Например, часто не блокируется кнопка при асинхронных действиях, когда что-то отправляется на сервер.
— Скорость загрузки страниц — один из важных факторов, влияющих на пользовательский опыт. Даже поисковики учитывают его при ранжировании страниц. Как фронтенд-программист может повлиять на этот фактор? Есть какой-то набор рекомендаций, которые можно считать универсальными?
— Тут важно понимать, что это не прихоть поисковых систем. Люди хотят, чтобы сайт загружался максимально быстро. Поисковые системы ориентируются на желания пользователей, поэтому учитывают скорость загрузки при ранжировании сайтов.
Первое: нужно уметь загружать контент прогрессивно. То есть важные вещи должны загружаться сразу, менее важные можно отложить на потом. Для решения этой задачи есть разные приёмы. Например, мы можем в первую очередь загружать ресурсы, которые находятся в верхней части экрана, чтобы пользователь имел возможность с ними взаимодействовать.
Второе: можно загружать картинки в разном качестве или ставить на место картинок заглушки. Это выглядит так: страница загружается, все блоки уже находятся на своих местах. Благодаря этому нет визуального сдвига. Элемент, с которым собирался взаимодействовать пользователь, не будет перемещаться по экрану.
Третье: надо следить за бандлом, смотреть, всё ли там сжимается и оптимизируется. Благо, современные сборщики фронтенда позволяют это делать.
— Можно сказать, что здесь тесно переплетается вёрстка и программирование?
— Есть правила для верстальщиков, они верстают страницы так, чтобы не было этого сдвига. Например, указывают размеры картинок. Браузер в первую очередь получает разметку. И если она выполнена правильно, браузер понимает, где находятся блоки и какие у них размеры.
— Визуализация состояние элементов интерфейса — ещё один важный фактор, влияющий на UX. Может ли здесь быть набор универсальных рекомендаций? Например, выделять активные элементы, отмечать задизейбленные и так далее?
— Да, конечно, за этим нужно следить. Я всегда прошу студентов ставить себя на место пользователей и смотреть, явно ли здесь показано, что кнопка задизейбленная? Понятно ли по состоянию поля, что оно обязательное и без него невозможно отправить форму? Встречается ситуация, когда форма не отправляется, но пользователь не может понять, почему. Это происходит из-за того, что нет сообщений об ошибках или эти сообщения неинформативные.
— Баги в интерфейсах крайне негативно влияют на пользовательский опыт. Есть какие-то рекомендации по их предупреждению, мониторингу, устранению?
— Обработка ошибок — очень важная тема. Первая рекомендация: используйте Rollbar или другие системы логирования. Они нужны, чтобы мы узнавали об ошибках не от пользователей, а самостоятельно.
— А как должно приложение реагировать на ошибки?
— В веб-разработке всегда возможны ошибки. Это могут быть ошибки в приложении или внешние ошибки, например, упавшая сеть, повисший сервер.
Первая рекомендация: пользователь должен знать, что произошла ошибка, для него ситуация должна быть понятной.
Вторая рекомендация: мы должны показать возможные варианты устранения ошибки. Например, предложить пользователю перезагрузить страницу или проверить работоспособность сети или сообщить, когда сеть появится. То есть пользователь должен видеть, что соединение пропало или что оно восстановилось.
Третья рекомендация связана с внутренними ошибками приложения. Мы должны максимально рано показывать пользователю, что произошла ошибка, что что-то сломалось, мы об этом знаем и мы исправим ошибку.
— Где можно прокачаться фронтенд-программисту, чтобы лучше понимать пользовательский опыт и знать, как влиять на UX?
— У нас на Хекслете есть список рекомендуемых книг. Там есть книга Стивена Круга «Не заставляйте меня думать», советую её прочитать, это классика. Также каждый разработчик должен ставить себя на место пользователей и проверять интерфейсы. Полезно пользоваться инструментами, которые помогают по-настоящему посмотреть на сайт глазами пользователя. Например, полезно заглядывать в «Вебвизор».
Фронтенд-разработчик активно влияет на пользовательский опыт вместе с другими членами команды
Такой вывод можно сделать по итогам беседы с экспертами. Опытные специалисты рекомендуют новичкам самим пользоваться интерфейсами, которые они проектируют, и ставить себя на место пользователей. Также фронтендеру нужно интересоваться дизайном и думать о продукте, а не только о коде.
Хотите стать фронтенд-разработчиком, научиться строить классные интерфейсы и влиять на UX? Обратите внимание на профессию «Фронтенд-программист». Обучение можно пройти в группе под руководством опытного наставника.
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 23:04:06 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="PnEVgGotGnIh4032wzNkruyhcuql-Uh1kN-carPXtwXRoN63mFO3EpegaW7PPJTZLKhfQK3OttctPwY-4dBQaw";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении</title>
<meta name="description" content="Как именно фронтендер влияет на пользовательский опыт? На что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX? Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта.">
<link rel="canonical" href="https://ru.hexlet.io/blog/posts/ux-for-frontenders">
<meta property="og:title" content="Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении">
<meta property="og:description" content="Как именно фронтендер влияет на пользовательский опыт? На что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX? Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта.">
<meta property="og:image" content="https://ru.hexlet.io/vite/assets/blog_post-7eTyeLLt.webp">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="j1FZ08QRn7yLUjph8a5MzeGfa-BpNCF5fHRyeMXyuYRggJLkNm8y3D0RHvn9oby6IZZGSmED39vBlOgsl_Ve6g" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="/vite/assets/blog_post-7eTyeLLt.webp"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDA0OSwicHVyIjoiYmxvYl9pZCJ9fQ==--a6531362dd1f3afb65f5b269e1a23113df7171b1/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Devices-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/blog/posts/show","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T23:04:06.182Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"EJ2CgVniw-zUcCpg_bYJ1TO8HY_eI0K8ExvMZ6uokwT_TEm2q5xujGIzDvjxufmi87UwJdYUvB6u-1Yz-a90ag","post":{"model_name":"BlogPost","category":{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},"creator":{"public_name":"Дмитрий Дементий","id":174372,"is_tutor":false},"tags":[{"id":1443,"slug":"frontend","name":"Фронтенд"}],"id":1168,"title":"Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении","slug":"ux-for-frontenders","state":"published","summary":"Как именно фронтендер влияет на пользовательский опыт? На что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX? Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта. Специалисты ответили на вопросы и дали конкретные рекомендации начинающим фронтендерам. \r\n","votes_count":15,"created_at":"2020-12-17T09:24:07.194Z","published_at":"2020-12-18T08:39:28.424Z","body":"Фронтенд-разработчик должен заботиться о UX. Но не все специалисты представляют, как именно фронтендер влияет на пользовательский опыт, на что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX. Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта. Специалисты ответили на вопросы и дали конкретные рекомендации начинающим фронтендерам. \n\n> UX (англ. User Experience, пользовательский опыт) — восприятие пользователем взаимодействия с продуктом, системой или сервисом. Пользовательский опыт включает эмоции, предпочтения, физические, эмоциональные и поведенческие реакции, которые происходят до, во время и после взаимодействия пользователя с продуктом. _Определение [ISO 9241-210:2010](https://www.iso.org/obp/ui/#iso:std:iso:9241:-210:ed-1:v1:en) Ergonomics of human-system interaction._\n\n::programs\n\n## Содержание\n\n## Эксперты о пользовательском опыте\n\nО работе с UX читателям блога Хекслета рассказали известные в отрасли экспертов: фронтенд-разработчики и UX-дизайнеры. Специалисты ответили на несколько вопросов:\n\n1. UX (user experience, пользовательский опыт) — широкое понятие. На пользовательский опыт влияет огромное количество факторов. Например, если речь идёт об интернет-магазине, на UX влияет ассортимент товаров, цены, скорость реакции службы поддержки, работа службы доставки и так далее. Может ли фронтенд-разработчик тоже влиять на UX? Если да, как это происходит?\n2. Если на пользовательский опыт влияют абсолютно разные факторы — от ассортимента и цены товаров до интерфейсов и скорости загрузки сайта, кто в целом отвечает за UX? Фронтендер? UX-дизайнер? UI-дизайнер? Продуктовый дизайнер? Менеджер продукта? Может, топ или владелец бизнеса?\n3. UX — пользовательский опыт. Как вы считаете, можно ли сказать, что опыт — субъективное понятие? Кому-то удобно, когда сайдбар находится слева, кому-то — справа. Как можно объективно улучшить UX, если опыт субъективен?\n4. Как вы считаете, для проектирования классных интерфейсов, которые обеспечивают отличный UX, достаточно пользоваться какими-то рекомендациями, обобщёнными результатами исследований, закономерностями? Или при разработке каждого конкретного проекта надо интересоваться у пользователей этого проекта, пытаться понять, как та или иная фича влияет на их UX? Ведь, например, у сайтов пенсионного фонда и интернет-магазина для юных альпинистов разная аудитория.\n5. Что фронтенд-разработчику нужно знать о UX? Что бы вы порекомендовали новичку изучить по этой теме в первый месяц работы? А где можно прокачаться не новичкам, а более или менее опытным специалистам?\n\n### Андрей Ситник: фронтендер — последний рубеж, который может остановить дизайн-ошибку\n\n**О влиянии фронтендера на пользовательский опыт**\n\nС ходу приходят в голову следующие вещи:\n\n- Скорость загрузки\n- Фризы UI по мере работы приложения (в отличие от скорости загрузки этой теме отводится слишком мало внимания в нашем сообществе)\n- Интеграция с ОС и другими сервисами (например, поддержка Chromecast в видео-сервисе)\n- Возможность быстро работать с приложением с помощью клавиатуры для постоянных клиентов\n- Автозавершение полей и поддержка менеджерой паролей\n\nНо гораздо важнее другое. Любой человек в команде ошибается. Отдел дизайна и продукт-менеджмента тоже. Им сложно заметить ошибки в дизайне, пока новый дизайн сделан в виде картинок, а не реального приложения. \n\nФронтендер — последний рубеж, который может остановить дизайн-ошибку. С одной стороны он, в отличие от дизайнера, видит все возможные состояния приложения. Например, в списке друзей может быть ситуация, когда пользователь только зарегистрировался, и его список будет пустым. В этом случае вывести «у вас нет друзей» будет ошибкой. Надо использовать этот экран для объяснения социальных взаимодействий в продукте.\n\nС другой стороны, вы первый человек, который по-настоящему взаимодействует с дизайном. Вы видите, что какие-то кнопки неудобно нажимать на телефоне. Что какие-то дизайн-идеи неочевидные.\n\nВозможность сказать, что у нас тут ошибка в дизайне, как мне кажется, — самое важное влияние фронтенд-команды на UX.\n\n**О сферах ответственности**\n\nНет одного универсального UX, чтобы кто-то был за него ответственным. Точно так же нет одного UX, у каждого пользователя свой опыт.\n\nЯ считаю, что на фронтенд-команде лежит ответственность за опыт взаимодействия с интерфейсом. Если что-то не понятно — это потому что мы не сказали нет дизайнеру. Если что-то на странице тормозит или медленно грузится — это наши неправильные технически решения. \n\nЕсли сайт не работает в популярных экосистемах, например, менеджер паролей не заполняет форму — это тоже ответственность фронтендера.\n\n**О субъективности и объективности UX**\n\nВерно, UX — не область естественных наук. Часть вещей можно свести к строгим сравнительным характеристикам — скорость загрузки к метрикам Lighthouse, производительность UI к длине фриза и количеству FPS, удобство к количеству кликов.\n\nНо ту же понятность нельзя выразить такими метриками. Да и метрики в целом не всегда отражают реальность. Тот же вынос кода в параллельный поток Web Worker по факту снижает время выполнения задачи — но повышает субъективное ощущение от тормозов приложения.\n\nНо человечество не в первый раз сталкивается с необходимостью работы с субъективными характеристиками. Для этого есть целый набор наук, которые мы называем гуманитарными. Читайте больше про гуманитарные науки и их методы.\n\n**О связи между пользовательским опытом и целевой аудиторией**\n\nТут всё как с оптимизацией — она должна строится на профилировании, а не советах типа «двойные кавычки медленнее одинарных».\n\nРекомендации и советы тоже важны, но они по-другому работают. Это не ответы. Но они создают у вас интуицию, которая позволяет предугадать, где источник проблемы (но он может быть не там).\n\nСамый лучший способ — дайте приложение друзьям, попросите что-то делать и смотрите как они им пользуются.\n\nДля тестов производительности, купите старый дешёвый китайский андроид-телефон.\nОтойдите туда, где плохая связь (в Питере я спускаюсь в метро) и попробуйте попользоваться вашим сайтом.\n\n**Где и как прокачиваться в UX**\n\nЯ сам фанат клипового мышления. Поэтому я просто стараюсь погружаться в сообщество — читать больше соцсетей и блогов дизайнеров.\n\n**Об эксперте**\n\n[Андрей Ситник](https://sitnik.ru/ru/), ведущий фронтендер [Злых марсиан](https://evilmartians.com/), автор Автопрефиксера, PostCSS и Логакса.\n\n### Никита Дубко: фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся\n\n\n\n**О влиянии фронтендера на пользовательский опыт**\n\nUX — это то, как быстро и с каким эмоциями пользователь решит задачу, которую хочет решить. Когда мы говорим о веб-сайтах, то именно фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся. Справедливо и обратное: если разработчик задумается о том, чтобы обеспечить клиенту комфорт на сайте в виде удобного незабагованного интерфейса, уместного управления с клавиатуры, производительных анимаций, почти моментальной загрузки и плавных переходов между страницами — клиент обязательно вернётся и друзей приведёт.\n\n**О сферах ответственности**\n\nМне кажется, за пользовательский опыт отвечает вся команда. Задача команды — обеспечить рост бизнесу. Рост возможен, когда клиент доволен. Поэтому очень круто, когда дизайнер старается продумать путь клиента по сайту до достижения цели, обсуждает это с разработчиками, спрашивает, смогут ли они такое реализовать, уточняет у продакт-оунера, действительно ли новая фича приносит пользу, а не тешит самолюбие автора идеи, и так далее. Фронтендер, как то звено, которое ближе всех к конечному пользователю, должен влиять на продукт, на его дизайн и будущую функциональность как минимум через общение внутри команды и донесение своих аргументов и идей.\n\n**О субъективности и объективности UX**\n\nПро субъективность правда. Никогда не получится сделать продукт, который будет нравится абсолютно всем. Тот же крестик для закрытия окна в Windows изначально вообще был не крестиком, а квадратиком с полоской и находился в левом углу, а на яблочных системах — кружочек в левом. Важная функция, важный элемент интерфейса, а общего мнения до сих пор нет.\n\nНужно наблюдать за своей целевой аудиторией. Если есть возможность — опрашивать и проводить исследования интерфейсов с живыми людьми, задавать им вопросы в процессе. Виталий Фридман из Smashing Magazine делился таким опытом на своих мастер-классах, и такие исследовательские сессии порой рождают абсолютно неочевидные идеи, которые помогают сделать ваш интерфейс лучше. Скорее всего, вы можете себе позволить проводить AB-тестирование и смотреть влияние правок на продуктовые метрики. На худой конец можно посмотреть в какой-нибудь Яндекс.Метрике реальные пользовательские сессии и глазами увидеть, какие операции на сайте реально вызывают сложности.\n\nКлючевая идея — замерять эффекты на большой аудитории и принимать решения по результатам замеров. То есть не насаждать пользователю добро, потому что вы так субъективно решили по своему опыту, а проверить, действительно ли вы приносите пользователю и продукту добро.\n\n**О связи между пользовательским опытом и целевой аудиторией**\n\nВопрос, в котором скрыт ответ. Когда проект только начинается, вы ещё не знаете свою аудиторию, у вас есть только догадки о том, какая она будет. В этот момент вполне нормально опираться на уже существующие исследования. Скорее всего, если вы будете использовать хорошие практики, вроде быстрой загрузки, доступности, экономии трафика, семантичной вёрстки, адаптивности и прочих — вы уже сделаете неплохой задел для продуктовых улучшений без оглядки на базовые вещи. Дальше, с ростом продукта, нужно более серьёзно изучать целевую аудиторию и подстраиваться под её требования. Вряд ли клиент попросит сделать сайт медленным, скорее — добавить новую функциональность.\n\n**Где и как прокачиваться в UX**\n\nРано или поздно разработчик становится пользователем. Поэтому главное правило — делать так, чтобы самому себе было удобно и приятно пользоваться результатами своего труда. Любой дискомфорт — сигнал, что можно сделать лучше.\n\nНовичку в первые месяцы работы всё же советую прокачивать базовые знания и набивать руку. UX ближе к психологии, чем к технологиям, мне кажется, поэтому постепенно это знание будет приходить на основе опыта и набитых шишек.\n\nЯ сам беру многое из пабликов «Веб-стандарты» и For Web, сайтов Smashing Magazine, A List Apart, подписываюсь в твиттере на интересных мне разработчиков и слежу за их публикациями. На YouTube есть немало записей с конференций дизайнеров, оттуда можно почерпнуть полезные знания из иногда чуждого разработчику мира — полезно посмотреть на свою работу с другого ракурса.\n\n**Об эксперте**\n\n[Никита Дубко](https://twitter.com/dark_mefody), разработчик интерфейсов в Яндексе, ведущий [подкаста «Веб-стандарты»](https://twitter.com/webstandards_ru).\n\n\n> Эксперты Nielsen Norman Group говорят, что не стоит путать UX и юзабилити. По [их данным](https://www.nngroup.com/articles/definition-user-experience/#:~:text=Summary%3A%20%22User%20experience%22%20encompasses,its%20services%2C%20and%20its%20products.), юзабилити — качественная характеристика пользовательского интерфейса, которая показывает, насколько легко, эффективно, приятно пользоваться системой. То есть UX — более широкое понятие, а юзабилити — его часть. \n\n### Наталия Короткова: надо учитывать, что мнение пользователей может быть ошибочным\n\n\n\n**О влиянии фронтендера на пользовательский опыт**\n\nФронтенд-разработчик влияет на UX через элементы пользовательского интерфейса, различные их состояния, навигацию, интерактивность и производительность страницы.\n\n**О сферах ответственности**\n\nЗа UX отвечает продуктовый дизайнер. Иногда такой роли нет, и она распределена между другими членами команды. В любом случае, это коллективная работа и ответственность. Фронтенд-разработчик создает пользовательский опыт на основе известных ему UI-паттернов, затем продуктовый дизайнер проводит исследования и предлагает улучшения. \n\nРазработчик, как узкий специалист, может подсказать проблемные места в предстоящей реализации идеи, поэтому результат зависит от правильно выстроенной коммуникации.\nЯ думаю, что ценообразование и ассортимент регулируются экономикой проекта и не относятся к факторам UX.\n\n**О субъективности и объективности UX**\n\nОдин из способов принять решение объективно — запустить A/B тест. Всем не угодишь, но цифры наглядно покажут какой вариант эффективнее. Есть и другие интересные способы, например eye-tracking тестирование, которое расскажет многое о перемещении пользователя по странице.\n\n**О связи между пользовательским опытом и целевой аудиторией**\n\nКонечно нужно интересоваться у пользователей. Однако надо учитывать, что мнение пользователей может быть ошибочным. Нередки ситуации, когда люди очень просят что-то, но когда получают, продукт перестает им нравиться. Хороший UX строится на фундаменте из общеизвестных принципов и исследовании конкурентов, а после улучшается с помощью данных полученных от реальной аудитории. Это включает в себя не только опросы людей, но и аналитику их поведения из различных инструментов, опыт и интуицию UX специалиста.\n\n**Где и как прокачиваться в UX**\n\nСоветую обратить внимание на метрики страницы (Web Vitals, аудит в Lighthouse), производительность анимаций, доступность и дизайн-системы. Новичку рекомендую начать с изучения популярных UI-библиотек, обращая внимание на набор компонентов, типографические стили и анимации.\n\nПрокачиваться можно, анализируя решения в продуктах конкурентов, читая разборы типичных UX ошибок, а также через нетворкинг с UX-специалистами. Опытным можно поэкспериментировать на личном проекте, чтобы попрактиковаться и, возможно, заработать миллиард долларов.\n\n**Об эксперте**\n\n[Наталия Короткова](https://twitter.com/NatKaratkova), Senior Frontend Developer.\n\n## Ник Мостовой: разработчик отвечает не за код, а за продукт\n\n\n\n**О влиянии фронтендера на пользовательский опыт**\n\nСила влияния разработчика на UX часто зависит от компании. Где-то это ярко выражено, где-то меньше. Разработчик отвечает не за код, а за продукт. То есть он смотрит, как продукт развивается, насколько легко вносить изменения или что-то добавлять в него. Разработчик, конечно же, может предлагать и обсуждать решения. Продукт — это то, что трогает пользователь, что приносит деньги компании. Код в данном случае вторичен.\nФронтенд-инженеры обычно «качаются» в нескольких направлениях. Они:\n\n* могут писать код\n* понимают, как работают интерфейсы, a11y и так далее\n* общаются с заказчиками, менеджерами, дизайнерами, уточняют требования к продукту, описывают user stories\n* имеют представление о направлении бизнеса, в котором работают. Даже если разработчик приходит без понимания процессов в бизнесе в компании, то со временем такие компетенции появляются за счет погружения в среду и общения\n\nНа этапе общения с менеджерами и заказчиками, когда команда разработки формирует видение будущей фичи, разработчики могут влиять на продукт. Например, они могут сказать:\n* вот тут у нас есть селект, нам важно сделать так, чтобы он был доступен, чтобы любой пользователь смог выбрать корректно элемент\n* здесь у нас появляется всплывающее окно и три кнопки, давайте выделим эту кнопку как основную, тем самым стимулируем пользователя выполнить запланированное действие\n\nСценариев может быть немало. Если первый сценарий в примере про доступность интерфейсов, то второй больше про какие-то субъективные решения разработчика. Это решение обсуждают на встрече и принимают решение — попробовать, протестировать или не внедрять. \n\nЕсли идею решили внедрять, то ее важно верифицировать. Верификации происходят по разному. Это зависит от аудитории проекта, её объемов, вышел ли продукт на рынок или это только прототип.\n\nНазову пару наиболее популярных способов:\n* фокус-группы — берем N потенциальных пользователей продукта, показываем интерфейс(ы) просим выполнить действия. Следим за действиями. Здесь мы получаем не количественную метрику, но качественную\n* АБ-тесты. Количественная метрика, которая помогает решить, сработала ли выделенная кнопка, стали ли пользователи выполнять целевые действия лучше\n\nКак фронтенд-инженеру начать влиять на продукт? Интересуйтесь процессами в компании. Узнайте, как происходит «придумывание» и описание будущих фич. Кто отвечает за них, как распределяются роли в проекте. Все это называется product discovery — процесс, когда новая фича проходит этапы от «появилась идея» до «задача проработана и готова к разработке». Не зацикливайтесь только на product delivery этапах или, по-другому, на разработке.\n\nИ, конечно же, общайтесь со своими дизайнерами. Фронтендеры и дизайнеры выполняют общее дело — сделать так, чтобы пользователь мог выполнить свои задачи на сайте эффективно.\n\n**О сферах ответственности**\n\nОтвечают все сразу. Здесь самое важное — не стать лебедем, раком и щукой. Часто можно услышать: разработчик хочет сделать красивый код, дизайнер анимации и чтобы выглядело эффектно, а менеджер — чтобы было вчера. \n\nНа самом деле, это показатель зрелости коллектива. Разработчик должен понимать, зачем дизайнер добавляет для этой «выпадашки» анимацию (например, чтобы сфокусировать внимание пользователя, потому что на странице очень много элементов), дизайнер также может понять стремление разработчика все унифицировать. Они могут даже собраться вместе, обсудить проблемы и найти точки соприкосновения. Аналогично и с менеджером. Менеджеру нужен работающий продукт, которым пользуются. Эти специалисты могут идти на компромиссы:\n\n* сделать прототип, чтобы после выхода на рынок поправить техдолг\n* упростить некоторые интерфейсы, чтобы провести больше АБ тестов, развить удачные идеи\n\nВ зрелом коллективе команда принимает решения. UX не исключение. И важный момент в конце — разработчик должен видеть в дизайнере профессионала и доверять его действиям. Дизайнер — в разработчике. Разработчик и дизайнер в менеджере, менеджер в разработчике и дизайнере. Без доверия никакого «принимает решения» и «командной ответственности» не будет.\n\nЗдесь ещё можно заметить, что основным ответственным за проект всегда будет владелец продукта или владелец бизнеса. Потому что они отвечают за проект своей компанией, бюджетом. UX — важная часть продукта. Но сказать, что владелец продукта отвечает за UX, не совсем корректно. Если бы я был владельцем компании и отвечал за UX и все остальное, то зачем мне нанимать других специалистов? Они нанимаются для делегирования обязанностей и выполнения задач.\n\n**О субъективности и объективности UX**\n\nПосмотрите на UX сайтов 90-х или начала нулевых. Вы заметите большое количество экспериментов, так как «UX субъективен». Посмотреть можно [здесь](https://twitter.com/jsunderhood/status/1318936989555658752).\n\nСо временем эти эксперименты эволюционировали, интерфейс превратился в унифицированные детали. Так и для пользователей — несмотря на то, что современные сайты окрашены по-разному, основные паттерны у пользователя остаются неизменными.\n\nПомочь в оценке всегда могут качественные и количественные методы. Также обратите внимание на вот [это видео](https://youtu.be/GZGY0wPAnus). Внимание — это тоже пользовательский опыт.\n\n**О связи между пользовательским опытом и целевой аудиторией**\nНужно понимать свою аудиторию и проводить работу с ней, а не ориентироваться на абстрактные данные. Есть паттерны, которые справедливы для большинства пользователей, есть те, которые применимы для конкретной аудитории. В большинстве случаев поведение пользователя зависит от контекста.\n\n**Где и как прокачиваться в UX**\nНовичку — подружиться с своим дизайнером, общаться больше с менеджером и разобраться как и почему те или иные решения принимаются. Понимание продуктовой сферы приведет к пониманию аудитории.\n\nЗатем набраться опыта построения интерфейсов. Здесь — читать про best practices и применять их в компании. Построение интерфейсов и хорошее знание предметной области приведет к прокачке своих UX-навыков.\n\nТакже можно посоветовать подписаться на блоги и сайты известных дизайнеров, например Илью Бирмана, но я думаю, это довольно общий совет. Опыт, на мой взгляд, важнее.\n\nДля опытного специалиста совет будет аналогичным. Хороший специалист понимает что и каким образом он может сделать для компании, чтобы улучшить продукт, увеличить доходы. Несмотря на то, что он командный игрок, у него все еще есть автономность.\n\n**Об эксперте**\n\n[Ник Мостовой](https://xnim.ru/), член программного комитета HolyJs, спикер и ex-lead developer в [http://hh.ru](http://hh.ru/). [Twitter](https://twitter.com/xnimorz), [Telegram](https://t.me/xnimorz).\n\n## Ярослав Шуваев: лучшая практика — когда все отвечают за UX\n\n\n\n**О влиянии фронтендера на пользовательский опыт**\n\nНадо сказать, что есть несколько факторов, на которые может повлиять фронтенд-разработчик. Первый и самый основной: важную часть качества пользовательского опыта составляет техническая доступность и скорость программного обеспечения. То есть то, насколько быстро и стабильно работает программный продукт. Разработчик может прямо влиять на это, создавая оптимальные в плане скорости загрузки продукты, в плане распределения запросов внутри системы. То есть разработчик может делать так, чтобы каждый экран отправлял минимум запросов к базе данных. \n\n**О сферах ответственности**\n\nКонечно, основной фокус здесь падает на дизайн — это дизайнер внутри команды разработки. И второй фокус — это владелец продукта, который занимается развитием и отвечает за бизнес-результат. Но самая лучшая практика — когда все отвечают за UX, когда нет бутылочного горлышка. То есть когда все в команде имеют экспертизу в области UX, все заинтересованы в том, чтобы пользовательский опыт был максимально качественным, а продукт максимально жизнеспособным.\n\n**О субъективности и объективности UX**\n\nДа, с одной стороны может показаться, что пользовательский опыт — субъективное понятие. Но с другой стороны можно свести качество UX к неким метрикам. Например, к самым популярным метрикам относится время удовлетворения потребности пользователя. Можно даже сказать, что основной фактор, влияющий на качество пользовательского опыта — дофамин. Чем быстрее пользователь удовлетворяет потребность, тем больше дофамина она получает.\n\nЕсть дополнительный фактор: ресурсоёмкость, когнитивная нагрузка, которая падает на пользователя. Здесь уже играет роль не только время. Здесь считается энергоёмкость выполнения тех или иных задач. Здесь сложнее посчитать, нужно использовать более сложные вычисления. \n\nЭти два фактора позволяют достаточно точно измерить качество пользовательского опыта. \n\n**О связи между пользовательским опытом и целевой аудиторией**\n\nЧто касается поведенческих паттернов, то есть как люди привыкли видеть какой-то элемент — справа или слева, как раз здесь могут хорошо помочь разработчики. Потому что Android-разработчики, iOS-разработчики и так далее используют стандартные для операционной системы паттерны. Так они снимают с пользователя нагрузку, связанную с адаптацией к новым интерфейсам. Поэтому здесь можно сказать, что разработчик делает жизнь пользователя проще за счёт того, что применяет стандартные паттерны, которые понятны пользователю. \n\nКонечно, есть разные нюансы. Кто-то воспитывался в среде, где принято вешать логотип справа в верхнем углу. Но исследования показывают, что со временем большинство пользователей привыкает к стандартному паттерну. То есть на меньшинство не всегда стоит ориентироваться. Надо стараться сделать счастливыми максимальное количество пользователей. \n\n**Где и как прокачиваться в UX**\n\nПроектирование цифровых продуктов состоит из нескольких слоёв. Самый верхний — стиль продукта, визуальное оформление. Следующий слой — компоновка продукта, расположение элементов на экране. Третий слой — информационная архитектура, структура разделов и каталогов, различные фильтры. На четвёртом уровне — функциональность продукта. На пятом уровне стратегии, то есть на каком уровне какие проблемы решаются. На каждом уровне используются самые актуальные практики дизайна или, если по-русски, проектирования. У нас в UX Academy есть курс, который раскрывает эти практики для каждого уровня. Также есть есть [методичка или небольшой гайд](http://uxacademy.ru/guide), который позволяет пробежаться и узнать какие-то основные инструменты для каждого слоя. \n\n**Об эксперте**\n\n[Ярослав Шуваев](https://www.facebook.com/shuvaev), руководитель центра компетенций Внутренних Инноваций Ак Барс Цифровые Технологии, куратор курса UX&UI в BHSAD.\n\n## Что нужно знать о пользовательском опыте новичкам: рекомендации специалистов Хекслета\n\nПреподаватель вёрстки на Хекслете Никита Михайлов и фронтенд-разработчик Хекслета Роман Макаров в формате вопрос-ответ дали конкретные рекомендации новичкам об изучении UX и применении лучших практик в работе.\n\n### Никита Михайлов: вёрстка — воплощение дизайна в браузере или в мобильных приложениях\n\n\n\n**— Как вёрстка связана с пользовательским опытом, как она влияет на UX?**\n\n— По сути, вёрстка — воплощение дизайна в браузере или в мобильных приложениях. То есть это последний шаг перед тем, как пользователь увидит готовый продукт. На верстальщике висит задача не только перенести то, что нарисовал дизайнер. Он должен ещё и адаптировать дизайн под правильное использование. \n\nНапример, если речь идёт о формах, верстальщик должен следить, чтобы форма всегда была понятной. Чтобы не было ситуации, когда пользователь ввёл какое-то значение, потом удалил его и не может понять, а что это за поле. Это очень распространённая проблема, когда верстальщики используют плейсхолдер и больше ничего. А пользователи не могут понять, что нужно указать в каком-то поле. \n\nВерстальщик должен подписывать все элементы, чтобы обеспечить доступность. Когда мы говорим UX, то подразумеваем пользовательский опыт всех людей, включая людей с особенными потребностями. Для таких людей пользовательский опыт немного другой, а верстальщик должен хорошо знать эти отличия. Он должен понимать, как организовать интерфейс так, чтобы им было удобно пользоваться всем людям. \n\n**— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?**\n\n— На мой взгляд, это коллективная ответственность. Если делить зоны ответственности, можно попасть в ситуацию, когда каждый сделал как бы свою часть работы и забил на всё остальное. Но в процессе работы верстальщик может увидеть, что вот здесь неплохо что-то переделать. Распространённая ситуация — дизайнер работает на аутсорсе. В таких условиях верстальщику нужно что-то самому переделывать. А он может что-то неправильно интерпретировать. Поэтому все отделы должны взаимодействовать. \n\n**— Первое, что приходит в голову о взаимосвязи между вёрсткой и UX — адаптивность страниц. То есть верстальщик влияет на то, чтобы пользователю было удобно работать со страницей на любом экране. Можно ли выделить ключевые рекомендации, которые должен держать в уме верстальщик, когда создаёт адаптивную страницу?** \n\n— Первое: наверное, главное, что забывают начинающие специалисты — проверять страницу не только на тех разрешениях, которые дал дизайнер. У нас очень много разных устройств, пользователи по разному взаимодействуют с сайтом. Например, некоторые люди разбивают окно браузера на несколько частей. Если мы берём стандартные вещи, смотрим, чтобы у нас всё отображалось на 1280 пикселей, на 320, 540, но при этом забываем про другие пограничные состояния, это может привести к тому, что у части пользователей всё будет рушиться. Например, появятся очень большие карточки или очень мелкий текст, когда разрешение экрана позволяет сделать его больше. \n\nВторое: надо помнить, что мобильные устройства имеют две ориентации — вертикальную и горизонтальную. Часто верстают под вертикальную ориентацию, забывая про горизонтальную. В этом случае высота видимой области страницы становится ниже, чем необходимо. Это не очень удобно для пользователей, особенно если на странице есть плавающее меню. Оно может закрыть весь контент. \n\nТретье: надо помнить, что пользователи могут увеличивать страницу. Нужно проверять, чтобы на таких разрешениях вёрстка не разваливалась. То есть если мы сверстали страницу под определённую ширину, но не учли возможность масштабирования, работа не сделана. Желательно проверять на стандартных разрешениях хотя бы двукратное увеличение, смотреть, чтобы здесь всё корректно отображалось. \n\n**— Ещё один аспект, влияющий на пользовательский опыт — скорость загрузки. Что в этом контексте может сделать верстальщик? Можно прямо несколько рекомендаций.** \n\n— Первое: здесь от верстальщика зависит объём контента, который подгружается на страницу. Всегда нужно следить за размером страницы. Плохо, если на странице две или три картинки, которые весят по 12 Мбайт. Обязанность верстальщика — следить за размерами и оптимизацией изображений. Надо использовать сжатие. Если у изображения нет прозрачного фона, нет смысла держать её в png. Надо следить за размером файлов CSS и HTML, использовать минификацию. \n\nВторое: надо помнить, что обработка HTML — затратная операция для браузеров. Чем глубже вложенность блоков, тем дольше браузер этот код обрабатывает. Даже в Google PageSpeed есть показатель вложенности HTML. То есть надо делать простую вёрстку и не плодить вложенности. Чем чище и проще наш код, тем быстрее браузер его обработает и выведет результат на экран. Это справедливо даже при проблемах с сетью. \n\n**— Формы — отдельная тема, вокруг неё сломано много копий. Как ты считаешь, что может сделать верстальщик, чтобы с формами было удобно работать, чтобы у пользователя был позитивный опыт взаимодействия с ними?**\n\n— Внешний вид формы — это работа дизайнера. Но все в команде должны работать вместе. При разработке форм верстальщик должен помнить несколько вещей. \n\nПервое: подписи полей. Нельзя полностью рассчитывать на плейсхолдеры. Когда страница с формой загружается, благодаря плейсхолдеру пользователь видит, что требуется в конкретном поле. Но как только он начинает что-то вводить, плейсхолдер исчезает. Если стереть ввод, невозможно понять, о чём поле. Поэтому надо использовать лейбл. \n\nВторое: пользователю удобно, если поля сгруппированы. Не стоит давать пользователю поля сплошной массой. Если мы не делим поля на группы, в них легко запутаться. Стоит выделять группы заголовками. И при этом нельзя забывать про лейблы. \n\nТретье: если у нас есть огромная форма, не стоит сразу вываливать её на пользователя. Лучше дать возможность человеку заполнить часть формы, потом нажать кнопку «Далее» и показать следующую часть. Большое количество полей может отпугнуть пользователя. Он увидит, что надо заполнить 20 или 30 полей, и уйдёт. \n\nЧетвёртое: кнопки должны быть информативными. Если у нас есть кнопки «Отправить» или «Очистить», они не должны выглядеть одинаково. Пользователь должен легко отличать их по цвету. А если цвета будут семантичными, пользователю будет намного проще понять, что одна кнопка сбрасывает, а другая отправляет форму. \n\n**— Наверное, нельзя не упомянуть навигацию — как здесь верстальщик может позаботиться о хорошем пользовательском опыте?**\n\n— Первое: с точки зрения качества пользовательского опыта важно, чтобы все ссылки на странице были понятными. Не должно быть ситуации, когда ссылка похожа на текст. Часто в угоду дизайна удаляют подчёркивание. Но даже в этом случае ссылка должна отличаться от простого текста, пользователь должен видеть её. \n\nВторое: надо помнить про семантическую вёрстку, это прямая обязанность верстальщика. Хороший UX всегда построен на грамотной вёрстке, в том числе на семантической вёрстке. Разные устройства могут считывать информацию, ориентируясь на теги, которые мы использовали для вёрстки. Например, режим чтения в телефоне часто ориентируется на то, какие семантические теги мы использовали, в том числе теги навигации. \n\nТретье: верстальщик должен помнить, что у любой ссылки или кнопки должно быть несколько состояний. Задача верстальщика — сделать какое-то дефолтное поведение, даже если дизайнер этого не нарисовал. Например, если пользователь наводит курсор на ссылку, она должна меняться, должна показывать, что с ней взаимодействуют. Или когда пользователь использует фокус с помощью клавиатуры, ссылка должна реагировать на это. \n\nЧетвёртое: если у нас есть подменю, оно должно быть именно подменю. Нельзя его вываливать на пользователя всем списком. Плохо, если у нас в шапке сайта 50 ссылок, и по ним трудно понять, как они относятся друг к другу. Главное меню должно быть главным, то есть в нём нужно показывать основные разделы сайта. А подразделы лучше показывать на страницах основных разделов.\n\n**— Доступность — как она влияет на пользовательский опыт? Есть ли набор рекомендаций по улучшению доступности?**\n\nПервое: верстальщик должен проверять сайт, над которым работает. Например, попробовать пройти по сайту с помощью клавиатуры. Если здесь он может увидеть все интерактивные элементы, они все выделяются, это уже большой плюс. \n\nВторое: валидная семантическая вёрстка — это уже работа над доступностью. Поэтому всегда проверяйте сайт с помощью валидатора. Если он не находит ошибок, это ещё один плюс в копилку доступности. То есть это гарантирует, что многие скринридеры смогут правильно воспроизвести сайт. \n\nЧасто верстальщики используют неподходящие элементы. Например, вместо кнопки они используют простой `<div>`. Скринридеры не понимают, что этот элемент — кнопка. \n\nТретье: указывайте атрибуты `alt` у изображений. В этом атрибуте нужно указывать осмысленную информацию — описание картинки. Его «прочитает» незрячий пользователь, когда попадёт на эту картинку. Понятно, что `alt` «фото 123» ничем такому пользователю не поможет. \n\n**— Где можно прокачиваться верстальщику, как узнавать больше о вёрстке в контексте UX?**\n\n— Первое, что приходит в голову — Google. Потом идёт знаменитая книга Стивена Круга «Не заставляйте меня думать». Также нужно интересоваться дизайном, смотреть результаты исследований, не думать, что это чисто работа дизайнера.\n\nНужно читать книги о дизайне интерфейсов. Здесь я рекомендую «Бюро Горбунова». У них есть отличные книги на тему типографики, пользовательских интерфейсов. У них есть курсы дизайна.\n\nТакже рекомендую смотреть сайт [Awwwards](https://www.awwwards.com/). Здесь можно найти примеры отличных дизайнов и вёрсток. Наконец, отличная практика — изучать современные фреймворки, тот же [Bootstrap](https://ru.hexlet.io/courses/bootstrap_basic). Этот фреймворк очень популярный, а его компоненты сделаны с учётом лучших практик UX. \n\n\n> Начните изучать разработку с бесплатного курса [«Основы современной вёрстки»](https://ru.hexlet.io/courses/layout-designer-basics). Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.\n\n### Роман Макаров: разработчик должен ставить себя на место пользователей и проверять интерфейсы\n\n\n\n**— Как фронтенд-программист влияет на UX?**\n\n— С одной стороны, фронтенд-разработчик должен выполнять поставленные техзадания, а эти задания ставят люди, которые разбираются в UX. С другой стороны, есть базовые вещи, которые фронтенд-разработчик должен знать и по умолчанию делать какие-то вещи удобными для пользователей. \n\n**— То есть фронтендер делает то, что уже спроектировали дизайнеры?**\n\n— Даже не дизайнеры, а специалисты по пользовательскому опыту. Также есть аналитики, бизнес-аналитики, которые могут подсказать, как совместить видение фронтендера с интересами бизнеса. \n\n**— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?**\n\n— Каждый из упомянутых специалистов отвечает за достаточно широкий фронт работ. Иногда люди выполняют смежные задачи. Например, у нас на проекте нет UX-дизайнера, поэтому мы работаем в связке: фронтенд-программист, верстальщик и ребята от бизнеса. \n\n**— Наверное, стоит начать с форм: можно ли дать несколько конкретных рекомендаций по проектированию форм? Как фронтенд-программист может здесь улучшить пользовательский опыт?** \n\n— Форма — сложный компонент веб-страницы, она объединяет сразу несколько интерактивных элементов. Здесь могут быть кнопки, радиокнопки, чекбоксы, текстовые инпуты, селекты и так далее. Наверное, самое большое число интерактивных элементов приходится на форму. \n\nПервое: интерфейс должен вести себя предсказуемо, он не должен удивлять пользователя. Поэтому важно самому проверять интерфейсы, которые вы разрабатываете. Надо спрашивать себя, удобно ли пользоваться этой формой, предсказуемо ли она работает. \n\nВторое: если в форме есть обязательные поля, их надо обозначать как обязательные.\n\nТретье: должна быть стратегия валидации формы. Например, у новичков часто встречается ошибка — они начинают валидировать форму до момента, когда пользователь покинул поля или когда он нажал кнопку «Отправить». В этом случае пользователь вводит первый символ, а ему сразу показывается сообщение о невалидной информации, так как минимальное число символов в поле 20. С моей точки зрения, это удивляет пользователя: он только начал писать, а ему уже показывается красная плашка. \n\nЧетвёртое: если форма невалидная, у пользователя не должно быть возможности отправить её на сервер. Это можно реализовать с помощью заблокированной кнопки отправки. Также интерфейс должен подсказывать пользователю, какие поля невалидные.\n\nНапример, у нас в четвёртом проекте достаточно простой интерфейс. В нём есть однотипные модальные окна и текстовое поле для отправки сообщений. Но новички делают достаточно много ошибок даже на этом минимуме элементов. Например, часто не блокируется кнопка при асинхронных действиях, когда что-то отправляется на сервер. \n\n**— Скорость загрузки страниц — один из важных факторов, влияющих на пользовательский опыт. Даже поисковики учитывают его при ранжировании страниц. Как фронтенд-программист может повлиять на этот фактор? Есть какой-то набор рекомендаций, которые можно считать универсальными?**\n\n— Тут важно понимать, что это не прихоть поисковых систем. Люди хотят, чтобы сайт загружался максимально быстро. Поисковые системы ориентируются на желания пользователей, поэтому учитывают скорость загрузки при ранжировании сайтов. \n\nПервое: нужно уметь загружать контент прогрессивно. То есть важные вещи должны загружаться сразу, менее важные можно отложить на потом. Для решения этой задачи есть разные приёмы. Например, мы можем в первую очередь загружать ресурсы, которые находятся в верхней части экрана, чтобы пользователь имел возможность с ними взаимодействовать.\n\nВторое: можно загружать картинки в разном качестве или ставить на место картинок заглушки. Это выглядит так: страница загружается, все блоки уже находятся на своих местах. Благодаря этому нет визуального сдвига. Элемент, с которым собирался взаимодействовать пользователь, не будет перемещаться по экрану. \n\nТретье: надо следить за бандлом, смотреть, всё ли там сжимается и оптимизируется. Благо, [современные сборщики фронтенда позволяют это делать](https://guides.hexlet.io/webpack/).\n\n**— Можно сказать, что здесь тесно переплетается вёрстка и программирование?**\n\n— Есть правила для верстальщиков, они верстают страницы так, чтобы не было этого сдвига. Например, указывают размеры картинок. Браузер в первую очередь получает разметку. И если она выполнена правильно, браузер понимает, где находятся блоки и какие у них размеры. \n\n**— Визуализация состояние элементов интерфейса — ещё один важный фактор, влияющий на UX. Может ли здесь быть набор универсальных рекомендаций? Например, выделять активные элементы, отмечать задизейбленные и так далее?**\n\n— Да, конечно, за этим нужно следить. Я всегда прошу студентов ставить себя на место пользователей и смотреть, явно ли здесь показано, что кнопка задизейбленная? Понятно ли по состоянию поля, что оно обязательное и без него невозможно отправить форму? Встречается ситуация, когда форма не отправляется, но пользователь не может понять, почему. Это происходит из-за того, что нет сообщений об ошибках или эти сообщения неинформативные. \n\n**— Баги в интерфейсах крайне негативно влияют на пользовательский опыт. Есть какие-то рекомендации по их предупреждению, мониторингу, устранению?** \n\n— Обработка ошибок — [очень важная тема](https://ru.hexlet.io/blog/posts/kak-pravilno-obrabatyvat-oshibki-vo-frontend-prilozheniyah). Первая рекомендация: используйте Rollbar или другие системы логирования. Они нужны, чтобы мы узнавали об ошибках не от пользователей, а самостоятельно. \n\n**— А как должно приложение реагировать на ошибки?**\n\n— В веб-разработке всегда возможны ошибки. Это могут быть ошибки в приложении или внешние ошибки, например, упавшая сеть, повисший сервер. \n\nПервая рекомендация: пользователь должен знать, что произошла ошибка, для него ситуация должна быть понятной. \n\nВторая рекомендация: мы должны показать возможные варианты устранения ошибки. Например, предложить пользователю перезагрузить страницу или проверить работоспособность сети или сообщить, когда сеть появится. То есть пользователь должен видеть, что соединение пропало или что оно восстановилось.\n\nТретья рекомендация связана с внутренними ошибками приложения. Мы должны максимально рано показывать пользователю, что произошла ошибка, что что-то сломалось, мы об этом знаем и мы исправим ошибку. \n\n::posts\n\n**— Где можно прокачаться фронтенд-программисту, чтобы лучше понимать пользовательский опыт и знать, как влиять на UX?**\n\n— У нас на Хекслете есть [список рекомендуемых книг](https://ru.hexlet.io/pages/recommended-books). Там есть книга Стивена Круга «Не заставляйте меня думать», советую её прочитать, это классика. Также каждый разработчик должен ставить себя на место пользователей и проверять интерфейсы. Полезно пользоваться инструментами, которые помогают по-настоящему посмотреть на сайт глазами пользователя. Например, полезно заглядывать в «Вебвизор».\n\n## Фронтенд-разработчик активно влияет на пользовательский опыт вместе с другими членами команды\n\nТакой вывод можно сделать по итогам беседы с экспертами. Опытные специалисты рекомендуют новичкам самим пользоваться интерфейсами, которые они проектируют, и ставить себя на место пользователей. Также фронтендеру нужно интересоваться дизайном и думать о продукте, а не только о коде. \n\n\n> Хотите стать фронтенд-разработчиком, научиться строить классные интерфейсы и влиять на UX? Обратите внимание на профессию [«Фронтенд-программист»](https://ru.hexlet.io/professions/frontend). Обучение можно пройти в группе под руководством опытного наставника.","reading_time":21,"url":"https://ru.hexlet.io/blog/posts/ux-for-frontenders","cover_thumb_variant":null,"cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp","cover_main_variant":"/vite/assets/blog_post-7eTyeLLt.webp","related_stacks_count":5},"relatedPosts":[{"model_name":"BlogPost","id":1116,"title":"Лайв-кодинг, совместное решение задач, поддержка друг друга: как устроено групповое обучение программированию на Хекслете","slug":"group-training","summary":"На Хекслете существует несколько форматов обучения, один из них — «Групповой», в котором студенты учатся программированию не в одиночку, а с другими начинающими разработчиками под руководством опытного наставника. Подробно рассказываем, как устроено групповое обучение на Хекслете и что оно дает.","created_at":"2020-11-19T08:52:11.759Z","published_at":"2023-03-09T11:00:49.359Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"},{"model_name":"BlogPost","id":420,"title":"50 лучших фильмов и сериалов о технологиях","slug":"filmoteka-dlya-programmistov-25-filmov-o-programmirovanii-tehnologiyah-i-iskusstvennom-intellekte","summary":"Сделали подборку фильмов о технологиях, программировании, искусственном интеллекте и роботах.","created_at":"2019-07-30T13:04:28.309Z","published_at":"2022-12-30T12:14:16.059Z","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTY5OSwicHVyIjoiYmxvYl9pZCJ9fQ==--ecd38e914c68debadef03c88a60804b37146e5b5/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D1%8B%20IT-01.png"},{"model_name":"BlogPost","id":694,"title":"8 книг, которые помогут вам в жизни и в работе: советует комьюнити-менеджер Хекслета Наталья Мусина","slug":"marketolog-heksleta-natalya-musina-8-knig-kotorye-pomogut-vam-v-zhizni-i-v-rabote","summary":"Комьюнити-менеджер Хекслета Наталья Мусина делится подборкой своих любимых книг, которые помогают расширять кругозор.","created_at":"2020-02-12T14:19:01.136Z","published_at":"2022-12-29T12:48:31.067Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"}],"category":{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},"mainStackCategory":{"id":2,"name":"Курсы по веб-разработке","slug":"web_development","short_name":"Веб-разработка","order":190,"state":"published","category_slug":"courses_web_development"},"categories":[{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},{"id":3,"name":"Истории успеха","slug":"success","state":"published","created_at":"2016-07-30T12:57:18.308Z"},{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"}],"relatedLandings":[{"stack":{"id":12,"slug":"frontend","title":"Фронтенд-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":20,"duration_in_months":10},"id":17,"slug":"frontend","title":"Фронтенд-разработчик","subtitle":"Изучите HTML, CSS, JavaScript и React","subtitle_for_lists":"Изучите HTML, CSS, JavaScript и React","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"frontend","price_text":"от 6 792 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"},{"stack":{"id":19,"slug":"layout-designer","title":"Профессиональная верстка","audience":"for_beginners","start_type":"anytime","pricing_model":"purchase","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1700,"duration_in_months":5},"id":26,"slug":"professional-layout","title":"Профессиональная верстка","subtitle":"Навык адаптивной вёрстки с современными подходами для корректного отображения сайтов на любых устройствах и разрешениях","subtitle_for_lists":"Адаптивная вёрстка для отображения на любых устройствах ","locale":"ru","current":true,"duration_in_months_text":"5 месяцев","stack_slug":"layout-designer","price_text":"от 3 900 ₽","duration_text":"5 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png"},{"stack":{"id":23,"slug":"js-react-development","title":"React","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":350,"duration_in_months":2},"id":34,"slug":"js-react-developer","title":"React","subtitle":"Навык разрабатывать быстрые и удобные интерфейсы, открывающий доступ к интересным вакансиям в крупных компаниях","subtitle_for_lists":"Освоите React и создание быстрых интерфейсов","locale":"ru","current":true,"duration_in_months_text":"2 месяца","stack_slug":"js-react-development","price_text":"от 3 900 ₽","duration_text":"2 месяца","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDA0OSwicHVyIjoiYmxvYl9pZCJ9fQ==--a6531362dd1f3afb65f5b269e1a23113df7171b1/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Devices-amico.png"},{"stack":{"id":41,"slug":"layout-designer-positioning","title":"Позиционирование в CSS","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":4800,"duration_in_months":1},"id":70,"slug":"layout-designer-positioning","title":"Позиционирование в CSS","subtitle":"Навык разработки адаптивных интерфейсов, позволяющий создавать удобные и функциональные решения для различных устройств","subtitle_for_lists":"Получите навык работы с CSS и адаптивными интерфейсами","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"layout-designer-positioning","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png"},{"stack":{"id":114,"slug":"css-animation","title":"Анимация CSS","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":2900,"duration_in_months":1},"id":185,"slug":"css-animation","title":"Анимация CSS","subtitle":"Анимации в вебе: как использовать CSS и JavaScript для создания плавных эффектов","subtitle_for_lists":"Освоите CSS-анимации для улучшения UX","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"css-animation","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png"}]},"url":"/blog/posts/ux-for-frontenders","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","author":"Дмитрий Дементий","name":"Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении","datePublished":"2020-12-18T08:39:28.424Z","headline":"Как именно фронтендер влияет на пользовательский опыт? На что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX? Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта. Специалисты ответили на вопросы и дали конкретные рекомендации начинающим фронтендерам. \r\n","image":"/vite/assets/blog_post-7eTyeLLt.webp","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":15}]}</script><div style="--container-size:var(--container-size-lg);margin-top:var(--mantine-spacing-xl);height:100%" class="m_7485cace mantine-Container-root" data-size="lg" data-strategy="block"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"position":1,"@type":"ListItem","item":{"@id":"/blog","name":"Блог Хекслета"}},{"position":2,"@type":"ListItem","item":{"@id":"/blog/categories/motivation","name":"Мотивация"}},{"position":3,"@type":"ListItem","item":{"@id":"/blog/posts/ux-for-frontenders","name":"Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении"}}]}</script><div style="margin-bottom:var(--mantine-spacing-xs)" class="m_8b3717df mantine-Breadcrumbs-root"><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/"><div style="color:inherit" class="m_4451eb3a mantine-Center-root"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-home-link "><path d="M20.085 11.085l-8.085 -8.085l-9 9h2v7a2 2 0 0 0 2 2h4.5"></path><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 1.807 1.143"></path><path d="M20 21a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M20 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M15 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M21 16l-5 3l5 2"></path></svg></div></a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog">Блог Хекслета</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog/categories/motivation">Мотивация</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><p style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:var(--mantine-color-dimmed)" class="mantine-focus-auto m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root" data-size="sm">Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении</p></div><style data-mantine-styles="inline">.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}@media(min-width: 36em){.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}}</style><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root __m__-_R_eub_"><style data-mantine-styles="inline">.__m__-_R_deub_{width:100%;}@media(min-width: 36em){.__m__-_R_deub_{width:70%;}}@media(min-width: 75em){.__m__-_R_deub_{width:75%;}}</style><div class="__m__-_R_deub_"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size)" class="m_8a5d1357 mantine-Title-root" data-order="1">Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении</h1></div></div></div><div style="position:absolute;top:calc(18.75rem * var(--mantine-scale))" class=""></div><style data-mantine-styles="inline">.__m__-_R_2iub_{--grid-gutter:var(--mantine-spacing-xl);}</style><div class="m_410352e9 mantine-Grid-root __m__-_R_2iub_"><div class="m_dee7bd2f mantine-Grid-inner"><style data-mantine-styles="inline">.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}@media(min-width: 62em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:66.66666666666667%;--col-max-width:66.66666666666667%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_dmiub_"><div style="--stack-gap:var(--mantine-spacing-md);--stack-align:stretch;--stack-justify:flex-start;margin-bottom:var(--mantine-spacing-xl)" class="m_6d731127 mantine-Stack-root"><div class=""><div style="--group-gap:var(--mantine-spacing-xs);--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-xl)" class="m_4081bf90 mantine-Group-root"><button style="--badge-height:var(--badge-height-sm);--badge-padding-x:var(--badge-padding-x-sm);--badge-fz:var(--badge-fz-sm);--badge-bg:var(--mantine-color-default);--badge-color:var(--mantine-color-default-color);--badge-bd:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);cursor:pointer;color:inherit" class="m_347db0ec mantine-Badge-root" data-variant="default" data-size="sm" type="button" aria-label="Фронтенд"><span class="m_5add502a mantine-Badge-label">Фронтенд</span></button></div><div style="--group-gap:calc(0.625rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-sm);color:var(--mantine-color-gray-text)" class="m_4081bf90 mantine-Group-root"><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-inline-end:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root">18 декабря 2020 г.</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-clock "><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M12 7v5l3 3"></path></svg></div>21 минута</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div>15</div></div><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img style="--image-radius:var(--mantine-radius-md);--image-object-fit:cover;width:100%;height:100%" class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" alt="Что фронтендер должен знать про UX и зачем прокачиваться в этом направлении"/></div></div><div role="link" tabindex="0" style="cursor:pointer"><button style="display:block;width:100%" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Присоединяйтесь к нашему Telegram-сообществу"><div style="background-color:light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-6))" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:auto;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-brand-telegram "><path d="M15 10l-4 4l6 6l4 -16l-18 7l4 2l2 6l3 -4"></path></svg></div>Присоединяйтесь к нашему Telegram-сообществу</div></div></button></div><div style="margin-bottom:var(--mantine-spacing-xl)" class="m_d08caa0 mantine-Typography-root"><p>Фронтенд-разработчик должен заботиться о UX. Но не все специалисты представляют, как именно фронтендер влияет на пользовательский опыт, на что нужно обращать внимание во время работы над проектом и что нужно изучать, чтобы лучше понимать UX. Чтобы разобраться в этих вопросах, пригласили опытных экспертов в области фронтенд-разработки и пользовательского опыта. Специалисты ответили на вопросы и дали конкретные рекомендации начинающим фронтендерам.</p>
<blockquote>
<p>UX (англ. User Experience, пользовательский опыт) — восприятие пользователем взаимодействия с продуктом, системой или сервисом. Пользовательский опыт включает эмоции, предпочтения, физические, эмоциональные и поведенческие реакции, которые происходят до, во время и после взаимодействия пользователя с продуктом. <em>Определение <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.iso.org/obp/ui/#iso:std:iso:9241:-210:ed-1:v1:en" rel="noopener noreferrer" target="_blank">ISO 9241-210</a></em></p><div></div><em> Ergonomics of human-system interaction.</em><p></p>
</blockquote>
<style data-mantine-styles="inline">.__m__-_R_5derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_5derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_5derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/frontend?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Фронтенд-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите HTML, CSS, JavaScript и React</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png" alt="Фронтенд-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/professional-layout?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">5 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Профессиональная верстка</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Адаптивная вёрстка для отображения на любых устройствах </p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png" alt="Профессиональная верстка" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/js-react-developer?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">2 месяца</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">React</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Освоите React и создание быстрых интерфейсов</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDA0OSwicHVyIjoiYmxvYl9pZCJ9fQ==--a6531362dd1f3afb65f5b269e1a23113df7171b1/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Devices-amico.png" alt="React" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/layout-designer-positioning?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Позиционирование в CSS</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Получите навык работы с CSS и адаптивными интерфейсами</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png" alt="Позиционирование в CSS" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/css-animation?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Анимация CSS</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Освоите CSS-анимации для улучшения UX</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png" alt="Анимация CSS" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div>
<h2 id="heading-2-1">Содержание</h2>
<ul>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-2">Эксперты о пользовательском опыте</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-6">Ник Мостовой: разработчик отвечает не за код, а за продукт</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-7">Ярослав Шуваев: лучшая практика — когда все отвечают за UX</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-8">Что нужно знать о пользовательском опыте новичкам: рекомендации специалистов Хекслета</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-11">Фронтенд-разработчик активно влияет на пользовательский опыт вместе с другими членами команды</a></li>
</ul>
<h2 id="heading-2-2">Эксперты о пользовательском опыте</h2>
<p>О работе с UX читателям блога Хекслета рассказали известные в отрасли экспертов: фронтенд-разработчики и UX-дизайнеры. Специалисты ответили на несколько вопросов:</p>
<ol>
<li>UX (user experience, пользовательский опыт) — широкое понятие. На пользовательский опыт влияет огромное количество факторов. Например, если речь идёт об интернет-магазине, на UX влияет ассортимент товаров, цены, скорость реакции службы поддержки, работа службы доставки и так далее. Может ли фронтенд-разработчик тоже влиять на UX? Если да, как это происходит?</li>
<li>Если на пользовательский опыт влияют абсолютно разные факторы — от ассортимента и цены товаров до интерфейсов и скорости загрузки сайта, кто в целом отвечает за UX? Фронтендер? UX-дизайнер? UI-дизайнер? Продуктовый дизайнер? Менеджер продукта? Может, топ или владелец бизнеса?</li>
<li>UX — пользовательский опыт. Как вы считаете, можно ли сказать, что опыт — субъективное понятие? Кому-то удобно, когда сайдбар находится слева, кому-то — справа. Как можно объективно улучшить UX, если опыт субъективен?</li>
<li>Как вы считаете, для проектирования классных интерфейсов, которые обеспечивают отличный UX, достаточно пользоваться какими-то рекомендациями, обобщёнными результатами исследований, закономерностями? Или при разработке каждого конкретного проекта надо интересоваться у пользователей этого проекта, пытаться понять, как та или иная фича влияет на их UX? Ведь, например, у сайтов пенсионного фонда и интернет-магазина для юных альпинистов разная аудитория.</li>
<li>Что фронтенд-разработчику нужно знать о UX? Что бы вы порекомендовали новичку изучить по этой теме в первый месяц работы? А где можно прокачаться не новичкам, а более или менее опытным специалистам?</li>
</ol>
<h3 id="heading-3-3">Андрей Ситник: фронтендер — последний рубеж, который может остановить дизайн-ошибку</h3>
<p><strong>О влиянии фронтендера на пользовательский опыт</strong></p>
<p>С ходу приходят в голову следующие вещи:</p>
<ul>
<li>Скорость загрузки</li>
<li>Фризы UI по мере работы приложения (в отличие от скорости загрузки этой теме отводится слишком мало внимания в нашем сообществе)</li>
<li>Интеграция с ОС и другими сервисами (например, поддержка Chromecast в видео-сервисе)</li>
<li>Возможность быстро работать с приложением с помощью клавиатуры для постоянных клиентов</li>
<li>Автозавершение полей и поддержка менеджерой паролей</li>
</ul>
<p>Но гораздо важнее другое. Любой человек в команде ошибается. Отдел дизайна и продукт-менеджмента тоже. Им сложно заметить ошибки в дизайне, пока новый дизайн сделан в виде картинок, а не реального приложения.</p>
<p>Фронтендер — последний рубеж, который может остановить дизайн-ошибку. С одной стороны он, в отличие от дизайнера, видит все возможные состояния приложения. Например, в списке друзей может быть ситуация, когда пользователь только зарегистрировался, и его список будет пустым. В этом случае вывести «у вас нет друзей» будет ошибкой. Надо использовать этот экран для объяснения социальных взаимодействий в продукте.</p>
<p>С другой стороны, вы первый человек, который по-настоящему взаимодействует с дизайном. Вы видите, что какие-то кнопки неудобно нажимать на телефоне. Что какие-то дизайн-идеи неочевидные.</p>
<p>Возможность сказать, что у нас тут ошибка в дизайне, как мне кажется, — самое важное влияние фронтенд-команды на UX.</p>
<p><strong>О сферах ответственности</strong></p>
<p>Нет одного универсального UX, чтобы кто-то был за него ответственным. Точно так же нет одного UX, у каждого пользователя свой опыт.</p>
<p>Я считаю, что на фронтенд-команде лежит ответственность за опыт взаимодействия с интерфейсом. Если что-то не понятно — это потому что мы не сказали нет дизайнеру. Если что-то на странице тормозит или медленно грузится — это наши неправильные технически решения.</p>
<p>Если сайт не работает в популярных экосистемах, например, менеджер паролей не заполняет форму — это тоже ответственность фронтендера.</p>
<p><strong>О субъективности и объективности UX</strong></p>
<p>Верно, UX — не область естественных наук. Часть вещей можно свести к строгим сравнительным характеристикам — скорость загрузки к метрикам Lighthouse, производительность UI к длине фриза и количеству FPS, удобство к количеству кликов.</p>
<p>Но ту же понятность нельзя выразить такими метриками. Да и метрики в целом не всегда отражают реальность. Тот же вынос кода в параллельный поток Web Worker по факту снижает время выполнения задачи — но повышает субъективное ощущение от тормозов приложения.</p>
<p>Но человечество не в первый раз сталкивается с необходимостью работы с субъективными характеристиками. Для этого есть целый набор наук, которые мы называем гуманитарными. Читайте больше про гуманитарные науки и их методы.</p>
<p><strong>О связи между пользовательским опытом и целевой аудиторией</strong></p>
<p>Тут всё как с оптимизацией — она должна строится на профилировании, а не советах типа «двойные кавычки медленнее одинарных».</p>
<p>Рекомендации и советы тоже важны, но они по-другому работают. Это не ответы. Но они создают у вас интуицию, которая позволяет предугадать, где источник проблемы (но он может быть не там).</p>
<p>Самый лучший способ — дайте приложение друзьям, попросите что-то делать и смотрите как они им пользуются.</p>
<p>Для тестов производительности, купите старый дешёвый китайский андроид-телефон.
Отойдите туда, где плохая связь (в Питере я спускаюсь в метро) и попробуйте попользоваться вашим сайтом.</p>
<p><strong>Где и как прокачиваться в UX</strong></p>
<p>Я сам фанат клипового мышления. Поэтому я просто стараюсь погружаться в сообщество — читать больше соцсетей и блогов дизайнеров.</p>
<p><strong>Об эксперте</strong></p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://sitnik.ru/ru/" rel="noopener noreferrer" target="_blank">Андрей Ситник</a>, ведущий фронтендер <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://evilmartians.com/" rel="noopener noreferrer" target="_blank">Злых марсиан</a>, автор Автопрефиксера, PostCSS и Логакса.</p>
<h3 id="heading-3-4">Никита Дубко: фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся</h3>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/0Q4xUyX.jpg" alt="фото Никиты Дубко" loading="lazy"/></p>
<p><strong>О влиянии фронтендера на пользовательский опыт</strong></p>
<p>UX — это то, как быстро и с каким эмоциями пользователь решит задачу, которую хочет решить. Когда мы говорим о веб-сайтах, то именно фронтенд-разработчик может сделать так, чтобы клиент не только не решил свою задачу, но и никогда больше на этот сайт не вернулся. Справедливо и обратное: если разработчик задумается о том, чтобы обеспечить клиенту комфорт на сайте в виде удобного незабагованного интерфейса, уместного управления с клавиатуры, производительных анимаций, почти моментальной загрузки и плавных переходов между страницами — клиент обязательно вернётся и друзей приведёт.</p>
<p><strong>О сферах ответственности</strong></p>
<p>Мне кажется, за пользовательский опыт отвечает вся команда. Задача команды — обеспечить рост бизнесу. Рост возможен, когда клиент доволен. Поэтому очень круто, когда дизайнер старается продумать путь клиента по сайту до достижения цели, обсуждает это с разработчиками, спрашивает, смогут ли они такое реализовать, уточняет у продакт-оунера, действительно ли новая фича приносит пользу, а не тешит самолюбие автора идеи, и так далее. Фронтендер, как то звено, которое ближе всех к конечному пользователю, должен влиять на продукт, на его дизайн и будущую функциональность как минимум через общение внутри команды и донесение своих аргументов и идей.</p>
<p><strong>О субъективности и объективности UX</strong></p>
<p>Про субъективность правда. Никогда не получится сделать продукт, который будет нравится абсолютно всем. Тот же крестик для закрытия окна в Windows изначально вообще был не крестиком, а квадратиком с полоской и находился в левом углу, а на яблочных системах — кружочек в левом. Важная функция, важный элемент интерфейса, а общего мнения до сих пор нет.</p>
<p>Нужно наблюдать за своей целевой аудиторией. Если есть возможность — опрашивать и проводить исследования интерфейсов с живыми людьми, задавать им вопросы в процессе. Виталий Фридман из Smashing Magazine делился таким опытом на своих мастер-классах, и такие исследовательские сессии порой рождают абсолютно неочевидные идеи, которые помогают сделать ваш интерфейс лучше. Скорее всего, вы можете себе позволить проводить AB-тестирование и смотреть влияние правок на продуктовые метрики. На худой конец можно посмотреть в какой-нибудь Яндекс.Метрике реальные пользовательские сессии и глазами увидеть, какие операции на сайте реально вызывают сложности.</p>
<p>Ключевая идея — замерять эффекты на большой аудитории и принимать решения по результатам замеров. То есть не насаждать пользователю добро, потому что вы так субъективно решили по своему опыту, а проверить, действительно ли вы приносите пользователю и продукту добро.</p>
<p><strong>О связи между пользовательским опытом и целевой аудиторией</strong></p>
<p>Вопрос, в котором скрыт ответ. Когда проект только начинается, вы ещё не знаете свою аудиторию, у вас есть только догадки о том, какая она будет. В этот момент вполне нормально опираться на уже существующие исследования. Скорее всего, если вы будете использовать хорошие практики, вроде быстрой загрузки, доступности, экономии трафика, семантичной вёрстки, адаптивности и прочих — вы уже сделаете неплохой задел для продуктовых улучшений без оглядки на базовые вещи. Дальше, с ростом продукта, нужно более серьёзно изучать целевую аудиторию и подстраиваться под её требования. Вряд ли клиент попросит сделать сайт медленным, скорее — добавить новую функциональность.</p>
<p><strong>Где и как прокачиваться в UX</strong></p>
<p>Рано или поздно разработчик становится пользователем. Поэтому главное правило — делать так, чтобы самому себе было удобно и приятно пользоваться результатами своего труда. Любой дискомфорт — сигнал, что можно сделать лучше.</p>
<p>Новичку в первые месяцы работы всё же советую прокачивать базовые знания и набивать руку. UX ближе к психологии, чем к технологиям, мне кажется, поэтому постепенно это знание будет приходить на основе опыта и набитых шишек.</p>
<p>Я сам беру многое из пабликов «Веб-стандарты» и For Web, сайтов Smashing Magazine, A List Apart, подписываюсь в твиттере на интересных мне разработчиков и слежу за их публикациями. На YouTube есть немало записей с конференций дизайнеров, оттуда можно почерпнуть полезные знания из иногда чуждого разработчику мира — полезно посмотреть на свою работу с другого ракурса.</p>
<p><strong>Об эксперте</strong></p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/dark_mefody" rel="noopener noreferrer" target="_blank">Никита Дубко</a>, разработчик интерфейсов в Яндексе, ведущий <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/webstandards_ru" rel="noopener noreferrer" target="_blank">подкаста «Веб-стандарты»</a>.</p>
<blockquote>
<p>Эксперты Nielsen Norman Group говорят, что не стоит путать UX и юзабилити. По <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.nngroup.com/articles/definition-user-experience/#:~:text=Summary%3A%20%22User%20experience%22%20encompasses,its%20services%2C%20and%20its%20products." rel="noopener noreferrer" target="_blank">их данным</a>, юзабилити — качественная характеристика пользовательского интерфейса, которая показывает, насколько легко, эффективно, приятно пользоваться системой. То есть UX — более широкое понятие, а юзабилити — его часть.</p>
</blockquote>
<h3 id="heading-3-5">Наталия Короткова: надо учитывать, что мнение пользователей может быть ошибочным</h3>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/bDvkZDb.jpg" alt="фото Наталии Коротковой" loading="lazy"/></p>
<p><strong>О влиянии фронтендера на пользовательский опыт</strong></p>
<p>Фронтенд-разработчик влияет на UX через элементы пользовательского интерфейса, различные их состояния, навигацию, интерактивность и производительность страницы.</p>
<p><strong>О сферах ответственности</strong></p>
<p>За UX отвечает продуктовый дизайнер. Иногда такой роли нет, и она распределена между другими членами команды. В любом случае, это коллективная работа и ответственность. Фронтенд-разработчик создает пользовательский опыт на основе известных ему UI-паттернов, затем продуктовый дизайнер проводит исследования и предлагает улучшения.</p>
<p>Разработчик, как узкий специалист, может подсказать проблемные места в предстоящей реализации идеи, поэтому результат зависит от правильно выстроенной коммуникации.
Я думаю, что ценообразование и ассортимент регулируются экономикой проекта и не относятся к факторам UX.</p>
<p><strong>О субъективности и объективности UX</strong></p>
<p>Один из способов принять решение объективно — запустить A/B тест. Всем не угодишь, но цифры наглядно покажут какой вариант эффективнее. Есть и другие интересные способы, например eye-tracking тестирование, которое расскажет многое о перемещении пользователя по странице.</p>
<p><strong>О связи между пользовательским опытом и целевой аудиторией</strong></p>
<p>Конечно нужно интересоваться у пользователей. Однако надо учитывать, что мнение пользователей может быть ошибочным. Нередки ситуации, когда люди очень просят что-то, но когда получают, продукт перестает им нравиться. Хороший UX строится на фундаменте из общеизвестных принципов и исследовании конкурентов, а после улучшается с помощью данных полученных от реальной аудитории. Это включает в себя не только опросы людей, но и аналитику их поведения из различных инструментов, опыт и интуицию UX специалиста.</p>
<p><strong>Где и как прокачиваться в UX</strong></p>
<p>Советую обратить внимание на метрики страницы (Web Vitals, аудит в Lighthouse), производительность анимаций, доступность и дизайн-системы. Новичку рекомендую начать с изучения популярных UI-библиотек, обращая внимание на набор компонентов, типографические стили и анимации.</p>
<p>Прокачиваться можно, анализируя решения в продуктах конкурентов, читая разборы типичных UX ошибок, а также через нетворкинг с UX-специалистами. Опытным можно поэкспериментировать на личном проекте, чтобы попрактиковаться и, возможно, заработать миллиард долларов.</p>
<p><strong>Об эксперте</strong></p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/NatKaratkova" rel="noopener noreferrer" target="_blank">Наталия Короткова</a>, Senior Frontend Developer.</p>
<h2 id="heading-2-6">Ник Мостовой: разработчик отвечает не за код, а за продукт</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/izVr7Q8.jpg" alt="фото Ника Мостового" loading="lazy"/></p>
<p><strong>О влиянии фронтендера на пользовательский опыт</strong></p>
<p>Сила влияния разработчика на UX часто зависит от компании. Где-то это ярко выражено, где-то меньше. Разработчик отвечает не за код, а за продукт. То есть он смотрит, как продукт развивается, насколько легко вносить изменения или что-то добавлять в него. Разработчик, конечно же, может предлагать и обсуждать решения. Продукт — это то, что трогает пользователь, что приносит деньги компании. Код в данном случае вторичен.
Фронтенд-инженеры обычно «качаются» в нескольких направлениях. Они:</p>
<ul>
<li>могут писать код</li>
<li>понимают, как работают интерфейсы, a11y и так далее</li>
<li>общаются с заказчиками, менеджерами, дизайнерами, уточняют требования к продукту, описывают user stories</li>
<li>имеют представление о направлении бизнеса, в котором работают. Даже если разработчик приходит без понимания процессов в бизнесе в компании, то со временем такие компетенции появляются за счет погружения в среду и общения</li>
</ul>
<p>На этапе общения с менеджерами и заказчиками, когда команда разработки формирует видение будущей фичи, разработчики могут влиять на продукт. Например, они могут сказать:</p>
<ul>
<li>вот тут у нас есть селект, нам важно сделать так, чтобы он был доступен, чтобы любой пользователь смог выбрать корректно элемент</li>
<li>здесь у нас появляется всплывающее окно и три кнопки, давайте выделим эту кнопку как основную, тем самым стимулируем пользователя выполнить запланированное действие</li>
</ul>
<p>Сценариев может быть немало. Если первый сценарий в примере про доступность интерфейсов, то второй больше про какие-то субъективные решения разработчика. Это решение обсуждают на встрече и принимают решение — попробовать, протестировать или не внедрять.</p>
<p>Если идею решили внедрять, то ее важно верифицировать. Верификации происходят по разному. Это зависит от аудитории проекта, её объемов, вышел ли продукт на рынок или это только прототип.</p>
<p>Назову пару наиболее популярных способов:</p>
<ul>
<li>фокус-группы — берем N потенциальных пользователей продукта, показываем интерфейс(ы) просим выполнить действия. Следим за действиями. Здесь мы получаем не количественную метрику, но качественную</li>
<li>АБ-тесты. Количественная метрика, которая помогает решить, сработала ли выделенная кнопка, стали ли пользователи выполнять целевые действия лучше</li>
</ul>
<p>Как фронтенд-инженеру начать влиять на продукт? Интересуйтесь процессами в компании. Узнайте, как происходит «придумывание» и описание будущих фич. Кто отвечает за них, как распределяются роли в проекте. Все это называется product discovery — процесс, когда новая фича проходит этапы от «появилась идея» до «задача проработана и готова к разработке». Не зацикливайтесь только на product delivery этапах или, по-другому, на разработке.</p>
<p>И, конечно же, общайтесь со своими дизайнерами. Фронтендеры и дизайнеры выполняют общее дело — сделать так, чтобы пользователь мог выполнить свои задачи на сайте эффективно.</p>
<p><strong>О сферах ответственности</strong></p>
<p>Отвечают все сразу. Здесь самое важное — не стать лебедем, раком и щукой. Часто можно услышать: разработчик хочет сделать красивый код, дизайнер анимации и чтобы выглядело эффектно, а менеджер — чтобы было вчера.</p>
<p>На самом деле, это показатель зрелости коллектива. Разработчик должен понимать, зачем дизайнер добавляет для этой «выпадашки» анимацию (например, чтобы сфокусировать внимание пользователя, потому что на странице очень много элементов), дизайнер также может понять стремление разработчика все унифицировать. Они могут даже собраться вместе, обсудить проблемы и найти точки соприкосновения. Аналогично и с менеджером. Менеджеру нужен работающий продукт, которым пользуются. Эти специалисты могут идти на компромиссы:</p>
<ul>
<li>сделать прототип, чтобы после выхода на рынок поправить техдолг</li>
<li>упростить некоторые интерфейсы, чтобы провести больше АБ тестов, развить удачные идеи</li>
</ul>
<p>В зрелом коллективе команда принимает решения. UX не исключение. И важный момент в конце — разработчик должен видеть в дизайнере профессионала и доверять его действиям. Дизайнер — в разработчике. Разработчик и дизайнер в менеджере, менеджер в разработчике и дизайнере. Без доверия никакого «принимает решения» и «командной ответственности» не будет.</p>
<p>Здесь ещё можно заметить, что основным ответственным за проект всегда будет владелец продукта или владелец бизнеса. Потому что они отвечают за проект своей компанией, бюджетом. UX — важная часть продукта. Но сказать, что владелец продукта отвечает за UX, не совсем корректно. Если бы я был владельцем компании и отвечал за UX и все остальное, то зачем мне нанимать других специалистов? Они нанимаются для делегирования обязанностей и выполнения задач.</p>
<p><strong>О субъективности и объективности UX</strong></p>
<p>Посмотрите на UX сайтов 90-х или начала нулевых. Вы заметите большое количество экспериментов, так как «UX субъективен». Посмотреть можно <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/jsunderhood/status/1318936989555658752" rel="noopener noreferrer" target="_blank">здесь</a>.</p>
<p>Со временем эти эксперименты эволюционировали, интерфейс превратился в унифицированные детали. Так и для пользователей — несмотря на то, что современные сайты окрашены по-разному, основные паттерны у пользователя остаются неизменными.</p>
<p>Помочь в оценке всегда могут качественные и количественные методы. Также обратите внимание на вот <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://youtu.be/GZGY0wPAnus" rel="noopener noreferrer" target="_blank">это видео</a>. Внимание — это тоже пользовательский опыт.</p>
<p><strong>О связи между пользовательским опытом и целевой аудиторией</strong>
Нужно понимать свою аудиторию и проводить работу с ней, а не ориентироваться на абстрактные данные. Есть паттерны, которые справедливы для большинства пользователей, есть те, которые применимы для конкретной аудитории. В большинстве случаев поведение пользователя зависит от контекста.</p>
<p><strong>Где и как прокачиваться в UX</strong>
Новичку — подружиться с своим дизайнером, общаться больше с менеджером и разобраться как и почему те или иные решения принимаются. Понимание продуктовой сферы приведет к пониманию аудитории.</p>
<p>Затем набраться опыта построения интерфейсов. Здесь — читать про best practices и применять их в компании. Построение интерфейсов и хорошее знание предметной области приведет к прокачке своих UX-навыков.</p>
<p>Также можно посоветовать подписаться на блоги и сайты известных дизайнеров, например Илью Бирмана, но я думаю, это довольно общий совет. Опыт, на мой взгляд, важнее.</p>
<p>Для опытного специалиста совет будет аналогичным. Хороший специалист понимает что и каким образом он может сделать для компании, чтобы улучшить продукт, увеличить доходы. Несмотря на то, что он командный игрок, у него все еще есть автономность.</p>
<p><strong>Об эксперте</strong></p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://xnim.ru/" rel="noopener noreferrer" target="_blank">Ник Мостовой</a>, член программного комитета HolyJs, спикер и ex-lead developer в <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://hh.ru/" rel="noopener noreferrer" target="_blank">http://hh.ru</a>. <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/xnimorz" rel="noopener noreferrer" target="_blank">Twitter</a>, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://t.me/xnimorz" rel="noopener noreferrer" target="_blank">Telegram</a>.</p>
<h2 id="heading-2-7">Ярослав Шуваев: лучшая практика — когда все отвечают за UX</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/Lq0bdHW.jpg" alt="фото Ярослава Шуваева" loading="lazy"/></p>
<p><strong>О влиянии фронтендера на пользовательский опыт</strong></p>
<p>Надо сказать, что есть несколько факторов, на которые может повлиять фронтенд-разработчик. Первый и самый основной: важную часть качества пользовательского опыта составляет техническая доступность и скорость программного обеспечения. То есть то, насколько быстро и стабильно работает программный продукт. Разработчик может прямо влиять на это, создавая оптимальные в плане скорости загрузки продукты, в плане распределения запросов внутри системы. То есть разработчик может делать так, чтобы каждый экран отправлял минимум запросов к базе данных.</p>
<p><strong>О сферах ответственности</strong></p>
<p>Конечно, основной фокус здесь падает на дизайн — это дизайнер внутри команды разработки. И второй фокус — это владелец продукта, который занимается развитием и отвечает за бизнес-результат. Но самая лучшая практика — когда все отвечают за UX, когда нет бутылочного горлышка. То есть когда все в команде имеют экспертизу в области UX, все заинтересованы в том, чтобы пользовательский опыт был максимально качественным, а продукт максимально жизнеспособным.</p>
<p><strong>О субъективности и объективности UX</strong></p>
<p>Да, с одной стороны может показаться, что пользовательский опыт — субъективное понятие. Но с другой стороны можно свести качество UX к неким метрикам. Например, к самым популярным метрикам относится время удовлетворения потребности пользователя. Можно даже сказать, что основной фактор, влияющий на качество пользовательского опыта — дофамин. Чем быстрее пользователь удовлетворяет потребность, тем больше дофамина она получает.</p>
<p>Есть дополнительный фактор: ресурсоёмкость, когнитивная нагрузка, которая падает на пользователя. Здесь уже играет роль не только время. Здесь считается энергоёмкость выполнения тех или иных задач. Здесь сложнее посчитать, нужно использовать более сложные вычисления.</p>
<p>Эти два фактора позволяют достаточно точно измерить качество пользовательского опыта.</p>
<p><strong>О связи между пользовательским опытом и целевой аудиторией</strong></p>
<p>Что касается поведенческих паттернов, то есть как люди привыкли видеть какой-то элемент — справа или слева, как раз здесь могут хорошо помочь разработчики. Потому что Android-разработчики, iOS-разработчики и так далее используют стандартные для операционной системы паттерны. Так они снимают с пользователя нагрузку, связанную с адаптацией к новым интерфейсам. Поэтому здесь можно сказать, что разработчик делает жизнь пользователя проще за счёт того, что применяет стандартные паттерны, которые понятны пользователю.</p>
<p>Конечно, есть разные нюансы. Кто-то воспитывался в среде, где принято вешать логотип справа в верхнем углу. Но исследования показывают, что со временем большинство пользователей привыкает к стандартному паттерну. То есть на меньшинство не всегда стоит ориентироваться. Надо стараться сделать счастливыми максимальное количество пользователей.</p>
<p><strong>Где и как прокачиваться в UX</strong></p>
<p>Проектирование цифровых продуктов состоит из нескольких слоёв. Самый верхний — стиль продукта, визуальное оформление. Следующий слой — компоновка продукта, расположение элементов на экране. Третий слой — информационная архитектура, структура разделов и каталогов, различные фильтры. На четвёртом уровне — функциональность продукта. На пятом уровне стратегии, то есть на каком уровне какие проблемы решаются. На каждом уровне используются самые актуальные практики дизайна или, если по-русски, проектирования. У нас в UX Academy есть курс, который раскрывает эти практики для каждого уровня. Также есть есть <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://uxacademy.ru/guide" rel="noopener noreferrer" target="_blank">методичка или небольшой гайд</a>, который позволяет пробежаться и узнать какие-то основные инструменты для каждого слоя.</p>
<p><strong>Об эксперте</strong></p>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.facebook.com/shuvaev" rel="noopener noreferrer" target="_blank">Ярослав Шуваев</a>, руководитель центра компетенций Внутренних Инноваций Ак Барс Цифровые Технологии, куратор курса UX&UI в BHSAD.</p>
<h2 id="heading-2-8">Что нужно знать о пользовательском опыте новичкам: рекомендации специалистов Хекслета</h2>
<p>Преподаватель вёрстки на Хекслете Никита Михайлов и фронтенд-разработчик Хекслета Роман Макаров в формате вопрос-ответ дали конкретные рекомендации новичкам об изучении UX и применении лучших практик в работе.</p>
<h3 id="heading-3-9">Никита Михайлов: вёрстка — воплощение дизайна в браузере или в мобильных приложениях</h3>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/wVIPf5j.jpg" alt="фото Никиты Михайлова" loading="lazy"/></p>
<p><strong>— Как вёрстка связана с пользовательским опытом, как она влияет на UX?</strong></p>
<p>— По сути, вёрстка — воплощение дизайна в браузере или в мобильных приложениях. То есть это последний шаг перед тем, как пользователь увидит готовый продукт. На верстальщике висит задача не только перенести то, что нарисовал дизайнер. Он должен ещё и адаптировать дизайн под правильное использование.</p>
<p>Например, если речь идёт о формах, верстальщик должен следить, чтобы форма всегда была понятной. Чтобы не было ситуации, когда пользователь ввёл какое-то значение, потом удалил его и не может понять, а что это за поле. Это очень распространённая проблема, когда верстальщики используют плейсхолдер и больше ничего. А пользователи не могут понять, что нужно указать в каком-то поле.</p>
<p>Верстальщик должен подписывать все элементы, чтобы обеспечить доступность. Когда мы говорим UX, то подразумеваем пользовательский опыт всех людей, включая людей с особенными потребностями. Для таких людей пользовательский опыт немного другой, а верстальщик должен хорошо знать эти отличия. Он должен понимать, как организовать интерфейс так, чтобы им было удобно пользоваться всем людям.</p>
<p><strong>— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?</strong></p>
<p>— На мой взгляд, это коллективная ответственность. Если делить зоны ответственности, можно попасть в ситуацию, когда каждый сделал как бы свою часть работы и забил на всё остальное. Но в процессе работы верстальщик может увидеть, что вот здесь неплохо что-то переделать. Распространённая ситуация — дизайнер работает на аутсорсе. В таких условиях верстальщику нужно что-то самому переделывать. А он может что-то неправильно интерпретировать. Поэтому все отделы должны взаимодействовать.</p>
<p><strong>— Первое, что приходит в голову о взаимосвязи между вёрсткой и UX — адаптивность страниц. То есть верстальщик влияет на то, чтобы пользователю было удобно работать со страницей на любом экране. Можно ли выделить ключевые рекомендации, которые должен держать в уме верстальщик, когда создаёт адаптивную страницу?</strong></p>
<p>— Первое: наверное, главное, что забывают начинающие специалисты — проверять страницу не только на тех разрешениях, которые дал дизайнер. У нас очень много разных устройств, пользователи по разному взаимодействуют с сайтом. Например, некоторые люди разбивают окно браузера на несколько частей. Если мы берём стандартные вещи, смотрим, чтобы у нас всё отображалось на 1280 пикселей, на 320, 540, но при этом забываем про другие пограничные состояния, это может привести к тому, что у части пользователей всё будет рушиться. Например, появятся очень большие карточки или очень мелкий текст, когда разрешение экрана позволяет сделать его больше.</p>
<p>Второе: надо помнить, что мобильные устройства имеют две ориентации — вертикальную и горизонтальную. Часто верстают под вертикальную ориентацию, забывая про горизонтальную. В этом случае высота видимой области страницы становится ниже, чем необходимо. Это не очень удобно для пользователей, особенно если на странице есть плавающее меню. Оно может закрыть весь контент.</p>
<p>Третье: надо помнить, что пользователи могут увеличивать страницу. Нужно проверять, чтобы на таких разрешениях вёрстка не разваливалась. То есть если мы сверстали страницу под определённую ширину, но не учли возможность масштабирования, работа не сделана. Желательно проверять на стандартных разрешениях хотя бы двукратное увеличение, смотреть, чтобы здесь всё корректно отображалось.</p>
<p><strong>— Ещё один аспект, влияющий на пользовательский опыт — скорость загрузки. Что в этом контексте может сделать верстальщик? Можно прямо несколько рекомендаций.</strong></p>
<p>— Первое: здесь от верстальщика зависит объём контента, который подгружается на страницу. Всегда нужно следить за размером страницы. Плохо, если на странице две или три картинки, которые весят по 12 Мбайт. Обязанность верстальщика — следить за размерами и оптимизацией изображений. Надо использовать сжатие. Если у изображения нет прозрачного фона, нет смысла держать её в png. Надо следить за размером файлов CSS и HTML, использовать минификацию.</p>
<p>Второе: надо помнить, что обработка HTML — затратная операция для браузеров. Чем глубже вложенность блоков, тем дольше браузер этот код обрабатывает. Даже в Google PageSpeed есть показатель вложенности HTML. То есть надо делать простую вёрстку и не плодить вложенности. Чем чище и проще наш код, тем быстрее браузер его обработает и выведет результат на экран. Это справедливо даже при проблемах с сетью.</p>
<p><strong>— Формы — отдельная тема, вокруг неё сломано много копий. Как ты считаешь, что может сделать верстальщик, чтобы с формами было удобно работать, чтобы у пользователя был позитивный опыт взаимодействия с ними?</strong></p>
<p>— Внешний вид формы — это работа дизайнера. Но все в команде должны работать вместе. При разработке форм верстальщик должен помнить несколько вещей.</p>
<p>Первое: подписи полей. Нельзя полностью рассчитывать на плейсхолдеры. Когда страница с формой загружается, благодаря плейсхолдеру пользователь видит, что требуется в конкретном поле. Но как только он начинает что-то вводить, плейсхолдер исчезает. Если стереть ввод, невозможно понять, о чём поле. Поэтому надо использовать лейбл.</p>
<p>Второе: пользователю удобно, если поля сгруппированы. Не стоит давать пользователю поля сплошной массой. Если мы не делим поля на группы, в них легко запутаться. Стоит выделять группы заголовками. И при этом нельзя забывать про лейблы.</p>
<p>Третье: если у нас есть огромная форма, не стоит сразу вываливать её на пользователя. Лучше дать возможность человеку заполнить часть формы, потом нажать кнопку «Далее» и показать следующую часть. Большое количество полей может отпугнуть пользователя. Он увидит, что надо заполнить 20 или 30 полей, и уйдёт.</p>
<p>Четвёртое: кнопки должны быть информативными. Если у нас есть кнопки «Отправить» или «Очистить», они не должны выглядеть одинаково. Пользователь должен легко отличать их по цвету. А если цвета будут семантичными, пользователю будет намного проще понять, что одна кнопка сбрасывает, а другая отправляет форму.</p>
<p><strong>— Наверное, нельзя не упомянуть навигацию — как здесь верстальщик может позаботиться о хорошем пользовательском опыте?</strong></p>
<p>— Первое: с точки зрения качества пользовательского опыта важно, чтобы все ссылки на странице были понятными. Не должно быть ситуации, когда ссылка похожа на текст. Часто в угоду дизайна удаляют подчёркивание. Но даже в этом случае ссылка должна отличаться от простого текста, пользователь должен видеть её.</p>
<p>Второе: надо помнить про семантическую вёрстку, это прямая обязанность верстальщика. Хороший UX всегда построен на грамотной вёрстке, в том числе на семантической вёрстке. Разные устройства могут считывать информацию, ориентируясь на теги, которые мы использовали для вёрстки. Например, режим чтения в телефоне часто ориентируется на то, какие семантические теги мы использовали, в том числе теги навигации.</p>
<p>Третье: верстальщик должен помнить, что у любой ссылки или кнопки должно быть несколько состояний. Задача верстальщика — сделать какое-то дефолтное поведение, даже если дизайнер этого не нарисовал. Например, если пользователь наводит курсор на ссылку, она должна меняться, должна показывать, что с ней взаимодействуют. Или когда пользователь использует фокус с помощью клавиатуры, ссылка должна реагировать на это.</p>
<p>Четвёртое: если у нас есть подменю, оно должно быть именно подменю. Нельзя его вываливать на пользователя всем списком. Плохо, если у нас в шапке сайта 50 ссылок, и по ним трудно понять, как они относятся друг к другу. Главное меню должно быть главным, то есть в нём нужно показывать основные разделы сайта. А подразделы лучше показывать на страницах основных разделов.</p>
<p><strong>— Доступность — как она влияет на пользовательский опыт? Есть ли набор рекомендаций по улучшению доступности?</strong></p>
<p>Первое: верстальщик должен проверять сайт, над которым работает. Например, попробовать пройти по сайту с помощью клавиатуры. Если здесь он может увидеть все интерактивные элементы, они все выделяются, это уже большой плюс.</p>
<p>Второе: валидная семантическая вёрстка — это уже работа над доступностью. Поэтому всегда проверяйте сайт с помощью валидатора. Если он не находит ошибок, это ещё один плюс в копилку доступности. То есть это гарантирует, что многие скринридеры смогут правильно воспроизвести сайт.</p>
<p>Часто верстальщики используют неподходящие элементы. Например, вместо кнопки они используют простой <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><div></code>. Скринридеры не понимают, что этот элемент — кнопка.</p>
<p>Третье: указывайте атрибуты <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">alt</code> у изображений. В этом атрибуте нужно указывать осмысленную информацию — описание картинки. Его «прочитает» незрячий пользователь, когда попадёт на эту картинку. Понятно, что <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">alt</code> «фото 123» ничем такому пользователю не поможет.</p>
<p><strong>— Где можно прокачиваться верстальщику, как узнавать больше о вёрстке в контексте UX?</strong></p>
<p>— Первое, что приходит в голову — Google. Потом идёт знаменитая книга Стивена Круга «Не заставляйте меня думать». Также нужно интересоваться дизайном, смотреть результаты исследований, не думать, что это чисто работа дизайнера.</p>
<p>Нужно читать книги о дизайне интерфейсов. Здесь я рекомендую «Бюро Горбунова». У них есть отличные книги на тему типографики, пользовательских интерфейсов. У них есть курсы дизайна.</p>
<p>Также рекомендую смотреть сайт <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.awwwards.com/" rel="noopener noreferrer" target="_blank">Awwwards</a>. Здесь можно найти примеры отличных дизайнов и вёрсток. Наконец, отличная практика — изучать современные фреймворки, тот же <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/courses/bootstrap_basic" rel="noopener noreferrer" target="_blank">Bootstrap</a>. Этот фреймворк очень популярный, а его компоненты сделаны с учётом лучших практик UX.</p>
<blockquote>
<p>Начните изучать разработку с бесплатного курса <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/courses/layout-designer-basics" rel="noopener noreferrer" target="_blank">«Основы современной вёрстки»</a>. Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.</p>
</blockquote>
<h3 id="heading-3-10">Роман Макаров: разработчик должен ставить себя на место пользователей и проверять интерфейсы</h3>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/ZRbbls2.jpg" alt="фото Романа Макарова" loading="lazy"/></p>
<p><strong>— Как фронтенд-программист влияет на UX?</strong></p>
<p>— С одной стороны, фронтенд-разработчик должен выполнять поставленные техзадания, а эти задания ставят люди, которые разбираются в UX. С другой стороны, есть базовые вещи, которые фронтенд-разработчик должен знать и по умолчанию делать какие-то вещи удобными для пользователей.</p>
<p><strong>— То есть фронтендер делает то, что уже спроектировали дизайнеры?</strong></p>
<p>— Даже не дизайнеры, а специалисты по пользовательскому опыту. Также есть аналитики, бизнес-аналитики, которые могут подсказать, как совместить видение фронтендера с интересами бизнеса.</p>
<p><strong>— Можно ли провести чёткие границы ответственности за пользовательский опыт: сказать, что здесь сфера ответственности дизайнера, здесь верстальщика, а вот здесь пусть отвечает фронтенд-программист?</strong></p>
<p>— Каждый из упомянутых специалистов отвечает за достаточно широкий фронт работ. Иногда люди выполняют смежные задачи. Например, у нас на проекте нет UX-дизайнера, поэтому мы работаем в связке: фронтенд-программист, верстальщик и ребята от бизнеса.</p>
<p><strong>— Наверное, стоит начать с форм: можно ли дать несколько конкретных рекомендаций по проектированию форм? Как фронтенд-программист может здесь улучшить пользовательский опыт?</strong></p>
<p>— Форма — сложный компонент веб-страницы, она объединяет сразу несколько интерактивных элементов. Здесь могут быть кнопки, радиокнопки, чекбоксы, текстовые инпуты, селекты и так далее. Наверное, самое большое число интерактивных элементов приходится на форму.</p>
<p>Первое: интерфейс должен вести себя предсказуемо, он не должен удивлять пользователя. Поэтому важно самому проверять интерфейсы, которые вы разрабатываете. Надо спрашивать себя, удобно ли пользоваться этой формой, предсказуемо ли она работает.</p>
<p>Второе: если в форме есть обязательные поля, их надо обозначать как обязательные.</p>
<p>Третье: должна быть стратегия валидации формы. Например, у новичков часто встречается ошибка — они начинают валидировать форму до момента, когда пользователь покинул поля или когда он нажал кнопку «Отправить». В этом случае пользователь вводит первый символ, а ему сразу показывается сообщение о невалидной информации, так как минимальное число символов в поле 20. С моей точки зрения, это удивляет пользователя: он только начал писать, а ему уже показывается красная плашка.</p>
<p>Четвёртое: если форма невалидная, у пользователя не должно быть возможности отправить её на сервер. Это можно реализовать с помощью заблокированной кнопки отправки. Также интерфейс должен подсказывать пользователю, какие поля невалидные.</p>
<p>Например, у нас в четвёртом проекте достаточно простой интерфейс. В нём есть однотипные модальные окна и текстовое поле для отправки сообщений. Но новички делают достаточно много ошибок даже на этом минимуме элементов. Например, часто не блокируется кнопка при асинхронных действиях, когда что-то отправляется на сервер.</p>
<p><strong>— Скорость загрузки страниц — один из важных факторов, влияющих на пользовательский опыт. Даже поисковики учитывают его при ранжировании страниц. Как фронтенд-программист может повлиять на этот фактор? Есть какой-то набор рекомендаций, которые можно считать универсальными?</strong></p>
<p>— Тут важно понимать, что это не прихоть поисковых систем. Люди хотят, чтобы сайт загружался максимально быстро. Поисковые системы ориентируются на желания пользователей, поэтому учитывают скорость загрузки при ранжировании сайтов.</p>
<p>Первое: нужно уметь загружать контент прогрессивно. То есть важные вещи должны загружаться сразу, менее важные можно отложить на потом. Для решения этой задачи есть разные приёмы. Например, мы можем в первую очередь загружать ресурсы, которые находятся в верхней части экрана, чтобы пользователь имел возможность с ними взаимодействовать.</p>
<p>Второе: можно загружать картинки в разном качестве или ставить на место картинок заглушки. Это выглядит так: страница загружается, все блоки уже находятся на своих местах. Благодаря этому нет визуального сдвига. Элемент, с которым собирался взаимодействовать пользователь, не будет перемещаться по экрану.</p>
<p>Третье: надо следить за бандлом, смотреть, всё ли там сжимается и оптимизируется. Благо, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://guides.hexlet.io/webpack/" rel="noopener noreferrer" target="_blank">современные сборщики фронтенда позволяют это делать</a>.</p>
<p><strong>— Можно сказать, что здесь тесно переплетается вёрстка и программирование?</strong></p>
<p>— Есть правила для верстальщиков, они верстают страницы так, чтобы не было этого сдвига. Например, указывают размеры картинок. Браузер в первую очередь получает разметку. И если она выполнена правильно, браузер понимает, где находятся блоки и какие у них размеры.</p>
<p><strong>— Визуализация состояние элементов интерфейса — ещё один важный фактор, влияющий на UX. Может ли здесь быть набор универсальных рекомендаций? Например, выделять активные элементы, отмечать задизейбленные и так далее?</strong></p>
<p>— Да, конечно, за этим нужно следить. Я всегда прошу студентов ставить себя на место пользователей и смотреть, явно ли здесь показано, что кнопка задизейбленная? Понятно ли по состоянию поля, что оно обязательное и без него невозможно отправить форму? Встречается ситуация, когда форма не отправляется, но пользователь не может понять, почему. Это происходит из-за того, что нет сообщений об ошибках или эти сообщения неинформативные.</p>
<p><strong>— Баги в интерфейсах крайне негативно влияют на пользовательский опыт. Есть какие-то рекомендации по их предупреждению, мониторингу, устранению?</strong></p>
<p>— Обработка ошибок — <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/kak-pravilno-obrabatyvat-oshibki-vo-frontend-prilozheniyah" rel="noopener noreferrer" target="_blank">очень важная тема</a>. Первая рекомендация: используйте Rollbar или другие системы логирования. Они нужны, чтобы мы узнавали об ошибках не от пользователей, а самостоятельно.</p>
<p><strong>— А как должно приложение реагировать на ошибки?</strong></p>
<p>— В веб-разработке всегда возможны ошибки. Это могут быть ошибки в приложении или внешние ошибки, например, упавшая сеть, повисший сервер.</p>
<p>Первая рекомендация: пользователь должен знать, что произошла ошибка, для него ситуация должна быть понятной.</p>
<p>Вторая рекомендация: мы должны показать возможные варианты устранения ошибки. Например, предложить пользователю перезагрузить страницу или проверить работоспособность сети или сообщить, когда сеть появится. То есть пользователь должен видеть, что соединение пропало или что оно восстановилось.</p>
<p>Третья рекомендация связана с внутренними ошибками приложения. Мы должны максимально рано показывать пользователю, что произошла ошибка, что что-то сломалось, мы об этом знаем и мы исправим ошибку.</p>
<style data-mantine-styles="inline">.__m__-_R_bhderddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:80%;}@media(min-width: 36em){.__m__-_R_bhderddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_bhderddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/group-training"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="Лайв-кодинг, совместное решение задач, поддержка друг друга: как устроено групповое обучение программированию на Хекслете"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Лайв-кодинг, совместное решение задач, поддержка друг друга: как устроено групповое обучение программированию на Хекслете</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">На Хекслете существует несколько форматов обучения, один из них — «Групповой», в котором студенты...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">9 марта 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/filmoteka-dlya-programmistov-25-filmov-o-programmirovanii-tehnologiyah-i-iskusstvennom-intellekte"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTY5OSwicHVyIjoiYmxvYl9pZCJ9fQ==--ecd38e914c68debadef03c88a60804b37146e5b5/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D1%8B%20IT-01.png" loading="lazy" alt="50 лучших фильмов и сериалов о технологиях"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">50 лучших фильмов и сериалов о технологиях</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Сделали подборку фильмов о технологиях, программировании, искусственном интеллекте и роботах.</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">30 декабря 2022 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/marketolog-heksleta-natalya-musina-8-knig-kotorye-pomogut-vam-v-zhizni-i-v-rabote"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="8 книг, которые помогут вам в жизни и в работе: советует комьюнити-менеджер Хекслета Наталья Мусина"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">8 книг, которые помогут вам в жизни и в работе: советует комьюнити-менеджер Хекслета Наталья Мусина</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Комьюнити-менеджер Хекслета Наталья Мусина делится подборкой своих любимых книг, которые помогают...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">29 декабря 2022 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div></div></div></div>
<p><strong>— Где можно прокачаться фронтенд-программисту, чтобы лучше понимать пользовательский опыт и знать, как влиять на UX?</strong></p>
<p>— У нас на Хекслете есть <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/pages/recommended-books" rel="noopener noreferrer" target="_blank">список рекомендуемых книг</a>. Там есть книга Стивена Круга «Не заставляйте меня думать», советую её прочитать, это классика. Также каждый разработчик должен ставить себя на место пользователей и проверять интерфейсы. Полезно пользоваться инструментами, которые помогают по-настоящему посмотреть на сайт глазами пользователя. Например, полезно заглядывать в «Вебвизор».</p>
<h2 id="heading-2-11">Фронтенд-разработчик активно влияет на пользовательский опыт вместе с другими членами команды</h2>
<p>Такой вывод можно сделать по итогам беседы с экспертами. Опытные специалисты рекомендуют новичкам самим пользоваться интерфейсами, которые они проектируют, и ставить себя на место пользователей. Также фронтендеру нужно интересоваться дизайном и думать о продукте, а не только о коде.</p>
<blockquote>
<p>Хотите стать фронтенд-разработчиком, научиться строить классные интерфейсы и влиять на UX? Обратите внимание на профессию <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/professions/frontend" rel="noopener noreferrer" target="_blank">«Фронтенд-программист»</a>. Обучение можно пройти в группе под руководством опытного наставника.</p>
</blockquote></div><div class=""><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-user "><path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path><path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path></svg></div><p style="margin-inline-end:var(--mantine-spacing-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дмитрий Дементий</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">5 лет назад</p></div><div style="align-items:center" class="m_8bffd616 mantine-Flex-root __m__-_R_5dirddmiub_"><a style="display:inline-flex" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/ux-for-frontenders/votes"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div></a><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">15</p></div></div></div><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding:var(--mantine-spacing-xl)" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Читайте также:</p><ul style="margin-inline-start:var(--mantine-spacing-lg)" class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/group-training">Лайв-кодинг, совместное решение задач, поддержка друг друга: как устроено групповое обучение программированию на Хекслете</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/filmoteka-dlya-programmistov-25-filmov-o-programmirovanii-tehnologiyah-i-iskusstvennom-intellekte">50 лучших фильмов и сериалов о технологиях</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/marketolog-heksleta-natalya-musina-8-knig-kotorye-pomogut-vam-v-zhizni-i-v-rabote">8 книг, которые помогут вам в жизни и в работе: советует комьюнити-менеджер Хекслета Наталья Мусина</a></span></div></li></ul></div><div style="margin-block:var(--mantine-spacing-xl)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div></div><div></div></div><style data-mantine-styles="inline">.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}@media(min-width: 62em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:33.333333333333336%;--col-max-width:33.333333333333336%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_lmiub_ mantine-visible-from-md"><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-bottom:var(--mantine-spacing-xl);padding:var(--mantine-spacing-xl);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="margin-bottom:var(--mantine-spacing-md)" class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Категории</p></div><ul class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Мотивация">Мотивация</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Истории успеха">Истории успеха</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Дневник студента">Дневник студента</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Код">Код</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Карьера">Карьера</button></span></div></li></ul></div><div style="justify-content:end;margin-top:0rem;position:sticky;top:calc(5rem * var(--mantine-scale))" class="m_8bffd616 mantine-Flex-root __m__-_R_5dlmiub_"><div tabindex="0" style="cursor:pointer"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses_web_development?promo_name=program_category&promo_position=blog_post&promo_creative=card&promo_type=card"><div style="background-color:var(--mantine-color-default);border:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);padding-inline:var(--mantine-spacing-xl);padding-top:var(--mantine-spacing-xl);padding-bottom:var(--mantine-spacing-xs);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Курсы по веб-разработке</p></div><img class="m_9e117634 mantine-Image-root" src="/vite/assets/development-BVihs_d5.png"/><p style="margin-bottom:var(--mantine-spacing-xs);text-align:right" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></a></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>