Senior full stack developer что это
Как стать full stack разработчиком
Авторизуйтесь
Как стать full stack разработчиком
Итак, вы решили начать путешествие в мир веб-разработки. Но с чего начать обучение начинающему программисту? В интернете огромное количество информации о разных технологиях, которые могут пригодиться веб-разработчику.
Оригинальный гайд составлен руководителем команды разработчиков. Автор резюмирует свой личный опыт, а также навыки, которые он считает ключевыми для новых членов своей команды.
Что нужно знать
Независимо от намеченного пути и карьерных целей, есть вещи, которые должен знать каждый разработчик:
Фронтенд
Фронтенд разработчик обычно выполняет следующие задачи:
Рассмотрим каждый пункт подробнее.
HTML/CSS
Это основа основ фронтенд разработки. HTML используется для размещения элементов на странице, а CSS для оформления этих элементов. От начинающего разработчика ожидают, что он хорошо знаком с этими инструментами. Вот что важно знать:
Познакомившись с основами, обратите внимание и на продвинутые практики.
На сайте css-tricks.com можно найти всеобъемлющий гайд по CSS.
Чтобы попрактиковаться, создайте несколько проектов с помощью CSS/HTML. Не обращайте внимания на JavaScript или API, сосредоточьтесь исключительно на работе со стилями и гипертекстовой разметкой.
Фреймворки
Следующий шаг — знакомство с CSS-фреймворками. По сути это готовые элементы и стили, которые можно использовать в своём проекте. Большинство компаний использует их, чтобы сберечь время своих разработчиков и не изобретать велосипед. Фреймворков огромное количество, подберите себе один по вкусу и изучите его. Обычно они довольно похожи, и, познакомившись с одним, можно легко освоиться и с остальными.
Bootstrap
Автор гайда рекомендует использовать фреймворк Bootstrap. Этот инструмент весьма распространён среди разработчиков.
3–4 декабря, Онлайн, Беcплатно
С таким разнообразием фреймворков может показаться, что нет нужды изучать основы CSS/HTML. Однако вполне возможно, что когда-нибудь вам потребуется подправить что-то с учётом особенностей проекта. В этом случае и пригодится знание основ.
Адаптивный дизайн
Важно принимать в расчёт многообразие мобильных устройств. К счастью, использование названных ранее инструментов (Bootstrap, CSS Grid, Flexbox и других) серьёзно облегчает адаптацию проектов.
Обычно вы будете разрабатывать приложения, предназначенные и для мобильных устройств, и для больших экранов. Сосредоточьтесь на разработке мобильного дизайна, а адаптировать приложение под большие экраны вы сможете позже, используя медиа-запросы.
JavaScript
JavaScript — язык программирования, используемый в веб-разработке. Если вы хотите успешно работать с фронтендом, вам придётся его хорошо изучить. Конечно, фреймворки есть и здесь, причина для изучения основ та же, что и в случае с CSS/HTML. В перспективе это знание положительно отразится на вашей работе. Фреймворки приходят и уходят, а базовые элементы языка не меняются.
Вот тот минимум, который должен знать начинающий JavaScript разработчик:
От начинающего разработчика не ожидают знания всего этого, но чем больше, тем лучше. Если вы способны написать простое веб-приложение без руководства, можно считать, что вы знаете JavaScript.
Если вы на самом деле хотите стать экспертом в JavaScript, полностью понять язык и выделиться из общей массы, вам помогут тематические ресурсы, освещающие сложные темы:
С их помощью вы не только лучше изучите особенности JavaScript, но и освоите общие концепции программирования. На самом деле, если вы будете понимать примеры кода, представленные там, вы будете знать больше, чем некоторые старшие разработчики.
Некоторые идеи для проектов:
Не беспокойтесь о том, как это будет выглядеть, сосредоточьтесь на работе с JavaScript, не уделяя особого внимания CSS/HTML. Внешний вид всегда можно поправить позже.
Фреймворки
Существует множество фреймворков для JS, выберите один и хорошенько изучите. Самые популярные на сегодняшний момент — Angular.js, React.js и Vue.js. Все перечисленные инструменты — хороший выбор, и в ближайшее время их разработку сворачивать не намерены.
Если вы освоили основы JavaScript и ориентируетесь в фундаментальных понятиях, изучение фреймворков не составит труда. Вам не нужно знать их все, лучше детально понимать работу одного инструмента, чем знать про разные, но на базовом уровне.
React
Этот инструмент может похвастаться мощным бэкграундом от Facebook, многочисленным сообществом, и в настоящее время является самым распространённым в индустрии.
Если вы последовали приведённым выше рекомендациям и ознакомились с JavaScript, изучение React должно показаться не слишком сложным. Как начинающему разработчику, вам нужно освоить основные концепции этого инструмента:
Как и в случае в JavaScript, от начинающего разработчика не ожидают досконального знания фреймворка. Для оттачивания навыков можете попробовать реализовать следующие несколько проектов:
Управление состоянием (Redux)
После базовых концепций React изучите Redux. Это фреймворк, предназначенный в основном для управления состояниями и тесно связанный с React. Можете рассматривать его как базу данных, которая содержит в одном месте все состояния вашего веб-приложения и позволяет легко ими управлять.
Это сложная система с большим количеством компонентов, поэтому поначалу работа с ней может несколько озадачить. Однако Redux понадобится вам только для работы с большими коммерческими приложениями. Сфокусируйтесь на понимании основ и управлении состояниями с помощью React.
Инструменты разработки
Это инструменты, которые помогут с отладкой React/Redux.
Веб-браузеры
Фронтенд разработчику важно разбираться в веб-браузерах. Самые распространённые — Chrome, Firefox и Microsoft Edge. Вам нужно разбираться в следующих аспектах:
Развёртывание и размещение
Фронтенд разработчик должен знать, как развернуть веб-приложение на хостинге и управлять им. Это хорошо для вашего портфолио и в конечном итоге для поиска работы. Возможно, имеет смысл использовать управляемые сервисы, позволив кому-то сделать за вас тяжёлую работу. Вот примерный список:
Каждый из этих сервисов предоставляет базовый бесплатный доступ. Отрицательная сторона их использования в том, что они не предоставляют полный доступ к некоторым функциям, которые могут понадобиться некоторым разработчикам. Например, к службе электронной почты, SSH или FTP. Если вы не понимаете, о чём речь, вероятно, они вам и не понадобятся, и базового доступа будет вполне достаточно.
Бэкенд
Грубо говоря, это место, где хранятся данные, полученные через фронтенд. Например, когда пользователь создаёт твит, тот проходит через сервер и сохраняется в базе данных.
Бэкенд разработчики обычно выполняют следующие задачи:
Языки программирования
Существует несколько сотен языков программирования, но не волнуйтесь, основных не так много:
Стоит выбрать один из них и хорошо его изучить. Если вы уже работали с JavaScript, вам может подойти Node.js. С его помощью вы сможете легко разрабатывать REST API, а это одна из тех задач, которые обычно поручают младшему разработчику.
Какой бы язык вы ни выбрали, вам нужно будет освоить следующие навыки:
Если вы решили изучить Node.js, то со многим из этого списка вы уже знакомы. Не пытайтесь выучить всё это сразу, начинающему разработчику это не нужно. Выберите язык, который лучше всего соответствует вашим целям (для веб-разработки подойдут все перечисленные), сконцентрируйтесь на нём и изучите его досконально. Естественно, если вам интересны другие языки (JavaScript довольно сильно отличается от Python), не стесняйтесь удовлетворить своё любопытство и поэкспериментировать с ними.
REST API и JSON
Одна из основных задач бэкенд разработчика — создание качественного REST API. Вам нужно знать:
REST API — мостик между бэкендом и фронтендом, поэтому для вас очень важно понимать, как он работает.
JSON — основной язык, используемый для передачи данных посредством REST API. Данные представлены Объектами и Массивами. Если вы уже освоили JavaScript, эта работа покажется вам знакомой.
Базы данных и DevOps
Эти два аспекта относятся к инфраструктуре разработки. Нельзя сказать, что начинающему веб-разработчику понадобятся углубленные знания в этой области, разве что если вы собираетесь заниматься именно вопросами DevOps. Вот базовые знания, которые вам потребуются:
Возможно, в вашей команде или компании будут другие люди, которые возьмут на себя заботу об этих вещах. Однако это действительно ценный набор навыков, поэтому, если вам любопытно и у вас есть свободное время, изучение баз данных и DevOps может оказаться полезным в перспективе.
Продвинутые навыки
Ниже приведены некоторые темы, на которые стоит обратить внимание уже после освоения основ. Ссылки ведут на англоязычные ресурсы.
Авторизация с помощью JWT/OAuth
Это стандартный подход, используемый в индустрии для авторизации и аутентификации пользователей.
Шаблоны разработки
Шаблоны разработки — стандартные решения стандартных проблем. Изучение этих шаблонов облегчит вам решение возникающих в процессе работы задач и повысит ваш профессиональный уровень.
Примеры на языке Java и аналогичные примеры на JavaScript.
Шаблонов огромное количество, не пытайтесь выучить их все. Ознакомьтесь с ними, и при возникновении конкретной проблемы вы сможете найти подходящее решение.
Progressive Web App и мобильная разработка
Progressive web apps (PWA) — это веб-приложения, которые запускаются на мобильных устройствах, подобно нативным приложениям. Можете изучить этот вопрос в свободное время.
React Native — вы можете писать код, который будет компилироваться под Android/IOS.
Flutter — фреймворк с открытым исходным кодом для создания мобильных приложений от компании Google, похожий на React Native, но на языке Dart.
Рендеринг на стороне сервера
Код веб-приложения может обрабатываться на стороне сервера, возвращая в браузер конечный результат. Такой подход имеет свои достоинства, в частности улучшает скорость работы и показатели SEO.
Использование командной строки (SSH/Bash и т.д.)
Когда графический интерфейс не доступен, приходится использовать для работы командную строку. Нужно знать как минимум следующие вещи:
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 девелопера.
Кстати, вот неплохо составленный роадмап, призванный графически отобразить все разнообразие вышеперечисленных технологий.
Перевод: 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”. Но про последние все хотя бы понимают что такие названия не имеют отношения к конкретному набору умений.
Вы ищете “на все руки мастера”, специалиста по интеграции, специалиста по производительности, того кто может быстро изучать новые технологии и приемы разработки? Или вы ищете того, кто является экспертом во всех перечисленных областях? У меня для вас плохие новости, посмотрите на картинку еще раз. Она далеко неполная.