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

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

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

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

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

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

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

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

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

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

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

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

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

Отправить комментарий