Ответ на пост «Похоже, это глобальная проблема» - Часть 2
Этот пост - продолжение вот этого поста.
Дисклеймер: все нижеперечисленное является квинтэссенцией моего восьмилетнего опыта разработки приложений и может отличаться от вашего.
Но собственно знанием своих инструментов и умением их использовать дело не ограничивается. Если раньше, для того чтобы "загрузить" свой сайт в Интернет, нужно было всего лишь скопировать несколько текстовых файлов на ваш сервер, то сейчас дела обстоят совершенно иначе.
Во-первых, разработчику теперь (не всегда, но чаще обычного) нужно "собрать" свой код в формат, который будет понятен серверу. Иногда этот процесс тривиален, а иногда он может состоят из множества разных шагов, которые выполняются при помощи разных сторонних приложений. Возвращаясь к примеру нашего дома, мы могли бы сравнить этот процесс со сборкой отдельных частей дома в единое целое и подключение его к сетям общего пользования (электричество, вода, газ и т.п.).
Собрав и подключив дом, мы можем начать в нем жить. В самом простом случае мы будем единственным собственником дома, и наш дом будет занимать весь участок. В этом случае мы просто берем наш собранный код и загружаем его по определенным правилам на наш сервер. Если вы хорошо построили дом, и больше ничего в нем менять не планируете, то вы можете дальше жить счастливо. В программировании дом постоянно развивается: появляются новые этажи, приходится менять коммуникации и снова все согласовывать и переподключать. Делать это вручную, да еще и по нескольку раз в день, бывает достаточно накладно, поэтому используются различные системы (TFS, GitLab, Jenkins и др.) для автоматизации этого дела, которые, конечно же кому-то надо настраивать. Их можно было бы сравнить с агентством, которому вы могли бы поручить заниматься всеми согласованиями перепланировок и подключением коммуникаций от вашего имени.
По мере роста Интернета начали появляться так называемые "облачные" сервисы. Теперь вам не нужно самому искать участок, на котором строить дом, и заниматься коммуникациями - за вас все сделает облако. От вас только требуется решить, насколько большой участок вы хотите. На данный момент существуют три основных игрока на "облачном" рынке - Microsoft, Amazon и Google. Они предоставляют схожий набор услуг, но каждый из них предлагает работать со своими по-своему. При этом и типов участков стало больше: вы можете получить полноценный участок в свое личное пользование с полным доступом к коммуникациям (выделенный сервер), можете выбрать только участок, а коммуникации оставить управляющей компании (например, через WebApp в Microsoft Azure).
В добавок к этому появилась мода на микросервисы, когда ваш дом спроектирован так, что каждая отдельная квартира или комната в доме, — это своего рода отдельный дом, и вы можете компоновать его в зависимости от своих потребностей. Накопили в начале только на однушку, потом "докупили" еще одну комнату, потом еще; дети съехали жить к себе - продали лишние комнаты. И все это без переездов и каких-либо перепланировок благодаря Docker и Kubernetes.
Теперь мы, собственно, подобрались к сути вопроса: почему вакансия из скриншота ниже — это все же не три и не пять отдельных вакансий.
Как мы видим из описания выше и предыдущего поста, процесс веб-программирования в частности, да и разработки вообще, очень сильно изменился за прошедшие несколько десятков лет. На рынке существует сотни разных языков программирования, программ и сервисов, каждый из которых помогает выполнять разные задачи, и каждый день появляется что-то новое, что-то что лучше (необязательно) подходит для решения какой-то бизнес задачи. Теперь программисту недостаточно просто знать язык программирования, нужно, прежде всего понимать весь жизненный цикл своего программного продукта и уметь "передвигать" свой продукт по этим стадиям.
Поясню: недостаточно просто написать код. Нужно уметь этот код собрать, оттестировать, если нужно, задокументировать/внести изменения в процессе сборки и развертывания и, собственно, "загрузить" собранный код.
Возвращаясь к аналогии с домом, будучи строителем, вам нужно понимать, что сначала нужно организовать фундамент, потом выставить стены и только потом крышу.
Теперь попробуем "перевести" вакансию из оригинального поста с HR-ного на человеческий:
Есть проект, написанный на React с использованием библиотеки Redux, с бэкендом на NodeJS и базой данных в MongoDB. При этом проект развернут в облаке Amazon с использованием Kubernetes.
Вряд ли тут от человека требуется доскональное знание всего. Хотя не стану отрицать, что есть конторы, в которых и такое бывает. Но что бы ты ни делал, ты должен иметь полную картину рабочего процесса в голове. Если ты фронтендер, то помимо, собственно, React'а и Redux'а ты должен знать, как запустить свой код в Docker и Kubernetes, а если ты бэкендер, ты должен знать, как там развернуть свою часть кода вместе с базой. И если ты претендуешь на должность junior разработчика, то я могу понять незнание чего-то, но если ты middle или тем более senior, то такая вакансия не должна быть для тебя чем-то из ряда вон.
А обидно мне стало за то, что мы начали считать тот багаж знаний и умений, который получили 3-7 лет назад чем-то само собой разумеющимся, и, если где-то нужно что-то сверх этого, пусть это уже и стандарт в индустрии, то это работа отдельного человека.