Что такое full stack разработчик
Кто такой Full Stack разработчик?
Full stack разработчик, который может создать из прототипа полноценный MVP (минимальный жизнеспособный продукт), часто считается тем, кто берется за все, но ничего толком не умеет, и не без оснований. Чтобы определить современного разработчика как full stack, нам сначала нужно сосредоточиться на том, кем был разработчик full stack.
Full Stack разработчики «тогда», раньше
Давным-давно, около 2000 года (в интернет-времени 17 лет – это очень давно), full stack разработчиком был тот, кто мог:
— создать веб-страницу в некоторых инструментах Adobe, таких как Photoshop или Fireworks
— превратить этот дизайн в HTML, CSS и горячие точки на изображениях (помните их?)
— написать некоторые базовые сценарии PHP 4.0 (тогда объектно-ориентированного PHP не было и на горизонте) для обработки серверной части логики
— хранить все динамические данные в MySQL, возможно, немного оптимизировать
— загружать все на сервер по FTP и собирать оплату.
Обратите внимание, о каком PHP здесь идет речь: у full stack Flash или Coldfusion разработчика был другой (но не очень отличающийся) рабочий процесс.
Это были простые времена, жизнь была хорошей. Агентства, состоящие из одного человека, были весьма распространены, и люди все еще успевали проводить время с семьей после работы.
Что же должен знать Full Stack разработчик сейчас?
В наши дни мы сталкиваемся с такими ситуациями:
Server Admin / Devops
Разработчик должен знать, как выполнять базовое управление сервером. Это включает, но не ограничивается:
— подключение к удаленным серверам через терминал, в среде без GUI
— основные сценарии оболочки
— управление пользователями и группами на сервере
— управление серверными программами, такими как Apache и Nginx для обслуживания приложений
— управление брандмауэрами и разрешениями
— установка нового программного обеспечения и обновление дистрибутива
Тема связана со специальностями:
Помимо этих основ, разработчик должен знать, как создавать хорошие, здоровые, изолированные среды разработки, как в Docker, так и на виртуальных машинах, таких как Vagrant.
Также разработчик должен быть хорошо знаком с системами контроля версий, чтобы иметь возможность создавать резервные копии и совместные коллективные коллекции кода, отслеживать изменения во времени. В наши дни не существует современного рабочего процесса разработчиков без использования контроля версий.
Облако
Помимо реальных управляемых или виртуализированных серверов, разработчик должен знать об облаке – хостинге на таких платформах как Heroku, Google Cloud, Azure, AWS и других.
Существует справедливое мнение о платформах и инструментах, которые являются более привлекательными, чем полезными, но знакомство с сервисами, о которых все говорят, может пригодиться в долгосрочной перспективе – клиент может потребовать переключения провайдеров в любой день, и он платит за готовность.
Back End
Что касается back end, помимо знания выбранного языка – например, PHP и его множества фреймворков и CMS – Full Stack Developer должен быть знаком с:
— веб-серверами, такими как Nginx и Apache, которые связаны с Devops (смотрите описание выше)
— NodeJS для компиляции JS, CSS и других активов в статически хранимые. Хорошие новости в том, что есть способы избежать NodeJS с помощью PHP
— такими инструментами, как Composer для управления пакетами и зависимостями в самом PHP – никакая среда современного разработчика не будет завершенной без него
— хорошим дизайном API, поскольку большинство новых веб-сайтов сегодня основаны на API и просто говорят об отдельном интерфейсе (подробнее об этом ниже)
— поисковыми систеамиы, такими как ElasticSearch, ведь они действительно важны для производительности
— cronjobs и фоновыми заданиями с помощью таких инструментов, как Gearman или библиотек, таких как Crunz
— знанием о кешировании с помощью Varnish, Redis и аналогичных мощных инструментов, которые значительно снижают расходы на хостинг, часто создают или разбивают проект.
Базы данных
Базы данных представляют собой отдельный раздел, потому что, помимо хорошего понимания реляционных баз данных, схема которых не часто изменяется (например, MySQL или PostgreSQL), разработчик должен знать о базах данных noSQL, таких как MongoDB, Redis или Cassandra, не говоря о графовых базах данных, таких как Neo4j.
Что еще хуже, все это находится на сервере, под контролем разработчика. Есть также несколько удаленных решений, таких как Mongo-like RestDB или Firebase, принадлежащая Google, и т.д.
Front End
Здесь вообще полный хаос.
Вот довольно исчерпывающий обзор того, что необходимо для здорового рабочего процесса front end:
Видео курсы по схожей тематике:
SQL Базовый. Разбор ДЗ
Подготовка к собеседованию в IT компании. Вопросы и ответы. Хитрости. Трюки.
Unit тестирование в C#
— Препроцессоры и транспиллеры (такие как Babel) для таких вещей как Typescript, ES6, LESS, SCSS, SaSS
— Builders and task runners like Grunt и Gulp
— Фреймворки как VueJS, React, Angular
— Module bundlers, такие как Webpack, Browserify, Rollup
Дизайн
В дизайне разработчик должен знать, как набросать прототип приложения, прежде чем преобразовать его в пригодный для использования формат, такой как HTML и CSS. Затем может быть добавлен интерактив с ложными JS включениями и только после того, как оболочка приложения будет завершена, а user experience дизайн и дизайн интерфейсов будет готов, начнется настоящая разработка. Это само по себе является огромной стартовой работой и требует специального набора инструментов, таких как:
— Photoshop и/или Illustrator или альтернатива с открытым исходным кодом, например Gimp/Inkscape
— хороший, быстрый редактор, такой как Atom или Sublime Text
— подборщики рисунков, такие как подклассы и подборщики цветов, которые подбирают цвета, подходящие друг другу
— сетчатые системы для CSS
— все от Front End до имитации JavaScript
— способы развертывания прототипа онлайн для клиентов, чтобы они могли увидеть его и дать вам отзывы (например, Ngrok).
Логирование
Разработчик может создавать свой набор инструментов, который поможет получить все необходимое для всех задач ведения журнала. Например, ElasticSearch для поиска журналов, Logstash для их сбора и Kibana для панели, в которой они отображаются для удобного мониторинга.
Mobile
Наконец, мобильная разработка. Webview как на iOS, так и на Android становится все более и более эффективным, появились PWA (прогрессивные веб-приложения), а нативные приложения уже теряют свое очарование из-за сложного процесса их разработки. Таким образом, разработчик полного стека должен быть знаком с PWA или переходить на что-то вроде React Native или полностью на webview, например, NativeScript, Tabris, Cordova, Phonegap, или другую реализацию, чтобы получить хорошее «клиентское приложение» для своего API (см. back end раздел выше).
Так стоит ли становиться Full Stack разработчиком?
Итак, после всего, стоит ли стараться?
Прежде всего, следует отметить, что очень немногие full stack разработчики являются такими full stack – многие сосредотачиваются только на большинстве из этих технологий и аспектов, а не на всех, просто потому, что нельзя полностью все взять во внимание.
Во-вторых, знание хотя бы небольшой части всего не сделает вас мастером определенного ремесла, но позволит вам понять, что входит в проект, и какие из этих технологий действительно нужны проекту. Это бесценный навык при делегировании, открытии агентства или просто перенаправлении существующей команды с утраченного пути на конкретный вектор работы.
Бесплатные вебинары по схожей тематике:
Как правильно создать CV Junior разработчику?
Полезные советы по поиску первой работы для разработчика
Интерактивный вебинар. Soft Skills на интервью и на испытательном сроке.
Возможно, я не JavaScript rockstar, Elasticsearch ninja, гуру MySQL, Devops маньяк или мобильный ретранслятор, но в моем случае full stack позволяет мне расправлять мои крылья, тестировать различные технологии и предлагать альтернативные, необычные решения для моих клиентов на фрилансе. Деньги могут приходить со всех сторон, и я могу заключать контракты от работы на серверной стороне до разработки плагинов WP и всего между ними, потому что я умеренно знаком со всеми этими вещами. Для меня full stack определенно стоит того. Если сравнивать с моими Flash-днями, когда я получал огромное удовольствие от работы (без JavaScript!), то зарплата была ниже, а проекты – гораздо сложнее получить.
Перевод: full stack разработчик — это миф
Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда, 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 инженера” я видел в посте разработчика Facebook Карла Буэно, который называл этим термином генералиста с сильным уклоном в анализ производительности.
Возможно, “full stack” инженеру или разработчику вообще не нужно писать код. А вместо этого фокусироваться на работе системного архитектора или интегратора. Человек со знанием всего стека технологий может предвидеть проблемы коммуникации и интеграции между слоями до того, как они смогут нанести вред разрабатываемому проекту.
Но даже в случае, если под “full stack” понимать роль архитектора, необходимо определить о каком “стеке” идет речь. Стек веб разработки, мобильной разработки, нативных приложений? Даже в таком виде “full stack” это не одно умение, а большой набор умений, с глубоким пониманием о взаимодействии технологий в рамках “стека” и о том, как изменения на одном слое стека влияют на другие его слои.
Full stack разработчик — это миф. Но не потому, что таких людей нет, а потому, что такое определение не имеет смысла. Нет никакой разницы между этой формулировкой и “coding ninja” или “rockstar”. Но про последние все хотя бы понимают что такие названия не имеют отношения к конкретному набору умений.
Вы ищете “на все руки мастера”, специалиста по интеграции, специалиста по производительности, того кто может быстро изучать новые технологии и приемы разработки? Или вы ищете того, кто является экспертом во всех перечисленных областях? У меня для вас плохие новости, посмотрите на картинку еще раз. Она далеко неполная.
Full stack web developer
Довольно давно в различных источниках всплывала очень интересная тема Full Stack developer’a. А именно, что должен из себя представлять такой разработчик, каким опытом, знаниями и умениями должен обладать, с какими технологиями работать? И если с вопросом что должен из себя представлять все более менее понятно – должен уметь самостоятельно написать с нуля не тривиальное приложение, т.е. frontend, backend, работа с сетью, с БД и другие плюшки, архитектурные решения и т.д. То с последующими вопросами все не так ясно. Заинтересовавшихся прошу подкат…
В этой своей статье я представляю вашему вниманию перевод части статьи отсюда.
Слои Full Stack’а:
1. Server, сеть и окружающая среда hosting’а.
Сюда отнесем понимание того, что может сломаться и почему. Соответствующее использование файловой системы, хранение облака, сетевые ресурсы и понимание избыточности данных и доступности необходимы. Как масштабировать приложение с учетом аппаратных ограничений? Как на счет многопоточности и состояния гонки? Умение уловить то, что вы не увидите на вашей рабочей машине, но это может произойти в реальном мире. Full Stack разработчик может работать бок о бок с DevOps. Система должна предоставлять полезные сообщения об ошибках.
2. Data Modeling
Если модель данных ошибочна, то бизнес логика и более выскокие уровни начинают нуждаться в странном (ужасном) коде для компенсации острых углов, которые модель данных не покрывает. Full Stack разработчики знают как создать разумно сбалансированную реляционную модель данных, с foreign key’ями, индексами, представлениями и т.д. Full Stack разработчики знакомы с NoSQL и знают, когда таки решения сияют по отношению к реляционным БД.
3. Бизнес логика
Здесь необходимы твердые объектно-ориентированные навыки. Так же здесь возможно понадобятся различные framework’и.
4. API слой / Action слой / MVC
Знания о том, как внешний мир может действовать против бизнес логики и модели данных. На этом уровне framework’и должны использоваться в большой степени. Full Stack разработчики имеют возможность писать четкий, последовательный, простой интерфейс.
5. Пользовательский интерфейс
Full Stack разработчики понимают как создать удобочитаемый макет и признают, что им необходима помощь профессиональных художников и графических дизайнеров. В любом случае, внедрение хорошего визуального дизайна является ключевым фактором. Превосходно владеет HTML/CSS, JavaScript (node, backbone, knockout и т.д.).
6. Пользовательский опыт
Full Stack разработчикам понятно, что пользователи просто хотят, чтобы работало. Хорошая система не доведет своих пользователей до синдрома тоннеля запястья или воспаленных глаз. Full Stack разработчик может посмотреть на процесс из 8 щелчков мышью и 3 шагов и свести его к одному клику. Такой разработчик пишет полезные сообщения об ошибках, если что-то ломается, просит за это прощения. Иногда программисты непреднамеренно пишут сообщения об ошибках, которые могут заставить пользователя почуствовать себя глупым.
7. Понимание того, что нужно заказчику и бизнесу
Full Stack разработчик понимает, что происходит при использовании клиентом программного обеспечения, а так же обладает пониманием бизнеса клиента.
Другие части паззла:
1. Умение писать качественные Unit тесты.
2. Понимание Continuous Integration.
3. Осознание проблем безопасности очень важно, так как у каждого слоя есть свои возможные уязвимости.
Дальше в оригинале идут некторые мысли автора, ну а я предлагаю всем желающим обсудить, прокомментировать и дополнить список навыков и необходимых Full Stack разработчику знаний и умений. Спасибо за внимание.
И швец, и жнец. Кто такой Full Stack разработчик и как им стать?
“Full Stack разработчик — это технический волшебник, который знает все языки программирования и технологии, а также прекрасно поет и танцует.”
Иэн Питерс-Кэмпбелл (Ian Peters-Campbell),
опытный разработчик и основатель софтверной компании Stickbuilt.
Кто такой Full Stack разработчик?
Почему эта тема так неоднозначна?
Четыре столпа Full Stack разработки
Обычно к фронтенду относят технологии и языки программирования веб-разработки, такие как HTML, CSS и JavaScript. Также включает JavaScript-фреймворки, такие как React, ну и все прочие технологии, относящиеся к “клиентской” стороне продукта.
С чего начать изучение:
Начать можно с фреймворков Create React App или Gatsby, с помощью которых довольно легко создать полноценное React приложение. Хорошей идеей будет освоить CSS препроцессоры, базовые инструменты для работы с CSS вроде CSS-in-JS, а также инструменты вроде Sass.
К бэкенду относится весь код, работающий на серверах, включая приложения и API, которые обеспечивают работу сайта. Основными языками программирования для бэкенда как раз являются Java, Python, Ruby и другие. Помимо этого, в бэкенд разработку также входит управление базами данных, для чего требуется знание SQL.
С чего начать изучение:
Прежде всего, рекомендуется начать с углубления ваших знаний JavaScript, как своего рода связующего звена между фронтендом и бэкендом во многих случаях. В частности, хорошей идеей будет освоить NodeJS — это программная платформа, основанная на движке V8, превращающая JavaScript из узкоспециализированного языка в язык общего назначения.
Также для того, чтобы иметь максимально полную квалификацию в бэкенде, рекомендуется, помимо Java, постепенно осваивать такие языки программирования, как Python (в первую очередь), PHP и Ruby.
От проджект-менеджера, если вкратце, требуется управлять проектом, что включает множество задач, среди которых взаимодействие с клиентами, коллегами, сторонними подрядчиками и т.д. Словом все, что нужно для успешной реализации проекта. Сюда также входит планирование, принятие стратегических решений по работе над продуктом и т.д.
С чего начать изучение:
Для успешного развития в качестве проджект-менеджера не помешает изучить наиболее популярные инструменты в этой сфере. Основными можно назвать: GanttPRO (сервис для планирования и управления проектами с помощью диаграммы Ганта), Jira Software (популярная система для планирования и отслеживания agile-проектов), LiquidPlanner (инструмент для проджект-менеджмента в реальном времени), Basecamp (еще одна система управления проектами и совместной работы) и т.д.
Ну и, наконец, четвертым столпом фуллстек-девелопмента является знание DevOps. Обязанности DevOps-а могут сильно отличаться в зависимости от проекта, но как правило к ним относится все, что касается запуска программного кода в продакшн, включая, например, настройку серверов, на которых будет функционировать приложение, и обеспечение слаженной работы специалистов команды вместе с техническими решениями, которые они используют.
С чего начать изучение:
Сфера DevOps также включает в себя довольно много всяких инструментов. Вот те, с изучения которых имеет смысл начинать: инструменты управления исходным кодом (GitLab, GitHub, Bitbucket), CI/CD-инструменты (Ansible, Jenkins, Chef), тулзы для коммуникации и коллаборации (Slack и Microsoft Teams), а также сервисы облачных вычислений и хранения данных (AWS, Azure и GCP).
Помимо вышеперечисленных четырех базовых составляющих “полного стека,” он не был бы действительно полным, если бы не включал в себя также мобильную разработку, базы данных и QA автоматизацию — истинный Full Stack разработчик разбирается и в этих технологиях тоже.
Зарплаты Full Stack разработчиков
Как стать Full Stack разработчиком?
Full stack девелопер должен хорошо владеть сразу несколькими языками программирования. Прежде всего конечно идут основные: Java, PHP, C#, Python, Ruby, Perl и т.д. Словом, те наиболее популярные ЯП, на которых скорее всего будут писаться основные бизнес-процессы продукта. Конечно, выучить целый ряд таких языков в совершенстве будет крайне сложно. Но нужно по крайней мере освоить грамматику языка, который будет играть важную роль в разработке, а также хорошо знать, как структурировать, проектировать, реализовывать и тестировать проект на основе одного или нескольких ЯП.
Фреймворки и библиотеки кода.
Ну а хорошее знание основных языков программирования в большинстве случаев включает в себя и умение применять популярные фреймворки и библиотеки, такие как Java Spring, Hibernate, Python Django, PHP thinkphp, MyBatis и другие.
Важность знания фронтенд-технологий для фуллстек-разработчиков также велика, и со временем возрастает. Сегодня, когда удобство и общая “обертка” продукта становятся не менее значимыми, чем функционал, значительная часть общего успеха проекта ложится на плечи фронтненда. Для Full stack надо как минимум знать базовые фронтенд-технологии, то есть HTML5, CSS3 и JavaScript, а также владеть основными фронтенд-фреймворками и библиотеками, а именно JQuery, LESS, SASS, AngularJS и ранее упомянутым React.
Базы данных являются еще одной важной составляющей “полного стека,” ведь любому продукту или сервису нужно хранить где-то информацию. Соответственно, фуллстек-девелоперу положено знать хотя бы парочку наиболее популярных систем баз данных и то, как с ними работать. Наиболее популярные на сегодняшний день системы баз данных — это MySQL, MongoDB, Redis, Oracle, SQLServer и другие. Среди них, MongoDB наиболее популярна в качестве базы данных для различных интернет-проектов, MySQL и Oracle — для бэкенда в сфере корпоративных продуктов, а Redis часто используется для кэширования и повышения производительности системы.
Менеджмент и soft skills.
А вот чтобы добиться хороших результатов в данной сфере, просто выучить какую-нибудь технологию или язык программирования будет недостаточно. Успешное управление проектами включает в себя множество составляющих, среди которых тайм-менеджмент, планирование, хорошие коммуникационные навыки и многое другое. А приобретается все это преимущественно через практику.
Базовые знания дизайна.
И наконец, знания дизайна, а именно UX/UI-дизайн, пусть и на базовом уровне, также входят в компетенцию full stack девелопера.
Кстати, вот неплохо составленный роадмап, призванный графически отобразить все разнообразие вышеперечисленных технологий.