суббота, 6 марта 2010 г.

[work] Впечатления после первого раунда собеседований

Читатели моего блога могли заметить, что описание вакансий и требования к соискателям изменились. Сделано это было под впечатлениями от первой волны собеседований. Точнее, от одного самого сильного впечатления – хорошие программисты работу не ищут. Поскольку прособеседованные мной соискатели хорошими программистами, к сожалению, не были. Это нормальные ребята, вполне вменяемые, но кому-то не хватало опыта, кому-то способностей. И всем сильно не хватало знаний C++.

Происходило все приблизительно так: со мной связывался человек (как правило, высылал свое резюме), я спрашивал у него, готов ли он сделать тестовое задание перед собеседованием, он соглашался (несогласных, к счастью, не было), я высылал задание, он затем присылал решение, вскоре после этого происходило собеседование. Поскольку перед собеседованием я уже имел представление о соискателе как о программисте, то на собеседовании мне важно было понять, насколько адекватно человек отнесется ко своим ошибкам. Нужно отдать всем соискателям должное – все они производили впечатление разумных, самокритичных и конструктивно настроенных людей.

Однако, ни одно из полученных мной решений не было работающим. Т.е. даже на простых обязательных операциях программы либо падали, либо чего-то не делали, либо делали неправильно. Не говоря уж о поведении во вполне предсказуемых некорректных условиях (пропущенный аргумент командной строки, неверные имена исходных файлов) – для таких очевидных вещей в программах даже не было предусмотрено проверок.

Низкое качество тестовых решений отражается и в низком качестве самого кода программ. Все(!) решения страдали одними и теми же проблемами:

  • отсутствие устоявшегося стиля кодирования (различные виды именования сущностей в одном и том же исходном файле);
  • использование глобальных переменных;
  • хардкодинг, иногда очень и очень жестокий хардкодинг;
  • очень большие по объему функции (нет нормальной функциональной декомпозиции);
  • дублирование кода (нет вынесения явно повторяющихся последовательностей действий в повторно используемые функции/методы).

Временами мне казалось, что если бы разработчик просто внимательно посмотрел на распечатку своей программы, он бы мог объединить 4-5 одинаковых фрагментов в одну функцию и сократил бы тем самым объем программы, как минимум, вдвое.

Может я слишком сурово отношусь к соискателям, но я убежден, что все вышеупомянутые проблемы – это как раз признаки плохого программиста и даже больше – признаки отсутствия способностей к программированию. Особенностям и тонкостям языка C++ можно научить, в конце-концов, это всего лишь обычный процесс набивания шишек. Но вот научить распознавать повторяющиеся фрагменты кода, имхо, невозможно. Человек либо их видит, либо нет.

Еще один критерий – может ли человек объяснить почему он написал именно так или не может. Даже объяснение “я не смог придумать ничего другого” гораздо лучше характеризует разработчика, чем “ну я не знаю” или “мне так захотелось”. Программирование – это такая профессия, которая требует от человека составления детального и подробного плана выполнения поставленной перед ним задачи (чем и является код программы). И если программист не может объяснить, почему в этом плане оказались те или иные пункты, то это опасный сигнал.

Какие еще впечатления? Вот, коротко:

  • тестовое задание перед собеседованием – это must have. Я много читал на форумах высказываний “Мол, почему я за бесплатно буду что-то кому-то писать” и боялся столкнуться с такими заявлениями. Теперь людей с такими заявлениями я буду посылать фтопку сразу. Когда цирк нанимает жонглера, вполне нормально, если жонглер покажет свое умение до первого представления. Вот так и здесь – покажи, что ты умеешь до того, как писать код для реальных систем;
  • активно общаясь на форумах я привык к тому, что большинство разработчиков находятся в русле современных тенденций (проникновение функциональщины в мейнстрим, начало many/multicore эры и т.д.). Ёптыть, как же это все далеко от реальности!

Такие дела в нашей центрально-европейской провинции. Надеюсь, что в крупных городах (Киев, Минск, Питер, Москва, Новосибирск и т.д.) получше.

15 комментариев:

Rigidus комментирует...

Я программист на lisp и хоть и не собираюсь в данный момент устраиваться на работу с++ программистом, но интересуюсь тестовым заданием - в моей практике адекватных тестовых заданий было мало и мне бы хотелось посмотреть его и если получится - выполнить. Не будете ли вы так любезны выслать его на avenger.rigidus at gmail.com ?

eao197 комментирует...

Если вы не будете это условие нигде публиковать в течении ближайших трех месяцев, то вышлю.

Анонимный комментирует...

Меня тоже заинтересовало тестовое задание. Не могли бы вы его выслать и мне? Обещаю не публиковать его нигде. FilSoftw(dog)gmail.com

Анонимный комментирует...

Евгений, и мне, если можно, пришлите задание на murzilka17 at gmail.com
Обещаю не публиковать в течение трёх месяцев или любого другого указанного вами срока.

За все мои собеседования серьёзная задача встретилась только один раз, и то она была скорее на сообразительность, и при её проявлении решить задачу можно было за час. Все остальные задачи - даже не знаю, зачем их давали. Ну разве что отсеивать людей, знающих исключительно синтаксис.
Заявленный же вами срок в два дня вызывает любопытство - а что же там такое :)

eao197 комментирует...

2murzilka17: там нет ничего сложного и эта задача не на тестирование сообразительности. Скорее это проверка способности человека писать нормальный код и уделять внимание деталям.googleeao

Miroslav комментирует...

ничего - придет и к вам в город праздник :) и начнете искать людей, которые _не_ делают тестовые задания. Их нужно переманивать :)

ps тот вопрос с плюсами оказался более субъективен чем я рассчитывал

eao197 комментирует...

2Rubanets Myroslav:

Ну поживем, увидим. Пока не видно, кого вообще переманить можно. Расцветший за последние годы буйным цветом аутсорсинг привел к тому, что все специализируются на Java/.NET/PHP/Ruby/Python. С-шников и C++ников не видать даже в мелкоскоп :(

Golovach Ivan комментирует...

>"активно общаясь на форумах я привык к тому, что большинство разработчиков находятся в русле современных тенденций (проникновение функциональщины в мейнстрим, начало many/multicore эры и т.д.). Ёптыть, как же это все далеко от реальности!"
---
Не знаю как в Гомеле, но у нас в Харькове люди, с интересом обсуждающие подобное, зачастую уже получают 1800$-2700$. И на собеседование их действительно не затащишь не назвав вилку где нижняя планка хотя бы 2000$. При чем это необходимое, но совершенно недостаточное условие.

eao197 комментирует...

>При чем это необходимое, но совершенно недостаточное условие.

Собственно, пока я вижу только две потенциальные категории соискателей -- толковые молодые специалисты, которые пока еще не определились с тем, чем им хочется заниматься, и опытные, которые по каким-то причинам (политическим, например) решили сменить место работы. Расчитывать на людей, которых можно просто перекупить не очень хочется, поскольку точно так же их можно будет перекупить и у нас потом.

И да, Гомель, похоже, не Харьков, диапазоны зарплат здесь другие.

Golovach Ivan комментирует...

>"И да, Гомель, похоже, не Харьков, диапазоны зарплат здесь другие."

У нас тоже множество людей программируют за 200$-1000$. Но как только речь идет о "широте мышления" (ФП, многопоточка, транзакции, кластеризация, репликация ...) так сразу оказывается, что эти уже пристроились:)

У нас в компании был специалист за 800 "с опытом работы с Spring" 2 года. Так он не знал что такое IoC/DI. При том, что Spring - это и есть самый распространенный IoC/DI-контейнер на Java:(

Удачи. Попробуйте поискать свежайшего выпускника местного университета, таких обычно помнят на кафедре/факультете да и у юниоров сейчас проблемы с трудоустройством.

Golovach Ivan комментирует...

В универах/политехах обычно есть кружок готовящихся к студенческим олимпиадам по программированию/математике. Попробуйте еще там.

eao197 комментирует...

>В универах/политехах обычно есть кружок готовящихся к студенческим олимпиадам по программированию/математике.

Не, олимпиадники -- это тяжелый случай, вменяемые люди среди них очень большая редкость. В большинстве своем хронические олимпиадники с трудом занимаются обычным программированием.

Анонимный комментирует...

Женя, пришли, пожалуйста, тестовое задание на san@ezhik.org.ru. Хочу оценить свой уровень C++ и узнать, какой уровень требуется для профессионального программиста. Публиковать нигде не буду, разумеется.

Irina Derkach комментирует...

Если можно, то пришлите Ваше тестовое задание.Было бы очень интересно проверить себя. Обещаю не разглашать суть задания. Заранее спасибо
Dirin88 at gmail.com

eao197 комментирует...

@Irisha: я уже опубликовал его условие -- http://eao197.blogspot.com/2010/05/work-c.html
Чуть позже я опубликовал и свои комментарии к этой задаче -- http://eao197.blogspot.com/2010/06/work-prog-c.html