Кто такой «Full Stack» разработчик?

Перевод статьи выполнен в рамках  Tolstoy Summer Camp и МетаБета.

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

Об авторе

Даша работает редактором Tolstoyshow -- помогает участникам кемпа рассказывать о своих проектах миру, описывает все события кемпа на сайте и в соцсетях: facebook, instagram, vkontakte, twitter, фотографирует всех экспертов и лекторов кемпа -- в общем делает Tolstoy Summer Camp открытым, понятным и красивым местом и событием. Пишите Даше, если что не понятно.