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

Прежде всего определимся с терминами. Есть много разных представлений о том, кто же такой 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 человека. Запрограммировать микроконтроллер для интернета вещей, который общается с веб сервером, пишет в базу данных, и данные с которого можно просматривать на веб сайте, в приложении или на мобильном устройстве? Легко! Вы один можете представить всю систему и реализовать её без согласований, недопониманий и проволочек.

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

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

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

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

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

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

18 января 2016 в 09:35

Перевод: full stack разработчик - это миф

  • Блог компании Voximplant ,
  • Разработка веб-сайтов ,
  • Программирование
  • Перевод

Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда , 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 инженера

В последнее время словосочетание 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 разработки.

Понравилась статья? Поделиться с друзьями: