Fullstack-разработчик — человек, который умеет работать и с серверной (backend), и с браузерной (frontend) частью сайта или веб-приложения. Вместе с Алексеем Каньковым, Senior Backend Developer в Lokalise, и Сергеем Лысенко, руководителем IT-отдела российской платформы для школьного онлайн-образования «ИнтернетУрок», разобрались, что должен знать и уметь специалист, чтобы уверенно чувствовать себя в профессии.
Кто такой fullstack-разработчик
Fullstack-разработка делится на две части: frontend и backend.
- Frontend-разработчик занимается браузерной частью сайта и веб-приложения: той, которую видит и с которой взаимодействует пользователь. Это интерактивные элементы, формы, всплывающие окна и многое другое, вплоть до анимаций и мини-игр.
- Backend-разработчик работает с серверной частью: запросами к базе данных, обработкой информации, передает сведения frontend-разработчику и получает их от него.
Вместе получается система, и продукт работает.
Если frontend- и backend-разработчик не понимают друг друга — это проблема. Поэтому компаниям потребовались программисты, которые разбираются и в серверной, и в браузерной части. Так возник спрос на fullstack-разработчиков: универсальных специалистов.
Чтобы узнать больше о профессии fullstack-разработчика, предлагаем прочитать наш гайд.
Зачем становиться fullstack-разработчиком
- Многие компании нанимают специалистов, которые разбираются и в frontend, и в backend. Это удобнее: разработчикам из разных команд легче общаться друг с другом.
- При желании fullstack-разработчик может перейти во frontend или в backend, так как у него есть понимание разных сфер разработки. Хороший специалист никогда не останется без оффера.
- Сегодня fullstack-разработка — одно из наиболее высокооплачиваемых и востребованных направлений. На hh.ru можно найти вакансии с зарплатой более 300 000 рублей в месяц.
- Наконец, это просто интересно. Web-developer fullstack знает сайт и веб-приложение с обеих сторон и работает с разными задачами.
Какие хард-скилы нужны fullstack-разработчику
Frontend- и backend-разработчики используют разные технологии, подходы и наборы инструментов. Fullstack-разработчику нужно разбираться в каждом направлении.
Что нужно знать для frontend
Frontend — это, в первую очередь, HTML/CSS и JavaScript. На языке разметки HTML создается структура страниц, элементы, которые на ней есть, и пр. На языке стилей CSS страница стилизуется, становится красивой и удобной. А на JavaScript пишут интерактивные элементы.
HTML/CSS. Считается, что с HTML и CSS работают верстальщики, но владеть технологиями должен и frontend-, и, соответственно, fullstack-разработчик. В некоторых компаниях должности верстальщика нет — есть только разработчики, которые также занимаются версткой.
HTML описывает «каркас» страницы, элементы, которые на ней есть: браузер понимает, что это кнопка, а вот это — ссылка. А CSS добавляет к структуре стилизацию и помогает реализовать дизайн.
Препроцессоры. Fullstack-developer должен знать препроцессоры, которые работают с HTML/CSS: надстройки, вносящие в языки элементы программирования. Они заметно упрощают верстку, особенно крупных проектов. Самые известные — SCSS/SASS и Less для CSS, Pug для HTML. Знать SCSS требует большинство работодателей.
JavaScript. JavaScript — единственный язык, который работает в браузере. Программист может работать с TypeScript или CoffeeScript, но все это — надстройки над JS. Если захочется их изучить, следует начать с TypeScript, поскольку CoffeeScript в последние годы теряет популярность. JavaScript делает страницы интерактивными и динамическими. Почти все, с чем вы можете взаимодействовать на сайте, написано на JavaScript: от галерей с картинками до сложных игр с рандомайзером.
React/Vue/Angular. Кроме «чистого» JavaScript нужно знать любой из популярных JS-фреймворков: React, Vue и Angular. React — самый распространенный, Vue — простой в освоении, а Angular — самый сложный из трех JavaScript-фреймворков, но наиболее ценный: разработчики, которые им владеют, получают больше других.
Что нужно знать для backend
Веб-серверы. Имеется в виду серверное программное обеспечение для обработки, получения и передачи запросов. Оно также реализует протоколы и делает многое другое. Fullstack-разработчик должен понимать, как устроено ПО, уметь настраивать и работать с ним.
Популярные веб-серверы — Apache и Nginx. Еще есть Uwsg, caddyi, lighttpd, Google Web Server и другие.
Базы данных и SQL. Backend-разработчик должен уметь работать с базой данных: писать к ней запросы, получать информацию, не допускать ошибок. Специалист работает с хранилищем через СУБД — систему управления базами данных. Чаще всего используются реляционные СУБД, например PostgreSQL, MySQL, Oracle Database и так далее. Для работы с ними нужно знать язык запросов SQL.
Сейчас становятся популярны нереляционные базы данных — у них другая структура, они не работают с SQL. Такие технологии называют NoSQL. Популярная NoSQL-СУБД — MongoDB, ее часто используют в связке с NodeJS и Apache.
Язык программирования для backend. Веб-сервер не умеет обрабатывать программы — он отвечает только за протоколы. Чтобы работать с данными и реализовывать внутреннюю логику, к серверной части подключают подходящий язык программирования. Их больше десяти, но не пугайтесь: вам не потребуется учить все. Выберите и освойте сначала один, а также веб-фреймворки для него. Этого хватит для старта.
- PHP. Нестареющая классика, язык, созданный специально для backend. Он до сих пор используется для большинства сайтов и веб-приложений. Самый популярный сегодня фреймворк для разработки на PHP — Laravel, следом, почти не уступая ему, идет Symfony.
- Python. Лаконичный, достаточно простой, современный и многофункциональный язык. Он не часто используется в веб-разработке, но для backend есть фреймворк Django и микрофреймворк Flask.
- Ruby. Язык описывают как созданный для удобства программистов. На Ruby часто пишут прототипы больших проектов, потому что он позволяет быстро создавать готовый продукт. Он достаточно быстрый и удобный, хотя достаточно сложный для новичка. Для Ruby тоже есть специальный веб-фреймворк — Ruby on Rails или, на сленге, «рельсы».
- Java. На Java обычно пишут техническую «начинку» для крупных корпоративных проектов. Это отличный вариант, если вы хотите работать в энтерпрайзе. Для Java существует множество фреймворков, например Spring, Hibernate и другие.
- JavaScript. Точнее, платформа NodeJS, расширяющая возможности языка. Она подходит не только для frontend-, но и для backend-разработки. Сюда же можно отнести TypeScript и другие языки, основанные на JS. Наиболее популярный фреймворк — NestJS. Он работает поверх Express или Fastify — микрофреймворков, похожих на Flask в мире Python.
Мы подробно разобрали языки программирования для backend в этой статье.
Стеки технологий
Набор инструментов и технологий, которые нужны программисту для создания продукта, называют стеком (от англ. stack). Понятие стек включает языки программирования, фреймворки, программные платформы, библиотеки, среды разработки и СУБД — все, что может быть нужно для работы над проектом.
Под каждый проект требуется свой набор инструментов, поэтому стеки различаются. Для fullstack-разработчиков их несколько. Вот три наиболее популярных:
- MERN — включает базу данных MongoDB, фреймворки ExpressJS и React, платформу NodeJS;
- MEAN — похож на предыдущий, но вместо React используется Angular;
- Django-стек — основан на Python и Django. База данных, как правило, PostgreSQL, а возможные веб-серверы — Nginx, Uwsgi, Apache и другие.
Знания, важные для всех
Архитектура и теория. Первое время без этих знаний можно работать, но если хотите расти в профессии, без них не обойтись. Fullstack-developer должен понимать устройство сайта и веб-приложения со всех сторон. Именно это ценят работодатели. Поэтому лучше сразу разобраться, как устроена система, форматы, в которых хранятся структурированные данные (XML, JSON), и пр.
HTTP, SOAP и другие. HTTP — это протокол, по которому работает передача данных между серверной и клиентской частью. Простыми словами, это набор инструкций, которому следуют составные части сайта и веб-приложения, когда обмениваются информацией. Существует защищенная версия протокола — HTTPS. Данные шифруются при передаче, поэтому их не может посмотреть кто-либо другой.
SOAP — еще один протокол передачи данных. С его помощью информация передается в формате XML. Протокол встречается редко и обычно используется в технических целях, но fullstack-разработчику стоит его знать.
REST. Аббревиатура расшифровывается как Representational State Transfer. Это парадигма, по которой сейчас принято строить взаимодействие между составными частями системы. REST описывает правила, по которым нужно писать код и «соединять» части веб-приложения друг с другом. Так им будет легче общаться между собой, а разработчику — изменять и масштабировать систему. Знать REST — обязательно для fullstack-разработчика, который хочет работать с современными продуктами.
GraphQL. Это язык запросов данных и язык манипулирования ими с открытым исходным кодом. GraphQL используется для построения веб-ориентированных программных интерфейсов. В последние годы он очень популярен как альтернатива REST. GraphQL позволяет клиентам определять структуру возвращаемых данных. Именно она будет возвращена в ответе от сервера.
Git. Технологию нужно знать практически каждому айтишнику. Так называется мощная и гибкая система контроля версий, которая помогает делать для проекта сохранения на разных стадиях. Если что-то пошло не так, проект можно «откатить». А если работу разделили на две команды, можно разветвить «сохранения», а потом слить воедино.
Данные хранят во внутренних или внешних репозиториях, например на сервисе GitHub. Аккаунт на GitHub — желательное, если не обязательное требование к любому разработчику.
NPM. Это пакетный менеджер для платформы NodeJS: консольная программа, которая управляет пакетами данных для разработки. Через npm можно легко установить библиотеку, фреймворк или дополнительное ПО для работы — достаточно написать в консоли одну строчку. С помощью утилиты можно обновлять и удалять компоненты, откатывать версии, запускать разные инструменты и пр.
Знать npm обязательно для любого веб-разработчика. Пользоваться им проще и быстрее, чем каждый раз искать библиотеку на сайте создателя или на GitHub.
Информации много, поэтому в fullstack-разработку лучше входить постепенно: сначала изучить backend, а потом frontend, или наоборот.
Какие софт-скилы нужны fullstack-разработчику
Суть софт-скилов — в их универсальности. Нужные навыки в fullstack-разработке пригодятся любым другим специалистам в IT и не только.
Самоорганизованность. IT — очень прогрессивная сфера. Она развивается стремительными темпами. Много данных, документации, возможностей, большое сообщество. Из этого вытекает необходимость развивать в себе самоорганизованность, чтобы быть успешным. В век «удаленки» необходимо уметь контролировать себя, грамотно подходить к личному тайм-менеджменту. Заставить человека быть организованным никто не может, кроме него самого. Для fullstack-разработчика лень и неорганизованность будут серьезными препятствиями.
Умение договариваться. Для работы в команде необходимо как идти на компромиссы, так и отстаивать свою точку зрения. Если человек неконфликтный — ему будет проще, а если вы замечаете за собой обратное, то необходимо серьезно над этим поработать.
Смелость. Важно не бояться выступать, проявлять себя, выходя на первые позиции. На одной из конференций можно подойти к команде, которая что-то обсуждает, завести разговор, а впоследствии — и новые знакомства, которые в дальнейшем могут дать свои плоды.
Грамотное изложение своих мыслей. Кроме коллег по отделу, разработчику бывает нужно общаться с представителями бизнеса, принимать у них задачи и требования к продукту. Такие коммуникации строятся на умении правильно доносить свои мысли и разговаривать на одном языке со специалистами из разных областей. К сожалению, не так часто встречаются разработчики, которые умеют и хотят выдавать информацию в виде, понятном большинству людей других специальностей. Этот навык способен открыть множество новых путей в компании.
Терпение. Разработчик способен сидеть и погружаться в код, в поисках едва уловимого бага, потратить часы и даже дни, чтобы отловить и исправить его. А когда находит и исправляет, то получает огромное удовольствие и удовлетворение проделанной работой, о которой хочется и нужно рассказать.
Креативность и идейность. Ценятся всегда и везде. Когда заказчик или менеджер приходит с задачей или проблемой, то он хочет, чтобы ему помогли, накидали идей из богатого опыта и экспертизы. Идейные люди ценятся высоко. Важно перестать быть просто кодером и стать полноценным разработчиком со своим видением и идеей.
Адаптивность. Все направление IT очень гибкое и прогрессивное. Постоянно появляется что-то новое, что-то пропадает за ненадобностью. Для такой изменчивой и активной среды нужно уметь подстраиваться под темп развития отрасли, оставаться в потоке. Это касается и ситуаций на работе: когда во время работы над проектом вдруг неожиданно меняются планы и вводные, необходимо быстро перестроиться.
Готовность пробовать новое. Не стоит быть чрезмерным бюрократом и консерватором, иначе можно сильно отстать от трендов и рынка. Не нужно бояться экспериментов, освоения новых горизонтов. Необходимо смело пробовать новое. Конечно, при этом стоит сохранять трезвость и уметь фильтровать новшества: не все стоит пропускать в продакшн.
Высокая обучаемость и любопытство. Нужно быть в тренде, постоянно что-то изучать, читать, общаться: подписываться на дайджесты, ходить на профильные митапы, знакомиться с единомышленниками. Отсюда еще один скил — постоянное желание двигаться вперед.
Аккуратность. Аккуратный код всегда в почете. Это, скорее, даже необходимость. Код просто обязан легко читаться. Коллеги всегда это оценят. Плюсом станет пунктуальность. Важно соблюдать сроки, держать слово и нести ответственность за то, что делаете.
Искренность и преданность делу. Искренность — это, скорее, черта характера, нежели навык, но очень важная. Во многих командах принято открыто говорить о своих делах и проблемах, руководители просят честно сообщать, если необходимо куда-то отлучиться, а не пропадать тайком. Преданность делу — тоже необходимость. Горящие глаза коллег и неравнодушие к общему делу необычайно воодушевляют и заряжают.
Прокачать навыки помогут желание стать лучше, самоконтроль, умение заставить себя работать над собой. Боитесь чего-то — возьмите и сделайте через страх, маленькими шагами, не теряя самоконтроля. Лень что-то делать — договаривайтесь с собой, систематически выделяйте обязательный кусочек времени и посвящайте его своему обучению. Главное — осознанность и честность с самим собой.