Мы продолжаем раскрывать подробности трудоустройства в геймдеве — в этот раз рассказываем про серверных разработчиков и отвечаем на ключевые вопросы: можно ли перейти из смежной сферы, нужно ли профильное образование, какие задачи обычно просят решить на собеседовании и многое другое. Обо всем этом рассказали: технический директор Allods Team Сергей Спиридонов, технический директор IT Territory Владимир Летяго, технический директор IT Territory Антон Поцюс. Все зависит от вакансии. Чаще всего требуется опыт серверной разработки или хотя бы понимание того, чем отличается разработка под сервер от обычного клиентского приложения.  По необходимым знаниям и умениям: нужно разбираться в алгоритмах и структурах данных, чтобы общаться с другими программистами на одном языке и не придумывать велосипеды; надо знать устройство компьютера и общие принципы работы операционной системы; неплохо знать Linux (или BSD), консоль, тулзы и иметь опыт настройки их под себя. Важны навыки анализа и синтеза, умение писать понятный код. Для более продвинутых специалистов оценивается понимание конкурентной обработки данных, владение многопоточностью и навыки системного дизайна. Часто в студии берут новичков и растят их самостоятельно. Но иногда команды не могут себе этого позволить, потому что ищут знающего человека, который поможет справиться с конкретной проблемой.  Если человек пришел из клиентской разработки, то его опыт будет не особо применим. Знание языка пригодится, но в остальном — вряд ли. Если у него все хорошо с алгоритмами, его, вероятно, рассмотрят как кандидата. Но это означает, что его все равно нужно будет обучать и, вероятно, будет понижение грейда. Тем не менее если человек готов учиться, он быстро наверстает.  Наличие высшего образования не принципиально. В первую очередь важны реальные навыки, знания и качества кандидата. Но наличие профильного образования будет плюсом, так как это показывает, что человек прошел через некую школу и, вероятно, обладает базой знаний. Разумеется, котируется опыт серверной разработки (если игровой, то это идеальный вариант), опыт работы с сетью, с базами данных (и из библиотек, и через консоль), опыт оптимизации серверных приложений, высоконагруженных приложений, использования метрик и анализа приложений.  От кандидатов не требуется, чтобы они владели конкретными технологиями. Главное — готовность соискателя освоить стек и желание окунуться в backend-разработку.  Знание конкретного языка тоже не особо требуется. Конечно, если кандидат знает тот же язык, который использует команда, то это станет плюсом. Но этот критерий не решающий. Язык — это просто способ выражения мысли. Поэтому если из разговора понятно, что человек справляется с задачами так, как это нужно команде, то этого достаточно.  Если знание математики есть, а опыта нет, то кандидата, скорее всего, будут рассматривать на начальную позицию. Переход из смежной области возможен, но нужно понимать, что это чревато уменьшением зарплаты или понижение в должности. Но у сотрудника есть все шансы быстро вырасти и компенсировать потери.  Обычно собеседование проходит в несколько этапов — они могут немного различаться в разных студиях, но в целом соискатели проходят через один и тот же путь: сначала общение с HR-специалистом, затем с лидом проекта и серверным лидом, потом с техническим директором. Собеседование с техдиром и лидами можно условно поделить на три части. На первой спрашивают про предыдущий опыт работы: что кандидат делал, какие задачи решал, что понравилось, что не понравилось. Особенно показательным может стать ответ на вопрос о том, какой решенной задачей кандидат гордится. Это показывает, к чему у него предрасположенность и какой у него уровень навыков: если предмет гордости — это достаточно простая задача, то вывод напрашивается сам собой.   Вторая часть — опрос по языкам. Например, на собеседовании могут спросить про их структуру, про алгоритмы, про какие-то тонкости. При этом не обязательно разбираться во всем — если человека возьмут в команду, то ему постараются дать те задачи, для которых его навыки подходят лучше всего.  Третья часть — обсуждение технологического стека, приоритетов работы для кандидата, рабочих процессов. Также на собеседовании чаще всего просят решить задачу. Задание зависит от вакансии, но чаще всего это проверка базовых знаний, алгоритмов, структур данных, способности находить решение, умения вникать в задачу, думать и уточнять. Задачи бывают разные. Например, нужно найти все ошибки в коде (там есть как простые, так и изощренные), наиболее эффективно преобразовать строку. Есть задачи, которые только звучат страшно, а решаются каким-нибудь простым способом: например, сортировка данных. Другие по своей сути очень просты, но при реализации всплывает много неочевидных вещей. Есть задачи, у которых отсутствует важное условие, поэтому кандидат должен его уточнить.  Цель этих задач и вопросов состоит в том, чтобы понять, что кандидат умеет,  где границы его знаний и способностей.  Сейчас на онлайн-собеседовании мы чаще всего даем одну задачу. Раньше на офлайн-собеседовании давали 40 минут и четыре задачи — надо было решить хотя бы одну. При этом десять лет назад надо было решить хотя бы три. Рынок немного изменился за это время. Если раньше мы могли найти кандидата, который решит три задачи, то сейчас с этим тяжелее. Я не знаю, с чем это связано, но ничего страшного в этом нет, так как решение задачи — это не главная цель.  Сергей Спиридонов, технический директор Allods Team Решение задачи на собеседовании — это не всегда решающий фактор. Это станет плюсом, но намного важнее то, как кандидат размышляет и подходит к решению: это дает понимание, как человек будет вести себя, если в работе появится какая-то нестандартная ситуация.  Самая большая ошибка — не подавать резюме. Зачастую людям кажется, что они не подходят для позиции, но на самом деле это не так. Вполне может оказаться, что у кандидата есть пробелы в знаниях, но по совокупности факторов он подходит.  Даже если вы сомневаетесь, что подойдете, все равно попытаться стоит. Если все совсем плохо, то вас отсеят еще на этапе резюме. В некоторых случаях требования могут быть завышены и работодатель сможет пойти на уступки, если собеседование в целом пройдет хорошо. Даже если вы не подойдете для конкретного проекта, вам могут предложить что-то еще.  Для команды разработчиков важно, чтобы с человеком было комфортно общаться, поэтому компании часто готовы закрыть глаза на недостаток опыта, если кандидат по-настоящему вписывается в команду. Так что если вы сомневаетесь, что подходите по техническим скиллам, все равно попробовать стоит.  Не стоит сильно приукрашать или приуменьшать свои знания. Не нужно молчать при решении задачи, так как вам могут подсказать и направить на верный путь в рассуждениях. Не забывайте задавать вопросы на собеседовании и не игнорируйте вопросы от потенциального работодателя.  Также не воспринимайте собеседование как экзамен. Правильнее относиться к нему как к диалогу. Люди, которые проводят собеседование — это такие же программисты, которые искренне хотят найти не винтик в систему, а коллегу и товарища. Поэтому не нужно стесняться, угадывать правильные ответы или искать подвох в каждом вопросе. Все были по ту сторону «стола», поэтому стоит стремиться к открытому общению. Все понимают, что собеседование — это стрессовая ситуация для кандидата, поэтому не стоит попусту себя накручивать. Тем не менее к собеседованию лучше немного подготовиться: освежить собственные знания, посмотреть на свой опыт, вспомнить, чему научился.