Сколько зарабатывает full stack программист. Чем плохо быть full stack разработчиком. Работа с данными

Мы выпустили новую книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».


Fullstack-разработчик - это специалист широкого профиля. В его задачи входит самостоятельное создание сайтов и web-приложений: от дизайна и пользовательского интерфейса, до серверной части. Дать детальное определение работы данного специалиста, что именно он должен знать и какими навыками владеть, практически невозможно. Далеко не каждый человек сможет выполнять функции фуллстек-программистов.

Кто такой Fullstack-разработчик

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

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

Fullstack-разработчик совмещает обязанности по написанию front-end и back-end. Он обладает огромным количеством навыков и может заниматься проектом самостоятельно, без подключения дополнительных специалистов, будь то UI или UX дизайнеры. В частности, он может:

  • Управлять хранилищем всей информации, расположенной на сайте.
  • Работать с HTML-страницами, изображениями, файлами, медиа-потоками и прочими данными.
  • Он хорошо разбирается в системной инженерии и может применять на практике научные, инженерные и управленческие навыки, которые необходимы для преобразования совокупности потребностей заказчика в описание конфигурации системы.
  • При необходимости он может выступать в качестве разработчика мобильных приложений или веб-ресурсов. Для этого он должен уметь обращаться с различными языками разметок, базами данных, графическими редакторами, готовыми макетами и шаблонами.

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

Преимущества и недостатки

Прежде всего, Fullstack-разработчики способны быстро приступить к работе и за сравнительно короткие сроки сформировать прототип продукта. В сравнении с front-end и back-end специалистами, у них более обширные познания, благодаря чему они постоянно имеют свое мнение по вопросам текущего проекта – им не нужно обращаться за помощью к коллегам из других областей web-разработок. И напротив, если в команде есть фуллстек, он способен взаимодействовать со всеми участниками проекта, сокращая тем самым время работы и технические затраты на каналы связи.

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

Как стать Fullstack-разработчиком

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

Первый этап обучения необходимо начать с языков программирования. Достаточно подробно изучить один, к примеру, JavaScript, PHP или Python. Бо́льшая часть проектов будет связана именно с ними. Разумеется, не все они окажутся востребованными, однако пользователь должен иметь базовые знания о структуризации, проектировки, внедрению и тестирования проекта.

Второй шаг – применение фреймворков. Какой бы язык программирования не был выбран, он будет сопровождаться дополнительным расширенным функционалом программной платформы с открытым исходным кодом Spring , Hibernate и т. д.

Независимо от целей назначения проекта, он будет нуждаться в базе данных и кэшировании, чтобы впоследствии можно было хранить большой объем различной информации. Специалист должен разбираться в одной или нескольких системах управления базами данных и уметь использовать их потенциал. Среди рекомендуемых СУБД можно отметить MySQL , Microsoft SQL Server и т. д.

Что значит быть Fullstack-разработчиком

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

  1. Администрирование серверов. Fullstack-разработчик должен иметь базовые навыки работы с сервером. Сюда можно отнести: управление комплексом программных средств, посредством которых осуществляется контроль и фильтрация проходящих сетевых пакетов на разных уровнях; подключение к удаленным серверам через терминал, где отсутствует графический интерфейс пользователя; управление кроссплатформенным программным обеспечением Apache HTTP-сервер и почтовым прокси-сервером Nginx. Кроме этого он должен уметь создавать максимально безопасные и надежные изолированные среды разработки в открытых платформах для разработки, доставки и эксплуатации приложений.
  2. Работа с облачными PaaS-платформами. Хостинг на популярных web-сервисах могжет понадобиться в любой момент, когда заказчик потребует переключения провайдера. Среди наиболее популярных платформ можно отметить Google Cloud и Azure .
  3. Программно-аппаратная часть сервиса. Кроме языка разметки и программного обеспечения, созданного для объединения разных компонентов большого программного проекта, специалист должен уметь работать с web-сервисами Nginx и Apache, удобным дизайном API (ведь бо́льшая часть веб-ресурсов работает на API).
  4. Дизайн. Здесь специалист должен уметь создавать прототип проекта перед тем, как преобразовать его в рабочий формат. На данном этапе применяется целый набор графических инструментов: редактор Photoshop или Illustrator, Ngrok и т. д.

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

В сфере развития информационных технологий профессия разработчика очень востребована. Поэтому вопрос заработка, сколько получают 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 долл. в год.


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

Неплохое определение с quora.com

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


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

Минусы

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

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

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

Вас сложно заменить
Кому-то это может показаться плюсом - вас сложно уволить, вас любят и ценят. Но обратная сторона медали - невозможность передачи задач, звонки в любое время суток, проблемы с уходом в отпуск, сложности при попытке заняться чем-то другим.

У вас нет чёткой зоны ответственности
Если в кране нет воды - значит, виноват full stack! Какие бы проблемы не возникали, какие бы баги не вылезали - скорее всего, именно вам придётся ими заниматься, даже если проблема на самом деле должна быть в ведении другого разработчика. Просто ваша картина мира гораздо полнее, и вы быстрее сможете локализовать и исправить ошибку. К сожалению, этим часто злоупотребляют.

“О, дайте ему - он разберётся!”
В ситуации, когда необходимо разобраться с плохим или старым кодом, скорее всего задействуют именно вас. Особенно печально, когда работодатель хочет сэкономить, наняв одного разработчика на весь проект. А ты его открываешь и понимаешь, что проще это выкинуть и целиком переписать.

Вы не знаете всех наборов библиотек
Это довольно очевидно следует из первого пункта, но хочется упомянуть отдельно - хотя бы потому, что в вакансиях часто требуется опыт работы с конкретными библиотеками.

Вы не успеваете за всеми тенденциями
Опять же это следует из первого пункта. По непонятной мне причине, часто ищут разработчика, который в совершенстве умеет применить что-то, что вышло в релиз полгода назад. Увы, вы не можете одновременно знать и уметь применять ES6, рассказать об отличиях последней версии Symfony и о возможных проблемах миграции с Oracle на Tibero в текущий момент. Возможно, вы об этом читали, но попробовать просто не успели.

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

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

Вы можете начать завидовать зарплате узких специалистов
Если начать искать вакансии по самому вашему дорогому навыку, то можно огорчиться - специалисты с большим опытом работы могут получать за него весьма неплохие деньги. Скажем честно - у вас такого опыта работы с конкретной технологией нет. Но даже если вы углубитесь в эту технологию и получите необходимые знания - хотели бы вы дальше всю жизнь заниматься только этим? Например, администрированием СУБД Oracle?

Минусы в трудоустройстве

Отдельно хочется упомянуть сложности, которые случаются при смене работы.

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

Full stack full stack’у рознь
Какой бы вы ни были широкий специалист, вряд ли вы найдёте место работы с точно таким же стеком технологий. Бывает, но крайне редко. Однако пересечения часто довольно большие, и ничто не мешает вам подтянуть недостающее и ещё больше расширить кругозор.

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

Вам сложнее искать подходящую вакансию
Fullstack разработчиков ищут довольно редко, и не всегда работодатель с такой вакансией может конкурировать с вакансией узкой специализации по условиям. И возникает вопрос - какие использовать ключевые слова при поиске вакансии? Если вы, скажем, Java разработчик, то просто указали в поиске Java - и погнали кликать. Но full stack’у немного сложнее. Обычно проблема решается подпиской на несколько разных фильтров по словам, которые вам наиболее интересны - или просто выборкой по желаемому уровню зарплаты. Последнее не всегда срабатывает, поскольку к моему величайшему недоумению до сих пор висит огромное количество вакансий вообще без указаний зарплатной вилки. Видимо, HR боятся, что тогда каждый захочет описанный максимум? Странно. Если кто знает доводы в пользу такой стратегии рекрутинга - приведите, пожалуйста, в комментариях.

Плюсы

Теперь, наконец, о вкусном.

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

Вы меньше выгораете
Если есть возможность периодически менять проекты, то вы гораздо меньше устаёте от применения одного и того же. Конечно, если вы не хардкорный фанат и не получаете удовольствие просто от того, что пишете всё, скажем, на vanilla C или asm.

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

Вы можете отдебажить всё, что угодно
Очевидный плюс. Ваше системное мышление достигло уровня, на котором вы можете исправить что угодно и где угодно.

Работать веселее, интереснее и познавательнее
За один день вы можете получить много новых навыков и знаний в абсолютно разных вещах.

В одиночку вы можете создавать чудесные вещи на стыке разных технологий
Вы один можете сделать то, на что при стандартном подходе требуется 3-4 человека. Запрограммировать микроконтроллер для интернета вещей, который общается с веб сервером, пишет в базу данных, и данные с которого можно просматривать на веб сайте, в приложении или на мобильном устройстве? Легко! Вы один можете представить всю систему и реализовать её без согласований, недопониманий и проволочек.

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

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

Вы постигаете дзен
Теперь вы знаете, что нет языка разработки, которых лучше остальных. Вы знаете, что нет самой лучшей базы данных. Вы можете предположить, что какой-то инструмент подходит для ваших целей лучше… но вы вполне готовы использовать альтернативы, если на то есть какие-то основания, например, квалификация остальных разработчиков. Вы больше не пишете статей про синтетические тесты, созданные с тем, чтобы показать преимущества одной технологии над другой. Вы знаете, что прирост производительности в пять процентов скорее всего не стоит двух ваших человеко-месяцев. А освободившееся от холиваров время вы наконец можете потратить на что-то полезное. Например, чтобы наладить взаимоотношения с девушкой (для примера назовём её Катей). Вы теперь понимаете, что технологии бывают разные, что люди бывают разные, и нужно просто найти правильный способ связать всё воедино. Ты любишь мир, и

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

И хотя было бы проще просто отодвинуть эту дискуссию на второй план, термин «full-stack разработчик» от этого никуда не исчезнет. Спрос на специалистов с такими навыками вырос на 198% только за прошлый год. Кроме того, большинство разработчиков со всего мира именно этими словами описывает свой род деятельности (согласно нашему ).

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

Чтобы лучше понять существующие разногласия относительно термина «full-stack разработчик», мы разберемся, с чего все началось.

Рождение full-stack разработчика

Термин « » вошел в моду не так давно. Одно из самых ранних упоминаний относится к 2008 году , а первый запрос «full-stack developer» в Google появился не раньше 2010. С тех пор популярность этого запроса начала расти.

«Full-stack developer» в трендах поиска Google с 2004 года. Подъем популярности отражен для разных вариантов написания, например, «fullstack developer » и «full stack developer ».

Но если такой вид деятельности в какой-то форме существовал еще в пред-интернетное время, почему мы не видим роста популярности этого термина до начала 2010-х? Оказалось, ответ на этот вопрос требует небольшого исторического экскурса.

История

Поздние 1970-е / ранние 1980-е

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

Поздние 1980-е / ранние 1990-е

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

Поздние 1990-е / ранние 2000-е

Интернет «наступает» – технологии становятся все более специализированными, соответственно и у людей, занимающихся ими, возникает узкая специализация.

Середина 2000-х

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

Поздние 2000-е

Соответствующие технологии упрощаются до уровня, при котором многие программисты вновь могут создавать приложения и сайты от начала до конца. Официальное рождение термина «full-stack developer».

Ранние 2010-е / настоящее время

Быстрый подъем более сложных технологий привел к тому, что стэк стал более «слоистым». Разработчикам стало сложнее поддерживать знания на соответствующем уровне. Начинают появляться специалисты фронтенда и бэкенда. «Full stack» разработка приобретает новое, более широкое значение.

Согласно истории термина, «full-stack разработчик» сначала приобрел популярность в середине 2000-х, когда более простые и оптимизированные технологии позволили многим разработчикам выполнять проекты полностью. Этот подход диаметрально отличался от того, что было в поздние 1990-е и ранние 2000-е.

С течением времени смещение в сторону более сложных технологий и большего количества слоев в стэке (ранние 2010-е) привело к новому разделению ролей. Работа с бэкендом и фронтендом все более разделяется, что приводит к популяризации терминов «фронтенд-разработчик» и «бэкенд-разработчик».

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

Но, конечно, с такой интерпретацией согласно не все тех-сообщество. И хотя сложно сказать, когда эти споры начались, катализатором для них выступили два события. Первым был пост бывшего инженера Facebook Карлоса Буэно от 2010 года о том, что такое full stack. Вторым событием стало услышанное Лоренсом Геллертом на конференции заявление сотрудника Facebook о том, что эта компания нанимает только «Full Stack разработчиков» (2012 год).

Что имеем в результате? Жаркие дебаты относительно терминологии все еще живут, даже спустя почти 10 лет.

Доводы против full-stack разработчика

Представители лагеря противников «full-stack разработчика» доминируют в спорах о том, из чего состоит (или не состоит) full-stack. Коротко говоря, их аргументы крутятся вокруг идеи, что full-stack разработчик это некто со «способностью легко управляться с бэкендом и фронтендом на уровне сеньора ».

Хотя у этого представления есть некоторые вариации, данный лагерь считает, что full-stack разработчики должны уметь:

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

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

Претензии этого лагеря по поводу термина «full-stack разработчик» сводятся к следующим пунктам:

  • Для компаний это способ выставлять нереальные требования к сотрудникам. Это позволяет им нагружать одного работника огромным количеством обязанностей, что для компании выгодно, но выгода достигается за счет работника. Компании хотят получать большой объем выполненных работ и большой опыт за низкую цену (по сравнению с наймом нескольких узких специалистов).
  • Этот термин подразумевает общий уровень опыта, которого у большинства разработчиков нет . Настоящий full-stack разработчик должен обладать «двойным мастерством » – и во фронтенде, и в бэкенде – а это невозможно с учетом скорости развития технологий. Когда кто-то называет себя full-stack, имея опыт меньше упомянутого, это является необоснованным использованием термина.
  • Это поощряет широкие, но поверхностные знания. Full-stack разработчик никогда не может с головой погрузиться ни в бэкенд, ни во фронтенд. Разработчик, пытающийся охватить весь стэк, это «и швец, и жнец, и на дуде игрец», причем ни в одной сфере он не достигает мастерства.

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

Доводы в пользу full-stack разработчика

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

Определение full-stack с менее ограничивающим набором требований описывает человека, который способен:

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

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

В защиту термина «full-stack разработчик» приводится несколько ключевых соображений:

  • Хороший разработчик не складирует свои знания. Большинство разработчиков занимаются либо фронтендом, либо бэкендом. Но чтобы быть хорошим специалистом в любом из этих направлений, вам нужно понимать оба. Проведение жесткого разграничения между ними охлаждает желание разработчиков изучать что-либо, выходящее за рамки собственной специализации. А ведь в каком-то смысле граница между бэкендом и фронтендом является искусственной .
  • Компаниям нужны специалисты широкого профиля. Не всегда и не для всех бизнес-целей вам подойдет узкий специалист. Маленькие компании и стартапы, у которых количество людей и средств ограничено, нуждаются в разработчиках с обширным опытом и разнообразием знаний. Крупные компании более склонны поручать работу отдельным специалистам, но и они могут привлекать full-stack разработчиков в контексте менеджмента проектов .
  • Full-stack разработчики наводят мосты между фротендом и бэкендом. Разработчики, специализирующиеся на каком-то одном из этих направлений, занимают свои ниши, но разработчики с full-stack знаниями помогают преодолеть пропасть между ними. Поскольку они понимают обе стороны, они могут определять проблемы и возможности, которые ускользнут от взгляда узкого специалиста.

Эти аргументы доказывают, что full-stack разработчики не заменяют, а дополняют работу специалистов по фронтенду и бэкенду. Их ценность – в способности понимать и работать со всем проектом в целом, а также использовать общие технические познания во всем, с чем они имеют дело.

Эту философию можно кратко изложить цитатой из «Программиста-прагматика »:

«Чем больше вы знаете, тем выше ваша ценность… чем больше технологий вы знаете, тем лучше сможете приспосабливаться к изменениям».

Общий знаменатель

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

С целью приближения к общему знаменателю, в недавно опубликованном Ассоциацией информационных систем документе был произведен анализ 5 самых общеупотребительных определений термина «full-stack разработчик». Это была попытка вывести общее определение термина. Вот, что получилось в результате:

«Full stack разработка это методология, охватывающая все слои стэка и при этом создающая полное, реализуемое решение требований бизнеса. Full stack разработчики обладают широким опытом работы во всех слоях стэка и экспертным уровнем знаний в некоторых из них. В заданном стэке они должны быть способны производить минимально жизнеспособный продукт», – «Towards a Consensus Definition of Full-Stack Development», 2018.

Если вы рекрутер или менеджер по найму и хотите направить дискуссию в конструктивное русло, вы можете предпринять следующие шаги:

  • Убедитесь, что ваши запросы разумны. Никто из представителей обоих лагерей не ожидает, что full-stack разработчик сможет доставить результат, равный результату целой команды разработчиков. Если вы решаете, что для вашей команды разумно будет нанять full-stack разработчика, убедитесь, что вы не начинаете ненароком искать «единорога» и не просите одного человека сравняться по результатам со многими людьми. Самое важное: будьте готовы к тому, что может существовать больше одного набора навыков, позволяющих преуспеть в этой должности.
  • Выясните, как в вашей компании налажена совместная работа разработчиков. Как члены вашей команды делят работу и кто их контролирует? Какой уровень гибкости в плане фронтенда и бэкенда они ожидают от каждого отдельного коллеги, хоть full-stack, хоть нет? Если рекрутеры и менеджеры по найму будут равняться на эту точку зрения, им будет легче понять, как должен функционировать full-stack разработчик в контексте их компании. Это поможет сделать процесс найма более эффективным.
  • Ориентируйтесь на нужды своей компании. В целом, чем больше компания, тем более специализированные разработчики (и другие специалисты) могут в ней работать. Если ваша команда находится в процессе роста, учитывайте, как в ней будет работать full-stack разработчик – и не только сегодня, но и в долгосрочной перспективе, когда команда увеличится. В команде на 300 человек может быть больше места для full-stack разработчиков, чем в команде на 8 тысяч человек.
  • Воспринимайте «full-stack» как примерный ориентир. Спектр мнений относительно трактовки этого термина предполагает, что full-stack разработчики могут быть очень разными. Если кандидат так себя называет, это еще не является показателем того, что он вам подходит. С другой стороны, кандидат, называющий себя фронтенд- или бэкенд-разработчиком, может иметь достаточно широкие познания, чтобы подойти на вашу full-stack позицию. Не игнорируйте терминологию, но и не слишком в нее упирайтесь, пускай навыки кандидатов говорят сами за себя.

А к какому «лагерю» относитесь вы и ваша команда? Поделитесь в комментариях!

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

Необходимые навыки fullstack-разработчика

На дворе давно не нулевые, так что стандартного LAMP (Linux, Apache, MySQL, PHP), который тогда применялся чуть ли не каждым вторым разработчиком, недостаточно, чтобы считать себя full-stack разработчиком. Сейчас у full-stack разработчика в портфолио должны быть совершенно другие навыки и умения.

Сервер и хостинг

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

Работа с данными

Full-stack разработчик должен уметь создать сбалансированную модель данных, быть знаком с реляционными и нереляционными базами данных, а также уметь работать с форматами XML / JSON.

Бэкенд-технологии

Сюда относятся знание языков PHP, Python или Ruby, умение выстраивать клиент-серверное взаимодействие, разработка API, работа с аналитикой и сопутствующими фреймворками.

Пользовательский интерфейс

Full-stack разработчик должен уметь работать с макетами, владеть версткой и знать языки разметки. Знание JavaScript также необходимо для создания визуально привлекательного интерфейса.

Проектирование UX

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

В чем преимущества full-stack разработчика?

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

На хедхантинговых сайтах каждый день появляется 7-10 новых вакансий для full-stack разработчика, а зарплата на уровне 119000 рублей в месяц доступна при наличии опыта разработки от года.

Получение необходимых навыков

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