Дмитрий Майоров: «В более чем 40% сайтов в мире есть часть кода, который я написал»
Дмитрий Майоров пришел в разработку из сферы графического дизайна 11 лет назад. Поначалу он интересовался созданием сайтов на любительском уровне и помогал в типографии своему отцу. Сегодня Дмитрий работает в одной из крупнейших компаний США, получил несколько повышений, выступает с докладами на конференциях WordCamp (официальная конференция по WordPress. — Ред.), а его проекты не раз получали престижные награды и премии. — Дмитрий, расскажите, как пришли в разработку, чем привлекла эта сфера? — Вышло случайно. Я работал у отца в типографии графическим дизайнером и ничем другим не занимался. В основном делал дизайн брошюр, визиток, буклетов, подготавливал к печати макеты. Мне стало интересно расширить свои способности, и я стал интересоваться дизайном сайтов. Через некоторое время к отцу в типографию пришел заказчик, которому нужно было сделать сайт. Мы наняли еще одного сотрудника, в чьи обязанности входило написание кода. Так мы сделали сначала один маленький проект, потом второй. Взяли третий, и сотрудник перестал выходить на связь под конец года, а дедлайн сайта был в январе. Я остался с заказом и дедлайном один на один и потратил новогодние праздники, чтобы разобраться, как работает Joomla! (система управления содержимым (CMS), которая написана на языках PHP и JavaScript, в качестве хранилища использует базы данных СУБД MySQL, свободное программное обеспечение, распространяется под лицензией GNU GPL. — Ред.) и как в принципе создавать сайты. Успел сдать проект, и несколько месяцев не занимался разработкой на заказ, просто интересовался для себя. Потом я упал с велосипеда и сломал спину. Чтобы восстановиться, мне нужно было лежать в кровати почти шесть месяцев, и я решил потратить это время на углубленное изучение разработки. Я попросил отца сделать мне такой стол, чтобы я мог в лежачем положении работать на компьютере. Как только он мне его сделал, в студию пришел еще один клиент на разработку сайтов. Я решил, что возможность хорошая. Мы согласились, я взял заказ и делал его, пока восстанавливался от травмы. Проект был интересный и довольно сложный. Мы создавали сайт для строительной компании по продаже квартир. Мне нужно было разработать много функционала, который даже сейчас не на всех сайтах есть. Так, пользователь мог зайти на сайт, выбрать дом, этаж, квартиру, посмотреть планировку и оставить запрос, чтобы забронировать понравившуюся квартиру. По этим запросам сотрудники компании перезванивали клиенту. Сайт вышел действительно хорошим. Постепенно появились еще заказы. Какие-то приходили через двоюродного брата от московской компании. А еще я начал делать шаблоны сайтов на продажу и через эти шаблоны получил заказ от студии из Лос-Анджелеса, начал с ними работать, и потом меня пригласили в штат в компанию 10up (цифровое агентство, которое создает интерфейсы, разрабатывает веб-сайты и приложения. — Ред.), в которой я работаю и сейчас. — Мы еще вернемся к более подробному разговору о работе в 10up. Давайте пока резюмируем, каков у вас текущий опыт работы и навыки? — Я занимаюсь разработкой с 2012 года. Получается, уже больше 11 лет. За это время я успел поработать с различными системами управления сайтов: Joomla!, хоть сейчас ей уже никто не пользуется, WordPress, Shopify. Делал кастомные сайты на других платформах типа Sanity.io, Gatsby, Next.js. Я специализируюсь на фронтенд-разработке. В основном, пишу код для видимой пользователю части сайта. Это кнопки, блоки текста, слайдеры, баннеры и остальные элементы страницы, интерфейсы. Все то, с чем пользователь непосредственно взаимодействует, когда ему нужно найти информацию, заказать, оплатить и т.д. Я работаю с HTML, CSS и JavaScript, фреймворками, например React (библиотека JavaScript с открытым кодом, используется для разработки внешних пользовательских интерфейсов. — Ред.). Непосредственно разработкой я занимаюсь и сейчас. Но в компании у меня должность ведущего фронтенд-разработчика, и в мои обязанности входит не только уметь писать код, но и управлять разработкой кода, то есть ставить задачи другим разработчикам, проверять их работу, встречаться с клиентами, понимать язык клиента и переводить их требования на язык, который понимают разработчики. Одна из моих сильных сторон — умение видеть систему в бессистемных вещах. Например, когда мы получаем макет на создание сайта, я хорошо разбираюсь в том, как его разложить на маленькие компоненты и как их все привести в систему, чтобы разработка и последующее поддержание проекта велись легко. Наверное, поэтому меня в компании любят и дали повышение несколько раз. Первый серьезный опыт работы по специальности — Интересно узнать, как вы к этому пришли. Расскажите о первом серьезном опыте работы по специальности. — Наверное, первый фултайм-проект я сделал в Rareview (агентство цифрового дизайна и маркетинга, сертифицированное корпоративное агентством WordPress VIP, которое разрабатывало сайты и приложения для таких брендов, как REI, ThedaCare, WGN America, Municipal, BitTitan. — Ред.) или 10up. Почему я говорю «или — или»: когда я начал работать с Rareview, это так же, как и в типографии отца, была попроектная работа. Я сделал сайт, его приняли, потом мы несколько месяцев не работали вместе. Затем мне дали еще проекты. На более-менее постоянной основе я стал работать в Rareview уже ближе к третьему году в компании. Первая серьезная должность на фуллтайм — в 10up, куда меня пригласили на работу по специальности фронтенд-разработчик. — А как вы вообще вышли на клиентов из США? — После нескольких первых проектов я открыл для себя WordPress и подумал, что создавать шаблоны на продажу — хорошая идея. Я сделал несколько шаблонов, и один из них купил основатель студии Rareview. Он написал мне на e-mail, задал несколько вопросов о шаблонах и спросил, делаю ли я проекты на заказ. Сначала мы сделали первый проект SWEETWORXX. Это было интересное приложение, которое позволяло людям заказывать техосмотр авто не выходя из дома. Пользователь открывал приложение, выбирал, что хочет сделать с машиной, приезжал специалист, забирал машину, отвозил в технический центр, где делали все, что нужно, и привозили обратно. За процессом можно было следить через телефон. Это приложение выиграло награду Standard of Excellence oт The Web Marketing Association, а потом его купила компания BOSCH. Насколько я знаю, купила, чтобы закрыть, так как делала аналогичные продукты или что-то в этом роде. Это был первый опыт работы с клиентами из США, и потом я продолжал делать для них проекты. Работа в в 10up, 3 лучших кейса, выступления на конференциях — А потом вы стали выступать на конференциях и знакомиться с полезными людьми из индустрии. Именно это привело вас в 10up. Расскажите подробнее, как это произошло? — Я выступал на многочисленных конференциях, WordCamp — это официальная конференция разрабочиков на WordPress. Там бывают разные доклады, в том числе на общие темы разработки. Я решил выступать на конференциях после того, как в Москве посетил WordPress-митап, где познакомился с Костей Ковшениным, который организовывал конференцию WordCamp. На тот момент я работал с сестрой над проектом интернет-журнала Kattie May. Нужно было быстро публиковать фотографии с разных ивентов, причем делать так, чтобы они хорошо индексировались поисковиками. Для этого важно правильное заполнение alt-тега у фотографий. Я хотел автоматизировать весь процесс, много времени потратил на то, чтобы понять, как в WordPress заполняется этот тег, и сделал автозаполнение при загрузке фотографий на сайт. Я подготовил доклад на эту тему и выступил с ним сначала на митапе. Потом меня пригласили на первую конференцию. Я также продолжал приезжать с докладами, основанными на опыте решения какой-нибудь интересной или трудной задачи, на которую тратится иногда чересчур много времени. Мне хотелось поделиться своими находками с другими разработчиками, чтобы они могли быстрее решать аналогичные задачи. Благодаря моим выступлениям на конференциях, публикациям меня заметили в 10up и пригласили на работу. Я получил письмо на почту от их HR-менеджера с предложением присоединиться к команде. Меня позвали на должность фронтенд-разработчика. Я сразу стал работать на одном из крупных проектов, где было несколько фронтенд-, бэкенд-разработчиков, проект-менеджеров. Проект был очень сложный и быстрый. Мне было интересно, поэтому я стал активно участвовать в процессе, замечал вещи, которые можно улучшить. Стал предлагать свои решения, начал более активно участвовать в разговорах с клиентами, презентовать альтернативные решения, если видел, что то, что они просили, было не оптимально. Руководство всегда замечает людей, которые не просто закрывают задачи и делают то, что им говорят, но смотрят на проект в целом. В конечном итоге это сохраняет ресурсы, время, деньги как клиенту, так и компании. Меня заметили и дали повышение до должности Senior Front-End Engineer. И потом, когда я в этой должности проработал несколько месяцев, меня еще раз повысили, потому что я продолжал активно участвовать в этом и других проектах. Например, в тех, которые мы делаем для себя, внутри компании. Это стартовые шаблоны для сайтов, фреймворки. — Какая ваша зона ответственности, какие задачи вам доверяют? — Сейчас я Lead Front-End Engineer и отвечаю за внешнюю часть сайтов. Когда мы работаем над проектом, обычно функционал делится на фронтенд и бэкенд. Бэкенд — это функциональная часть: работа с базами данных, со сторонними API, которые соединяют наши сайты с третьими приложениями и притягивают с них данные. А моя задача — делать так, чтобы сайты открывались быстро, чтобы интерфейсы были адаптивными, доступными и чтобы разработчики в моей команде знали, над чем трудиться каждый день. И одно из главных — чтобы им было понятно, как работать на проекте. Я не только пишу код сам, но и ставлю задачи другим разработчикам, проверяю их код и готовлю документацию для сайтов, делаю расчеты, сколько по времени займет работа над тем или иным компонентом сайта. Также в мои обязанности входит общение с клиентами. Я обычно присутствую на встречах, чтобы понять, чего клиент хочет, какие задачи стоят перед проектом. Тогда я могу посоветовать решение, которое будет отвечать этим задачам. Иногда клиенты задают вопросы о том, как сделать лучше на ранних стадиях проекта, когда мы только планируем работу. Я присутствую, чтобы помочь определиться с верным направлением. — Знаю, что у вас много интересных и сложных кейсов. Давайте выберем три самых впечатляющих и поговорим о них. — Первый кейс — для REI. Это компания, которая продает товары для активного отдыха и спорта в США: кемпинга, скалолазания, сноуборда, бега. У REI 165 розничных магазинов в 39 штатах. Компания стала клиентом Rareview после того, как мы попали в список партнеров WordPress VIP (гибкая контент-платформа, которая ведет к созданию корпоративной экосистемы для ряда мировых брендов, таких как Salesforce, Slack и The New York Post. — Ред.). Я помог Rareview получить это партнерство. Задача состояла в том, чтобы разработать приложение, которым сотрудники пользуются при выкладке товаров на прилавке внутри и снаружи магазина. У них очень подробная инструкция о том, какие товары и как должны лежать на полках, с какими можно сочетать, а с какими нельзя. Вплоть до того, с какими постерами их выкладывать. Приложением пользуются как сотрудники, в чьи обязанности входит составление инструкций, так и персонал магазинов. Перед нами стояла двойная задача: сделать приложение удобным для обеих групп. — С какими сложностями пришлось столкнуться, чтобы реализовать проект? — Сложностей было несколько. Одна из них — предыдущее приложение устарело, работало медленно, и было неудобно им пользоваться. Сотрудники не заполняли инструкции через интерфейс, а выкладывали картинки, которые медленно подгружались, и приложение тормозило. Поэтому нужно было сделать новое приложение, которое, в первую очередь, открывалось бы на iPad, потому что большинство сотрудников пользуются этой техникой, и уже потом для всех остальных устройств. Мы это сделали, создали интерфейсы на основе дизайн-системы REI Cedar. В довольно короткие сроки мы запустили начальную версию — всего за несколько месяцев — в очень сжатом функционале и потом дорабатывали. Дополнительная сложность была в том, что приложение должно было находиться на том же сервере, что и главный сайт компании. Для этого мне пришлось отладить процесс публикации кода двух команд: нашей и той, которая работала над основным сайтом. У нас был единый репозиторий. Получилось успешно. Запуск приложения тоже прошел отлично. Клиент остался доволен. Я работаю уже в другом агентстве, но благодаря четкому выполнению первого заказа, REI остается клиентом Rareview до сих пор. Во всех магазинах штатов сотрудники пользуются приложением, которое я написал в команде Rareview. — Впечатляет! Расскажите про другие проекты, которыми гордитесь. — Проект StoryCorps — некоммерческой организации, которая записывает, хранит и распространяет истории. Штаб-квартира проекта в Бруклине, штат Нью-Йорк. StoryCorps записала более 300 000 интервью с более чем 600 000 участниками во всех 50 штатах, чтобы сохранять эти истории для будущих поколений. 10up делал для компании приложение, которое поддерживает необходимый для этого функционал. Мне было интересно работать над задачей, потому что приходилось решать сложности, связанные с лимитами серверов. Одна из сложностей состояла в том, что аудиофайлы, которые записывали пользователи приложения, весили много. Плюс их нельзя публиковать просто так, а нужно пропускать через сервис, который отслеживает, есть ли ненормативная лексика и прочие моменты. Процесс был автоматизирован. Я руководил фронтенд-разработкой и помогал поддерживать интерфейс приложения: чтобы он получился адаптивный, удобный для пользователей и чтобы его легко было поддерживать. Интересный факт: когда мы его опубликовали, Google выпустил статью и даже дудл об этом проекте. По ссылке с Google Doodle люди переходили на сайт. — Вы сказали, что над проектом было интересно работать, потому что было много сложностей. Вам нравится разбираться в сложных вещах? — Да. Даже когда я работал над шаблонами на продажу, изучал код ядра WordPress и заметил несколько ошибок, которые никто до меня не замечал. Так как WordPress — это ПО с открытым кодом, так называемый open source, то любой человек может посмотреть его, но не у каждого есть способности заметить ошибки и исправить. Я нашел несколько ошибок, поправил их, и код одобрили модераторы, которые занимаются поддержкой ядра. Мне приятно думать о том, что в более чем 40% сайтов в мире есть часть кода, который я написал. В свободное время я продолжаю этим заниматься до сих пор. Награды и престижные премии — Расскажите про награды. — У 10up много наград за разработку, и самая главная — это премия Webby за разработку сайта Белого дома. Это один из наших знаковых проектов. Когда я работал в Rareview, мы также получили несколько наград, в том числе Standard of Excellence, Award Star Award by CSS, UI Design Award, UX Design Award, Innovation Design Award, Special Kudos Design Award. — Какую награду получать было приятнее всего и почему? — За сайт фестиваля Sawdust мне было приятнее всего получать награду, потому что там сложная фронтенд-разработка. Мы долго трудились, ведь на сайте было много анимации и нестандартных решений. И мне приятно, что наши старания оценили высоко. — А как вы стали принимать участие в судействе? — Однажды я получил письмо от организации AIVA, которая пригласила как судью на конкурс. Они меня нашли через предыдущую компанию, в которой я работал, или проекты, которые я делал. Возможно, кстати, через проект Sawdust, потому что он появился на нескольких площадках, получил награды, стал заметным. До сих пор продолжаю принимать участие в судействе, и следующий конкурс будет W3 Award, где я тоже буду судьей. Индустрия и перспективы развития отрасли — Расскажите про индустрию, в которой работаете. В чем ее специфика? Чем интересна? — Если рассуждать об индустрии в рамках 10up и проектов, которые мы делаем, то нужно понимать: это проекты для крупных высоконагруженных компаний. Специфика в том, что даже очень маленькие решения, незначительные, казалось бы, на первый взгляд, могут сильно влиять на работу сайтов. Приведу пример. Некорректно сделанный запрос к базе данных на маленьких проектах никто не заметит, потому что на сайт заходит 100 человек в день. На крупных проектах это будет заметно, потому что, когда заходят тысячи, сотни тысяч, а иногда миллионы пользователей на сайт, все должно быть очень хорошо оптимизировано. В рамках наших проектов мы уделяем этому много внимания. Мы тестируем сайты под нагрузкой, тестируем крайние случаи, смотрим и оцениваем, как будет себя вести компонент в той или иной ситуации, и это очень интересно. Подобное внимание к деталям — как когда собираешь пазл. Ты постоянно думаешь: «А что, если?» Этот опыт сложно получить, когда работаешь на малых проектах и в маленьких студиях. В этом, пожалуй, специфика. Если говорить про фронтенд-разработку в целом, очень интересно сейчас наблюдать за тенденциями. Естественно, искусственный интеллект сильно помогает сейчас и точно никуда не денется. Я каждый день использую Github CoPilot (инструмент с искусственным интеллектом, совместная разработкаGitHub и OpenAI, помогает пользователям таких интегрированных сред разработки, как Visual Studio Code, Visual Studio, Neovim и JetBrains в автодополнении кода. — Ред.) и Chat GPT для решения простых задач. Это очень ускоряет работу. За интеграцией искусственного интеллекта в процессы разработки интересно наблюдать. Я думаю, что в ближайшие годы искусственный интеллект не заменит фронтенд-разработчиков, но мы сможем делать больше, благодаря тому, что будем ставить мелкие задачи этим инструментам и получать результаты быстрее. Постановка крупной задачи — более сложный процесс, который я не знаю, когда мы сможем делегировать ИИ. Думаю, что придем в конечном итоге, но все же это произойдет не так быстро. Я каждый день пытаюсь заменить себя искусственным интеллектом, но пока не получилось. Условно, я не могу открыть Chat GPT и сказать: «Мне нужен сайт для инвестиционной компании. Давай, вперед!» Для завершения этой задачи еще очень много промежуточных шагов, которые нужно сделать и на которые ИИ пока не способен. Нужно понять, какой будет дизайн, контент, откуда его брать, какие фотографии использовать на сайте. Какой у него будет адрес, на какую аудиторию он рассчитан, какая у него будет нагрузка, из каких стран его станут смотреть, каковы другие требования. Все это нужно тщательно проанализировать, сформулировать, дать ответы на эти вопросы и только потом начинать разработку. Возможно, когда-то искусственный интеллект сможет так детально продумывать проекты и научится задавать наводящие вопросы, а может, даже предугадывать. Пока это невозможно. Отдельные участки крупной задачи, которые я называл, можно оптимизировать с помощью ИИ. Но пока человек должен стоять на этапе постановки задач. — А если рассматривать техническую сторону вопроса, куда индустрия движется? — Мне интересно наблюдать за развитием JavaScript. Этот язык до сих пор популярен и набирает обороты. Мне кажется, это не поменяется в ближайшее время. HTML, CSS развиваются более медленно, но тоже интересно наблюдать, в частности, за процессом развития CSS. Ведь раньше какие-то задачи мы делали с помощью костылей, а сейчас они решаются довольно просто. Помню, когда только начинал разрабатывать, было множество статей про скругленные углы, а теперь это уже обычное свойство в CSS. Или создание колоночной структуры раньше тоже было непростой задачей. Сейчас в CSS есть много возможностей это сделать. Браузеры не отстают от развития CSS. Если раньше мы ждали несколько лет, пока новые свойства станут поддерживаться, то сейчас цикл сократился и CSS Grid (новый способ создания макетов, полноценная система верстки, доступная прямо в браузере. — Ред.) — один из примеров того, как быстро все браузеры стали его поддерживать. — Какие вы видите перспективы развития индустрии и собственные перспективы как профессионала? — Сейчас такое время, что про перспективы сложно говорить. Нужно просто быть очень внимательным и наблюдать за тем, что происходит в индустрии, не отставать. Я про это буду делать доклад на ближайшем WordCamp в августе. Порассуждаю о том, как не оставаться в зоне комфорта. Например, ты знаешь какой-то определенный фреймворк, тебе просто на нем работать, все задачи, связанные с ним, ты решаешь быстро. Но нет гарантии, что этот фреймворк останется популярным через год, два, три. Нужно уметь меняться. Важно к каждой задаче, которую решаешь, подходить отчасти с отношением новичка. Не полагаться всегда на инструменты, которые уже знаешь, а задавать себе вопрос, а как сейчас эту задачу решить. Год назад я решал ее вот так, а сейчас, возможно, есть новый инструмент, новый прием. Нужно всегда быть настороже.