Веб-разработчик широкого профиля – самая популярная профессия среди программистов. Таковы данные опроса, который провело сообщество Stack Overflow в 2016 году. Неудивительно, что вокруг полно онлайн и оффлайн курсов, на которых готовят таких специалистов и даже помогают ученикам найти высокооплачиваемую работу в новой профессии.
Среди прочего, популярные курсы есть у Lynda, Udacity, Coursera, Thinkful, General Assembly и ещё много где. Помимо онлайн-курсов существуют очные ускоренные тренировочные программы, где люди получают необходимые разработчикам знания и умения.
Впрочем, эта статья не о том, где лучше всего учат веб-разработке, а о том, какие именно навыки наиболее важны, чтобы стать разработчиком широкого профиля и устроиться на работу, даже если раньше вы вообще никогда не кодили. Для составления инструкции я использовал три источника:
- Учебные программы большинства курсов в 2017 году.
- Личный опыт: как я проходил собеседования на разные программистские позиции в прошлом и как я сам сейчас собеседую людей, желающих устроиться на должность разработчика широкого профиля в мою компанию.
- Истории и комментарии людей на Coderbyte о том, как они попали в тренировочный лагерь по программированию и потом получили работу.
Подробная инструкция
Разработчик широкого профиля умеет работать как с серверной, так и с клиентской частью приложения. Клиентская часть (или front-end) – это та часть приложения, которую видит и с которой взаимодействует пользователь. На серверную часть (back-end) приходится бизнес-логика, взаимодействие с базами данных, аутентификация пользователя, конфигурация сервера и т.д. Необязательно овладевать всеми навыками работы с серверной и клиентской частями, чтобы называться разработчиком широкого профиля. Достаточно уметь работать в обоих системах и понимать, что происходит при создании приложения.
Если хотите стать разработчиком широкого профиля в 2017 и получить первую работу в этой сфере, читайте внимательно: ниже приведен список того, что нужно изучить и освоить.
1. HTML/CSS
Почти каждый учебный курс по веб-разработке, неважно, проходит он онлайн или очно, начинается с изучения HTML и CSS, потому что это базовые структурные элементы сети. Если говорить просто, с помощью HTML вы наполняете сайт материалами, а с помощью CSS – стилизуете их. Вот список тем, связанных с HTML и CSS, о которых часто спрашивают на собеседованиях и которые потом всплывают в работе:
- Семантическая вёрстка
- Блочная модель СSS (нужно уметь объяснить, что это)
- Преимущества CSS-препроцессоров (Необязательно глубоко разбираться, как это работает, достаточно знать, что это и какая от этого польза разработчику).
- Медиа-запросы CSS – нужны для адаптивного дизайна на различных устройствах.
- Фреймворк для дизайна и верстки Bootstrap (несмотря на то, что многие онлайн-курсы и школы концентрируются на подробном изучении Bootstrap, на самом деле важнее иметь глубокие знания фундаментальный принципов CSS, а не специфических функций Bootstrap).
2. JavaScript
Язык JavaScript с каждым годом становится все популярнее. Постоянно появляются новые библиотеки, фреймворки и инструменты. По данным опроса Stack Overflow за 2016, JavaScript – самый популярный язык у всех разработчиков: его любят и серверные разработчики, и фронтендеры, и специалисты широкого профиля. Это единственный язык, который поддерживается браузерами по умолчанию. Также его можно использовать как язык серверной части (как будет показано ниже на примере Node.js).
Разработчик широкого профиля должен:
- Уметь работать с объектной моделью документов DOM, знать, что такое JSON и как им пользоваться.
- Разбираться в важных функциях языка: функциональный состав, наследование через прототипы, замыкание, делегирование событий, область видимости, функции высшего порядка.
- Знать, что такое асинхронный поток управления, промисы и колбэки.
- Понимать, как правильно структурировать код и разбивать его на модули. Также полезно уметь работать с webpack, browserify и инструментами сборки типа gulp.
- Уметь пользоваться как минимум одним популярным фреймворком (на многих курсах подробно объясняют, как работать с библиотекой или фреймворком типа React или AngularJS, но на самом деле намного полезнее разобраться в самом языке JavaScript, а не специфических функциях фреймворков. Как только вы будете уверенно чувствовать себя с JavaScript, выбрать основанный на этом языке фреймворк будет совсем несложно)
- Хорошо разбираться в коде jQuery. Он присутствует в большинстве приложений, так что его нужно знать несмотря на то, что есть мнение, что библиотека jQuery себя изжила и медленно умирает.
- Уметь работать с платформами тестирования и знать, почему они важны (некоторые считают, что это необязательный пункт)
- Знать новые полезные функции ES6 (тоже необязательно).
3. Язык для back-end разработки
Как только вы почувствуете, что разбираетесь в HTML, CSS и JavaScript, переходите к изучению языка для back-end разработки, который отвечает за операции с базами данных, аутентификацию пользователей и логику приложения. Все онлайн-программы и очные тренинги концентрируются на каком-то конкретном языке, но по сути нет никакой разницы, какой язык вы освоите, лишь бы вы понимали, что происходит, и разбирались в нюансах языка. Есть масса разных мнений по поводу того, какой язык для работы с серверной частью самый лучший. Я выбрал несколько популярный вариантов. Помните: неважно, какой язык вы выберете, главное – придерживаться этого выбора и изучать язык как можно глубже. Работа есть для всех языков из списка.
- Node.js: Отличный вариант, потому что это серверная реализация JavaScript, а значит, не придется учить новый язык. Именно поэтому на курсах и тренингах предпочитают преподавать Node.js. Наиболее популярный фреймворк, который вы, скорее всего, выберете в связке с Node.js, чтобы упростить разработку приложений – это Express.
- Ruby: Для работы с Ruby часто используют фреймворки Rails и Sinatra. Ruby – это первый язык для серверной части, которому обучают на многих курсах.
- Python: Популярные фреймворки – Django и Flask.
- Java: Сегодня разработчиков широкого профиля намного реже учат языку Java, но некоторые компании до сих используют его для серверной части, и на него до сих пор есть спрос (см. картинку).
- PHP: Язык PHP редко встречается в программах курсов, но как и в случае с Java, он по-прежнему очень востребован. Это фундаментальный элемент веба.
4. Базы данных и веб-хранилища
Когда учишься создавать приложения, обязательно наступает момент, когда нужно где-то хранить данные, чтобы пользоваться ими впоследствии. Вы должны хорошо разбираться в следующих темах, связанных с базами данных и веб-хранилищами:
- В чем преимущество реляционных баз данных, например SQL.
- Как работать с NoSQL базами данных, например MongoDB.
- Какие базы подходят в каждом конкретном случае.
- Как использовать базу данных с выбранным языком для back-end разработки (например, Node.js + MongoDB).
- В чем плюсы хранилищ типа Redis или memcached, которые хранят данные в оперативной памяти
- Как работать с веб-хранилищами, чтобы сохранять сеансы, файлы cookie и кэшированные данные в браузере.
- Как масштабировать базы данных, что такое ACID и ORM (все необязательно).
5. HTTP и REST
HTTP – это веб-протокол прикладного уровня без состояния. Именно он разрешает клиентам обмениваться данными с серверами (например, когда JavaScript-код посылает AJAX-запрос серверному коду, происходит это через протокол HTTP). Внутри темы об HTTP нужно разбираться в следующих вопросах:
- Что такое REST и почему это важно с точки зрения протокола HTTP и веб-приложений.
- Какие есть рекомендации и подходы к разработке API в архитектуре REST. Что такое запросы POST/GET.
- Как пользоваться Chrome DevTools (очень полезный навык).
- Что такое SSL-сертификаты.
- HTTP/2 и SPDY (необязательно).
- Что такое WebSockets, веб-процессы и сервис-воркеры (все необязательно).
6. Архитектура веб-приложений
Когда вы решите, что освоились с HTML, CSS, JavaScript, серверной разработкой, HTTP и REST, начнется самое трудное. Потому что если вы хотите создать достаточно сложное веб-приложение, вам придется разобраться, как структурировать код, как разделять файлы, где хранить большие медиа-файлы, как организовывать данные в базе данных, где выполнять те или иные вычислительные задачи (на стороне клиента или сервера), и многое другое.
Вы можете прочитать обо всем этом в интернете, но лучший способ действительно понять архитектуру приложений – это самому создать крупное приложение, у которого есть несколько отдельных функций (вот примеры проектов для начинающих разработчиков). Еще лучше – работать в команде над большим и сложным приложением.
Вот почему человек, который семь лет в разработке, не обязательно знает CSS или JavaScript лучше, чем тот, у кого всего два года опыта. За эти два года можно поработать над кучей разных приложений и сайтов, научиться создавать архитектуру и дизайн приложений (и попутно узнать массу других полезных вещей) и стать супер эффективным специалистом, который способен понимать общую картину и глубоко осмысливать разработку.
Вот список тем, в которых полезно разобраться, если вы хотите создавать рациональную и продуктивную архитектуру веб-приложений:
- Популярные платформы как услуги, например, Heroku и AWS. Heroku позволяет легко загружать код и запускать приложение без особых усилий по конфигурации и обслуживанию сервера. AWS предлагает десятки продуктов и услуг для хранения, обработки видео и балансировки нагрузки.
- Оптимизация производительности приложений и современных браузеров.
- Что должно входить в архитектуру приложения: почитайте разные мнения.
- Глава «Разработка веб-приложений» из руководства Microsoft.
- MVC (Модель – Представление – Контроллер).
И самое главное – старайтесь работать над проектами в команде, изучайте базу кода популярных проектов на GitHub и максимально перенимайте опыт старших разработчиков.
7. Git
Git – это система управления версиями. С ее помощью команда разработчиков отслеживает все изменения в базе кода. В Git нужно уметь делать несколько очень важных вещей: вы должны знать, как правильно получить последний добавленный код, который вы пропустили, как обновлять участки кода, и как исправлять ошибки и вносить изменения в код других людей, ничего при этом не нарушив.
Очень советую разобраться, в чем суть Git и самостоятельно поэкспериментировать с этой системой.
- Вот список наиболее часто встречающихся команд git, которые, скорее всего, вам потребуются.
- Вот урок по Git и GitHub для начинающих.
8. Базовые алгоритмы и структуры данных
Эта тема в среде разработчиков вызывает много споров. Одни считают, что разработчикам не нужно уделять слишком большого внимания таким аспектам информатики, как обход дерева, сортировка, анализ алгоритмов или обработка матричных данных. Но всем известно, что некоторые компании, например Google, постоянно задают такие вопросы на собеседованиях. Вот тред про то, что спрашивают у соискателей на должность front-end разработчиков в Google, где сотрудник компании отвечает: «У наших разработчиков должны быть глубокие познания в информатике, причем не важно, занимаются ли они клиентской частью или какой-то другой областью».
Тем не менее, хоть некоторые компании действительно буквально настаивают, чтобы у соискателей был диплом по информатике и вычислительной технике или другой технической специальности, многие фирмы готовы нанимать сотрудников без диплома при условии, что они продемонстрируют умение разрабатывать приложения и общее понимание сферы.
Однако частично компетентность разработчика, который пишет эффективный код и правильно подбирает инструменты для работы, все же зависит от того, понимает ли он базовые алгоритмы и структуры данных и способен ли он находить компромиссные решения. Вот что нужно изучить:
- Разберитесь с хэш-таблицами и попытайтесь поглубже вникнуть в эту тему. Эта структура данных лежит в основе объектов JavaScript (словарей в Python и хэшей в Ruby).
- Узнайте, в чем польза таких структур данных, как дерево и граф.
- Разберитесь, что такое анализ сложности алгоритмов и большое «O», чтобы не делать всякие глупости типа создания ненужного вложенного цикла на три уровня ниже!
- Составьте представление о том, когда нужно использовать объект, а когда массив, и какие есть плюсы и минусы у каждого варианта.
- Узнайте, почему кэширование так важно при работе с большими объемами данных. Также рассмотрите все за и против хранения данных в оперативной памяти и на диске.
- Определите разницу между очередью и стеком.
Изучить такую огромную программу непросто, но в конце обязательно будет вознаграждение, ведь быть разработчиком широкого профиля очень здорово!
Делитесь в комментариях опытом и сходите на Coderbyte попрактиковаться в алгоритмах.
Перевод статьи «A Guide to Becoming a Full-Stack Developer in 2017» by Daniel Borowski