Сперва поговорим о том, какие же все таки навыки мне понадобились для переезда, а точнее для получения рабочей визы L1B.
Навыки
- Английский язык. Конечно же, без знания языка вам не обойтись. Необходим уровень не ниже upper-intermediate, в противном случае у вас будут трудности с прохождением собеседований, общением с коллегами и ведением полноценной разработки.
- HTML/CSS. Несмотря на существование библиотек компонентов и нелюбовь фронтэндеров к верстке, вам нужно знать HTML и CSS на высоком уровне. Обратите внимание на Flexbox, Grids, Repaint/Reflow, CSS анимации, адаптивную верстку. Также рекомендую к изучению ресурс от Google для веб-разработчиков.
- GIT. Кроме базовых команд важно знать interactive rebase, cherry-pick, git bisect, merge strategies, branching strategies: особенно git flow.
- Монорепозитории. Желателен опыт в работе с монорепозиториями: Lerna, Nx, Создание монорепозиториев на Nx.
- Javascript. Знаний только фреймворков будет не достаточно, поэтому еще изучаем:
ES6, ES7, ES8, ES9, ES10. Изучаем все нововведения и учимся использоваться их на практике.
Object.freeze, Object.seal, Object.preventExtension. Изучаем блокирование объектов, так как это популярный вопрос на собеседованиях.
Event-loop. По-моему, сейчас это любимый вопрос каждого интервьюера.
Map, WeakMap, Set, WeakSet.
Cookies, session storage, local storage. Вам будет нужно знать, чем они отличаются между собой и уметь правильно применять каждую из технологий в определенных случаях.
Шаблоны проектирования: Singleton, Module, Factory, Observer, Adapter и другие.
Архитектурные шаблоны: MVC, MVVM, MVP.
RequestAnimationFrame. Уделите этому методу больше внимания, особенно, если вам предстоит работать с анимацией.
Функциональное программирование: Функции высшего порядка, Чистые функции, Мемоизация, Каррирование.
REST и GraphQL. Не стоит зацикливаться на одном REST, GraphQL стремительно набирает обороты и большое количество проектов использует эту технологию. Если же вам предстоит работать с REST, то прочитайте про идемпотентность.
Long-polling. Long-polling - довольно старый подход, но даже сейчас он иногда используется в некоторых сферах, особенно в банковской.
Веб-сокеты. Шанс того, что вам на проекте попадутся веб-сокеты достаточно высок, поэтому рекомендую их знать. И в дополнение научиться работать с https://socket.io/.
Принципы программирования: SOLID, DRY, KISS, YAGNI. SOLID замечательный свод принципов и я бы посоветовал не просто прочитать, а научиться применять его в работе. Если вы сомневаетесь зачем нужен SOLID фронт-энду, то он прекрасно укладывается в приложения на React и Angular. Применение SOLID сделает код вашего приложения более качественным, поддерживаемым и расширяемым.
Алгоритмические задачи. В большинстве случаев вам придется решать алгоритмические задачи на собеседовании, поэтому готовимся на https://leetcode.com/ и https://www.hackerrank.com/.
Хорошим дополнением будут сертификаты об окончании курсов по javascript, чтобы подтвердить свою экспертность в посольстве. Например можно воспользоваться сертификацией от udemy.com, microsoft или курсами от edx.com.
- Препроцессоры. Здесь все просто - Sass, Less. Если работаете с React, то еще учимся работать с styled-components, jss, css-modules.
- Angular/React/Vue. Лично по-моему мнению Angular немного более распространен в США, чем React, а уж тем более чем Vue. Поэтому проект со знанием Angular будет найти проще. В идеале иметь продакшн-опыт и Angular, и React, тогда ваши шансы будут выше. Понимание инструментов и экосистемы вокруг них должно быть на высоком уровне, вы должны понимать как фреймворк или библиотека устроены “под капотом”. Так же как и с javascript сертификаты будут хорошим дополнением.
- Библиотеки компонентов. Учимся работать с material-ui, angular material, react.semantic-ui, ant design.
- Тестирование. Необходимо уметь писать тесты и понимать зачем они нужны, так что разбираемся в unit и integration тестировании. Умение писать E2E тесты будет дополнительным бонусом. Так же стоит знать про пирамиду тестирования.
- Типизация. Типизация должна стать для вас неотъемлемой частью разработки. Учимся работать с Typescript, необходимо понимание Generics, Enums, Utility Types.
- CI/CD. Вы должны понимать зачем нужен CI/CD и уметь пользоваться программным обеспечением для этих процессов. Чаще всего достаточно уметь запускать билд и делать релиз, знания уровня DevOps требуются редко. Учимся работать с Jenkins, Teamcity, AzureDevops.
- AWS / Google Cloud. Огромное количество проектов используют элементы этих сервисов. Я советую уметь с ними работать.
- Scrum / Kanban. Современный мир разработки помешан на Скраме, большинство коллег пытается развернуть его даже там, где он абсолютно не нужен. Соответственно, вам должно быть комфортно с ним работать. Учим методы оценки, термины, разбираемся как работать в скраме, а главное зачем он нужен и где его лучше применять.
- Soft-skills. Ваши soft-skills будут играть достаточно большую роль. Скорее всего, вы не получите четко поставленных и описанных задач, вам придется разбираться самим, что именно нужно сделать. Будет много коммуникаций по работе, коллеги с американских проектов предпочитают встречи и звонки для решения любых вопросов. Привычная нам в работе прямолинейность, жесткость и требовательность звучит грубо для американских коллег, всегда стоит учитывать эту разницу менталитетов, если не хотите, чтобы на вас пожаловались менеджеру в первую же неделю.
- Если претендуете на L1B, то вам будут необходимы специализированные знания. Под этим подразумевается экспертные навыки во внутренних разработках вашей компании, благодаря которым компания сможет доказать, что специалистов с подобными навыками на американском рынке просто нет.
Заключение
В итоге набирается довольно внушительный список навыков, но нужно учитывать, что переехать middle’ом практически не реально, а senior уже должен знать больше половины от предоставленного выше списка. Еще не стоит забывать, что эти навыки и технологии не являются абсолютной гарантией для переезда, каждый случай уникален и вам может понадобиться больше или меньше знаний. Составленный список помог в моем случае и надеюсь также будет полезен вам.