В сферу моих профессиональных обязаностей входит проведение собеседования для соискателей на должность 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) давала мне на практике именно быдлокодеров, с кривыми руками, может я и не прав, но реальность такова. Лучший еще вариант был когда человек за полгода год, получал это образование в коллективе, но при этом компания это время теряла деньги и время, а не все могут себе это позволить.
Если бы меня спросили на собеседование: “Какия языки программирования вы знаете”, я бы ответил как есть “PHP/JS” – про языки разметки и запросов, фреймворки и т.п. я бы промолчал т.к. ответ должен соответствовать вопросу. Что же касается того, что я в школе и студенчестве писал на VB (studio) и pascal (delphi), имею представления о конструкциях 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?) а лучше книги так и не было написано ИМХО).
Антон, приведите примеры пару крупных и интересных проектов, которые разрабатывала Ваша контора ? Ну и ТЗ по ним, если можно ..
Ни с какими из перечисленных, просто не надо было…
С их модернизации начинает 99% программистов
Работал даже с РНР3, но даже из отличий его от РНР5 кроме === в голову ничего не приходит…
Да если напрячь мозги, то за часа три вспомнил бы больше, но нафига ?
(В ТЗ будет скрипт совместимый с РНР4 ? Открыл чендж-лог на оф-сайте и узнал в какой версии что можно что нельзя)
Этот вопрос задаётся после вопросов про API и CMS ???????????? (ГЫЫЫЫЫ)
Ссылки на вику побились чего-то
Вот это, полная хуйня.
p.s. и почему о реквайред полях в этой форме я узнаю, уже после отправки данны блять.
Да, все верно, задаются именно вопросы, которые требуют знаний того, с чем придется столкнуться при работе, это именно те вещи, которые постоянно фигурируют в тех-заданиях.
А вот факториалы считать и списки сортировать, хотя и говорит кое-что о умении строить алгоритмы (или их знании), однако в реальной деятельности веб-программирования будет не столь часто применимо.
И конечно же надо, чтобы на собеседовании было что-то написано, большое конечно не выйдет, но какие-то функции.
А можно поинтересоваться, если человек успешно пройдет это собеседование, на какой уровень з.п. он может претендовать?
Если это на джуниора, то тогда мне еще ой как далеко до работы в этой сфере, а если нет, то подскажите пожалуйста что нужно знать для того чтобы устроиться на работу хотя бы на 300 у.е.
Перестань, это не на junior’a.
Человек, который на своем опыте встречал все эти вопросы, уже может идти как senior… Дальше зависит от желания…
Для получение всех перечисленных скилов достаточно углубится в тему на пару-тройку месяцев, о каком senior’е речь?
Некоторый комментарий к вопросам, на которые у меня был лишь один ответ, к примеру на “Коль работал с MySQL то сможешь назвать различия между версиями 4.1, 5.0, 5.1” – нет, не могу, т.к. в конторе работаю уже чуть больше 3х лет и там установлена одна и та же версия – 5.1, т.е. не было просто надобности наверное. Я извиняюсь, и отчасти вы конечно правы, но вопросы из области “а помните ли вы мамонтов” создают впечатление, что вы их задаете только с той целью чтобы похвастать – “а я помню, вот были времена”. Примерно тоже самое с PHP4, да я помню, что была координальная разница в OOP, ссылки на объект, отсутствие private protected, но не более этого, и в работе это знание абсолютно не требуется. Более того, работая в компании с более чем 100 человек штата программистов, я знаю только один случай, когда это пригодилось за все эти 3 года одному из наших сотрудников. В чем смысл? Это все можно прочитать и узнать. Был бы повод.
Нормальные компании так не работают, главное чтобы у человека был базис, желание и личностные возможности и амбиции все познавать новое, остально нарастет. Есть трэннинги, на новый материал выделяется время и т.д. Хотя, конечно, если у вас большой выбор, то можно и носом поворотить.
Вы бы хоть на дату публикации посмотрели…
Антон, вы не хотите обновить пост, так как технологии уже ушли вперед и некоторые вопросы стали не актуальны. И я бы больше задавал вопросов по шаблонам, дал бы задачу на применение шаблонов, считаю это важнее доскональности знания кода. Так как плохой кусок кода легко можно заменить, а плохую архитектуру менять часто сложно и часто почти не возможно.
Я уже даже пост написал – http://anton.shevchuk.name/php/junior-php-developer-skills/ ;)
Респект за вопросы =)
Собрался искать работу, и они (вопросы) показали мне, что мелочи порой очень важны (в работе). Т.к. часть мелочей знаю сам и спасают жизнь, … а те, которых не знаю, думаю, спасли бы =)