Обложка статьи «Как стать разработчиком Full Stack»

Как стать разработчиком Full Stack

Евгений Рюмин

Евгений Рюмин

руководитель отдела разработки компании StormWall

Краткое содержание:

Разработчик Full Stack — что это за специальность

Для тех, кто не в теме: разработчик Full Stack — это мастер на все руки в том, что касается создания сайта. Профессионал Full Stack обеспечивает реализацию сайта «сверху донизу» — с уровня пользовательского интерфейса (frontend) до бизнес-логики и всего, что за ней стоит (backend), и связывает все компоненты сайта воедино.

Едва ли можно утверждать, что разработчик Full Stack — это совершенно новая специальность в ИТ. Скорее, ее следует рассматривать как очередной шаг в эволюции веб-мастеров. Их расцвет пришелся на начало прошлого десятилетия. Веб-мастера умели делать сайты под ключ, начиная с настройки веб-сервера и развертывания системы управления контентом (CMS) и заканчивая подготовкой текстов и выбором картинок.

С наступлением эпохи Web 2.0 индустрия веб-разработки начала расслаиваться — так появились узкие специализации: frontend, backend, DevOps, DBA (администраторы баз данных). Работа над сайтом, как правило, выливается в проект, пусть и небольшой, с участием специалистов всех перечисленных направлений, а также менеджера проекта, который организует взаимодействие между всеми участниками и отвечает перед заказчиком за получение результата, соответствующего его требованиям и ожиданиям, причем в оговоренные рамки сроков, бюджетов, функциональности и качества.

В отличие от специалистов узкого профиля, разработчик Full Stack может и слой backend выстроить, и frontend смастерить, и СУБД настроить, и интегрировать между собой различные компоненты решения. Вдобавок ко всему он еще умеет (или, по крайней мере, должен уметь) администрировать серверы. Как музыкант-мультиинструменталист может вполне прилично сыграть на нескольких различных инструментах, так и разработчик Full Stack может создать достаточно качественный веб-сайт, используя различные технологические решения, пакеты, языки  и фреймворки. В итоге поставленная заказчиком задача будет вполне успешно решена.

Так ли уж нужно стремиться стать разработчиком Full Stack

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

Впрочем, многим по душе иметь узкую специализацию и совершенствоваться в ней как суперпрофи. И это хорошо, такие люди ценятся на рынке. Но бывает и так, что человек долгое время был классным разработчиком backend, а потом произошло что-то, что выбило его из колеи, — например, он «выгорел», или устал, или просто потерял интерес к своему делу. В этом случае он может попробовать себя в области frontend либо замахнуться на Full Stack.

Ситуация с Full Stack на рынке труда

Разработчик Full Stack — перспективная, хотя и не очень массовая специальность. Например, сейчас, по данным hh.ru, требуется примерно 5 тыс. разработчиков backend, 3 тыс. специалистов по frontend и всего около 300 разработчиков Full Stack. С другой стороны, у специалистов Full Stack есть одно важное преимущество: такой профессионал может легко найти работу, например, по профилю backend или frontend либо попробовать себя в любом другом направлении веб-технологий. Впрочем, глядя правде в глаза, должен сказать, что хороший разработчик Full Stack — это большая редкость и так просто вы их не найдете.

Разработчик Full Stack вполне может в одиночку осилить проект создания сайта или целого веб-сервиса, поскольку умеет делать всё и даже больше, при необходимости делегируя самые сложные аспекты узким специалистам. И в этом состоит его ценность для компаний, которые не делают бизнес только на создании сайтов, ведь он может выполнять функции сразу нескольких сотрудников.

Участие разработчика Full Stack в команде по созданию сайтов, как правило, во много раз повышает ее эффективность. Ему поручают комплексные задачи — такие, например, как разработка личного кабинета, и он за короткое время создает работающий прототип (точнее, минимально жизнеспособный продукт — MVP), показывает его руководству, после одобрения улучшает функционал, и вот тут на помощь мастеру Full Stack  могут выделить (если потребуется) ресурсы на привлечение узких специалистов, чтобы улучшить реализацию отдельных аспектов решения.

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

Но благодаря широте своих компетенций разработчик Full Stack вполне может, например, стать лидером команды в отделе разработки ПО или занять ключевую позицию в каком-нибудь (например, «яблочном» — помните «Форрест Гамп»?) ИТ-стартапе. В определенном смысле специалист Full Stack — это предприимчивый разработчик-универсал, способный решить любую проблему бизнеса максимально эффективно.

Собственно, поэтому бизнес ценит таких людей. Не случайно, например, есть вакансии разработчиков Full Stack с окладом 220–250 тыс. руб. в месяц. Конечно, есть и более скромные вакансии с окладом 60–70 тыс., но и требования к кандидатам там пониже.

И всё же гнаться за деньгами не стоит

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

Движущими силами ИТ-профессионала должны быть технологическая любознательность, стремление понять и освоить новые платформы и инструменты, решить новые интересные задачи. Еще одна мощная движущая сила — это, конечно же, радость от освоения новых технологий, решения сложных задач и, главное, от осознания реальной пользы результатов твоих усилий для пользователей и заказчиков. Очень приятно, когда твоим продуктом пользуются с удовольствием!

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

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

Почему ИТ-специалисту полезно устремиться в русло Full Stack

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

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

Каков сегодня типичный список знаний и навыков разработчика Full Stack

Всё зависит от специфики работы. Но, естественно, самый важный навык — это уметь разрабатывать ПО с нуля. Для этого требуются знания серверных и «фронтовых» языков программирования, баз данных, базовые навыки администрирования Linux и Docker. Хорошо бы также знать основные виды уязвимостей (XSS, Sql-injection) — ведь тот, кто знает, как можно взломать, наверняка сообразит, как создавать устойчивые к взлому системы. Также немаловажным будет знания в области защиты от DDoS, для этого нужно уметь выполнять нагрузочное тестирование своих сервисов (целями которого является определение узких мест, оптимизация скорости работы ПО и в конечном счете возможность дать ответ на вопрос, сколько запросов в секунду система может обрабатывать), знать как можно защитить себя на уровне веб-сервера, iptables и прочих инструментов

Вот мой список, который я рекомендую всем интересующимся специализацией Full Stack:

  • TypeScript;
  • NodeJS;
  • PostgreSQL (основная СУБД);
  • Redis (СУБД для кэша, системы очередей и т.д.);
  • Jquery (так или иначе появляются задачи по парсингу веб-страниц, и базовое понимание синтаксиса jquery-like может сэкономить кучу времени)
  • Docker (куда же без него?);
  • TDD (разработка через тестирование, повышает стабильность фич, ускоряет процесс написания кода и его стабилизацию)
  • Docker Swarm либо Kuberneties (k8s) для развертывания горизонтально масштабируемого ПО;
  • Gitlab CI/CD
  • Nginx;
  • Debian (либо другой Linux, нужны знания на уровне работы с cli, установки софта и его настройки, работы с файловой системой);
  • Proxmox (незаменимый инструмент для вашей домашней лаборатории, а также для продакшн, хотя на старте лучше использовать облачные решения — так проще).

Так или иначе, устремляясь в русло разработки Full Stack, надо начинать с чего-то достаточно простого. Если вы уже опытный специалист, то сами понимаете, какие еще технологии нужно изучить. Ну а молодому разработчику для начала стоит освоить JavaScript, поскольку этот язык уже долгое время является одним из самых популярных и используется для создания компонентов как frontend, так и backend. Прочие платформы, такие как .NET, например, и подобные, можно будет освоить, когда в этом возникнет необходимость.

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

Насколько глубоко разработчик Full Stack должен знать информационную безопасность

Разработчик Full Stack должен уметь взглянуть на задачу с разных точек зрения, выступить в разных ролях, чтобы осознать, как мыслит и чего хочет представитель владельца бизнеса, чего ожидает его клиент, как видит задачу специалист по ИБ, как может проникнуть в систему хакер или вредоносный код и так далее. Такое многостороннее видение помогает найти золотую середину между удобством решения, его производительностью, функциональностью, масштабируемостью, надежностью и безопасностью.

Усовершенствовать безопасность решения помогают и различные тесты на взлом, проникновение, DDoS­-атаку и пр., и лучше пусть их проведет сам разработчик Full Stack, чем потенциальный злоумышленник. Но на этом не надо останавливаться. Разработчик Full Stack может привлечь хакеров White Hat для тестирования на проникновение, и это хорошо. Нужно помнить что рынок хакинга активно развивается и компетенции разработчика Full Stack могут, мягко говоря, отставать от реальности на месяцы, а порой даже на годы.

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

Как стать разработчиком Full Stack

Самое главное — это целеустремленность: делайте каждый день по маленькому шагу, и всё получится. Также важно правильно себя позиционировать: представьте, кем вы хотите быть через три года, и держите эту цель в голове. Еще в самом начале своей карьеры я считал себя разработчиком Full Stack и, хотя не являлся таковым, никогда не сдавался, благодаря чему приобрел бесценный опыт.

Нужно ли разработчику Full Stack вузовское образование? Я считаю, что нужно: образование хорошо тем, что учит преодолевать сложности, решать трудные задачи и в общем и целом делает разум более гибким и находчивым.

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

Вместе с тем, я убежден, что техническое, математическое или компьютерное вузовское образование получать не обязательно. Лично я учился на управленца, а ИТ было для меня чем-то вроде хобби — я с детства увлекался компьютерами и многие вещи освоил самостоятельно (но не без помощи интернета). Посчитав, что с моим уровнем знаний обучение компьютерным наукам будет скучным, я решил учиться на менеджера. Окончив вуз, начал разрабатывать ПО. Со временем, когда оказался на руководящих должностях, мне пригодились мои знания в области управления. Вот и сейчас, работая в StormWall, я занимаю должность руководителя проектов.

Нужно ли разработчику Full Stack получать знания в области менеджмента? Изучить основы менеджмента и, в частности, управления проектами, конечно, полезно, но в первую очередь нужно уметь управлять собой, научиться дисциплине. Например, если вы работаете в команде или должны достаточно часто пересекаться с заказчиками, то работать по ночам и отсыпаться до вечера уже не получится — придется приучать себя к иному режиму дня и достаточно жестко планировать свою работу, чтобы и в проекте успевать всё делать, и семье уделять достаточно времени. Особенно это касается лидера проекта.

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

Как приобрести первый опыт

Молодым специалистам необходимо просто начать действовать и создать что-нибудь для себя. Моим первым собственным проектом был парсер анекдотов. Он считывал с сайта anekdotov.net все популярные анекдоты и записывал их в базу данных. Я встроил в систему алгоритм рейтингов и голосования, а затем каждый день садился, читал новые анекдоты и проставлял рейтинги — меня это очень вдохновляло. Анекдоты с самыми высокими средне-арифметическими величинами оценок попадали на самую вершину моего «чарта».

На этом простом примере я убедился в широте возможностей программирования — передо мной открылось великое множество вариантов усовершенствования моей программы. Заодно я познакомился с основами создания систем типа клиент-сервер и работой с базами данных.Через какое-то время, когда появился Web 2.0 начало прощупываться разделение на frontend и backend, появились популярные библиотеки, получили развитие менеджеры пакетов (напр. npm) которые я успешно освоил и применил на практике. Таким образом, я двигался от простого к сложному. Оглядываясь назад, могу с уверенностью сказать, что в целом это был правильный путь.

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

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

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

Важно также учесть, что рано или поздно разработчик сталкивается с несовершенством того ПО, которым пользуется: в нем обнаруживаются проблемы, открываются ограничения, странности в «поведении» и пр. В относительно старом проекте поменять базовый фреймворк зачастую невозможно, даже если разработчик выступает в роли лидера проекта, — уж очень многое завязано на прежний инструментарий (в обиходе это называется Legacy).

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

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

Есть ли у разработчиков Full Stack свои лайфхаки

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

Должен ли разработчик Full Stack достаточно глубоко знать какую-то область бизнеса

На мой взгляд, профессионал Full Stack должен иметь перед собой «карту местности», постепенно собирая знания обо всех областях бизнеса, где он в принципе может быть полезен. И когда он окажется в новой предметной области, то сможет быстро погрузиться в нее, максимально эффективно вникнув в детали.

Работая в команде StormWall, я, безусловно, стал лучше понимать нюансы информационной безопасности. Вместе с тем, прекрасно осознаю, что мне далеко до уровня знаний моих коллег, которые занимаются проблемами ИБ многие годы, а некоторые — и десятилетия. Но также я знаю, что мои коллеги готовы всегда прийти на помощь и поддержать меня в решении задач, которые требуют глубоких знаний в области безопасности.

Как разработчику Full Stack повысить свою ценность на рынке труда

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

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

Таким образом, разработчику важно действовать и закреплять свои успехи, рассказывая о них на популярных сайтах вроде Tproger, Habr или публикуя результаты своего труда (если, конечно это возможно по юридическим причинам) в различных публичных хранилищах исходного кода наподобие GitHub.

И помните — никогда не опускайте руки надолго. Как только вы перестанете развиваться, вы непременно начнете деградировать. «Технологический поезд» не стоит на месте, можно на долгое время застрять в прошлом и так никогда его и не догнать.