
В сферу моих профессиональных обязаностей входит проведение собеседования для соискателей на должность PHP разработчика. И дальше речь пойдет о собеседовании…
Два года назад подобный пост вызвал бурное обсуждение как на моё блоге так и на Хабре, я не буду говорить что изменилось, я думаю вы сами это увидите.
Наши HR-ы уже достаточно опытны и поэтому часть вопросов берут на себя:
- Почему ушли с предыдущего места работы?
- Почему выбрали нашу компанию?
- С чего начали изучать программирование?
- Почему выбрали PHP?
Ответы на данные вопросы формируют первое впечатление о человеке. Зачастую оно верно…
Далее разговор переходит в техническое русло. Можем начать с основ ООП – наследование, инкапсуляция и полиморфизм, а возможно и пропустим сей шаг.
- С какими PHP библиотеками, фреймворками знакомы?
Соискатель должен знать о существовании таких фреймворков как Zend Framework, CakePHP, CodeIgniter или Symfony, и желательно иметь опыт работы с одним из них (список можно расширить – это не так принципиально).
- С какими API приходилось работать?
Интересуют Google API, AMF PHP, различные payment gateway, Facebook API, Twitter API и т.д.
- Есть ли опыт работы с различными CMS?
Опыт работы не как web-мастера, а как программиста…
- Работал с PHP 4? Назови различия с 5-ой версией.
- Что нового в PHP 5.3?
- Типы данных в PHP?
Этот вопрос на добивание, он часто ставит в тупик, если человек отвечает что их восемь, а потом начинает их перечислять, значит он готовился к собеседованию :)
- Что такое сериализация?
- Что самое сложное разрабатывали на PHP?
Этот вопрос может расставить все точки над “i”, но не стоит его задавать в самом начале – это пугает…
- Какие шаблоны проектирования знаешь? Расскажи в чем соль каждого?
- Что есть MVC? Какую роль выполняет каждый из составляющих элементов?
– С какими web-серверами работал? Apache? Nginx? IIS?
- Можешь описать как можно подробнее, что происходит между тем, как пользователь ввёл в адресной строке http://google.com и тем, как браузер показал страницу?
– Системы контроля версий? SVN? CVS? Git? Что есть branch/trunk/tags?
– Багтрекинг системы?
Немного мучаю по БД:
- С какими БД работал? Что такое транзакции, хранимые процедуры, тригеры?
- Коль работал с MySQL то сможешь назвать различия между версиями 4.1, 5.0, 5.1?
- Каковы различия между MyISAM и InnoDB?
И для полноты знаний web-разработчика естественно не хватает вопросов о HTML, CSS, Javascript:
- Ваша субъективная оценка своих знаний по CSS по пятибальной шкале?
- Приходилось ли верстать сайт?
- Почему CSS это каскадные таблицы стилей?
- Что здесь написано? Напишите HTML код к которому будет применен данный стиль.
#my p.sel:first-line, .main li li a:hover + span
{
color:#f00; /* Что это за цвет? */
}
- Ваша субъективная оценка своих знаний по Javascript’у?
- Что самое сложное разрабатывали с использованием Javascript’a?
- С какими Javascript фреймворками работали? Какие плагины использовали? Писали ли плагины, виджеты?
Интересуют jQuery/UI, Prototype/Aculo, MooTools/MochaUI, Dojo Toolkit, ExtJs.
- Каким образом можно реализовать наследование в Javascripte?
- Что такое AJAX и как он работает?
- Что такое JSON? С JSONP сталкивались?
И последний вопрос – Какие у Вас есть к нам вопросы? – интересно узнать что же все-таки интересует соискателя.
Бывает еще задаю вопросы на сообразительность, иль какие не по теме – что-бы сбить с толку (не гуманен я)…
Так всё же, что поменялось? Поменялись требования к соискателям, разработчиков уровня Junior на рынке труда сейчас предостаточно, хочется заполучить более опытные кадры, от которых в наименьшие сроки можно получить отдачу
Updated: список вопросов дополнил – не все ведь сразу вспомнишь…

Гостевая книга с продуманной архитектурой или в стиле шпагетти.
Этим и отличается высококлассный программист от хорошего.
Антон, спасибо за вопросы.
Мне они показали в чем мои пробелы
А комментарии людей можно разделить на 2 группы
- те кто хотят развиваться
- и те кто тупо хочет бобла
Какие у Вас есть к нам вопросы?
Я отвечу на все вопросы. Мой вопрос: зачем мне Ваша компания, если ничему новому и интересному научиться у Вас я не смогу? Единственная причина по которой я бы пошел к Вам работать – это опыт. В чём разница между одним программистом и толпой программистов, когда этот один выходит на уровень толпы? Ни одно Ваше предложение меня не заинтересует, потому что единственное что Вы можете предложить это деньги, а опыта я и сам наберусь. С таким уровнем знаний и даже выше, я с легкостью смогу работать на фрилансе и зарабатывать в 3 раза больше того, что можете предложить Вы.
вопросы отстой, люди с головой будут работать на себя
Интересное предложение насчет выхода программиста на уровень толпы, т.е. для того чтобы выделятся, вы предлагаете быть ниже среднего уровня? О_о
Насчет опыта – то могу ответить – зачастую на фрилансе берутся за тривиальные задачи, дабы быстрее заработать на накатанных рельсах, проекты же с рисками – обходят стороной, им эти проблемы не нужны – так что опыт фрилансера не сравнить с опытом работы в команде, над действительно интересными проектами…
“Интересное предложение насчет выхода программиста на уровень толпы, т.е. для того чтобы выделятся, вы предлагаете быть ниже среднего уровня? О_о”
Нет. Зачем одному монстру сидеть в окружении монстриков?!:) Когда он сам прекрасно справляется с любой задачей.
“Насчет опыта – то могу ответить – зачастую на фрилансе берутся за тривиальные задачи”
За тривиальные задачи берутся те, которых Вы не взяли на работу. :))) Армии обиженных и ни черта не знающих джуниоров:)
“дабы быстрее заработать на накатанных рельсах”
Только рельсы накатанные через одно замечательное место. На таких рельсах далеко не уедешь:)
“проекты же с рисками – обходят стороной, им эти проблемы не нужны – так что опыт фрилансера не сравнить с опытом работы в команде, над действительно интересными проектами…”
Настоящий фрилансер-виртуоз смело берётся за такие проекты и прекрасно справляется с поставленной задачей. На фрилансе достаточно клиентов которые кидают крупные и интересные проекты, и они ищут не компанию, им не интересен опыт работы в команде, им нужен один фрилансер-виртуоз которые реально реализует все их самые извращенные фантазии:))
Как бы, есть задачи когда один монстр не может справится с поставленной задачей, т.к. ограничен по времени, а контролировать разрозненную удаленную команду – такой риск взять на душу – нет уж…
Да, согласен, фрилансеры бывают разными, но по своему опыту скажу, большинство отличных разработчиков прошло через работу в команде на той или иной фирме, те же кто этого опыта не имеют, могут работать только в одиночестве, и зачастую, качество ихнего кода оставляет желать лучшего.
Фрилансер-виртуоз – звучит как нечто абстрактное, да и проекты для одного человека – это очень часто поддержка и доработка существующего проекта, а крупные и интересные проекты для одного – это уж совсем сказки…
Спасибо, изложено очень хорошо, как всегда.
По скольку у меня список вопросов к соискателю, примерно такой же, добавлю пару пунктов которые меня обычно интересуют сверху. Во первых обязательно нужны примеры реальных работ, они говорят о многом. Во вторых надо заставлять писать, код на собеседовании, желательно пару простеньких, но хитрых задач. Можно добавить вопросы про различные способы тестирования приложений, “как вы видете жизненный цикл проекта”, в какой роли вы видете себя в комманде (сразу же будет понятно читал ли человек “мифический человекомесяц”, или чего вроде, это тоже мне говорит о чем то) Вообще, это достаточно класический список вопросов для собеседования людей с опытом не больше 5-ти лет. Иначе вопрос “Какие шаблоны проектирования знаеш?” в лучшем случае вызовет вопрос для решения каких задач? Иначе можно на этом исчерпать собственно все время собеседования и еще пару часов, сверху :). А, почти забыл, на самом деле главный вопрос которого тут нет это “какие еще языки программирования вы знаете?”, вобщем то, если челвовек кроме php и js ничего не знает я его на работу брать не буду, я почему то таких считаю быдлокодерами, пусть со мной хоть 10 раз все не согласятся, другое дело если C++, Java, Delphi.
Delphi – это визуальный мастер генерации форм, а не язык. На нем конечно много чего написано, но особо как язык я его бы не выделял.
Для меня языки программирования это:
C/C++
Java
Perl/Python/PHP/Ruby
Да, вобщем-то все те php программисты с которыми я работаю сейчас, при приеме на работу знали в какой-то мере, либо C/C++, либо Java. Pascal, который Delphi, тоже нормально, начинать с него воспитание программиста, достаточно класический способ и у нас и зарубежом, хотя да, подход в использовании его как мастера форм есть и это тоже неплохо, например, есть у меня отличный программист-юзабилист, котрый изначально именно на нем и тренировался, а уже потом начал переносить в веб свой опыт :) Если человек знает системное программирование на perl под линукс, обычно это опытные админы, то я наверное на работу возьму, с этими людьми можно выпить и от них можно многое узнать. Если знает только Python/PHP/Ruby, то пожалуй что нет. Было много негативных примеров. В нестандартных больших проектах, правда, может, если надо делать сайтики путем настройки простых движков, то как раз эти люди и нужны.
Я, пожалуй, знаю лишь PHP, т.к. мой уровень Pascal/С/C++/ASM остался на уровне универской программы и, в основном, благополучно забыт за это время, при этом это мне мешает писать код который не назовешь быдлокодом…
“мой уровень Pascal/С/C++/ASM остался на уровне универской программы” Так а больше и не надо, хотя это конешно плюс. На самом деле я имел ввиду что знание чего-то, что можно назвать “класическими языками программирования”, которые вобщем-то в университетах всегда в обязательном порядке техническим специальностям и преподаются, и что автоматически говорит о образовании программиста, просто человек может освоить все и самостоятельно. Но формула (php – хотя бы базовое знание Pascal/С/C++/java) давала мне на практике именно быдлокодеров, с кривыми руками, может я и не прав, но реальность такова. Лучший еще вариант был когда человек за полгода год, получал это образование в коллективе, но при этом компания это время теряла деньги и время, а не все могут себе это позволить.
Я бы спросил про знание языков функционального программирования, потому что они развивают мышление.
Хорошо что я в свое время свалил в энергетику, а программированием занимаюсь на уровне хобби…
Дельфи… хорошо вам рассуждать, судя по всему вы Дельфи не знает :(
Задайте такой вопрос на каком языке написана сама Дельфи?
Язык программирования совершенно не важен на самом деле.
Да я изучал изначально Pascal. :) НЕ ДЕЛЬФИ его тогда не было ;).
Потом уже появилась Дельфи, таки да простая красивая удобная…
и сколько же из-за этого появилось “программистов” ууууу. Отвлекся.
Но, изучив Дельфи действительно изучив – используя API …
используя Region для создания “круглых кнопочек” …
Дальше мне сейчас уже ВСЁ равно какой язык изучать.
PHP – без проблем изучил, сделал сайт красава ;).
JavaScript – вот сейчас заинтересовался :).
VB (от Microsoft Access) всё везде одинаково :).
Тригеры для MSSQL – тот же VB. Таже структура и т.д.
В чем разница PHP 4 от 5? Это важно для приема на работу??? Бред. На все ваши вопросы найди ответы займет максимум неделя при этом соискатель НЕ будет программистом :(.
А вот попросите соискателя написать на любом языке задачки 1) посчитать факториал 11! 2) сделать сортировку массива 1..100. И всё станет сразу ясно :).
Сами попробуйте сколько у вас займет это времени?
У меня Задача 1 – минут 5 ;)
Задача 2 – минут 10-15 максимум.
P.S. Да знаю, я знаю что PHP4 сильно отличается от PHP5 но все эти отличия не так сложны для программиста. Вотъ.
P.P.S. А так хороший сайт, полезный :) Жаль нет такого раздела – книги которые ВАМ помогут. СТОИТ читать. Могу свой вклад сделать – книга всех времен и народов по SQL Мартин Грабер Введение в SQL. Странно ей уже лет 15 (или 20?) а лучше книги так и не было написано ИМХО).