Что такое full stack разработка. Каким должен быть Full Stack-веб-разработчик? Базы данных и веб-хранилища

Безопасность 24.11.2019
Безопасность

Разумно ли ожидать, что каждый разработчик будет мастером в любом аспекте процесса разработки? Вероятнее всего нет, однако Facebook может потребовать от вас это. Будучи на конференции OSCON, работник Facebook сказал мне, что они нанимают только «Full Stack» разработчиков. Хорошо, но что это значит?

Для меня, «Full Stack» Разработчик - это кто-то, кто знаком с каждым аспектом: превосходно владеющий многими из них и проявляющий неподдельный интерес ко всем технологиям.

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

Составляющие «Full Stack»

1. Сервер, Сеть и Хостинговая Среда.

A. Включает в себя понимание того, что может сломаться и почему, ресурс принимается как должное.
B. Надлежащее использование файловой системы, облачных баз, сетевых ресурсов, а также понимание избыточности и доступности данных.
C. Как происходит масштабирование приложения при данных аппаратных ограничениях?
D. Что на счет мульти-поточности и состояние гонки? Знайте, что вы всего этого не увидите в ваших разработках, однако это может появиться и обязательно появится в реальном мире.
E. «Full stack» разработчики могут работать бок о бок с DevOps. Система должна обеспечивать осмысленные сообщения об ошибках и возможности сбора логов. DevOps увидят эти сообщения прежде вас, так что считайтесь с их мнением.

2. Моделирование Данных

A. Если модель данных некорректна, то бизнес-логика и более высокие классы начинают нуждаться в странном (безобразном) коде - костылях - для того, чтобы компенсировать исключительные случаи, которая эта модель не учитывает.
B. «Full stack» разработчики знают, как создать взвешенную реляционную модель вместе с внешними ключами, индексами, обзорами, справочными таблицами и т.д.
C. «Full stack» разработчики знакомы с концепцией не реляционных баз данных (NoSQL) и понимают, в чем они превосходят реляционные базы данных.

3. Бизнес-логика

A. Суть пользы приносимой приложением.
B. Здесь необходимы серьезные объектно-ориентированные навыки.
C. Здесь также могут понадобиться фреймворки.

4. Класс API/класс Action/MVC

A. Как взаимодействует ваша бизнес-логика и модель данных с реальным внешним миром.
B. На этом уровне, фреймворки должны быть максимально задействованы.
C. «Full stack» разработчики обладают способностью писать чисто, последовательно, просто для удобства пользователя. Меня пугает, до какой степени некоторые API бывают запутаны.

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

A. «Full stack» разработчики: а) понимают, как создавать читаемую схему, b) осознают, что нуждаются в помощи художников и графических дизайнеров. В любом случае, применение хорошего визуального конструирования - чрезвычайно важно.
B. Может включать в себя хорошее владение HTML5/CSS.
C. JavaScript - это восходящий язык будущего и большое количество захватывающей работы производится на JavaScript (node, backbone, knockout…)

6. UX

A. «Full stack» разработчики понимают, что пользователям необходимо, чтобы вещи работали просто.
B. Хорошая система не вызывает у своих пользователей кистевой туннельный синдром или раздражение глаз. «Full stack» разработчик может отстраниться и взглянуть на процесс, требующий 8 кликов и 3 шагов, а затем свести все это к одному клику.
C. «Full stack» разработчики пишут полезные сообщения об ошибках. Если что-то сломалось, извинитесь. Иногда программисты неумышленно пишут сообщения об ошибках, которые заставляют людей чувствовать себя идиотами.

7. Понимание того, что необходимо клиенту и бизнесу

A. В настоящее время область обязанностей инженера-разработчика не до конца ясна, однако это по большей части самостоятельная роль.
B. «Full stack» разработчики обладают глубоким пониманием того, что происходит, когда клиент пользуется продуктом. Они также обладают пониманием как устроен бизнес.

Другие составляющие головоломки:

1. Способность писать качественные юнит-тесты. К слову сказать, сегодня они могут писаться даже под JavaScript.
2. Понимание повторяющихся автоматических процессов, необходимых для построения приложения, его тестирование, предоставление документации, а также его масштабирование.
3. Важна информированность в вопросах безопасности, так как каждый класс по-своему уязвим.

Заключительные мысли

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

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

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

Егор Малышев, веб-разработчик в JetBrains

Какими знаниями и навыками должен обладать Full Stack веб-разработчик?

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

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

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

Каков инструментарий Full Stack-веб-разработчика?

Так как большую часть времени приходится работать с кодом, то инструмент №1 это, конечно же, IntelliJ IDEA Ultimate. Не обходимся и без других наших продуктов: используем YouTrack для постановки и отслеживания задач, TeamCity для автоматизации построения сборок.

Каковы требования компании к уровню образования потенциальных сотрудников?

Само по себе наличие диплома или даже диссертации мало что говорит о человеке. Мы не требуем формальных «корочек», а оцениваем кандидатов по их опыту, демонстрируемым умениям, тому, как они разбираются в сложных ситуациях и находят из них выход.

Какие требования предъявляются к опыту работы?

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

Есть ли особые требования, которые обусловлены спецификой деятельности компании?

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

Компания предоставляет сотрудникам большую степень свободы в работе, что накладывает большую ответственность и предъявляет повышенные требования к умению самоорганизовываться и эффективно управлять своим временем, чтобы выполнять поставленные задачи в срок.

Полная версия интервью опубликована на портале Системный администратор.

Вакансия: Full Stack-веб-разработчик

Одно из самых популярных направлений в области ИТ – это веб-разработка. Важное место в ней занимают Full Stack-веб-разработчики. Это универсалы, которые могут создавать как клиентские (фронтенд), так и серверные приложения (бэкенд), а также обладают знаниями системного администрирования. Мы попросили представителей компаний рассказать о знаниях, навыках, опыте, актуальных для Full Stack-веб-разработчиков сегодня

  1. Какими знаниями и навыками должен обладать Full Stack веб-разработчик?
  2. Каков инструментарий Full Stack-веб-разработчика?
  3. Каковы требования компании к уровню образования потенциальных сотрудников?
  4. Какие требования предъявляются к опыту работы?
  5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?

Александр Майоров, руководитель отдела Frontend-разработки в Tutu.ru

1. Для начала определимся с терминологией, кто такой веб-разработчик. Из названия понятно, что это программист, работающий с вебом. Но веб состоит из клиентской и серверной частей. Клиентская пишется с применением языка разметки, языка описания каскадов стилей и скриптового языка программирования JavaScript. При этом сборка всего этого «добра» осуществляется на сервере и деплоится на продакшен специальными утилитами. Серверная же часть может быть написана на всем что угодно, но обязательным условием является наличие HTTP веб-сервера как минимум (хотя не только HTTP).

Если описать весь список компетенций, получается, что знания и ожидания от Full Stack-веб-разработчика выходят за рамки возможностей обычного программиста. Такой разработчик должен разбираться в масштабировании приложения до нескольких миллионов запросов в минуту, уметь выбирать между MongoDB и MySQL, применять и настраивать облачные сервисы, владеть десятком средств управления конфигурациями для развертывания приложений на Ruby, PHP, JavaScript (что-то еще) или их комбинациями, разбираться вотличиях сервис-ориентированной архитектуры от монолитных приложений и еще множестве разных вещей.

2. Отсюда выходит, что Full Stack-разработчик – это какой-то джедай или ниндзя, сеньор девелопер, обладающий знаниями в очень многих областях:

  • один или несколько серверных языков программирования (PHP, JavaScript, Perl, Ruby, Python, C#, Java…);
  • знание одной или нескольких реляционных БД и умение с ними работать: MySQL, PostgreSQL, MS SQL…;
  • знание одного или нескольких NoSQL-хранилищ и документоориентированных БД: MongoDB, Redis…;
  • знание принципов работы HTTP-протокола, его версий и особенностей, сетевого стека в целом;
  • общие знания по администрированию и умение работать с Linux подобными системами;
  • знание клиентских технологий и языков: JavaScript, CSS, HTML.

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

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

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

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

Даже в таком виде Full Stack – это большой набор умений, с глубоким пониманием взаимодействия технологий в рамках стека и того, как изменения на одном слое стека влияют надругие его слои.

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

Поэтому этот термин может вызывать разные ассоциации и эмоции у разных людей (в том числе и негативные).

3. Минимальные требования:

  • знание Unix-подобных систем, умение работать с Bash, базовый опыт администрирования;
  • знание и умение работать с реляционной СУБД MySQL или любой другой SQL-базой;
  • знание сетевого стека, знание принципов работы HTTP-протокола и его версий;
  • умение работать с сервером Nginx, Apache (понимание их различий, преимуществ, особенностей…);
  • знание одного и более серверного скриптового языка программирования (в нашем случае минимум PHP);
  • знание клиентского слоя на среднем уровне (JS, HTML, CSS);
  • умение работать с системой контроля версий;
  • умение работать с системами кэширования (redis, memcache…);
  • умение работать с NoSQL БД: MongoDB;
  • опыт написания Unit-тестов.

Список требований может быть шире, в зависимости от проекта и задач.

4. Опыт работы у хорошего Full Stack-разработчика – от 5 лет и более. Как показывает практика, более-менее овладеть на профессиональном уровне навыками в каждой из областей можно в среднем за 1,5-2 года непрерывного трудового стажа, при этом каждый слой стека – это несколько разных инструментов и языков программирования.

5. Специфика описана в пункте 3. По-хорошему, Full Stack-разработчик – это либо одиночка, работающий над какой-то задачей, возможно, RnD, либо это тимлид какой-то команды, системный архитектор, который понимает всю архитектуру веб-приложения и определяет, каким должно быть веб-приложение.

Евгений Кузин, начальник отдела сетевых проектов, ООО «Доктор Веб»

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

Затем необходимое серверное ПО, конкретика всегда определяется задачей, но многие инструменты можно назвать стандартными – веб-сервер, СУБД, кэш-сервер, сервер очередей. Эффективная настройка этого зоопарка с учетом знаний о платформе и своих задач.

Затем непосредственно код бэкенда, сеть и протокол HTTPS, код фронтенда, порой даже верстка и ее рендеринг браузерами.

Причем FS-разработчик не обязательно непосредственно занимается всеми этапами разработки приложения, широко распространенное мнение о том, что FS-разработчик – этонаходка для компаний, стремящихся сократить свои расходы на штат программистов/системных администраторов, верно лишь отчасти. Важнее, что FS-разработчик обязательно использует свои знания, и в итоге это позволяет создавать более качественные программы, как с технической точки зрения, так и в целом.

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

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

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

5. Есть особый акцент на безопасность, обусловленный спецификой деятельности «Доктора Веба». По роду своей деятельности мы постоянно противодействуем вирусописателям идругим злоумышленникам в сети, поэтому наши веб-сервисы регулярно исследуются с целью найти уязвимость. Безопасная сетевая архитектура, своевременное обновление уязвимых компонент и библиотек, аккуратность в обработке данных, поступающих из недоверенных источников, – этим аспектам уделяется первоочередное внимание.

Юрий Трухин, эксперт по облачным технологиям InfoboxCloud

1. Для Full Stack-веб-разработчика необходимы знания в следующих областях:

  • понимание принципов работы серверов, сетей и облачных технологий;
  • умение проектировать и разрабатывать уровни данных и бизнес-логики, аргументируя архитектурные решения;
  • навыки разработки высоконагруженных сервисов. Понимание возможностей масштабирования;
  • знание алгоритмов;
  • умение проектировать и разрабатывать API и интегрировать сервисы с помощью API;
  • знание веб-технологий (HTML, CSS, JavaScript) и навыки проектирования современных пользовательских интерфейсов;
  • понимание User Experience;
  • умение работать с заказчиками и из бизнес-требований формировать техническое задание;
  • знание гибких методик разработки и умение работать в команде;
  • навыки работы с микросервисной архитектурой;
  • желание постоянно учиться и совершенствоваться.

2. Голова, IDE (IntelliJ IDEA), текстовые редакторы (Atom, SublimeText, vim), Git.

3. При прочих равных результатах на собеседовании выбирается кандидат с высшим образованием или ученой степенью.

4. Желателен опыт разработки сервисов и/или бэкенда не менее 1 года.

5. Требуется понимание принципов работы Odin Automation и Microsoft Azure Pack, умение разрабатывать APS-пакеты (https://www.apsstandard.org).

Бобир Рахимов, разработчик пользовательских интерфейсов «Лаборатории Касперского»

1. Full Stack-разработчик – это разработчик, который может поставлять веб-решение в целом. То есть клиентская часть и серверная часть (отсюда и название – Full Stack – весь стек). Помимо стандартного набора знаний фронтенд-разработчика в виде JavaScript, HTML, CSS, от него еще требуется знать и уметь реализовывать серверную часть. Он может быть реализован на разных фреймворках: JavaScript (Node.js приложения), С# (ASP.NET Web Forms/MVC), Java, Python (Django), Ruby (Ruby on Rails). Выбор того или иного фреймворка обуславливается самими требованиями к приложению в плане производительности и типа операций, которые предполагается осуществлять на сервере.

2, 3. Требования разнятся в зависимости о выбранной платформы из приведенных выше.

4. К опыту работы – как минимум 2-3 года (серверной разработки), плюс наличие реализованных приложений.

5. Особых требований нет.

Алексей Скибин, Web Developer в СООО «Гейм Стрим», минском центре разработки Wargaming,

Лариса Бугаева, Recruiter в СООО «Гейм Стрим», минском центре разработки Wargaming

1. А. С. : Для начала необходимо определить, что такое Stack для разработки проекта. В моем понимании, это набор технологий, которые используются на конкретном проекте. Кпримеру, это могут быть JavaScript и HTML для фронтенда, а Python + Django + PSQL + AMQP для бэкенда.

На самом деле просто знать технологии недостаточно. Чтобы быть Full Stack-веб-разработчиком, необходимо понимать подход к их применению.

Идеальный набор для Full Stack-веб-разработчика:

  • знание технологий веб-сервера;
  • понимание проектирования/моделирования слоя базы данных;
  • понимание проектирования бизнес-логики;
  • понимание, как внешний фронтенд взаимодействует с бизнес-логикой и слоем данных (API-слой).

Также полезно уметь писать юнит-тесты и профилировать свой код, оценивать/анализировать работу с БД.

2. А. С. : Я не особо придирчив к инструментам. Использую:

  • PyCharm;
  • Django-extentions либо питоновский профайлер для анализа кода;
  • Analize в базе данных и New Relic для анализа запросов;
  • Zabbix или что-то подобное для проверки состояния сервера.

3. Л. Б. : В нашей компании нет особых требований к уровню образования. В моей практике был кандидат, который прекрасно знал С++, получив при этом только среднее образование. Он работает в серверной команде уже несколько лет.

4. Л. Б. : Если говорить о позициях Full Stack-веб-разработчиков, с которыми я работала, требовался релевантный опыт на high load-проектах. Мы искали сильного бэкенд-разработчика, у которого не вызвало бы проблем написать необходимую функциональность на JavaScript. Также мы искали специалистов со знанием фреймворков Knockout и React.

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

Марина Трокай, HR generalist, Андрей Брюханов, руководитель отдела веб-разработки, компания Auslogics

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

Мы работаем с PHP, JS, MySQL, HTML и CSS. Среди общедоступных фреймворков предпочитаются Yii, Symfony, jQuery. Для контроля версий – Git

2. Каждый разработчик самостоятельно выбирает удобные для себя инструменты. Из IDE, как правило, используются NetBeans и PHPStorm.

3. Как уже было отмечено ранее, в компании Auslogics выполнение тестового задания является неотъемлемой частью процедуры рассмотрения соискателей. Помимо этого, существует также техническое интервью. Именно эти две составляющие отбора позволяют оценить соответствие заявленного уровня знаний соискателя требованиям компании. Однако тестовые работы отправляются не всем соискателям, подавшим свое резюме, а лишь тем, у кого указанный опыт соответствует требованиям вакансии. Образование, повышение квалификации и научная деятельность играют, конечно, важную роль, но не решающую. Принимая окончательное решение в пользу того или иного кандидата, мы анализируем умение соискателя рассуждать, искать оптимальные решения поставленных задач, качественно изучать новые технологии. Эти навыки гораздо важнее дипломов исертификатов.

4. Для участия в конкурсе на должность Full Stack-разработчика специалист должен иметь уверенные знания HTML, CSS, PHP, JavaScript и SQL. Быть знакомым с каким-либо изсовременных PHP-фреймворков. Знание основ *nix (bash, LAMP) и (или) умение использовать Photoshop в рамках верстки шаблонов по готовым макетам всегда являются неоспоримым преимуществом.

Поскольку компания австралийская, то требуются уверенные знания английского языка, достаточные для понимания технической документации и ведения стандартной переписки. Несомненным преимуществом всегда является знакомство со смежными технологиями. К примеру, для автоматизации тестирования мы используем Codeception, для continuos integration – Capistrano.

5. Коллектив компании Auslogics работает в отличном от большинства других ИТ-компаний формате – все сотрудники, кроме сиднейского офиса, работают на условиях полной занятости, но удаленно. Это дает немало свободы, но и требует большей самостоятельности, самоорганизованности и инициативности. Креативный подход, кропотливое отношение к написанию кода, видение конечного продукта и четкая его реализация являются залогом успеха работы над проектом. Для нас немаловажно отношение сотрудника к продуктам ипроектам компании. Именно «продуктовый» тип мышления разработчика определяет будущее качество кода. Широкий кругозор, знание предметной области и рынка приложений – преимущества, которые позволят разработать действительно качественный продукт. Наши программисты не только не опасаются изменений требований и переработки архитектуры, а порой и сами являются инициаторами этого, принимая это как вызов и мотив самосовершенствования.

Егор Малышев, веб-разработчик в JetBrains

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

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

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

2. Так как большую часть времени приходится работать с кодом, то инструмент №1 это, конечно же, IntelliJ IDEA Ultimate. Не обходимся и без других наших продуктов: используем YouTrack для постановки и отслеживания задач, TeamCity для автоматизации построения сборок.

3. Само по себе наличие диплома или даже диссертации мало что говорит о человеке. Мы не требуем формальных «корочек», а оцениваем кандидатов по их опыту, демонстрируемым умениям, тому, как они разбираются в сложных ситуациях и находят из них выход.

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

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

Компания предоставляет сотрудникам большую степень свободы в работе, что накладывает большую ответственность и предъявляет повышенные требования к умению самоорганизовываться и эффективно управлять своим временем, чтобы выполнять поставленные задачи в срок.

Подготовил Игорь Штомпель


Вконтакте

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

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

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

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

Что значит full stack разработчик?

Термин full stack описывает разработчика, который одинаково хорошо справляется с написанием фронт-энда и бэк-энда.

Чтобы быть более конкретным, это означает, что разработчик может работать с базами данных, PHP, HTML, CSS, JavaScript, а так же может превратить Photoshop-ый макет в готовый к использованию шаблон.

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

Что значило full stack в 2000 году и что значит сейчас?

2000 год был очень давно, в этом году был выпущен PHP 4.0. Да, 4.0. Тогда, хороший веб-разработчик знал немного HTML, CSS и процедурный PHP, потому что собственно ООП появился в версии 5.0.

Сборка LAMP (Linux - Apache - MySQL - Perl / PHP) был в моде в те годы, практически без альтернативы. В начале 2000-х, если кто использовал контроль версий - то они считались либо технологическими еретиками либо мастерами. Сегодня это смешно, если кто-то не использует данные технологии.

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

Системное администрирование

  1. Linux и написание shell скриптов
  2. Облачные технологии: Amazon, Rackspace, и т.д.
  3. Фоновые процедуры: Gearman, Redis
  4. Поиск: Elasticsearch, Sphinx, Solr
  5. Кэширование: Varnish, Memcached, APC / OpCache
  6. Мониторинг: Nagios

Linux по-прежнему самая распространённая операционная система Интернета, используемая в веб-разработке (не считая.NET). Кроме того, full stack разработчик должен знать, как работает облачный хостинг, Amazon / Rackspace.

Поиск является неотъемлемой частью большинства веб-сайтов - разработчик должен знать, как настроить и использовать поисковые серверы, такие как Sphinx или Elasticsearch.

Кэширование также важно: Varnish, обратный прокси, Memcached.

Инструменты веб-разработки

  1. Контроль версий: Git, Mercurial, SVN
  2. Виртуализация: VirtualBox, Vagrant, Docker

Сегодня неприемлемо не использовать контроль версий, даже если вы разработчик одиночка.

Используя средства виртуализации и среды разработки на основе каждого проекта легко настроить с помощью VirtualBox и Vagrant.

Если вы хотите работать с Vagrant вы должны знать, основной синтаксис Ruby.

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

  1. Веб-серверы: Apache, Nginx
  2. Языки программирования: PHP, NodeJS, Ruby
  3. Базы данных: MySQL, MongoDB, Cassandra, Redis, SQL / JSON в целом

Знание тонкостей работы с Apache и Nginx - это норма. Full stack разработчик должен знать, как настроить данные инструменты.

PHP должен быть освоен на высоком уровне, NodeJS, Ruby - как можно лучше.

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

Реляционные (например, MySQL, PostgreSQL) и нереляционные базы данных (как MongoDB, Redis или Cassandra) различия между которыми full stack разработчик должен знать, наряду с XML / JSON.

Фронтальные технологии

  1. HTML / HTML5: Семантический веб
  2. CSS / CSS3: LESS, SASS, Медиа запросы
  3. JavaScript: JQuery, AngularJS, Knockout, и т.д.
  4. Особенности совместимости всех браузерах
  5. Адаптивный дизайн
  6. AJAX, JSON, XML, WebSocket

JavaScript, который изначально никто не воспринимал всерьёз, сегодня превратился в один из самых популярных и мощных языков. Новые методологии и структуры появляются каждый день: MVC, MVVM, MVP, Angular, Knockout, Ember, и т.д.

Наряду с HTML, CSS, Javascript, full stack разработчик должен знать о принципах работы с медиа-запросами CSS, а так же препроцессорами, такими как LESS и SASS.

Следует также знать, как работать с технологиями AJAX или WebSocket.

Дизайн

  1. Преобразование веб-дизайна в код

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

Так же вам могут потребоваться знания самых разных технологий. Если вы хотите настроить Vagrant вам нужно знать синтаксис Ruby, а для более эффективной работы с DOM не обойтись без JQuery.

  1. Android
  2. Гибрид: PhoneGap, Appcelerator

Full stack разработчик должен иметь хорошее представление об этих технологиях.

Хорошо ли быть full stack разработчиком?

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

Рекомендуем почитать

Наверх