Привет, Хабр! Представляю вашему вниманию перевод статьи "What is a Full Stack developer?" автора Laurence Gellert.

Кто такой Full Stack разработчик?
Разумно ли ожидать, что простые смертные будут владеть всеми аспектами разработки? Скорее всего нет, но в Facebook могут попросить об этом. На OSCON (O’Reilly Open Source Convention — ежегодный съезд, посвящённый обсуждению открытому и свободному программному обеспечению) один из сотрудников Facebook сказал, что они нанимают только Full Stack разработчиков. Что это значит?
Для меня Full Stack разработчик — это человек с хорошим пониманием каждого уровня разработки и искренне интересующийся всеми программными технологиями.
Хорошие разработчики, знакомые со всем стеком, знают, как облегчить жизнь тем, кто их окружает. Вот почему я так против разрозненности на рабочем месте. Конечно, политические и коммуникационные проблемы мешают в больших организациях. Я думаю суть политики найма в Facebook заключается в том, что если умные люди используют свои головы и слушаются своего сердца, то лучший продукт создается за меньшее время.

Уровни Full Stack разработки:
- Сервер, сеть и среда хостинга 
 - A. Это включает в себя понимание того, что может сломаться и почему, не принимая никаких ресурсов как должное. 
 - B. Необходимо надлежащее использование файловой системы, облачного хранилища, сетевых ресурсов, а также понимание избыточности и доступности данных. 
 - C. Как приложение масштабируется с учетом аппаратных ограничений? 
 - D. Как насчет многопоточности и состояния гонки? Скорее всего вы не примените их в своей разработке, но они используются в мире. 
 - E. Full stack разработчики могут работать бок о бок с DevOps. Системы должна представлять полезные сообщения об ошибках и возможность логирования. 
 
- Моделирование данных 
 - A. Если модель данных несовершенна, бизнес логике и более высокие уровни начинают нуждаться в странном (уродливом) коде, чтобы компенсировать случаи, которые модель данных не охватывает. 
 - B. Full stack разработчики знают, как создать разумно нормализированную реляционную модель, дополненную внешними ключами, индексами, представлениями, таблицами поиска и т.д. 
 - С. Full stack разработчики знакомы с концепцией нереляционных баз данных и понимают в чем они превосходят реляционные базы данных. 
 
- Бизнес логика 
 - A. Понимание ценности, которую представляет приложение. 
 - B. Знание твердых объектно-ориентированные принципов. 
 - С. Знание фреймворков, которые могут использоваться. 
 
- Уровень API / Уровень действий / MVC 
 - A. Как внешний мир влияет на бизнес логику и модель данных. 
 - B. Фреймворки должны активно использоваться на этом уровне. 
 - С. Full stack разработчики имеют способность писать четкие, последовательные, простые в использовании интерфейсы. Меня отталкивает степень запутанности некоторых API. 
 
- Пользовательский интерфейс (UI) 
 - A. Full stack разработчики: а) понимают, как сделать читаемый макет, или b) признают, что им нужна помощь художников и графических дизайнеров. В любом случае, реализация хорошего визуального дизайна является ключевым моментом. 
 - B. Владение HTML5 / CSS. 
 - С. JavaScript это перспективный язык будущего и в мире JavaScript делается много захватывающих проектов (node, backbone, knockout...). 
 
- Пользовательский опыт (UX) 
 - A. Full stack разработчики ценят, что пользователи просто хотят, чтобы всё работало. 
 - B. Хорошая система не дает своим пользователям синдром запястного канала или воспаления глаз. 
 - С. Full stack разработчики пишут читаемые сообщения об ошибках. Если что-то сломалось, извинитесь за это. Иногда программисты непреднамеренно пишут сообщения об ошибках, читая которые пользователь чувствует себя глупым. 
 
- Понимание что нужно клиенту и бизнесу 
 - A. Сейчас мы размываем черту архитектора, но это слишком большая роль. 
 - B. Full stack разработчики имеют представление о том, что происходит, когда пользователь использует программное обеспечение. Они также имеют представление о бизнесе. 
 
Другие важные моменты
- Возможность писать качественные модульные тесты. Кстати, в наши дни даже JavaScript может иметь модульные тесты.
- Понимание повторяющихся автоматизированных процессов построения приложение, его тестирования, документирования и масштабированного развертывания.
- Осознание проблем безопасности имеет важное значение, поскольку каждый уровень представляет свои собственные возможные уязвимости.
Заключительные мысли
Очень плохая практика — жестко привязывать код к конкретной реализации (библиотека, ОС, аппаратное обеспечение и т.д.). Тот факт, что full stack разработчик понимает весь спектр технологий, не означает, что у него есть разрешение на использование самого простого пути. На самом деле они делают это, если это "проект на выброс".
Технологические стартапы нуждаются в full stack разработчиках из-за их универсальности! Однако, по мере развития организации, ей требуется всё больше и больше целенаправленных специалистов.
Я не уверен, что вы можете называть себя full stack разработчиком пока вы не поработаете на нескольких языках, платформах и даже отраслях в своей профессиональной карьере. Full stack выходит за рамки "senior engineer", поскольку он находится в том же направлении, что и программист-полиглот, но с более высоким представлением всех соединительных частей. Обратите внимание, что в моем списке только 3-5 пунктов, связанных с написанием кода.
 
           
 





vasyapivo
Очень спорное утверждение. Наоборот, народ уже наелся слоями абстракции и сразу пишут под конкретный Postgresql или под конкретного облачного провайдера.
Уходят от тяжёлых ORM и переходят на легковесные мэпперы, а IDEA поддерживает sql в коде.