Full-stack разработчик: мифический персонаж или вполне реальный сотрудник? Чем плохо быть full stack разработчиком Что значит full stack разработчик

От автора: Приветствую вас, друзья! В данной статье мы с вами поговорим о том, что такое Full-Stack разработка, из чего она состоит, какие знания нужны для каждой ее составляющей. Также более подробно остановимся на Node.JS, как одной из популярных, востребованных и высокооплачиваемых технологий в Full-Stack разработке.

Что такое Full-Stack разработка?

По результатам опроса Stack Overflow в 2016 году, Full-Stack разработка - это самое популярное занятие разработчиков. Поэтому неудивительно, что сейчас на западном рынке появляется все больше и больше обучающих программ, которые помогают людям стать Full-Stack разработчиками.

Чтобы ответить на вопрос, что такое Full-Stack разработка, и кто такой Full-Stack разработчик, давайте рассмотрим, из чего вообще состоит современная веб-разработка.

Современную веб-разработку можно разделить на две большие составляющие: Front-end и Back-end разработка.

Front-end разработка (от слова front - «впереди») - то, что вы видите на сайте, его визуальная составляющая. Сюда входят HTML, CSS и по большей части JavaScript. В современной Front-end разработке сейчас актуальны и активно применяются несколько JavaScript фреймворков, из которых, в основном, выбирают Angular, Vue, React. У каждого есть свои плюсы и минусы, и выбирать нужно в зависимости от их области применения. Но здесь есть ключевой момент - вы, по сути, выбираете из JavaScript технологий, так как на данный момент JavaScript является монополистом в этой области.

JavaScript. Быстрый старт

Back-end разработка - это серверная разработка (от слова back - «позади»), и она подразумевает под собой разработку логики вашего сайта, взаимодействие с базой данных и все то, что должно быть на сервере. В Back-end разработке вы можете выбирать из большего количества языков, которые подходят под разные задачи. Back-end вы можете писать, к примеру, на PHP, Java, Node.JS, Python, Ruby и так далее.

Соответственно, Full-Stack разработка - это разработка полного цикла, которая включает в себя и Front-end, и Back-end разработку. И Full-Stack-разработчик - это специалист, способный создать с нуля полностью готовое веб-приложение: и клиентскую, и серверную части.

Сейчас давайте посмотрим на Node.JS. Это отличный выбор и технология, которая очень популярна среди разработчиков, как минимум, потому, что и серверная часть, и клиентская будут написаны на одном и том же языке JavaScript, что значительно проще для понимания, совместимости и обучения. Вам не нужно учить новый язык. Вы используете JavaScript и во Front-end, и Back-end разработке.

Что такое Node.JS?

Определение Node.JS, которое дается в официальной документации, выглядит следующим образом: Node.JS - это платформа, построенная на Chrome’s JavaScript runtime, предназначенная для разработки производительных и масштабируемых веб-приложений. Node.JS использует управляемую событиями, неблокирующую модель ввода-вывода, которая делает ее простой и эффективной, идеальной для приложений с интенсивным использованием данных в реальном времени, работающих через распределенные устройства.

Node.JS - это кроссплатформенная среда с открытым исходным кодом для разработки серверных и сетевых приложений. Приложения Node.JS написаны на JavaScript и могут выполняться в среде исполнения Node.JS на ОС X, Microsoft Windows и Linux.

Node.JS также предоставляет обширную библиотеку различных модулей JavaScript, что в значительной степени упрощает разработку веб-приложений. Node.JS = Runtime Environment + JavaScript Library.

Преимущества Node.JS

Node.JS - это среда выполнения JavaScript на стороне сервера, которая используется для построения быстрых, масштабируемых сетевых приложений. Основные преимущества использования Node.JS:

Node.JS удобен для построения быстрых приложений, поскольку способен обрабатывать огромное количество одновременных соединений с высокой пропускной способностью. Это привлекает множество программистов, которые хотят создавать сайты с поддержкой миллионов посетителей на сайте;

еще одно преимущество - эффективность. В веб-приложении больше всего времени требуется, чтобы выполнить все ваши запросы к базе данных. С помощью Node.JS вы можете выполнить все ваши запросы сразу, уменьшая время отклика для медленных запросов;

язык разработки JavaScript. Вы можете разделить код Node между браузером и вашим Back-end. JavaScript на пути к тому, чтобы стать действительно универсальным языком;

скорость выполнения. Движок V8 постоянно расширяет границы и является одним из самых быстрых интерпретаторов динамических языков на планете. Кроме того, средства ввода / вывода Node имеют действительно легкий вес, в результате чего вы становитесь настолько близко к полному использованию потенциала вашей системы ввода / вывода, насколько это возможно.

Особенности Node.JS

Ниже приведены некоторые важные функции, благодаря которым Node.JS пользуется популярностью у разработчиков программного обеспечения.

Асинхронные скрипты на основе событий. Все API-интерфейсы библиотеки Node.JS являются асинхронными, то есть неблокирующими загрузку. По сути, это означает, что сервер на основе Node.JS никогда не ожидает возврата данных от API. После вызова сервер переходит к следующему API, а механизм уведомлений Node.JS Events помогает серверу получить ответ от предыдущего вызова API;

очень быстрый. Будучи построенным на JavaScript-браузере Google Chrome V8, библиотека Node.JS очень быстро выполняется в коде;

однопоточный, но легко масштабируемый Node.JS использует однопоточную модель с циклом событий. Механизм Event помогает серверу реагировать неблокирующим образом и обеспечивает высокую масштабируемость, в отличие от традиционных серверов, которые создают ограниченные потоки для обработки запросов. Node.JS использует однопоточную программу, и одна и та же программа может обслуживать гораздо большее количество запросов, чем традиционные серверы, такие как Apache HTTP Server;

отсутствие буферизации - приложения Node.JS не буферизуют данные. Приложения просто выводят данные по частям;

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Node.JS выпущен под лицензией MIT.

Примеры сайтов на Node.JS

Множество крупных компаний используют Node.JS для построения собственных веб-сайтов. Вот наиболее известные и масштабные сайты на Node.JS:

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

Yahoo! - уже много лет использует Node.JS во многих своих веб-сервисах и приложениях, включая Yahoo Answers и Yahoo Screen.

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

Wall Street Journal онлайн - популярная американская ежедневная газета с особым акцентом на деловые и экономические новости.

Shutterstock - агентство, предоставляющее фотографии, иллюстрации, векторы, видео и музыку для бизнеса и частных лиц.

Также среди компаний, использующих Node.JS, есть такие крупные компании, как eBay, General Electric, GoDaddy, Microsoft, Uber, Wikipins и Yammer.

Сегодня все больше проектов разрабатывается на Node.JS. И это не только проекты, где нужно держать соединения и требуется наличие неблокирующего сервера - например, онлайн-чата, веб-игр и интерактивных досок. Сегодня на Node.JS разрабатываются обычные веб-сайты, CRM-системы, E-Commerce и рекламные агрегаторы, которые раньше всегда делались на PHP/Python/Ruby.

Сколько можно зарабатывать со знаниями Node.JS?

Специалистам со знанием Node.JS предлагают самую высокую оплату труда. Такая ситуация вызвана тем, что технология Node.JS позволяет создавать действительно хорошие, быстрые, масштабируемые, надежные веб-приложения. А специалистов, которые разбираются и могут вести разработку на Node.JS, не так много.

Заключение

Node.JS - это весьма привлекательный продукт для веб-разработчиков. Он позволяет использовать JavaScript для написания кода как на стороне клиента, так и на стороне сервера. При этом разработчики также могут задействовать мощные технологии, доступные в экосистеме JavaScript: в т.ч. jQuery, V8, JSON и управляемое событиями программирование. Кроме того, существуют экосистемы, развивающиеся «поверх» Node.JS, такие как веб-инфраструктура Express.

Благодаря тому, что Node.JS - это просто среда JavaScript, вам не нужно будет изучать новый язык. Вот почему все больше веб-программистов отдают предпочтение Node.JS.

Видео презентация курса «FullStack-Мастер. Разработка CRM-системы на Node.js, Express, Angular6»

В сфере развития информационных технологий профессия разработчика очень востребована. Поэтому вопрос заработка, сколько получают IT-специалисты интересует многих.

Оплата труда в России

Средняя зарплата разработчика в России — 90-155 тыс. руб . в зависимости от направления работы специалиста:

  • Java,
  • Oracle,
  • Android и пр.

Статистика окладов в столице (руб.)


  • молодые специалисты в IT-сфере с малым опытом работы могут рассчитывать на зарплату разработчика в Москве — 40 000-60 000,
  • мидлы могут получать в среднем 90 000-120 000,
  • тимлиды, руководители проектов с опытом работы от 3-х лет получают от 100 000 и более.

Открытые вакансии в столице и доходы по ним на работа ру (руб.):

  • В ООО “ПРИССКО ” требуется разработчик-Delphi, зарплата — 70 000-120 000. От соискателя требуется опыт работы не менее года, знание Firebird, Delphi, SQL.
  • В “Айкрафт оптикал Нью-Йорк ” требуется разработчик Python Odoo ERP , жалованье до 120 000. Требуется опыт от 1 года. Резюме будет рассмотрено после выполнение тестового задания на проверку уровня знаний соискателя.
  • В АО “Бизнес Проекты” требуется РНР разработчик, зарплата — 80 000-120 000. Образование любое, опыт работы от 3-х лет, полный рабочий день.
  • В компанию Aviasales требуется full stack разработчик, зарплата от 2000 в долларах, работа на о. Пхукет. Требуемый опыт соискателя — 3-6 лет. Работа очень ответственная. Данный специалист должен быть открыт к новым знаниям, разбираться в бэк-энд и фронтальных технологиях, дизайне, инструментах веб-разработки и системном администрировании.
  • В ООО “Системы связи ” требуется разработчик сайтов, зарплата 50 000 в месяц. Официальное оформление.

Доходы в разных сферах работы (руб.):

Довольно популярная профессия в России — web разработчик, зарплата — 25 000-150 000 в месяц.

Средний показатель — 52 000.

Также у веб разработчиков зарплата различается по регионам страны:

  • Астраханская обл. — 132 500,
  • Калужская обл. — 105 000,
  • Алтайский край — 70 000,
  • Республика Алтай — 60 000,
  • Калининградская обл. — 52 500.


Прибыль в других странах:

  • Украина — 4500-55 000 грн. Средние з/п — 8 000 грн .
  • Казахстан — 60 000-300 000 тг .
  • Беларусь — 550-4300 бел. руб ., в среднем — 950 бел. руб .


Прайс работ, сколько в среднем стоят услуги веб-программиста за отдельную работу:

  • Дизайн — $200.
  • Баннеры — от $10.
  • Логотипы — от $100, но обязательно потребуется пример. Если это тендер на лого для крупной компании, стоимость работы может достигать $1000-10000.
  • Создание ресурса «под ключ» от — $450.
  • HTML-верстка — $90.
  • Системы управления контентом — $350.
  • Web-программирование — $200.
  • Flash — $150.
  • Интернет-магазины — $750.
  • Продвижение, SEO оптимизация — от $300.

Стоит отметить, что сколько получает программист зависит от объема выполненной работы. Если он работает в команде, то прибыль распределяется между дизайнером, менеджером и др. сотрудниками.

Заработки специалистов по работе с разными ОС

Одна из популярных на 2018 год IT-специальностей — ios разработчик, зарплаты в среднем по стране в диапазоне от 50 до 200 тыс .


Специальность считается одной из самых молодых, средний возраст программистов — 25 лет.

Среди соискателей больше мужчин — 94 % и всего 6 % женщин.

67 % владеет английским языком и всего 44 % работников в этой сфере имеют водительские права.Также в несколько раз превышают средние по стране зарплаты Андроид разработчиков — в среднем 110 000 руб .

Максимальные заработные платы достигают 170 000 в месяц.

Совместный отчет по заработкам


Статистика окладов по городам:

  • Москва — 140 000,
  • СПБ — 110 000,
  • Екатеринбург — 64 000,
  • Челябинск — 58 000,
  • Самара — 57 000,
  • Красноярск — 57 000,
  • Казань — 50 000.

Данные по Москве

  • Наименьше всего в Москве получают специалисты без опыта работы, студенты профильных ВУЗов — 40-60 тыс. руб.
  • Больше всего — 150-200 тыс. руб. получают соискатели в Москве и Санкт-Петербурге со стажем работы от 3-х лет и успешным опытом в разных стартапах.


Средняя зарплата разработчиков игр на 2018 год на разных платформах:

  • Россия — 25 000-100 000 р.
  • Москва — 50 000-220 000 р.

Иерархия рангов работников и их доходы (руб.):

  • джуниоры — 48 000;
  • мидлы — 98 000;
  • тимлиды, руководители, ведущие — 160 500.

Прибыль в других популярных направлениях (руб.):


  • Средняя зарплата Java разработчика в России составляет 125 000 .
  • У frontend разработчика зарплата колеблется в диапазоне 40 000-150 000. В Москве у фронтенд разработчика зарплата в среднем 110 000 в месяц. Простыми словами такой специалист занимается созданием пользовательского вида сайта и его шаблоном. Он должен быть обознанным в разных сферах: дизайн, верстка, программирование.
  • В бизнес отраслях часто требуются специалисты, которые работают с платформой Pega. Зарплата разработчиков от 40 000 до 200 000 . Руководители крупных проектов могут получать 250 тыс. и больше.
  • 40-100 тыс. руб . за месяц заработная плата Flash- разработчика, их еще называют флэш-дизайнеры. Их основная сфера деятельности — создание:
    • интерактивных приложений,
    • flash-игр,
    • интерфейсов с анимацией, графикой звуком и других анимированных элементов.
  • Perl- разработчик имеет средний доход в 95 000 . Диапазон заработков — от 60 000 до 180 000 на руки. Основная особенность языка Перл — много возможностей для работы с текстом.
  • BI разработчик. Зарплата в Москве — от 70 000 у Junior BI Developer до 200 000 у BI Architect с опытом работы более 3-х лет
  • Разработчик мобильных приложений . Зарплата, как и в других направлениях зависит от опыта и места работы сотрудника. Ресурс Superjob указывает среднюю цифру по з/п в 110 000 руб./мес.

Уровень окладов в США

Востребованная профессия в США — разработчик программного обеспечения.


Зарплата в среднем — $73 200 в год , согласно статистике с ресурса PayScale.

  • Минимальные годовые зарплаты — 46,5 тыс. долл .
  • Максимальные оклады в год — 107 тыс. долл .


Оклады в крупных мировых компаниях:

  1. Средняя зарплата для Software Developer в Microsoft Corp составляет $ 111 000 в год. В компании Microsoft у программиста разработчика зарплата может достигать $ 147 000 в год. По статистике 80 % сотрудников мужчин и 20 % — женщин.
  2. СВ Amazon.Com Inc средняя з/п программистов составляет $ 102 600 долларов США в год. Диапазон доходов по профессии в компании: $ 72 500-153 500 в год.
  3. Средняя зарплата разработчиков в it компании International Business Machines (IBM) Corp. в 2017 году составляла 85 000 долларов США в год.
  4. Разработчик программного обеспечения в Google, Inc . зарабатывает среднюю зарплату в размере 86 000 долл. США в год. Максимум специалисты в Гугл могут получать $ 102 600 в год. Для сравнения, зарплаты разработчиков в Яндексе: разработчик интерфейсов – 73 500 руб . в месяц., а это около 15 500 долл. в год.


  • Перевод

Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда , CTO и со-основателя стартапа “Hello Pretty”. Сейчас в половине вакансий, связанных с вебом и серверной разработкой, встречается волшебная фраза “full stack”. Чаще всего с эпитетами вроде “джедай”, “супер-герой” и “ниндзя”. Кого ищут все эти люди, и кого им на самом деле удается получить в свою команду?

Конечно, в названии статьи я несколько сгустил краски и full stack разработчики существуют. Но вы никогда такого не найдете. “Настоящие” full stack разработчики существуют - так же как существуют гении и люди, которые программируют с 12 лет. Я слишком часто вижу это словосочетание, и, по моему мнению, единственный вариант найти такого человека - это заняться хантинг-браконьерством. Если у вас не запредельное везение, то все бойцы, подходящие под описание “full stack”, уже давно и надежно трудоустроены.

Я знаком с несколькими ребятами, которые соответствуют описанию “full stack”. И за этими ребятами постоянно гоняется толпа хантеров, что лишь подпитывает миф о том, что у вас получится найти такого разработчика в свой проект.

Описание “full stack developer” так же бессмысленно как “Гений” или “Тот, кто может сделать все что угодно в [вставьте здесь свою предметную область]”.

Раскрою эту мысль поглубже. Иллюстрация ниже показывает неполную версию того самого “stack”, о котором говорится во всех этих вакансиях. В большинстве случаев разработчику нужны только одно или два умения из каждого слоя. Некоторые умения можно получить за пару часов (например, простейшая компиляция с помощью “./configure && make && sudo make install” или использование VPS). Получение других умений может занять годы.

То, что ожидается от “full stack” разработчика надежно выходит за рамки возможностей обычного человека. Такой разработчик должен разбираться в масштабировании приложения до нескольких миллионов кликов в день (в час?), знать что такое “домашние животные vs крупный рогатый скот” и почему это так важно, уметь выбирать между MongoDB и MySQL, применять CAP-теорему, настраивать PaaS и IaaS, владеть дюжиной средств управления конфигурациями для развертывания приложений на Rails, Django, Wordpress, Swift или их комбинации, разбираться в отличиях микросервис-ориентированной архитектуры от монолитных приложений и еще несколько дюжин вещей.

Это значит, что full stack разработчик должен обладать как минимум хорошим пониманием каждого компонента в стеке веб технологий, чтобы иметь возможность принимать обоснованные решения как их использовать. Он также должен уметь объяснить свой выбор менеджерам, желательно простым языком. Да-да, на самом верху стека находятся хорошее владение письменным языком, навыки командной работы и умение донести непростые вещи до менеджеров.

Каждый год новые компоненты добавляются к каждому слою стека. А раз в несколько лет к стеку добавляется новый слой. Вы все еще считаете, что разумно писать в вакансиях “full stack разработчик”? Это не очень умно. Особенно когда вы начинаете искать одного человека, одновременно являющегося специалистом по безопасности, веб разработке, юзабилити и настройке серверов. И такие запросы не то чтобы очень редки.

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

Ах, да, и когда CEO заглядывает в офис, нужно настроить принтер и общий доступ к файлам на его новеньком ноутбуке с windows.

Как я уже писал, такие люди существуют. Лично знаю нескольких. Но также я знаю множество великолепных разработчиков, дизайнеров и менеджеров проектов, которые даже близко не подходят под определение “full stack”. И еще больше тех, кто называет себя “full stack разработчиками” и при этом с трудом могут дать определение больше чем дюжине слов из списка выше. И это при том, что в список далеко неполный, в нем даже нет некоторых слоев, например того, на котором живут JRE и Node.js. И тут мы понимаем, что у нас проблема.

В большинстве случаев, когда я видел “full stack” в описании вакансии, на самом деле они искали “очень крутого спеца”.

Самое раннее упоминание “full stack” и “full stack инженера

Стартапер, IT-директор и дизайнер обвиняют full-stack разработчиков в нереальности их списка навыков, низком качестве продуктов и отсутствии универсальности. Full-stack разработчики защищаются.

В закладки

В своем блоге на сайт IT-Академия Алексея Сухорукова приводит самые жесткие и противоречивые мнения профессионалов IT-индустрии о том, существуют ли на самом деле full-stack разработчики и насколько хорошо они справляются со своими задачами.

По данным ежегодного отчета StackOverflow (в 2018 году в опросе приняли участие около 100 000 разработчиков со всего мира) почти 50% из них считают себя full-stack разработчиками.

Первые поисковые запросы full-stack developer появились не раньше 2010 года. И с этого момента их количество начинает сильно расти. На графике изображена динамика популярности (100 баллов - максимальная популярность) запроса full-stack developer во всех его вариациях в Google.

Full-stack developer - сегодня это уже отдельная категория специалистов, крайне востребованная и распространенная. Однако не все согласны даже с самим фактом ее существования.

Сегодня в нашем материале противники понятия full-stack предъявят свои жесткие обвинения по поводу качества, универсальности и реальности существования таких разработчиков. А сами full-stack разработчики их мнения будут опровергать.

В центре внимания - три самых острых вопроса об этой профессии

1. Возможно ли знать всё из списка требований для full-stack?

“Настоящие” full-stack разработчики существуют - так же как существуют гении и люди, которые программируют с 12 лет. Описание “full-stack developer” так же бессмысленно как “гений” или “тот, кто может сделать все что угодно”. Раскрою эту мысль поглубже. Иллюстрация ниже показывает неполную версию того самого “stack”, о котором говорится во всех этих вакансиях.

В большинстве случаев разработчику нужны только одно или два умения из каждого слоя. Некоторые умения можно получить за пару часов (например, простейшая компиляция с помощью “./configure && make && sudo make install” или использование VPS). Получение других умений может занять годы.

То, что ожидается от разработчика «полного стека», намного превосходит возможности обычного человека. Да, есть люди, которые на это способны, я знаю некоторых из них. Но также есть много замечательных разработчиков, дизайнеров и менеджеров проектов, которые точно не подходят к понятию full-stack. Есть и те, кто называют себя full-stack, но едва ли могут определить более полудюжины слов в стеке, который я разместил выше

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

Основываясь на этом понимании, я уверенно могу назвать себя разработчиком полного стека. Тем не менее, я предпочитаю термин «Разработчик» или «Инженер-программист» только потому, что они немного менее злокачественны и довольно неспецифичны.

2. Может ли full-stack разработчик сделать качественный продукт?

Я вижу плохой дизайн повсюду в интернете, и я считаю , что это из-за недостатка навыков. Не потому, что дизайнеры плохо подготовлены к поставленной задаче, или из-за того, что инженеры не знают веб-стандартов. Нет, причина в том, что существует целый спектр навыков веб-разработки, которые остаются полностью проигнорированными. Несмотря на доказательства того, что front-end development - это целенаправленная деятельность, требующая полной занятости, я вижу, что многие компании нанимают инженеров full-stack.

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

Full-stack разработка – это умение воспринимать самые разнообразные идеи. Со временем такой талант будет становиться все более востребованным. Быть «full-stack разработчиком» не означает мгновенно переключаться с обслуживания кластера Hadoop на программирование связующего ПО на Java, а потом на JavaScript, работающий исключительно в браузере. Специализации придуманы не зря. Но разработчик, понимающий весь стек технологий, будет писать более качественные приложения.

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

По мнению Марка Лукидеса, full-stack разработчики это не единороги, как их некоторые представляют. Они больше напоминают дерево, разветвляющиеся на инструменты, облачные сервисы, дизайн, данные и сеть.

Чем активнее вы воспринимаете различные идеи, тем больше вы узнаете о других специализациях, а не только о вашей собственной. Тем более эффективно вы будете работать – по той простой причине, что научитесь взаимодействовать с коллегами. Более того, обладая обширным арсеналом идей и концепций, вы будете лучше справляться и со своими основными задачами. Вот к чему мы стремимся, именно в этом и заключается вся польза full-stack разработки.

3. Является ли full-stack разработчик универсалом?

Давайте концепцию «разработчика полного стека», которую в последнее время все горячо используют. Особенно на таких сайтах как Hacker Noon или Medium, которые пытаются помочь начинающим разработчикам стать «разработчиками полного стека». Все больше и больше компаний публикуют вакансии, где требуется «разработчик полного стека».

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

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

Я пишу свое собственное пошаговое руководство о том, как стать full-stack разработчиком. Знать все компоненты в списке требований к full-stack невозможно, но можно значительно сузить этот список, если вы можете заранее установить стек devops. Кроме того, вы можете охватить каждый «слой» до «достаточного знания», особенно в начале проекта.

Я тренирую свою команду, чтобы они стали «инженерами с полным стеком», но каждый из них фокусируется на определенной области разработки: на iOS, на Android, в Интернете и на API. Преимущественно, мы используем только JavaScript и React / React Native, поэтому я могу менять их позициями. В конце концов, как только структура будет завершена, я могу переназначить их на позиции по конкретным вертикальным стекам. Например, один на потребителя, один на поставщиков, один на admin и один на devops. И все четыре будут при этом взаимозаменяемыми. Такая универсальная команда «инженеров с полным стеком» может существенно сократить расходы на персонал и уменьшить время разработки.

В последнее время словосочетание full-stack developer получило очень широкое хождение. Многие компании хотят заполучить себе в штат именно такого генералиста и мастера на все руки, прямо указывая в разноязычных вакансиях «нужен full-stack разработчик». Тем временем, как раз именно из-за обширности багажа подобного специалиста, представления о «тру фул-стеке» сильно разнятся. Автор этого поста считает, что судить о full-stack разработчике надо по делам его - а именно, по качеству его работы, и не забывает предоставить свой собственный список чудо-умений.

С тех пор, как Карлос Буэно из Facebook написал , выходит масса постов, авторы которых пытаются определить это понятие. Ходили слухи, что в течение некоторого времени Facebook нанимал на работу только full-stack разработчиков. Вероятно, это все-таки преувеличение, пусть и похожее на правду. Некоторые из авторов фактически считают full-stack разработчика полумифическим персонажем. Так, Лоренс Геллерт пишет , что full-stack разработчик - это «больше, чем senior-специалист», после чего подробно рассматривает те навыки и умения, которыми, на его взгляд, должен обладать такой разработчик. Большинство навыков, упомянутых Геллертом, не связаны с написанием кода.

И еще крестиком вышивает
Подобные списки качеств обычно получаются или слишком длинными, или слишком короткими. Я согласен, что full-stack разработчик и senior-инженер - не обязательно одни и те же люди. Но идея о том, что full-stack специалист обладает почти волшебными навыками сразу во многих областях, кажется мне неприемлемой. Геллерт же заявляет, что уровень full-stack предполагает «хорошее представление о каждом уровне стека, если не сказать - мастерское им владение». Правда, я бы добавил в список Геллерта еще несколько позиций, о которых он лишь вскользь упоминает: контроль исходников, инфраструктуру данных, распределенные вычисления и т.д.

Учитывая это, давайте попробуем определить, что такое стек. Возьмем для примера уже довольно архаичный стек LAMP: Linux, Apache, MySQL, Perl. Этот список неполный и определенно устаревший. Linux и Apache по-прежнему активно используются, хотя уже набирают популярность другие серверы, например, nginx. База данных MySQL все еще в ходу, правда, уже появились десятки пост-реляционных баз данных (наиболее известными среди них являются MongoDB и Cassandra). Я не удивлюсь, если в ближайшие несколько лет MariaDB придет на смену MySQL. Уже никто не пишет CGI-программы на Perl; вместо него используются самые разные языки, от Haskell до Java. Но пусть стек LAMP и устарел, в нем заложена правильная идея: операционная система, сервер, база данных, связующее ПО. Стек LAMP появился в те времена, когда язык HTML был тривиальным, а все вычисления выполнялись на сервере. JavaScript был «игрушечным» языком, помогавшим склеивать разные компоненты в браузере, но на этом его роль заканчивалась. В настоящее время JavaScript развился, стал серьезным полнофункциональным языком программирования, CSS ненамного от него отстает. Если вы мыслите себя full-stack программистом, то, несомненно, должны полностью понимать ту платформу, на которой базируется клиентская часть вашего приложения. Стек MEAN, Mongo, Express, Angular и Node - более современный аналог LAMP, красноречиво показывающий, что язык JavaScript уже развился в самостоятельную платформу.

Наряду с веб-программированием, full-stack разработчик должен в известной степени понимать проектирование. Чтобы написать по-настоящему качественное веб-приложение, необходимо обеспечить безупречное пользовательское восприятие. Дизайнер понимает, что его работа отнюдь не ограничивается созданием макетов в Photoshop . Разработчик также должен понимать причины, по которым приложение проектируется так, а не иначе, уметь обсудить с дизайнерами о том, что удастся и что не удастся эффективно реализовать.

Не забываем и о железе, на котором работает стек. В большинстве текстов о full-stack программировании делается акцент на производительности. Составить полное представление о производительности зачастую удается при детальном понимании взаимодействия ПО с железом. Буэно совершенно верно подмечает это: программист должен знать, как SQL обрабатывает запросы, как процессор выполняет инструкции, как дисководы предоставляют данные через систему уровней кэширования.
Далее начинается работа с сетью. В настоящее время практически все задачи решаются с применением сети, и ваша работа в сети может кардинально влиять на производительность. Илья Григорик написал отличную книгу для веб-разработчиков о принципах функционирования сетей .

В настоящее время многие новые приложения (и практически все приложения, разрабатываемые на стартапах) работают в облаке. Они не просто хранят данные в облаке, но и опираются на инфраструктуру Amazon, позволяющую выстраивать виртуальные серверные фермы и датацентры. Масштабируемость таких систем практически безгранична. Соответственно, full-stack разработчику необходимо понимать Amazon и его API: что вы покупаете, как это оплачивается, какими сервисами при этом можно воспользоваться. Кроме того, облачные технологии неразрывно связаны с распределенными вычислениями. Несмотря на всю шумиху об отказах амазоновских серверов, готов поспорить, что Amazon работает гораздо стабильнее, чем любой самодельный датацентр. Тем не менее, вы должны обладать всеми необходимыми знаниями, чтобы обеспечить жизнеспособность приложения в условиях таких отказов.

В настоящее время существует ряд интересных приложений, в основе которых лежит не обработка данных, а что-то другое. Допустим, вы пишете для электронного магазина такую программу, которая делает рекомендации. В данном случае, кроме всех вышеупомянутых компонентов стека вам придется иметь дело с Hadoop, Mahout, Scikit-learn, либо какой-то другой библиотекой для машинного обучения.

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

В начале статьи я сказал, что мне не нравится отношение к full-stack разработчику как к полумифическому персонажу. Затем на ваших глазах я сильно расширил стек - настолько, что его уже сложно назвать стеком. Фактически, мы получили дерево с инструментальной оснасткой, облачными сервисами, дизайном, данными и сетевой частью. Я нисколько не сомневаюсь в том, что разработчик должен как можно лучше ориентироваться в бизнес-составляющей, в работе менеджеров и т.д. Добавим еще одну ветвь к этому дереву. Что, удалось усугубить картину? Может быть, «full stack-разработчик» - это действительно кодовое наименование волшебного юнита, который умеет все: и программировать на ассемблере, и уговаривать финансистов? Может быть, такой умелец и канализацию в офисе починить может (кстати, на стартапах - незаменимый навык).

Нет, все не так плохо. Действительно, быть full-stack разработчиком - нелегкая задача, но она вполне сравнима по амбициозности со многими другими программерскими затеями. Так, я не считаю, что full-stack разработчик принципиально превосходит в профессионализме senior-разработчика. Более того, могу себе представить junior-разработчика, ориентирующегося во всем стеке, но отнюдь не считаю, что вакансии должны пестреть упоминаниями full stack. Мне больше нравится характеристика «Т-разработчик», подробно описанная (в частности) в пособии для сотрудников Valve . Т-разработчик обладает широкими знаниями и интересами, но при этом глубоко понимает ту область, в которой специализируется. Я не рассчитываю, что разработчик будет в разбираться в проектировании не хуже дизайнера, либо справляться с обслуживанием сетей так же умело, как инженеры-специалисты. Но разработчик должен понимать такие проблемы и уметь грамотно о них рассуждать.

Более фундаментальная проблема, которая все четче вырисовывается в последние годы, заключается в исчезновении барьеров между разработчиками с разными специализациями. В частности, методология DevOps размывает границы между разработчиками приложений и эксплуатационным персоналом, отвечающим за развертывание и обслуживание этих приложений. Оптимизация производительности зачастую требует нарушать тщательно уложенные уровни многослойной софтверной архитектуры. Иногда мифический «full-stack разработчик» требуется потому, что «мы убрали все барьеры, теперь нам нужен один мастер на все руки». Это нонсенс. На самом деле, нужен не человек, способный заменить всех узких специалистов, а такой сотрудник, который способен продуктивно участвовать в работе самых разных специализаций, эффективно взаимодействовать с коллегами, работающими в других частях команды.

«Full-stack разработка» - это умение воспринимать самые разнообразные идеи. Со временем такой талант будет становиться все более востребованным. Быть «full-stack разработчиком» не означает в одночасье переключаться с обслуживания кластера Hadoop на программирование связующего ПО на Java, а потом на JavaScript, работающий исключительно в браузере. Специализации придуманы не зря. Но разработчик, понимающий весь стек технологий, будет писать более качественные приложения. Так, разработчик машинного интерфейса будет понимать, чем занимаются разработчики клиентской части, сможет взаимодействовать с ними. Приложение не будет генерировать запросов, из-за которых база данных слетает с катушек. Клиентский разработчик, разбирающийся в проектировании, сможет помочь дизайнеру подготовить красивое приложение, которое при этом будет эффективно функционировать на любой платформе.

Чем активнее вы воспринимаете различные идеи, тем больше вы узнаете о других специализациях, а не только о вашей собственной. Тем более эффективно вы будете работать - по той простой причине, что научитесь взаимодействовать с коллегами. Более того, обладая обширным арсеналом идей и концепций, вы будете лучше справляться и со своими основными задачами. Вот к чему мы стремимся, именно в этом и заключается вся польза full-stack разработки.