Устройство на работу в IT программистом с целью заработка денег
Собеседования, тестовые и лайв-кодинг
Юрий «yurembo» Язев
Независимый программист
В прошлые времена устроиться на работу удаленно было проблемой, а теперь, после того, как произошли всем известные события, стало еще тяжелее. Иностранные компании покинули российский рынок, а в отечественных — продолжают работать иммигранты, покинувшие РФ. Им-то удаленно можно работать, потому что они мозолили глаза начальству, когда проживали в России, поэтому более или менее знакомы боссам. А боссы боятся брать удаленьщиков с улицы (из другого города).
Теперь любой работодатель в IT может гнуть пальцы веером и выбирать среди сотен специалистов. Еще эти онлайновые школы и оффлайновые университеты, за полгода готовящие программистов, аналитиков, сисадминов и других айтишников. Им за отдельную плату и профессиональное резюме составят, и собеседования проходить научат. В итоге после обучения человек умеет проходить собеседования, но на практике ничего не знает.
Но вернемся к работодателям и их сволочным повадкам: устраивают многоступенчатые конкурсы отбора, длящиеся неделями, а иногда месяцами. В общих чертах рассмотрим картину конкурса устройства на работу программистом. Замечу, я буду рассказывать про онлайновую (удаленную) работу для программистов, потому что с оффлайновым устройством все гораздо проще, но я его не практикую, потому что в городе, где я живу, ее нет, а если бы была, мне лень ходить в офис. До сих пор еще с тех времен, когда человечество бегало по равнинам с дубинами и в набедренных повязках, у людей сохранилось более доверительное отношение к тем, кто сидит рядом, а не к тем, чья физиономия отображается на мониторе.
Этап №1: собеседование с эйчаром, на котором определяется: адекватный ли соискатель. Может ли он общаться по-человечески.
Этап №2: если кандидат проходит на второй этап, ему могут предложить выполнить тестовое задание. Оно может быть крохотным и решаться за один вечер, но может быть огромным, и требовать на свое выполнение пару недель. Каких только причуд я не встречал в игровой индустрии. После выполнения задания к кандидату могут придраться из-за превышения времени выполнения, из-за используемого арта, стиля кодирования, да хоть что может взбрести в голову оценщика тестового задания. Мне однажды в довольно крупной и известной российской игровой компании отказали из-за того, что я использовал картинки астероидов вместо пузырей, хотя в задании было сказано, что можно использовать любой арт. Однако в последнее время мне не давали больших тестовых заданий, их же кому-то надо проверять, а всем лень.
Этап №3: каким-то невообразимым образом наш кандидат выполнил тестовое, прошел этап №2 и оказался здесь. Еще есть силы? Валерианку, антидепрессанты принимаешь? На этом этапе потенциального кандидата ждет тех. лид. Можно подумать, что самое страшное уже позади, сейчас вы поговорите по душам (как это делают в американских компаниях (см. интервью Криса журналу «Хакер» после его иммиграции в США)), пожмете друг другу руки, и ты станешь частью команды софтверной разработки. Но как бы не так! Тех. лид припас много каверзных вопросиков.
Вначале вы поговорите о твоем опыте;
Затем пойдут общие вопросики, иногда такие, которые ты последний раз видел на первом курсе универа, и ответы на которые забыл 20 лет назад;
И, наконец, лайв-кодинг — кодирование в реальном времени, то есть ты демонстрируешь экран своего компьютера, интервьюер дает задания, ты пишешь код, а он все видит. Когда я участвовал в подобной операции впервые, для меня это было шоком. Чтобы кто-то смотрел на мой код «из-за моего плеча». Странное чувство. В тот раз я не мог программировать. Сейчас немного наловчился.
После прохождения этих трех этапов с некоторыми изменениями соискателя могут отправить на следующую итерацию. В случае везения после этих трех этапов кандидата направят на собес к директору. И далее все зависит... от его настроения.
Бывает, общаешься с интервьюером на тему программирования на C++ на позицию разработчика на этом замечательном языке. Дак, этот чел еще спросит: «А знаешь ли ты Python, умеешь ли программировать с использованием CUDA...» Охота треснуть его по наглой морде и ответить: «Я много чего знаю и изучал, но последнее время не использовал, а конкретно к сегодняшнему дню готовил C++ и пришел пообщаться о нем. Для меня не составляет труда изучить любую технологию».
Еще этот засранец — интервьюер переиначит твои ответы так, что в итоге окажется, ты рассказал неправильно или ни о том. А, когда через несколько дней, ты вернешься с уточнением того, какие ответы были неправильными, узнаешь, что во время собеседования не ответил на вопросы, которых не было!
Или в чем прикол спрашивать о возможностях последующего стандарта C++? Чтобы показать, какой интервьюер умный и начитанный? А если я спрошу его, о чем сам читал на этой неделе? Практической разницы не будет, а зачем тогда задавать лишние вопросы?
Я специально завел на своем сайте портфолио, выполненных мною проектов, чтобы любой интересующийся персонаж мог посмотреть, чем я занимаюсь и занимался. Зачем, вообще, лишние вопросы и разговоры?
Профессиональный программист расширяет свои знания, он не топчется на месте, каждый день повторяя одно и тоже: std::move, std::forward, устройство контейнеров STL, etc, etc. В подавляющем большинстве случаев он использует языковые конструкции по наитию. Если вдруг нужна более широкая картина о базовых механизмах, найти сведения о них не составляет проблем. В его целях изучить больше, овладеть большим числом технологий для применения в «боевых условиях». Под этим давлением новых знаний что-то из старого может забываться, и это нормально, главное знать, откуда их можно почерпнуть вновь.
Про завышенные ожидания (точнее, требования) работодателя от кандидата можно поговорить в отдельной статье. Тем не менее коротко упомяну об этом здесь. Порой эти требования к кандидату находятся даже не в одной плоскости, а разных областях программной инженерии, как указанные мной выше вопросы. Глубоко разбираться в нескольких быстро изменяющихся областях — быть профессионалом в широком наборе технологий задача не из легких. У многих людей, в отличие от меня, есть личная жизнь (супруг/супруга, ребенок/дети, котик/собачка, etc.), другие интересы, выходящие за рамки программной инженерии. Но даже я не успеваю поддерживать в актуальном состоянии знания обо всех требуемых технологиях, хотя ничем, кроме информационных технологий не занимаюсь.
Если процесс найма длится неделями, значит за это время проходят десятки собеседований. Думаешь, нашему потенциальному кандидату, оказавшемуся где-то в середине этого списка удастся вытянуть счастливый билет? На вряд ли. Разве интервьюер утруждает себя составлять на каждого кандидата развернутое досье? Сомневаюсь. Поэтому, попросту придерживаясь своей человеческой логике, не мудрствуя лукаво, интервьюер выберет либо первого, либо последнего кандидата. Потому что так проще.
Я глубоко убежден, что способ найма через собеседования устарел. Однако другой я предложить не могу, потому что получаю деньги не за это. У вас армии эйчаров: джунов, мидлов, сеньоров и лидов – все эти смазливые девочки, пусть они и придумывают что-то более рабочее. Но они даже пальцем не пошевелят, зачем? Их и так все устраивает! Чем больше собеседований приходится на одного кандидата, тем больше денег они получат с одного клиента без необходимости поиска новых.
С другой стороны отбор через тестовые задания вообще никуда не годится: не работает сейчас и не работал раньше. Чтобы увидеть весь диапазон способностей программиста, задание нужно делать большое (и ведь делают), включающее все возможности рассматриваемого языка программирования, среды, etc. В случае большого задания придраться можно ко всему (примеры этого я приводил выше), главное захотеть. Посредством тестовых заданий работодатели могут спокойно получить бесплатную помощь по текущим внутренним задачам. А кандидату будто бы нечего делать, только месяцами выполнять неоплачиваемые тестовые задания. Таким образом вариант проверки путем тестовых заданий является наиболее неудовлетворительным.
Есть же испытательный срок, все дела, вот там и проверяйте на здоровье!
Однажды я получил довольно большое тестовое задание: разработать простую двумерную игру, но при этом построение объектов, их визуализацию, обработку столкновений между ними осуществить на уровне OpenGL, то бишь на очень низком уровне без применения игровых движков. Что нам стоит игрульку разработать? Я же тот старый игродел, который вырос без всяких ваших Unity и UnrealEng. Разработал, отправил. Ответа нет. Через какое-то количество времени я написал эйчарке: «Ну, что такое? Где ответ?» Она не растерялась и показала мне переписку с тех. лидом, проверяющим мое тестовое. В переписке был показан мой код – цикл по вектору, и тех. лид, указывая на объявление итератора, задается вопросом: «А это что за код? Явно он его откуда-то скачал». Бред сивой кобылы!
Как говорит один мой знакомый тех. лид: «Каким бы ты не был спецом, приходя на новую работу, ты становишься юниором». С этим можно не согласиться, ведь предыдущий опыт у тебя остается, но в чем-то он прав, ибо к новому месту работы надо адаптироваться, привыкнуть к новому порядку, новым сотрудникам – вписаться в коллектив, что для меня всегда было проблемой.
Несмотря на широчайшее распространение коммуникационных сетей и быстрого Интернета, мы все еще живем во времена, когда надо каждый день ходить в офис, быть весь день привязанным к одному месту и пытаться работать в неблагоприятной среде, в неблагоприятное время. У меня, к примеру, повышенная творческая активность или работоспособность активируется в 0 часов. Сейчас, когда я пишу этот текст, на часах 4:30 утра, а я бодр и готов кодировать всякие прикольные штуки!
Программирование – это такая область человеческой деятельности, в которой спешка еще никого до добра не довела. Поэтому все вопросы можно решать в «режиме электронной почты». Другими словами, по мере того, как дойдут руки. Все равно, если программисту в определенный момент придет в мессенджере сообщение с просьбой что-то сделать, он сиюминутно не будет отвлекаться на пришедшую не весть откуда проблему, самому будет дороже переключать мозги между задачами. Поэтому лучшим вариантом будет доделать текущую задачу до определенного майлстоуна и уже потом заниматься побочной деятельностью.
Это же касается горе- тех. лидов и менеджеров, которые измеряют работоспособность программистов скоростью написания кода или решения определенных задач. Программисты разные, решение разнообразных задач требует от отдельно взятого представителя профессии разных промежутков времени.