Мне иногда приходится посещать собеседования в качестве собеседующего и собеседуемого. Хочу взглянуть на холиварную тему сеньорности/миддловости/джуниорности разработчиков. В последнее время, качества, которые необходимы программисту сильно изменились. Думаю, связано это с популяризацией микросервисной архитектуры в современных проектах. Где от инженеров требуются немного другие навыки нежели разработчику монолита.
Hard-skills
Хардскиллы переоценены. Да, думаю сейчас это действительно так. Почти все разработчики большую часть своего времени создают микросервисы, суть которых в перекладывании json'ов из одного места в другое. Что касается творческих задач, их не так много, как хотелось бы.
Но почему-то на собеседованиях любят спрашивать то, что никогда не пригодится или пригодится один раз в жизни. Типа что выведет "вот этот вот код" или по какому алгоритму работает garbage collector в php. Серьезно? Это как-то говорит о степени твоей профессиональности? А с учетом того, что гуглится такая информация за минуту, то смысл таких вопросов сводится к нулю.
Другой вопрос это твой опыт и кругозор. Посещение конференций для перенятия опыта у других разработчиков, чтение литературы. Более ценным является разраб, который может предложить решение задачи в нескольких вариантах, чем разработчик, который руками реализовал ее когда-то давно. Также развитие кругозора помогает находить больше качественных архитектурных решений и развивать коллег.
А вот зачем разработчику, который дергает api, знать внутреннюю архитектуру archlinux или иметь в резюме опыт разработки сетевых протоколов? Также знание каких-то конкретных технологий (RabbitMQ) имеет мало смысла. Толковый инженер, с широким кругозором и сильным бэкграундом разберется практически с любой технологией за пару дней (или даже часов). Компания ничего от этого не потеряет, а только выиграет. Конечно же есть некоторые вопросы, знать ответы на которых мастхэв: SOLID, знания об основах своего ЯП, его плюсы/минусы, принципы KISS, DRY и умение следовать им.
Related skills
Эти скилы стоят примерно на одном уровне по важности с хардскиллами. В условиях микросервисной архитектуры умение "проводить" сервис является одним из ключевых навыков. Создать микросервис, отредактировать ci/cd, возможно даже подредактировать конфиги kubernetes'a на production. Умение работать с kubectl (зайти в контейнер, получить логи) - наличие всех этих умений делает из вас более полезную боевую единицу для современного IT бизнеса.
Soft-skills
Возможно сейчас это самый важный набор скилов.
Ответственность за результат. Важно понимать, что задача ограничивается не только твоим MR, а ты (и твоя команда) ответственны за задачу от постановки до релиза на production. Забота о том, чтобы твои изменения были доставлены к конечному пользователю довольно быстро, без проблем и хорошо проверенными, без критических багов. Отсутствие страха в коммуникациях с людьми из других отделов. Умение уточнить детали задачи если что-то не ясно.
Критическое мышление. Тоже является одним из столпов современного разработчика. Хороший работник должен ставить под сомнение вообще все, что видит (в разумных пределах), в том числе и свое решение. Уметь задавать правильные вопросы в ТЗ (если оно есть, ха-ха). Быть готовым конструктивно спорить с менеджерами, архитекторами, тимлидами и конструктивно критиковать их решения.
Самостоятельность. Умение разобраться в том или ином вопросе самостоятельно и предложить готовое решение команде, а не просить расписать каждый шаг как тебе нужно работать.
Работа на команду. Подправить документацию, подкорректировать описание эндпоинта. Умение вести общий вклад в работу команды, а не только ограничиваться кодингом своей задачи. Хорошо, когда разработчик делает вклад в общее дело!
Конечно есть и много других навыков, обладание которыми сильно желательно для кандидата, но я выделил самые важные на свой взгляд.
Заключение
Хотелось бы вспомнить цитату одного из своих бывших коллег:
Программист должен решать проблемы, а не создавать их.
В сухом остатке идеальный современный backend-разработчик это полупрограммист-полуадмин с хорошими навыками коммуникабельности и ответственностью за результат. С большим опытом разработки и широким кругозором. Сегодня, возможно, софтскиллы выходят на первый план. Тут вырисовывается одна из проблем современного рекрутинга - софтскиллы невозможно определить на собеседовании. Но тут на помощь уже приходит испытательный срок.
UPD: хард-скиллы конечно тоже важны и самое главное нужны - это опыт инженера, то за что ценится работник. Описанные мысли в статье совсем не значат, что я бы взял в команду коммуникабельного ответственного вайтишника, вместо угрюмого архитектора. Но по моему мнению, миддл может приносить больше пользы имея активную жизненную позицию, чем уставший выгорешвий сеньор, которому все равно на его работу.