Поиск первой работы после окончания университета – это далеко не простой этап в жизни молодого специалиста, особенно в сфере разработки программного обеспечения, где конкуренция высока, а требования работодателей постоянно растут. В 2024 году, наблюдая за процессом трудоустройства, я понял, насколько существенно отличается опыт поиска интернатуры и полноценной позиции младшего разработчика. Мой опыт, полученный в ходе многочисленных собеседований и онлайн тестов, позволил извлечь не только уроки о технических знаниях, но и о навыках самоорганизации, личных качествах и методах работы с информацией. Именно о них и пойдет речь далее. Начну с того, что найти стажировку казалось намного проще, чем устроиться на позицию младшего инженера.
Причина кроется в том, что кандидатов на такие позиции существенно больше, включая не только свежих выпускников, но и тех, кто имеет опыт работы пару лет или даже больше. Такой широкий выбор заставляет компании тщательнее отбирать специалистов, обращая внимание не только на технический багаж, но и на видение кандидатом своей карьеры и мотивацию. На начальном этапе я сосредоточился в основном на позициях backend-разработчика, а также на профессиях в сфере DevOps и SRE. Несмотря на то, что вакансий для последних двух направлений оказалось не так много, экспериментировать и пробовать себя в разных ролях было важно для поиска наиболее интересного и подходящего направления. Примерно десять процентов заявок я направлял на роли, в которых имел мало или вовсе не имел опыта: системного администратора, проектного менеджера, технического рекрутера.
Это позволило расширить кругозор и понять, как работают другие подразделения ИТ-индустрии. Процесс собеседования на позицию выпускника складывается из нескольких этапов: от 2 до 7 раундов интервью. Разброс такой значительный, что одни процессы длились всего пару дней, а у других этапы растягивались на несколько недель. Встречи с рекрутерами и инженерами обычно занимали от получаса до полутора часов. Оказалось важным уметь сохранять концентрацию и выдержку во время длительного процесса, особенно когда интервью проходили с короткими перерывами друг за другом.
Технические вопросы, которые мне задавали на собеседованиях, охватывали широкий спектр тем. Для начала необходимо было объяснять базовые концепции объектно-ориентированного программирования, например принципы SOLID, которые лежат в основе проектирования удобочитаемого и масштабируемого кода. Также меня спрашивали про ограничения языка Python относительно многопоточности, что показало важность понимания особенностей выполнения кода на уровне интерпретатора и операционной системы. Разница между процессами и потоками, а также различие между ядровыми (kernel) и зелёными (green) потоками оказалась важной темой для обсуждения, поскольку многие компании стремятся оптимизировать производительность и ресурсы систем. Я также понял, насколько необходимо разбираться в концептах взаимодействия пространства ядра и пользовательского пространства, а также в разнице между контейнерами и виртуальными машинами, что особенно актуально в современных средах разработки и развертывания.
Еще один интересный вопрос касался методов оптимизации в условиях высокой чувствительности к задержкам. Например, обсуждалась ситуация, когда отключение технологии Intel Hyper-Threading может улучшить производительность отдельных задач. Понимание таких тонкостей техпроцессов и механизмов процессоров значительно повысило мою техническую компетентность и расширило кругозор. Кроме того, техническое интервью включало вопросы по мониторингу и администрированию на примере команды free в Linux – умение интерпретировать колонки с информацией о памяти показывает, насколько глубоко кандидат понимает устройство операционной системы. Знание современных уязвимостей процессоров, таких как ошибка спекулятивного исполнения Intel, также вошло в перечень необходимых навыков.
Очень часто задавали вопросы, связанные с Kubernetes и контейнеризацией. Например, как гарантировать выполнение определённых задач перед запуском pod. Это требует знакомства с архитектурой систем оркестрации и умения проектировать жизненный цикл приложения в контейнерной среде. Дополнительно я получил знания о CPU pinning и необходимости закрепления процессов за конкретными ядрами процессора для повышения производительности. Важной часть экзаменационных испытаний была оценка алгоритмических знаний и понимания структур данных.
Многие задачи напоминали те, что встречаются на платформе Leetcode, которая стала эталоном для подготовки разработчиков в крупных IT-компаниях. Мне довелось решать различные задачи, включая вычисление чисел Армстронга за ограниченное время, а также разбираться с вопросами по полиморфизму в C++, что позволило понять, как работают виртуальные функции и таблицы методов на уровне компилятора. Однако техническая сторона – это лишь половина успеха. Самым сложным для меня оказалось ответить на вопрос «Расскажите о случае, когда вы не видели полной картины». Такие вопросы проверяют способность анализировать опыт и делать выводы, а также коммуникабельность и умение руководствоваться ценностями компании во время собеседования.
Некоторые выводы и советы, которые я получил за время поиска работы, будут полезны и другим. Важно понимать, что страсть к профессии зачастую важнее максимально высокой зарплаты, а культура компании играет ключевую роль для комфортной работы и развития. Работодатели ценят, когда у кандидата есть собственные проекты с глубоким техническим содержанием — это свидетельствует о самостоятельности и мышлении инженера. Не стоит бояться выходить за рамки своего региона или даже страны. Раннее формирование профессиональной сети контактов крайне полезно: встречи с коллегами на митапах и в технических сообществах позволяют обмениваться опытом и возможно открывают неожиданные перспективы.
Но при этом важно не слишком эмоционально привязываться к конкретной компании, чтобы отказы не вызывали серьезных эмоциональных переживаний. В Австралии, где я искал работу, основные программы для выпускников открываются только два раза в год, в начале весны и осени. Поэтому если вы ищете работу вне этих периодов, это может привести к дефициту открытых вакансий. Даже если вы теряете интерес со временем к какой-либо компании, рекомендуется пройти собеседование – это отличный опыт и возможность расширить кругозор. Во время поведенческих интервью старайтесь не повторять шаблонные ответы, лучше интегрировать ценности компании в ваши собственные примеры и рассказы, что производит более сильное впечатление.
При оценке предложений помните, что взаимная культура – это улица с двусторонним движением. Вопрос стоит не только в том, подходите ли вы компании, но и насколько вы комфортны в ее атмосфере. Зачастую люди вынуждены играть социальные роли во время интервью, но цель должна быть в том, чтобы найти место, где можно быть максимально самим собой. Я осознал, что навыки общения и умение взаимодействовать с людьми — такие же важные качества, как и техническая компетенция. Если бы была возможность вернуться в университет, я бы обязательно выбрал курс по актерскому мастерству или развитию софт скиллов.
Очень важной частью подготовки является адаптация резюме и сопроводительного письма под каждую компанию. Удобно вести их в системе контроля версий, создавая отдельные «ветки» для каждой заявки с уникальным содержанием. Письмо не должно быть шаблонным, лучше проявить искренность и отразить ваши личные убеждения и мотивацию. Искусственные тексты, созданные ИИ, могут терять подлинность, что легко почувствует опытный рекрутер. Успешное прохождение поведенческой части требует демонстрации энтузиазма и понимания миссии компании.
Хранение и анализ всех потенциальных вопросов, а также подготовка к ним с интеграцией корпоративных ценностей – это эффективная стратегия, которая повышает уверенность на интервью. Одновременно с поиском работы необходимо непрерывно развиваться. Быстрое приобретение новых знаний и умений важнее, чем слепое повторение уже известных. Технические мероприятия, конференции и митапы помогают не только прокачать навыки, но и познакомиться с коллегами, которые могут дать советы или подсказать интересные вакансии. Хотя тренировка решения задач на Leetcode стала стандартом для многих, я понял, что чрезмерное увлечение ими не всегда эффективно.
Для меня было более полезно заниматься реальными проектами, использовать инженерное мышление, проектировать архитектуру и анализировать технологии, пригодные для реальных задач. Часто решения, найденные на Leetcode, дают лишь очень поверхностные навыки и не всегда отражают сложность реальных кейсов. В процессе встречались и редкие, порой неожиданные требования работодателей: например, необходимость установить мобильное приложение для записи профессионального видеоинтервью, предоставлять ссылки на несколько профессиональных рекомендаций или даже создавать аккаунты на специализированных платформах для единовременных оценок. Бывают случаи, когда на ранних этапах запрашивают сканы документов, что вызывает сомнения в безопасности персональных данных. Также меня удивлял запрос информации о школьных оценках для полноценной позиции, что логично заменить универистетской степенью.
Порой случаются и неприятные ситуации: например, интервью, в ходе которого у инженера по техническим причинам не совпадает ожидание с опытом кандидата. У меня был опыт, когда я заявил, что знаю C, но не C++, и интервьюер решил проверить меня по C++ без предварительного предупреждения. Я явно провалил несколько вопросов, и собеседование закончилось быстро. Такое могло быть связано с недопониманием между рекрутером и командой технических специалистов. Наконец, я понял, что первичная работа – это не конец пути, а лишь начало большого путешествия.