В рубрике «Развитие» публикуем интервью с Андреем Романовым — фронтенд-разработчиком, создателем популярного сообщества For Web. Андрей рассказал о себе и своих проектах, перспективах фронтенда, поделился взглядами на обучение и развитие программистов.
Дмитрий Дементий: Андрей, расскажите пожалуйста о себе: кто вы, чем занимаетесь, где работаете?
Андрей Романов: Меня зовут Андрей Романов, мне 21 год. Я фронтенд-разработчик из Омска, переехал в Москву в 2016 году после окончания Школы разработки интерфейсов Яндекса. Работаю в Joom в команде службы поддержки. Развиваю сайд-проекты: For Web (новости фронтенда) и frontend case studies (коллекция материалов об опыте разработки интерфейсов в реальных компаниях).
Д.Д.: Где вы обучались разработке?
А.Р.: У меня нет формального образования. Единственные очные курсы, которые я окончил — это вышеупомянутая ШРИ Яндекса. В основном я учился всему самостоятельно: черпал теорию из статей и книг, делал учебные проекты, проходил онлайн-курсы на Coursera, HTML Academy, Code School (теперь уже Pluralsight) и Hexlet.
Д.Д.: Знаю, что учились в том числе у нас. Можете поделиться впечатлениями, мнением о Хекслете?
А.Р.: Проблема многих книг и курсов (в том числе вузовских) в том, что они учат конкретным технологиям и языкам программирования: в них обычно рассказывают о синтаксисе языка и стандартной библиотеке, но не рассказывают, как проектировать и писать хорошие и поддерживаемые программы.
Курсы Хекслета в этом плане выгодно отличаются от других, потому что они учат не синтаксическим конструкциям конкретного языка, а фундаментальным принципам программирования. Плюс сам формат обучения мне нравится: изучаешь порцию теории и сразу закрепляешь её практикой, часто нетривиальной и заставляющей размять мозги.
Д.Д.: Ваш проект For Web — одно из самых популярных в рунете сообществ, посвященных фронтенду и программированию в целом. Расскажите о нём пожалуйста. Как создавалось, как развивалось, как функционирует сейчас?
А.Р.: В начале 2014 года я решил сохранять где-нибудь ссылки на найденные полезные статьи и инструменты, и завёл для этого страницу во «ВКонтакте». В какой-то момент понял, что это может быть интересно другим людям, запустил таргетированную рекламу и набрал первые несколько сотен подписчиков.
Затем был долгий период роста и экспериментов: я привлекал аудиторию, обмениваясь публикациями с сообществами смежной тематики, пробовал новые форматы вроде интервью, вопросов от подписчиков или коротких советов, перерисовывал логотип (текущая версия — третья, а так выглядели первая и вторая), пытался привлекать соавторов (в итоге я занимаюсь проектом в одиночку).
Сейчас формат устоялся, и аудитория, кажется, достигла некоторого потолка, хоть рост и продолжается. На сегодня For Web — это лента полезных материалов в ВК, Твиттере и Телеграмме, а также регулярный дайджест новостей фронтенда для тех, кто не хочет тратить время и внимание на соцсети.
Д.Д.: В паблике вы курируете контент: публикуете интересные посты. Кто их подбирает? По каким критериям выбираете, что публиковать, а что нет?
А.Р.: Я слежу за множеством RSS-лент и email-рассылок. Если встречаю потенциально интересный материал, откладываю его в специальную очередь, которую затем фильтрую тщательнее, вникая в суть материала.
За время существования сообщества критерии сильно изменились. Сейчас я стараюсь публиковать как можно более долговечные и полезные широкому кругу подписчиков материалы (то есть статьи о хайповых фреймворках и библиотеках сразу отпадают). Отдельные жемчужины, которые я очень люблю — статьи из блогов компаний, рассказывающие о решении реальных рабочих задач. Я не публикую пиратские материалы. Я не ограничиваюсь материалами о фронтенде: парадигмы программирования, архитектура, софтскилы, дизайн и UX — всё это тоже полезно фронтендерам.
Д.Д.: Есть ли в сообществе модерация? Если участники начинают вести себя некорректно, что происходит?
А.Р.: Обычно я руководствуюсь здравым смыслом и удаляю очевидный спам. Раньше я пытался заставить подписчиков следовать определённым правилам поведения (например, писать конструктивные комментарии вместо бесполезных в духе «ерунда какая-то») и карал за их нарушения, но в какой-то момент я понял, что правила всё равно никто не читает, а людей не перевоспитать, и перестал за этим следить. Бывает, что дискуссии разгораются и участники начинают друг друга оскорблять; я не хочу вводить цензуру, поэтому обычно не вмешиваюсь.
Д.Д.: Вы фронтенд-разработчик, ваш проект For Web преимущественно посвящен фронтенду. Почему выбрали это направление?
А.Р.: Так получилось, что свой путь я начинал с книги по HTML, изучал вёрстку и параллельно пробовал разные языки программирования. Материалы по программированию, с которых я начинал, были довольно посредственные, и результатов с вёрсткой я добился гораздо быстрее. В основном это и повлияло на выбор направления: фронтенд позволяет очень быстро сделать что-то рабочее и осязаемое, а бэкенд на тот момент был мне непонятен и чужд.
Д.Д.: Как вы считаете, перспективно ли в данный момент обучаться фронтенд-разработке? Способствует ли этому ситуация на рынке труда? Или может быть есть более перспективные направления?
А.Р.: Открыл сейчас поиск hh.ru по Москве, там 1472 вакансии по запросу frontend и 1391 вакансия по запросу backend. Учитывая фрагментированность бэкенда (Python-программистов не всегда готовы нанимать на Java или Go), фронтенд кажется востребованнее. С другой стороны, бэкендеры имеют лучшие карьерные перспективы: я не знаю примеров, когда в техдиректоры вырастали бы из фронтенда.
В вебе появляется всё больше средств для разработки сложных приложений (PWA, WebAssembly, браузерные API для доступа к железу), и это тоже влияет на востребованность фронтендеров: многие компании делают веб-приложения, чтобы сэкономить на разработке нативных приложений под каждую платформу.
Д.Д.: Как вы думаете, чистые верстальщики без знаний программирования конкурентоспособны на рынке труда? Или на вёрстке останавливаться нельзя, надо развиваться и учиться программированию?
А.Р.: На западе в принципе нет такого понятия как «верстальщик» — там верстают либо дизайнеры, либо программисты. Да и в России практически нет вакансий именно про вёрстку, обычно ищут фронтенд-разработчиков, которые должны уметь и сверстать интерфейс, и запрограммировать его. Думаю, ситуация на рынке говорит сама за себя.
Д.Д.: С вашей точки зрения у JavaScript-разработчиков есть светлое будущее? В обозримой перспективе нет ли каких-то технологий или языков, которые заменят JS-программистов? (WebAssembly и так далее). Может уже сразу надо учиться чему-то другому?
А.Р.: В обозримой перспективе HTML/CSS/JavaScript из браузеров никуда не денутся. Чтобы не упустить светлое будущее, не нужно позиционировать себя как React-разработчик или JavaScript-разработчик. Учитесь фундаментальным вещам, а не модным фреймворкам, и тогда ваши знания не будут быстро устаревать.
Д.Д.: Сейчас на коне React, популярен Vue, Angular вроде бы сдаёт позиции, но всё равно востребован. Через несколько лет фронтендеры будут пользоваться этими инструментами или появятся новые фреймворки и библиотеки?
А.Р.: Учитывая то, с какой скоростью развивается фронтенд, появление новых фреймворков исключить сложно. Но в любом случае останется множество написанных сейчас проектов, которые переписывать будет нецелесообразно, так что нынешние фреймворки не исчезнут совсем.
Д.Д.: В целом, куда идёт фронтенд-разработка? Есть какие-то выраженные тенденции, которые серьёзно изменят рынок, подходы к работе, ситуацию в сфере занятости фронтендеров в ближайшей перспективе?
А.Р.: Я наблюдаю развитие веб-платформы в сторону полноценных приложений. Пока что веб скорее догоняет мобильную разработку по возможностям и подходам, но у веба есть важное преимущество — кроссплатформенность. Могу выделить несколько перспективных направлений, технологий и подходов.
PWA — приложения, обеспечивающие близкий к нативному UX, работу в офлайне, установку приложения на мобильный или десктоп. Реализуются с помощью набора специальных API вроде сервис-воркеров.
WebAssembly — технология, позволяющая запускать в вебе ресурсоёмкие приложения, написанные на языках вроде C/C++/Rust. Несмотря на молодость технологии, её уже используют продукты вроде Unity, Figma и eBay.
CSS Houdini позволит расширять CSS за счёт доступа к механизму отрисовки страницы браузером. Например, это позволит писать полифилы для новых возможностей CSS и не ждать их реализации разработчиками браузеров.
Только-только зарождающаяся идея, заимствованная из мобильной разработки — вынос в отдельные треды всех вычислений, не связанных с отрисовкой интерфейса, чтобы не блокировать ими этот самый интерфейс.
Ещё одна интересная идея — переход от фреймворков с тяжёлым рантаймом к фреймворкам, компилируемым в минимально необходимый для работы приложения код. Пионер в этой сфере — Svelte.
Современные браузеры поддерживают последние стандарты и API (вплоть до ES-модулей), что позволяет отказаться от инструментов сборки и транспиляции кода вроде webpack и babel, тем самым сильно сократив объём кода, который браузеру нужно скачать, распарсить и выполнить. Пока не все браузеры поддерживают последние стандарты, можно реализовать раздельную раздачу кода: старым браузерам отдавать собранную и транспилированную версию приложения, а современным — облегчённую.
Д.Д.: Сейчас на слуху технология PWA. Прогрессивные веб-приложения активно популяризирует Google. Есть фреймворки типа Gatsby, которые генерируют сайты с характеристиками PWA. Эта технология откусит долю рынка у нативных приложений?
А.Р.: Да, PWA уже разработали и запустили многие крупные компании вроде Uber, Pinterest, Tinder, Twitter. Многие компании пока ещё стремятся чуть ли не принудительно перетягивать мобильных пользователей из веба в нативные приложения, но я думаю, что через несколько лет это изменится, когда бизнес поймёт ценность и возможности мобильного веба.
Доносить ценность и возможности до бизнеса должны как раз фронтендеры: когда я работал в Авито, мой коллега хорошо обосновал и продал бизнесу идею перезапуска мобильной версии сайта, взялся за реализацию и довёл её до конечного продукта. Благодаря нему у Авито теперь более удобная и современная мобильная версия, близкая к нативным приложениям по функциональности и дизайну.
Д.Д.: Как вы относитесь с CSS-фреймворкам? Это полезные инструменты? Можно ли их использовать в продакшене с вашей точки зрения?
А.Р.: На мой взгляд, они полезны либо тогда, когда команда с ними хорошо знакома и они действительно помогают ей быстрее доставлять ценность бизнесу, либо когда стоит задача быстро набросать прототип интерфейса не по дизайн-макету. В остальных случаях они доставят больше головной боли, чем пользы. Самый популярный фреймворк Bootstrap полон CSS-антипаттернов вроде глобальных стилей и вложенных селекторов, что делает болью поддержку интерфейсов, использующих его. Алексей Иванов в блоге «Злых марсиан» разбирал проблемы Бутстрапа.
Д.Д.: Как вы думаете, что должен знать и уметь новичок, чтобы претендовать на позицию джуниор-фронтендера? Можно прямо список технологий и умений.
А.Р.: В первую очередь нужно крепко знать HTML, CSS и основы JavaScript. Сейчас многие кидаются изучать фреймворки, пропуская основы. Так делать не нужно. HTML/CSS/JS вы изучаете один раз и надолго, они составляют фундамент, без которого будет сложно решать реальные задачи. Фреймворки меняются, и по опыту собеседования в крупные компании вроде Яндекса, Авито или Тинькова могу сказать, что знание фреймворков обычно не так важно, как знание базовых веб-технологий.
Конечно, мало просто знать теорию. Нужно уметь применять её. Я бы ждал от джуниора умения семантично и адаптивно верстать, умения запрограммировать несложный интерфейс. Проверить эти умения можно на каком-нибудь простом примере вроде виджета конвертации валют.
Д.Д.: Опишите, пожалуйста, идеальную систему подготовки фронтенд-разработчика. Иными словами, как абсолютному новичку прямо сейчас, в 2019 году, научиться разработке и стать востребованным на рынке труда специалистом? Куда идти, что читать, что покупать, что делать?
А.Р.: Я бы порекомендовал взяться за курсы HTML Academy, чтобы научиться основам вёрстки, и параллельно взяться за курсы Хекслета, чтобы заложить фундамент в программировании. JavaScript и браузерные API рекомендую изучать на learn.javascript.ru. Эти три ресурса содержат большинство необходимой теории, закрепляемой практическими заданиями.
Как только сможете написать виджет обмена валют, рекомендую идти на собеседования в реальные компании, чтобы сразу обнаружить пробелы в знаниях (или же удачно получить офер). Также новичкам будет полезно пройти ШРИ Яндекса: даже если вы не собираетесь в Яндекс, это прокачает ваши навыки фронтенда и даст опыт работы в команде, а ещё даст кучу полезных знакомств.
Д.Д.: Где можно прокачиваться новичкам, чтобы отработать полученные на курсах знания и умения и предъявлять работодателю реальный опыт, реальный код?
А.Р.: Прежде всего нужно завести профиль на ГитХабе или ГитЛабе, чтобы было куда выкладывать код. Рекомендую поискать или попросить у компаний тестовые задания. Если найти тестовые задания не получится, можно придумать их самому или погуглить app ideas list.
У «Злых марсиан» есть крутая инициатива Cult of Martians: они публикуют задачи по реальным опенсорс-проектам, можно выбрать любую, сделать её и получить в портфолио строчку о вкладе в опенсорс.
Примечание редактора: «Хекслет» подготовил репозиторий с тестовыми заданиями от известных компаний. Также у нас есть opensource-проект Codebattle, в котором может поучаствовать каждый желающий разработчик с любым уровнем подготовки.
Д.Д.: Как вы считаете, сколько нужно среднестатистическому человеку времени, чтобы изучить фронтенд-разработку и претендовать на позицию джуниора? Здесь без учёта индивидуальных особенностей, грубое среднее значение.
А.Р.: Если учиться фултайм, думаю, хватит от 6 до 9 месяцев, чтобы заложить качественный фундамент и устроиться на работу. Если срезать углы и идти на поводу у рынка (изучать сиюминутно популярные фреймворки вперёд основ), можно и быстрее устроиться, наверное.
Д.Д.: По вашему мнению, каждый ли может научиться разработке, или эта сфера для избранных? Какими качествами должен обладать человек, чтобы стать успешным разработчиком?
А.Р.: Промышленная разработка — точно не сфера для избранных. Это ремесло, которому должны учить скорее в ПТУ, чем в вузах. Сложно выделить какие-то определённые качества. Я бы сказал, что в первую очередь нужен интерес. Если человеку интересна разработка, у него всё получится.
Д.Д.: Обучение программированию связано с трудностями и необходимостью дисциплинированно работать. Вы наверняка тоже сталкивались с трудностями и барьерами. Как их преодолевали? Можете что-то посоветовать новичкам? Что делать, когда опускаются руки?
А.Р.: Мне кажется, любое обучение связано с трудностями и требует дисциплины. Как я уже сказал, в первую очередь помогает искренний интерес; лично мне очень сложно заниматься чем-то, что мне не интересно. Могу посоветовать курс Learning How to Learn, в котором как раз рассказывают, как эффективнее учиться и справляться с прокрастинацией.
Д.Д.: Куда человеку лучше идти работать после получения диплома или сертификата? Это должна быть крупная компания, или можно выбрать небольшую студию, фриланс? К чему стремиться, чтобы стать хорошим специалистом и хорошо зарабатывать?
А.Р.: Надёжнее начинать со средней или крупной компании: выше вероятность, что в ней уже налажены процессы и выстроена инженерная культура. Но в первую очередь важны люди, с которыми вы будете работать: работу вы будете делать везде примерно одинаковую, а крутые и опытные коллеги могут сильно ускорить ваш профессиональный рост.
Я работал только в продуктовых компаниях и с аутсорсом не сталкивался, но исходя из рассказов знакомых, я бы не советовал идти в аутсорс.
Чтобы стать хорошим специалистом и хорошо зарабатывать, нужно прокачивать не только технические навыки, но и софт-скиллы (психология, коммуникация, решение конфликтов и вот это всё). Важно помнить, что вам платят в первую очередь не за красоту кода, а за решение задач бизнеса.
Д.Д.: В Хекслет часто приходят в зрелом возрасте (30+). Есть кейсы, когда человек получает новую профессию и находит работу джуном в 30+ и даже в 40+ лет. По вашему опыту, есть ли проблема возраста (эйджизм) в сфере разработки? Стоит ли учиться в 30+, или эта отрасль для тех, кому 18?
А.Р.: Мне сложно оценить ситуацию в отрасли, потому что я слишком молодой. По моему опыту, работодателям важно, чтобы специалист хорошо справлялся со своими задачами и чтобы у него была понятная мотивация. Я наблюдал такое проявление эйджизма: работодатель охотнее нанимал молодых кандидатов из-за того, что они чаще увлечены разработкой и горят ей, а не относятся к ней как к обычной работе. Но такое чаще встречается в стартапах, и я думаю, что зрелые кандидаты сами будут рады избежать таких работодателей.
Д.Д.: Насколько, по вашему мнению, важны для разработчика софт-скилы? Какими софт-скилами должен обладать хороший специалист?
А.Р.: Как я уже говорил, софтскилы важны. Любому разработчику приходится взаимодействовать с людьми, будь то заказчики, менеджеры, дизайнеры или другие программисты. В основном нужно уметь вести переговоры, доносить и отстаивать свою точку зрения. Нужно уметь говорить руководству «нет». Нужно уметь открыто обсуждать проблемы и признавать ошибки.
Рекомендую подкаст Soft Skills Engineering о развитии софтскилов для инженеров.
Д.Д.: Разработчику приходится учиться всю жизнь. Как вы считаете, хороший специалист должен копать вглубь или вширь? Например, фронтендеру лучше прокачиваться в своём направлении, углубляться в технологии, изучать фреймворки, библиотеки? Или лучше расширять кругозор, знакомиться с бэкендом, учить серверные языки?
А.Р.: Нужно прокачиваться и вширь, и вглубь. В начале пути нужно будет копать вглубь, чтобы овладеть азами, а затем можно начинать прокачиваться вширь. Стоит изучить основы дизайна, потому что фронтендерам тоже нужно принимать решения за дизайнера (например, когда тот не продумал некоторые состояния интерфейса). Понимание серверной разработки будет полезно для общения с бэкендерами и проектирования API. Стоит прокачаться в тестировании, управлении проектами, психологии. Ну и, конечно, полезным будет понимание предметной области продукта, который вы разрабатываете.
Д.Д.: Дайте, пожалуйста, совет читателям Хекслета. Как эффективно обучаться, как стать хорошим специалистом?
А.Р.: Для эффективного обучения я уже посоветовал курс Learning How to Learn. От себя могу добавить, что залог эффективного обучения и успеха в работе — интерес к тому, чем занимаешься. Остальное приложится!
Д.Д.: Спасибо за интересные ответы!
А.Р.: Успехов читателям!