Cofense Engineering всегда ищет талантливых UI-инженеров. Эта статья подготовит вас к собеседованию и даст некоторое представление о жизни UI-инженера в Cofense.

Почему мы предоставляем шпаргалку для тех, кто хочет подать заявку на вступление в команду пользовательского интерфейса Cofense? В первую очередь потому, что мы не считаем уместным или полезным заманивать потенциальных членов команды неожиданными вопросами и процессами. Мы не устраиваем головоломки или сеансы с доской как часть процесса собеседования. Мы особенно не основываем ваш успех на том, сколько времени вы потратили на решение задач LeetCode, и нас не интересует ваша способность запоминать алгоритмы. Нам важно, как вы вписываетесь в команду, какой вклад вы можете внести в нашу команду, а также ваш уровень знаний в решении реальных задач фронтенд-разработки. Это руководство предназначено для того, чтобы донести до вас эти требования, чтобы вы были готовы к успеху во время собеседования.

Процесс собеседования для большинства разработчиков разочаровывает и утомляет. Многие из этих переживаний, как правило, состязательны, или, по крайней мере, так обстоит дело с точки зрения интервьюируемого. В Cofense мы предпочитаем избегать такого восприятия, насколько это возможно, помогая вам чувствовать себя подготовленными и способными показать себя с лучшей стороны.

Подача заявки на вакансию в нашей команде

Отделы по подбору персонала (независимо от размера) очень часто сталкиваются с огромным объемом поданных заявок. Это ограничивает количество времени, которое рекрутер может потратить на чтение каждого заявления. Таким образом, приложения, которые выделяются, как правило, имеют повышенные шансы на успех. Вы можете выделить свое приложение, потратив время на курирование своего резюме, чтобы оно сосредоточилось на ваших качествах, которые соответствуют рекламируемой должности. Хотите верьте, хотите нет, но сильное сопроводительное письмо, написанное специально для Cofense, и конкретная возможность помогут вашему заявлению выделиться еще больше.

Есть два общих подхода, которые вы можете использовать при подаче заявления. Один из них предполагает отправку как можно большего количества заявок в надежде, что это повысит ваши шансы на успех. Это игра чисел, но количество важнее качества. Второй подход включает в себя достаточное количество исследований потенциальных работодателей, а затем адаптацию вашего заявления, резюме и сопроводительного письма к каждой конкретной компании, которая тесно связана с вашими карьерными целями. Второй подход — это тот, которому будут следовать идеальные члены команды пользовательского интерфейса Cofense. Интересную статью, в которой больше рассказывается о преимуществах второго подхода, можно найти по адресу https://patrickxrivera.xyz/post/cold-outreach.

Процесс собеседования

Процесс собеседования включает в себя следующие шаги, причем шаг 1 начинается после того, как рекрутер определил ваше заявление как кандидат, который может соответствовать одной из наших открытых вакансий в команде пользовательского интерфейса:

  1. Начальный экран телефона с рекрутером. Рекрутер задаст несколько основных вопросов, чтобы определить, насколько хорошо вы можете вписаться в команду, спросит вас о ваших карьерных целях, расскажет немного о Cofense и ответит на любые ваши вопросы.
  2. Заполните краткий рабочий лист, который будет отправлен непосредственно менеджеру по найму.
  3. Технический экран с командой разработчиков — часть команды пользовательского интерфейса встретится с вами, чтобы задать более подробные технические вопросы и вопросы, подходящие для команды. На этом этапе вам также будут заданы некоторые технические вопросы высокого уровня и вопросы по межличностным навыкам. Директор также более подробно расскажет о команде и продуктах, охватываемых Cofense UI. Не стесняйтесь задавать любые вопросы, которые могут у вас возникнуть.
  4. Второй технический экран с командой разработчиков — часть команды пользовательского интерфейса встретится с вами, чтобы задать еще более подробные технические вопросы. Это будет включать в себя простое упражнение по парному программированию (например, найти и исправить ошибки в этом приложении). Обратите внимание, что в этом упражнении будут затронуты основные навыки разработки интерфейса, но также потребуются базовые знания Vue. Если вы еще не знакомы с Vue, вы, по крайней мере, захотите прочитать некоторые разделы документации Vue v2 и ознакомиться с событиями, директивами, циклами и формами на базовом уровне.
  5. Предложение
  6. Проверка биографических данных

Если у вас возникнут вопросы на любом этапе собеседования, свяжитесь со своим рекрутером, и он с радостью ответит на ваш вопрос или свяжет вас с соответствующим сотрудником.

Принятие решения

Несмотря на то, что многие считают процесс принятия решений сложной частью процесса собеседования, мы на самом деле находим его относительно простым. Рассмотрим эту статью от Джоэла Спольски, которая не только содержит множество жемчужин процесса интервью, но и лаконично описывает наш взгляд на то, как управлять процессом принятия решений. В частности, вот соответствующий вывод для этого раздела:

Никогда не говорите: "Может быть, я не могу сказать". Если вы не можете сказать, это означает, что нет найма. Это действительно проще, чем вы думаете. Не могу сказать? Просто сказать нет! Если вы стоите на заборе, это означает, что вы не нанимаете. Никогда не говорите: «Ну, я думаю, наймите, но меня немного беспокоит…». Это также отказ от найма. Механически переведите всю болтовню на «нет», и все будет в порядке.

Другими словами, мы продлеваем предложение только в том случае, если все, кто участвует в процессе найма, решительно "Да!"

Требования ко всем новым членам команды

В этом разделе подробно описаны качества, которыми должен обладать любой новый член команды (на любом уровне). Если вы заинтересованы в том, чтобы подать заявку на место в команде по пользовательскому интерфейсу в Cofense, внимательно прочитайте этот раздел. Если вам не хватает какого-либо из этих требований, ваш следующий шаг должен заключаться в том, чтобы определить, как вы можете развивать свой набор навыков, и отложить начало собеседования до тех пор, пока вы не выполните все эти требования. Здесь будут предложены некоторые предложения, которые помогут вам выполнить эти требования.

Высоко мотивированных

Ожидается, что инженеры пользовательского интерфейса в Cofense будут постоянно работать над тем, чтобы расти как профессионалы и как личности. Радуйтесь достижениям своей команды, но всегда стремитесь к лучшему. Вы можете продемонстрировать это, обсуждая примеры того, как вы работали, чтобы развиваться на протяжении всей своей карьеры. Существующие сотрудники открыто рассказывают о своих сильных и слабых сторонах, поэтому мы ожидаем того же от всех, кто подает заявку на вступление в нашу команду. Что касается ваших слабых сторон — что вы планируете исправить? Не менее важно: как вы способствуете улучшениям и изменениям в людях и процессах вокруг вас?

Исключительно организованный

Как разработчик пользовательского интерфейса в Cofense, вы будете играть заметную роль в команде инженеров, и это связано с рядом обязанностей. Балансирование нескольких задач, встреч, вопросов от других разработчиков в Cofense и т. д. требует отточенных организационных навыков. Вы должны уметь правильно расставлять приоритеты в своих различных обязанностях, сообщать о статусе заинтересованным сторонам и иметь возможность отслеживать все, над чем вы работаете. Вы будете получать запросы и вопросы от своего руководителя и других лиц, которые вы также должны уметь эффективно расставлять по приоритетам и эффективно выполнять. UI-инженеры в Cofense — это гораздо больше, чем просто дизайнеры, или разработчики JavaScript, или разработчики Vue, или дизайнеры API, или инженеры по обеспечению качества, или даже фронтенд-евангелисты. На самом деле мы все из этих вещей.

Увлечен фронтенд-разработкой

Разработка пользовательского интерфейса — это не просто работа, это часть команды разработчиков Cofense. Каждый член команды разработчиков заинтересован в том, чтобы постоянно расширять знания о своей профессии и делиться этими знаниями с остальной частью команды (а также с другими заинтересованными разработчиками в компании). Как вы следите за последними новостями в области фронтенд-разработки? Какие источники вы предпочитаете для справки, руководства и технических новостей? Насколько эффективно вы делитесь этими знаниями с другими членами вашей команды? Ваша страсть к фронтенд-разработке также может быть продемонстрирована глубоким и необычным знанием вашей профессии.

Напористый, но самосознательный и любезный

Когда нужно принять решение, вы его принимаете. Тем не менее, вы достаточно социализируете свое предложение, запрашиваете обратную связь и предоставляете разумный набор временных требований для реализации. Если вы чего-то не понимаете, вы говорите и не успокаиваетесь, пока путаница не исчезнет. Вы понимаете, что другие, вероятно, задают тот же вопрос и требуют разъяснений как для вас, так и для пользы вашей команды. У вас твердое мнение, и вы подкрепляете его здравой логикой, но понимаете, что не всегда у вас есть правильный ответ. Ваш разум открыт, и вас можно убедить изменить свою позицию перед лицом веских аргументов.

Отлично формулирует важные/технические концепции в письменной и устной форме

Cofense — это удаленная компания, в которой команда пользовательского интерфейса на 100% распределена по нескольким часовым поясам (охватывающим как континентальную часть США, так и восточную Европу). Важность эффективной и последовательной коммуникации значительно возрастает в удаленных компаниях, таких как Cofense. Эффективная коммуникация, пожалуй, является самым важным атрибутом любой удаленной организации. Таким образом, жизненно важно, чтобы каждый инженер в команде усовершенствовал свои коммуникативные навыки до такой степени, что все они могут объяснять высокотехнологичные концепции как техническим, так и нетехническим специалистам.

Это требование регулярно возникает на протяжении всего жизненного цикла разработки программного обеспечения в Cofense. Например, инженеры должны иметь возможность описать работу, которую они выполнили, в конце каждого спринта заинтересованным сторонам в понятных им терминах. Кроме того: инженеры должны иметь возможность регулярно общаться с командой разработчиков относительно потенциальных препятствий и неопределенности предстоящих задач. Усилия по сокращению технического долга должны быть описаны в терминах, которые помогут членам команды, не являющимся техническими специалистами, понять важность этих инициатив по сравнению с другими задачами.

Каждую неделю группы UI, UX и дизайнеров собираются вместе, чтобы обсудить, чему мы научились в наших соответствующих проектах, и определить, как мы все можем применить эти уроки во всем наборе продуктов компании. Выявление закономерностей, проблем и возможностей является частью вашей работы. Не менее важно эффективно донести эти элементы до большей команды.

Хорошее понимание основ фронтенд-разработки

Мы оставили лучшее напоследок. Неудивительно, что наша основная ответственность как разработчиков пользовательского интерфейса заключается в том, чтобы руководить разработкой всех продуктов Cofense. Ожидается, что все разработчики в команде пользовательского интерфейса Cofense будут иметь прочную основу, на которой можно будет основываться по мере их развития в нашей организации. Этот прочный фундамент состоит из фундаментальных знаний о современной фронтенд-разработке, которые подразделяются на следующие категории:

Автоматизированное тестирование
Тестирование — это большая часть того, что мы делаем здесь, в команде пользовательского интерфейса в Cofense. Тестирование помогает не только защитить наш код от регрессий, но и процесс написания тестов дает нам возможность пересмотреть нашу реализацию. Многие разработчики согласятся, что написание тестов часто бывает сложнее, чем написание кода, который нам поручили протестировать. Частично это связано с дополнительной сложностью, которая естественно возникает вместе с инструментами, необходимыми для эффективного написания этих тестов. Но есть и другие сложные аспекты написания тестов, такие как определение того, какие пути кода наиболее ценны для тестирования, и отказ от тех, которые не представляют особой ценности. Тестирование — это один из навыков, который улучшается не только с учебой, но и с опытом. Короче говоря, вы должны быть в состоянии продемонстрировать опыт написания автоматизированных тестов с использованием одной или нескольких современных платформ и обсудить, как вы преодолели некоторые проблемы, характерные для написания и поддержки этих тестов.

Бонусные баллы за работу с любой средой тестирования end-to-end/WebDriver.

Знание и опыт работы как минимум с одним современным фреймворком одностраничных приложений
В Cofense мы глубоко инвестируем в Vue.js и его экосистему и предвидим, что эти инвестиции продолжатся в далеком будущем. . Само собой разумеется, что мы бы предпочли, чтобы любой, кто хочет присоединиться к команде пользовательского интерфейса, имел опыт работы с Vue на профессиональном уровне. Однако мы доказали, что опыт работы с Vue.js не требуется, чтобы быстро стать полноправным членом нашей команды. Несколько членов нашей команды пришли на борт без какого-либо опыта работы с Vue и смогли добиться успеха после завершения процесса адаптации. Важен предыдущий опыт работы с одной или несколькими современными платформами одностраничных приложений, такими как React, Angular или Ember. На самом деле, глубокое понимание хотя бы одного другого фреймворка, по-видимому, дает еще больше шансов быстро освоить Vue. Но чем можно объяснить это наблюдение? По правде говоря, между всеми современными платформами SPA существует значительное совпадение. Vue специально заимствует концепции и основы дизайна у React, Angular, и Ember. Способность вести разумную дискуссию во время ваших интервью относительно уровня абстракции, обеспечиваемого хотя бы одной из этих платформ, — это один из способов продемонстрировать эти знания. Позже в процессе вы должны будете применить эти концепции, чтобы понять и отладить простое приложение Vue.

CSS
Вы должны понимать основные концепции CSS. Как рассчитывается специфичность и почему это важно? Каковы некоторые важные последние достижения в CSS и как вы можете применить их, чтобы упростить предоставление исключительных возможностей пользователям и другим разработчикам в вашей команде? Как можно организовать стили компонентов в большом проекте? Что такое блочная модель и почему важно это понимать?

HTML/Доступность
Удивительно, как далеко вы можете продвинуться в плане доступности, просто применяя HTML в своем проекте в соответствии со спецификацией. Полное представление о требованиях к доступному веб-приложению требует исключительного понимания HTML. Например, легко распространить атрибуты aria по всей разметке, но мастерство владения HTML приходит, когда вы понимаете конкретные сценарии, когда использование атрибутов aria абсолютно необходимо и когда альтернативные подходы более разумны.

Другие вопросы, на которые вы должны быть в состоянии ответить:

  • В чем разница между атрибутом и свойством?
  • Что такое «семантический HTML»? Приведите несколько примеров правильного и неправильного использования тегов.
  • Для элемента действия — когда уместно использовать ‹button› вместо ‹a›? Когда ни один из них не является разумным, и как вы можете обеспечить доступность в этом случае?
  • Какой стандарт обычно используется для определения уровня доступности веб-приложения?

Приведенный выше список вопросов является лишь примером. Короче говоря, вы должны очень хорошо разбираться в HTML, чтобы добиться успеха в качестве фронтенд-разработчика в Cofense.

JavaScript (ES 2015+)
Понимание одной или нескольких платформ SPA важно, но недостаточно. Не менее важно (если не важнее) понимать основы этих фреймворков. В частности, владение JavaScript как языком является одним из наиболее важных видов оружия, которым может владеть разработчик интерфейса. Вы должны быть в курсе эволюции языка (как описано в спецификации языка ECMAScript, выпуски которой выпускаются ежегодно). Вы должны уметь объяснять и использовать фундаментальные понятия, такие как:

  • Обещания
  • Ajax-запросы и как их можно сделать без использования каких-либо библиотек
  • Объем
  • Контекст
  • Наследование
  • Делегирование и распространение события (подсказка: есть 2 этапа). Как одно относится к другому? Почему вы можете использовать делегирование событий?
  • Как вы можете использовать новые функции JavaScript или веб-API во всех браузерах, даже если их поддержка непоследовательна?
  • Различия между var, let и const
  • Что такое замыкание и почему оно важно для JavaScript?
  • Обход и манипулирование DOM
  • Работа с JSON
  • Встроенные в язык общие служебные функции для работы с массивами, объектами и примитивами.

Многие фронтенд-разработчики на удивление ограничены в понимании основ языка, с которым мы все работаем ежедневно. Значительные пробелы в ваших знаниях сделают эволюцию инженера пользовательского интерфейса удивительно разочаровывающей. Если вы не освоили хотя бы вышеперечисленные концепции, используйте это как возможность сделать шаг назад и устранить эти недостатки.

Требования к новым старшим инженерам

В Cofense старшие инженеры имеют уровень «3» и выше. Мы расширили требования к старшим инженерам в команде пользовательского интерфейса, которые описаны ниже. Если не указано иное, все требования относятся к позициям SE3 и выше:

Уверенное понимание и опыт работы с препроцессорами CSS

Это может включать SASS, SCSS и даже PostCSS. В Cofense мы полагаемся на различные препроцессоры, чтобы упростить создание сложных стилей для нашего набора продуктов.

Фасилитация/руководство ревью кода

Обеспечение максимально возможного качества кодовых баз, а также обмен прогрессом и знаниями между разработчиками по всем продуктам — очень важная часть нашей повседневной деятельности в команде пользовательского интерфейса в Cofense. Обзоры кода помогают нам достичь и того, и другого. Как старший инженер в Cofense, вы должны иметь опыт проведения проверок кода. Уметь обсуждать, как коммуникация влияет на эффективность и действенность код-ревью. Вы также должны быть в состоянии описать свой процесс проверки кода. Бонусные баллы, если у вас есть идеи по автоматизации, которые могут ускорить процесс и снизить нагрузку на рецензента.

Уверенное понимание и опыт работы с git

Мы сильно полагаемся на git во всех наших кодовых базах, а также на стратегию ветвления git-flow. Чтобы помогать другим членам команды при возникновении проблем, требуется глубокое понимание git.

Всестороннее понимание интерфейсной безопасности (требуется для старшего уровня SE4+)

Это включает в себя опыт реализации строгих CSP. CORS также иногда важен, так как это касается модели безопасности браузера. CORS — это редко понятная тема, и старшие инженеры SE4 должны иметь возможность консультировать других из всех сообществ практиков. Поскольку CORS предоставляет механизмы для обхода политики браузера Same Origin Policy, разработчики SE4 также должны иметь четкое представление об этом.

Уверенное знание HTTP (требуется для SE4+)

Как лучше всего использовать все распространенные глаголы/методы (HEAD, GET, PUT, POST, PATCH)? Чем HTTP 1.1 отличается от HTTP/2 в контексте разработки интерфейса? Как заголовки и пути HTTP влияют на кеширование ресурсов в браузере?

Поскольку команда пользовательского интерфейса сотрудничает с бэкэнд-разработчиками в отношении конечных точек API, вы также должны иметь возможность разумно говорить о различных классах кодов состояния ответа.

Удобство работы со средами *nix (требуется для старших версий SE4+)

Вся команда разработчиков использует MacBook Pro под управлением MacOS. Наши услуги размещаются в среде Linux, и мы используем образы Docker на базе Linux как при разработке, так и при производстве большинства продуктов. Удобство работы с Unix-подобными и Linux-средами важно для оказания помощи остальной команде по мере необходимости.

Заметный демонстративный опыт за пределами традиционной разработки пользовательского интерфейса (требуется для SE4+)

Это может включать следующее:

  • Ruby/Rails (поскольку у нас есть продукты с бэкэндом Rails)
  • Java (у наших новых продуктов есть серверные части на основе Java)
  • Ruby + Watir + Rspec (для помощи в разработке наборов рабочих процессов/сквозных тестов)
  • AWS/Docker (наши продукты на основе SaaS используют AWS, а Docker является ключевым компонентом наших сред разработки и производства)

Знания, не связанные с традиционной разработкой пользовательского интерфейса, полезны при сотрудничестве с другими сообществами практиков в Cofense во время проектирования, реализации и устранения неполадок.

Приятно иметь

Опыт работы с TypeScript

Нашим основным языком интерфейса долгое время был TypeScript. Хотя опыт работы с TypeScript очень полезен, у разработчиков, отвечающих всем вышеперечисленным требованиям, не должно возникнуть проблем с тем, чтобы быстро освоиться и продуктивно работать с TypeScript (особенно для тех разработчиков, которые имеют опыт работы с другими языками со статической типизацией, такими как Java).

Вью опыт

Как упоминалось ранее в этой статье, несмотря на то, что опыт работы с Vue очень полезен, у разработчиков со значительным опытом работы как минимум с одной другой платформой SPA не должно возникнуть проблем с продуктивной работой с Vue за короткий промежуток времени.

Опыт работы с JSON:API

Все наши новые пользовательские интерфейсы (а также многие из наших существующих пользовательских интерфейсов) управляются API, которые следуют спецификации JSON:API. Поскольку разработчики внешнего интерфейса сотрудничают с командой бэкенда во время создания и развития этих конечных точек, разработчикам пользовательского интерфейса очень полезно ознакомиться с этой спецификацией.

Надеемся, что эта статья предоставила вам ценную информацию о команде пользовательского интерфейса Cofense и наших ожиданиях от новых членов команды. Если вы заинтересованы в присоединении к команде, пожалуйста, подать заявку на нашем сайте вакансий.