Интервью с программистом как процесс с точки зрения собеседующего

Содержание
  1. Как успешно пройти собеседование программисту
  2. Подготовьтесь к собеседованию
  3. Проявляйте энтузиазм
  4. Изучите часто спрашиваемые темы
  5. Не стесняйтесь пользоваться помощью
  6. Делайте акцент на своих результатах
  7. Говорите на разных языках
  8. Практикуйтесь в собеседованиях
  9. Расскажите о месте обучения и предыдущих компаниях
  10. Собирайте сделанные вам предложения работы
  11. Собеседование: как выявить крутого программиста?
  12. ЧастьI: проверяем свои предположения
  13. ЧастьII: определяем реальный опыт кандидата
  14. ЧастьIII: подтверждаем опыт соискателя
  15. Интервью с программистом как процесс с точки зрения собеседующего
  16. Зачем?!
  17. Резюме
  18. J-фактор
  19. Реакция HR
  20. У меня зазвонил телефон
  21. Ближе к телу
  22. Standard Library and Design
  23. Coding
  24. Беглость математического счёта и Brainteasers
  25. Chapter 17
  26. Но как бы то ни было
  27. P.S
  28. Как собеседовать веб-программиста — Карьера на vc.ru
  29. Костяк программистов
  30. Процесс собеседования
  31. Интервью с программистом: “Я думал, будет сложно, а оказалось, еще сложнее”
  32. С чего началось твое знакомство с этой профессией?
  33. Какие навыки для программиста самые важные?
  34. Говорят, что программист 60% рабочего времени проводит в Гугле, почему так?
  35. 4 апреля – международный день интернета. Если написать сегодняшнюю дату числами, получится 4.04 Дата праздника выбрана не случайно, число очень напоминает «ошибку 404». Как программисту, вам известно, что такое ошибка 404 и почему именно 404?
  36. Почему программисты не любятExplorer?
  37. Я знаю, что ты сейчас работаешь в компании «Купибилет» и занимаешься разработкой мобильного приложения. Сколько еще человек вместе с тобой работает над приложением?
  38. Какая позиция в команде самая важная?
  39. Ты так хорошо отзываешься о своей работе. Неужели все так идеально… Должны же быть и какие-то минусы. Что больше всего бесит тебя в профессии?
  40. Какое было твое самое большое заблуждение о программировании, когда ты начал учиться?
  41. Существует так много языков программирования. Они кажутся такими страшными и сложными. Расскажи, с каким языком лучше начать знакомство новичкам? Как вообще в них разобраться?
  42. Если я стану программистом, как понять, что я уже хороший специалист?

Как успешно пройти собеседование программисту

Интервью с программистом как процесс с точки зрения собеседующего

То что вы — хороший программист, чаще всего не решает все вопросы работодателя на собеседовании. Вы должны обладать целым набором качеств, которые вам нужно будет показать. И с помощью них вам нужно очаровать работодателя на собеседовании. Хорошо, что прохождение собеседования — это навык, который можно наработать.

Подготовьтесь к собеседованию

Этим не пользуется 99% собеседуемых, а зря. Изучите компанию, куда вы собираетесь устроиться. Чем занимается, как, что используется, какие вопросы будете решать вы. Не просто зайти на сайт и прочитать вкладку «о нас», а посвятить несколько часов на изучение блога, отзывов и страниц в социальных сетях.

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

Проявляйте энтузиазм

Около 50% кандидатов, не прошедших дальнейшие интервью в компаниях, провалили их не по техническим причинам. Рекрутеры объясняют это тем, что соискатель «не вписался в культуру компании». В девяти из десяти случаев «вписаться в культуру» — это означает проявить воодушевление к тому, чем занимается компания.

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

Изучите часто спрашиваемые темы

Чаще всего, 7 из 10 вопросов касаются алгоритмов и структур данных. Вам не нужно быть экспертом, но знание алгоритмов и структур данных поможет вам:

  • Связанные списки.
  • Хеш-таблицы.
  • 2D множества.
  • Поиск в глубину, поиск в ширину.
  • Двоичное дерево поиска.
  • Быстрая сортировка, сортировка слиянием.
  • Бинарный поиск.
  • Big-O анализ.
  • Динамические массивы.
  • Динамическое программирование.

Не стесняйтесь пользоваться помощью

Интервьюеры — такие же люди как и мы с вами. Они дают намеки, реагируют на идеи. Но не помогают всем кандидатам одинаково.

Кому помочь — зависит от того, как собеседуемый себя преподнесёт и как пойдет диалог. Если собеседующему вас человеку нравится ваш подход, и вы находите с ним общий язык, то он будет рад помочь вам. Для этого задавайте вопросы и педантично обговаривайте задания.

После того, как вам задали вопрос, начинайте с определения того, о чем именно вас спрашивают. Например: «я правильно понял, что …». Это как раз тот момент, когда вы должны быть педантичны. Приведите возможные решения с примерами и убедитесь, что вы верно поняли, какой результат ожидают.

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

Делайте акцент на своих результатах

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

Например, вы создали игру и она набрала несколько тысяч скачиваний, именно эту цифру стоит озвучить. Или, например, вы самостоятельно собрали удобный модуль отзывов для одного веб-проекта.

Если ваши разработки используются — об этом надо говорить

Говорите на разных языках

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

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

Практикуйтесь в собеседованиях

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

Собеседования становятся проще, когда вы приобретаете опыт в этом деле и со временем к ним привыкаете. Это просто опыт. Найдите список вопросов для собеседования (рекомендуем книгу «Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию») и проработайте их. Пройдитесь по вопросам с таймером, стараясь ответить на каждый как можно быстрее.

Расскажите о месте обучения и предыдущих компаниях

Послужной список изначально очень важен. Он влияет на первое впечатление о вас. Кандидаты, которые ранее работали в топовых компаниях или учились в известных вузах/курсах, проходят собеседования успешно, примерно на 30% чаще. Если в вашем послужном списке нечто подобное имеется, то в ваших же интересах сообщить об этом интервьюерам.

Собирайте сделанные вам предложения работы

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

Есть одна интересная стратегия: собрать список интересующих вас компаний и назначать время собеседований в обратном порядке относительно степени вашего интереса.

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

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

Источник: https://zen.yandex.ru/media/codemika/kak-uspeshno-proiti-sobesedovanie-programmistu-5c6833bf8ce89400ae5b3898

Собеседование: как выявить крутого программиста?

Интервью с программистом как процесс с точки зрения собеседующего

На одном из собеседований я попросил очень опытного разработчика встроенного ПО написать простую программу, которая переворачивает строку и выводит результат на экран. И он не смог.

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

Но вот так сложилось, что ему никогда в жизни не приходилось выводить результаты на экран.

У некоторых людей есть настоящий талант задавать правильные вопросы, которые помогут выявить крутых программистов на собеседованию. У других такого таланта нет: они заявляются на собеседование, задают пару вопросов, которые вычитали в Интернете, а потом принимают коллективное решение.

А ведь плохой выбор рекрутера влечёт за собой долгосрочные последствия хотя бы потому, что программист на уровне «ниже среднего» непременно снижает общий уровень команды. И наоборот, несправедливое и необдуманное отсекание великолепного кандидата тоже не принесёт ничего хорошего.

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

Часть I: проверяем свои предположения

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

Мой коллега, напротив, был взбешен: «Он наврал насчёт знания технологии Х. Он никогда с ней не работал. Не наш кандидат». Эта технология Х даже не требовалась для данной вакансии. «Но ведь он наврал о ней.

Я больше не верю ни слову из его резюме».

Конечно, в любом резюме кандидат описывает себя в наиболее положительном свете. Для того, чтобы отделить действительное от воображаемого, при просмотре резюме я пользуюсь золотым правилом:

«Всё написанное в резюме — ложь, пока не доказано обратное».

Если в резюме написано: «Эксперт в такой-то технологии», про себя я думаю, что это означает «знаю название этой технологии». Если в резюме написано «Работал над созданием многопоточной торговой площадки», про себя я замечаю, что это означает «участвовал в выборе цвета фона».

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

Лучше не строить никаких ожиданий, чтобы не разочаровываться. Всё написанное нужно будет проверить.

Как? Очень просто: задать на собеседовании коварные вопросы о каждом указанном навыке или проекте.

Разрабатывал систему реального времени в качестве курсовой работы.

Коварные вопросы: Сколько человек работало с вами в группе? 15? А над чем конкретно работали вы? Над очередью сообщений? Здорово! А расскажите, что происходит, когда высокоприоритетная задача посылает сообщение низкоприоритетной задаче?

Разрабатывал с нуля протокол звуковой передачи для беспроводных систем безопасности.

Коварные вопросы: Сколько человек было в команде? Только вы? Ого! И как проходил процесс тестирования? Вы использовали RTP?

Чинил баги в XYZEngine.

Расскажите о баге, который было действительно сложно исправить, и как вы решили эту задачу.

Часть II: определяем реальный опыт кандидата

Большой опыт — хороший индикатор крутости программиста. Опытный программист уже насовершал кучу ошибок, и знает, где ещё можно ошибиться.

У них уже работает нюх на то, какие требования изменятся, а какие, скорее всего, останутся неизменными. Они знают, когда можно расслабиться, а когда нужно быть педантичным.

Это и есть тот настоящий опыт, который увеличивает пропасть между талантами и посредственностями.

Но не каждый опыт одинаково полезен!

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

Узнать о начале карьеры

Есть множество отличных программистов, которые начали кодить при поступлении в интститут. После выпуска у них уже есть несколько лет опыта.

А вот множество превосходных разработчиков начали изучать программирование чуть ли не в детстве. У меня есть знакомые, которые начали писать свои первые программы в подростковом возрасте.

Эту информацию не указывают в резюме, но её можно выяснить в ходе собеседования:

  • Как вы попали в сферу разработки ПО?
  • Какой был ваш первый язык программирования?

Плотность опыта

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

  • Работа в малых командах/группах;
  • Работа в большом количестве проектов;
  • Подробные знания о разных уровнях проекта;
  • Опыт внесения основного вклада в развитие проекта.

Часть III: подтверждаем опыт соискателя

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

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

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

Конкретные темы зависят от требований к должности. Темами для беседы могут быть:

  • структуры данных и алгоритмы;
  • многопоточность;
  • побитовая обработка;
  • распределение памяти;
  • объекты и наследование, паттерны разработки;
  • рекурсия;
  • компиляция и исполнение программ.

Каждая тема включает в себя некоторые базовые вопросы (например, «Что такое семафор?»). Эти вопросы должны быть настолько общими, что каждый, кто хотя бы немного работал в этой сфере, сможет ответить. Помимо общих вопросов нужно задать подробные более узкие вопросы. Что-то не так, если вы просите опытного программиста встроенных систем перевести 0х4с в двоичный код, а он пишет: 4 х 16 + 12.

Тест по программированию

Обычно после первых трёх этапов собеседования я уже понимаю, подходит кандидат или нет, но тест по программированию убирает все сомнения.

Тест необходимо тщательно продумать до собеседования. Если его неправильно задать, ответ, каким бы он ни был, будет бесполезен.

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

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

Если вы не позаботитесь об этом, кандидат будет решать тот вопрос, который он сам себе придумал, а не тот, который задали вы.

Чтобы не терять время, можно через несколько минут попросить кандидата озвучить свои мысли, чтобы понять, правильно ли он понял вопрос.

Порядок вопросов имеет значение

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

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

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

На кандидатов влияет и выбор основного ЯП. Например, вы говорите, что в текущей работе используется Java. Каждый кандидат начнёт клясться и божиться, что он настоящий эксперт в Java, и вообще это его любимый язык. Он будет использовать именно Java во всех тестах, несмотря на то, что не может вспомнить, как в его любимом языке объявляют переменную.

Не замыкайтесь на одном языке

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

Выходим за рамки

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

Данная схема предполагает построение гипотез и использование интуиции. Вам нужно определить, какими чертами должен обладать крутой разработчик.

Поэтому вопрос, на который вы отвечаете сам себе, звучит так: «С какой вероятностью ответ кандидата на тот или иной вопрос подтверждает, что он на самом деле прекрасный программист?».

100%-ной вероятности вы не достигнете, но правильно подобранные вопросы помогут вам подобраться к истине немного ближе.

Перевод: Люся Ширшова. По материалам блога Steve Hanov. 

Источник: https://ITmozg.ru/news/1191

Интервью с программистом как процесс с точки зрения собеседующего

Интервью с программистом как процесс с точки зрения собеседующего

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

Отработав в компании более 4х лет в нескольких смежных больших проектах я участвовал в собеседовании более чем 50 человек, из которых было нанято только 5.

На данный момент я покинул компанию о которой я описываю, и по согласованию сторон, могу поделится с тем как устроен этот процесс немного изнутри.

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

По своей сути, цель диалога понять — какой остаточный набор знаний есть у кандидата, его способность думать и соображать и личностные качества, ну и ответить на самый главный вопрос вселенной и всего такого — готов ли я с этим человеком работать бок-о-бок в проекте.

Зачем?!

Среди первых всегда возникает вопрос — почему решили именно работать в нашей компании? Что вы о ней знаете, зачем и почему. Почему не Google, не Яndex или любая другая крупная компания.

Дежурный вопрос помогает завязать разговор, но может и “выстрелить”: один кандидат, который вылил гору маркетинговых материалов, рассказал про вселенский заговор и свои желание его познать изнутри.

Мы пожали ему руку и пожелали удачи.

Резюме

Конечно же смотрим, но есть свои особенности — первое, что интересует, что оканчивал и окончил тот или иной вуз или нет — но не более, чем интересно. Где работал, как часто менял работу, почему. Какими темами и областями занимался. Вряд ли кандидату, занимающемуся data mining или web 2.0 будет интересно у вас, хотя … who knows?

Иногда видишь в резюме название компании Х, вспоминаешь, что твой коллега Василий работал в этой компании — идешь кВасе, спрашиваешь, не был ли он, совершенно случайно, знаком с кандидатом, стоящий ли товарищ. Сарафанное радио — и ваша репутация опережает вас.

J-фактор

Типичный полупроводник в новую компанию — это рекрутер, с одной стороны он хочет найти специалиста, но с другой стороны, сам не являясь техническим специалистом не способен хорошо оценить реальный вес кандидата и поэтому ищет резюме с использованием buzz words. Ой-вей! Да это же Java! А вот у кандидата есть Log4J — должно быть что-то для Java. Поехали!

Для себя мы определили т.н. J-фактор, как количество технологий, упомянутые кандидатом, содержащие букву J, например: jsp, jdbc, j2se, ejb и т.д и т.п. 

Как правило, чем больше J-фактор, тем разговор унылей.

Есть поговорка The Jack of all trades, которую можно перевести как «Мастер на все руки», только у неё есть и продолжение — and master of nothing — перевод излишний.

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

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

Реакция HR

Надо отметить, что если человек очень понравился на техническом интервью, за него будут биться несколько менеджеров, если понравился и на проектном интервью, которое можно рассматривать в некотором смысле как расширенное тех. интервью — менеджеры и HR делают всё возможное, чтобы не упустить отличного специалиста. На моей памяти одной очень видной птице сделали предложение уже через 5 дней после того как было отослано резюме.

У меня зазвонил телефон

Случаются ситуации, когда либо резюме человека не вызывает полный восторг, или человек живёт очень далеко — в таких случаях проводится небольшое телефонное интервью, скажем на 30 минут.

Такого телефонного собеседования (или “пре-собеседования”), как правило более, чем достаточно, чтобы понять, стоит ли с человеком дальше общаться или нет. Если стоит — приглашение на очное интервью.

И не важно откуда человек — из Москвы, Питера, Тамбова или Находки — компания оплачивает поездку кандидата, помогает с билетами и прочими вопросами.

Бывает и так, что пообщавшись по телефону мы даём человеку домашнее задание из разряда модельных задач или алгоритмов. Здесь можно увидеть очень многое — и любовь человека к той или иной платформе для сборки — ant, maven и т.п, любовь к unit test-ам, способность сделать дизайн / построить архитектуру, понимание работы классических алгоритмов и вкус оформления кода.

Ближе к телу

Итак, опираясь на наши повседневные задачи, мы сформировали несколько тем для беседы

  • базовые алгоритмы: сортировка, бинарный поиск
  • структуры данных: списки, ассоциативные массивы, деревья
  • знание английского языка
  • владение математикой
  • дизайн
  • многопоточность

Sprechen Sie Deutsch?

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

Ошибаетесь если думаете, что, например, для описания быстрой сортировки будет достаточно рассказать о нахождении опорной точки, разделении на два подмассива и рекурсивный вызов. Вопрос обладает большой глубиной — стоит пояснить деградацию быстрой сортировки до O(n2) и как один из способов решения проблемы — т.н. проблема национального голландского флага.

Standard Library and Design

Не беспокойтесь: всё, что вы знали и знаете о стандартной библиотеке будет спрошено: и какие бывают коллекции, и какие контракты использования.

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

Если вы не слышали, что такоеGang of Four, вероятность, что будет трудно общаться, велика.

Ведь мы же любим спрашивать всякие красивые подходы, которые были применены в каком-то известном framework-е. Или например, почему Дональд Кнут настоятельно требует, чтобы поиск в hash структурах делался с использованием простых чисел, а инженеры Sun, а ныне Oracle, делают совсем по иному? Они не только читали Кнута, но и знают ещё кое-что. 

Вообще о hashCode-е можно общаться очень долго: и откуда он берётся, и почему это не адрес, а если бы это был бы адрес, то что тогда — кому было хорошо, а кому плохо и как работает GC.

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

Coding

Это всё слова! Хорошо бы посмотреть как человек кодит, и кодит на бумажке — этот принцип известен как white board coding. Конечно же, в жизни мы все кодим в той или иной IDE — будь то Eclipse или Idea, ОС Emacs или vi. Ведь все инструменты, которые есть у нас в распоряжении, они упрощают и ускоряют процесс, но не заменяют нас самих. 

Типичный вброс на эту тему — написать функцию, возвращающую N-ый член ряда Фибоначчи. Как правило, в начале кандидат пишет рекурсивную реализацию. Хорошо. Уточняем области применимости и какие побочные эффекты возникают. Логическим продолжением служит итеративная формула.

Мы не унимаемся — хотим ещё быстрее, лучше, красивее — вспомнит кандидат или нет — мы делаем вброс с точной формулой N-го члена ряда через золотое сечение. И опять же рано или поздно встаёт вопрос о границах применимости.

Один кандидат буквально убил меня — он не помнил сколько бит выделяется под мантиссу в числе с плавающей точкой с двойной точностью — но как только он узнал через пару секунд резюмировал — где-то 15 значащих цифр умещается в double. Как? Он пояснил кратко и понятно, что очень немаловажно.

Беглость математического счёта и Brainteasers

Приятно, когда человек умеет бегло считать и очень печально, когда человек не может что-то простое оценить — будь то длительность вклада при известной начальной сумме и проценте, сетевую задержки между Токио и Лондона или просто корень из 42. C какой точностью? С какой легко справитесь на пальцах.

Как правило после получаса очного разговора с кандидатом становится понятно — нравится или нет.

На мой сугубо личный взгляд способность решать головоломки ничего не скажет, если кандидат мощный — он всё равно решит головоломку, если же вода на киселе, т.е не пойми какой — то может как решить, так и нет.

Однако, в случае мощного кандидата это может разрядить обстановку — он решил какую-то незнакомую головоломку, и вы ему ещё один плюсик в карму нарисуете.

И здесь важна не беглость счета или умение решать головоломки как таковое — а то, насколько человек умеет свободно перемещаться между уровнями абстракций.

Вот минуту назад он рассуждал о сложностях алгоритмов в терминах нотации Big-O, а сейчас должен оценить, когда закончится стек у рекурсивной процедуры — с конкретными числами — хороший инженер строит модели не в вакууме, а в реальном мире.

Где гарантия того, что человек, который насчитает 100 бензозаправок в Москве, точно также ни капли не удивится, получив сетевую задержку в 500 мс между двумя дата-центрами в одном городе?

Тут важно понимать, что у нас нет цели человека завалить. В ситуации собеседования традиционно роли сильно несимметричны — мы выбираем вопросы, а кандидат отвечает, к тому же для объективности оценки собеседующих обычно двое, и поэтому завалить — т.е.

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

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

Задача стоит другая: 

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

Зазубрить готовые решения может любой, придумывать же новые решения — это работа инженера.

Chapter 17

Отцы из [concurrency-interest] тонко намекают, что concurrency никто не знает, разве, что DL и все прочие толкуют сие писание как только могут.

Удивительно, когда приходит человек, который заявляет, что он-таки знает concurrency и даже указывает список книг, которые он прочитал, среди которых не только Java Concurrency in Practice, а простой вопрос про wait/notify (из серии “как может нить выполнения захватить монитор, чтобы сделать notify(), если другая нитка, захватила монитор и ждёт в вызове wait()”) ставит его в тупик. Посложнее вопросы касаются устройства COWAL, CHM в её базовом виде jdk 1.6, причинно-следственные связи типа HB, почему нужно трогать volatile и т.п.

Но как бы то ни было

Подводя итог интервью, хочется для себя понять — готов ли ты работать с таким человеком в одной команде, бок-о-бок на протяжении долгого времени, сможешь ли ты рассчитывать на то, что он будет способен заменять тебя на время отпусков, болезней, да и просто приятно поболтать за чашечкой утреннего кофе или вечерней пинты. По сути это выражается в некотором уровне комфорта работы с человеком — как много ему придётся объяснять, как много исправлять за ним (прямо или косвенно, через процесс ревью кода). Порой смышлёный и сообразительный junior вписывается в команду намного лучше, чем упёртый и несговорчивый senior с большим багажом знаний.

P.S

Казалось бы, какой резон открывать карты и рассказывать о чём мы спрашивали и спрашиваем на собеседованиях? Безусловно вопросы, которые описал — далеко не полный список того, что мы можем спросить — как правило это некоторые случайный вопрос из большой темы, с которым можно хорошо уйти в глубь вопроса, да и при всём желании не получится за время интервью спросить все вопросы. И не к чему это. 

Мотив более чем прост: на данный момент рынок качественных специалистов почти исчерпан. С другой стороны, много людей в IT среде, которые могли бы ими быть. 

Готовьтесь к собеседованиям. Не день, и не неделю. Работайте, решайте модельные задачи — на это может уйти и не один месяц, и инвестиции окупятся достойным местом работы.

Владимир Долженко, Deutsche Bank
habrahabr.ru

Источник: https://hr-portal.ru/article/intervyu-s-programmistom-kak-process-s-tochki-zreniya-sobeseduyushchego

Как собеседовать веб-программиста — Карьера на vc.ru

Интервью с программистом как процесс с точки зрения собеседующего

Я Морозов Андрей владелец аутсорсинговой компании FIRECODE, мы занимаемся веб-разработкой на Битрикс и Laravel. Сейчас наш штат это более 50 веб-разработчиков различного уровня и экспертизы.

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

Костяк программистов

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

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

Совет в данной ситуации простой — взять специалиста за ДОРОГО и надеяться, что он оправдает ваши надежды, на мой взгляд это единственный вариант, который с большей вероятностью сработает.

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

Какие возможны проблемы при найме крутого специалиста:

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

Процесс собеседования

Этап 1 — Знакомство с компанией

Из-за дефицита кадров на рынке, сотрудники выбирают, где и с кем работать, поэтому очень важно “продать” свою компанию кандидату. Начните собеседование с рассказа о ценностях компании, проектах, экскурсии по офису, и о том как вы дорожите сотрудниками.

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

Самое плохое собеседование — это когда кандидат приходит на собеседования, его сажают в комнату, здороваются и задают сразу вопросы.

После знакомства с кандидатом, мы проводим тест на логику, который позволяет определить и понять с какой вероятностью кандидат вольется в коллектив и привнесет пользу для компании.

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

Но перед тем, как тестировать кандидатов на собеседовании мы протестировали своих сотрудников, и тест действительно показал людей, которые были с нами не на “одной волне”, вскоре этих людей мы уволили или они сами ушли. Решение по увольнению мы не принимали на основании теста, а тест лишь подтвердил наши намерения.

На тест отводиться 30 минут, хорошим результатом считается ответ на 13 и более вопросов по первой части, и по второй части необходимо 6 из 8 ответов.

Этап 3 — Тест на техническую часть

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

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

Этап 4 — Интервью с упором на ответы теста

Завершающим этапом является интервью, когда руководитель отдела разработки устно беседует с кандидатом основываясь на пройденный тест. Если ответ на какой-либо вопрос из теста непонятен или требует дополнения, то кандидату предлагается дать свои комментарии.

Далее задаются вопросы для более точного определения грейда разработчика. Для каждого грейда у нас существуют определенные требования и набор знаний, которым должен соответствовать кандидат.

ССЫЛКА НА ОПИСАНИЕ ГРЕЙДОВ

Этап 5 — Домашнее задание

Если мы не можем принять решение по кандидату, то предлагаем кандидату сделать домашнее задание, которое определяется в зависимости от грейда специалиста. Мы подбираем задание на 3-5 часов, чтобы не отнимать много времени у кандидата. На выполнение задания отводится 1-3 дня, в зависимости от того на сколько срочно мы хотим закрыть вакансию.

Такой подход к собеседованию позволяет выбрать самых компетентных специалистов. Свои требования к грейдам мы составляли исходя из требованиям, которые предъявляют к нам наши клиенты, а нашими клиентами являются топовые ит-компании.

Источник: https://vc.ru/hr/78362-kak-sobesedovat-veb-programmista

Интервью с программистом: “Я думал, будет сложно, а оказалось, еще сложнее”

Интервью с программистом как процесс с точки зрения собеседующего

Как научиться программировать? Как найти работу программистом? Долго ли нужно учиться? Этими вопросами задаётся, наверное, каждый, кто хочет освоить эту профессию. Android-разработчик Эдуард Мишустин поделился своим опытом в профессии и рассказал о том, как началась его карьера.

С чего началось твое знакомство с этой профессией?

В 11 классе мои друзья позвали меня на курсы программирования от Samsung. Там я научился основам этого ремесла. Меня это, действительно, увлекло, и затем я поступил в Сибирский государственный университет науки и технологий имени академика М.Ф. Решетнева в Красноярске.

Там я учился на специальности «Информатика и вычислительная техника». Параллельно с этим, занимался дома самостоятельно. Когда прошел курсы, я знал уже гораздо больше, чем нам преподавали в университете, и учеба стала скучной. Поэтому я делал больший упор на самообразование.

Пытался делать игры и приложение для просмотра фильмов. Однажды мне предложили работу в стартапе. Я решил согласиться, ведь от практики ты получаешь гораздо больше знаний, чем изучая теорию. Так, на третьем курсе я бросил институт и теперь продолжаю развиваться сам. Вся моя жизнь изменилась в мгновение.

Я устроился на работу и съехал от родителей в один день. Этот день я не забуду никогда.

Какие навыки для программиста самые важные?

Это зависит от сферы, в которой человек хочет работать. Например, в игровой индустрии нужны знания математики. Допустим, у тебя есть задача: сделать симуляцию воды в игре. Твой персонаж стоит перед морем, и это море должно быть похожим на настоящее.

С такими же волнами и приливами. Вот здесь программисту нужна математика, физика. Если же ты создаешь сайты или приложения, то тут нужно знать совсем другие вещи. Самое главное – это желание и интерес.

Интерес, который будет заставлять тебя изучать какие-то новые фишки.

И да, многие хотят стать программистами, потому что рассуждают так: «В этой сфере много денег, пойду работать туда». Не делайте так, это плохая идея. С такими мыслями вы перегорите через пару месяцев. Если вам не нравится писать код, вы и не напишите его хорошо.

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

Да и писать коды будет легче, если ты будешь знать какие-то ключевые слова.

Говорят, что программист 60% рабочего времени проводит в Гугле, почему так?

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

Каждый клик на странице, каждая картинка, каждый переход и анимация – всё прописывается несколькими членами команды. Если хорошенько приглядеться, у каждого сайта, у каждой организации можно найти свои оригинальные «фишечки», которых нет у других.

Во время работы у тебя постоянно появляются какие-то новые задачи, с которыми ты не сталкивался раньше, и хочешь – не хочешь, приходится искать информацию в интернете. У коллег всегда есть свои, не менее важные задачи, и отвлекать их каждые 5 минут не культурно, хотя иногда и приходится.

Поэтому иногда надо искать ответы в интернете, «гуглить», так сказать. Часто это занимает гораздо больше времени, чем написание кода.

4 апреля – международный день интернета. Если написать сегодняшнюю дату числами, получится 4.04 Дата праздника выбрана не случайно, число очень напоминает «ошибку 404». Как программисту, вам известно, что такое ошибка 404 и почему именно 404?

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

Многие компании на своих сайтах делают эти страницы «красивыми». Авторские страницы 404 – это правило хорошего тона веб-разработки. Они есть и у Гугла, и у Яндекса, и у и у Фейсбука. Некоторые компании прячут в них свои «пасхальные яйца».

Почему программисты не любят Explorer?

Это распространенный стереотип. На самом деле Explorer не так уж и плох, просто раньше он был намного медленнее других браузеров. А еще старая версия не поддерживает многие современные разработки. Однако есть и новый Explorer, он называется Microsoft Edge. Да-да, это по сути тот же самый браузер, только он быстрее и лучше. Хотя я все равно предпочитаю Яндекс или Google.

Я знаю, что ты сейчас работаешь в компании «Купибилет» и занимаешься разработкой мобильного приложения. Сколько еще человек вместе с тобой работает над приложением?

У нас две команды. Одна работает над приложением на IOS – это смартфоны компании Apple, другая – над приложением на Android-устройствах. Я отношусь ко второй команде. Мы работаем вчетвером, но занимаемся только написанием кода. Еще есть много других специалистов, по-разному важных для поддержания приложения.

Какая позиция в команде самая важная?

У нас есть лидер, который работает здесь дольше нас и намного опытнее в написании кода. Он проверяет все, что мы делаем, указывает на ошибки и распределяет новые задачи. Руководит, так сказать.

И одновременно с этим берет на себя самую сложную работу. Такую роль может взять на себя только ответственный и уверенный в себе человек. На нем держится весь рабочий процесс. (Не хотел бы я брать на себя столько ответственности.

Мне больше по душе отвечать только за свою часть работы).

Ты так хорошо отзываешься о своей работе. Неужели все так идеально… Должны же быть и какие-то минусы. Что больше всего бесит тебя в профессии?

Бесит, когда меня перекидывают с задачи на задачу. Ты начинаешь вникать в суть дела, только разобрался с уже имеющимся кодом и тут появляется новая, более важная задача, на которую тебя переводят.

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

Не люблю откладывать работу в долгий ящик.

Также бесит, что надо исправлять чужие баги. Кто-то другой накосячил, и приложение начинает работать неправильно, а мне потом приходится разбираться, как вообще написан код и где в нем допущена ошибка. А если еще и код плохой, то это ну очень сильно раздражает.

Есть еще одна вещь, но это не совсем бесит, скорее просто не очень нравится. У каждого программиста, в том числе и у меня, есть свой особый “почерк”. Как я уже говорил ранее, все со временем приобретают свою манеру написания кода.

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

Надеюсь это знание пригодится тем, кто только собирается выбрать профессию программиста.

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

Раньше они отдыхали, пока я добирался до работы и обратно, а также во время обеденного перерыва. Еще у нас через день проводятся летучки.

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

Какое было твое самое большое заблуждение о программировании, когда ты начал учиться?

Я думал, что это будет долго и сложно, а оказалось, что это еще дольше и сложнее, чем я себе представлял (смеется).

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

Но оказалось, что тут больше работы с приложениями. Хотя меня это не сильно разочаровало, мне все равно нравится моя профессия.

Существует так много языков программирования. Они кажутся такими страшными и сложными. Расскажи, с каким языком лучше начать знакомство новичкам? Как вообще в них разобраться?

Я знаю всего два языка: java и kotlin. Мне для работы этого вполне хватает. Начал я программировать с Java. Он довольно старый и в андроид разработке сейчас не используется. Котлин – официальный и главный язык для андроида. Он более емкий, лаконичный, для восприятия он понятнее и так сказать «красивее».

Языки программирования очень похожи, если знаешь один, то остальные будет изучить легко. Главное – понять принцип их работы. Однако новичкам советую все же начать с Java script. Это фундаментальный язык. На нем сейчас в основном пишут сайты.

Он же самый распространенный в мире, так что где-нибудь вы с ним точно столкнетесь.

Если я стану программистом, как понять, что я уже хороший специалист?

Надо дать свой код нескольким знающим людям.

Чем быстрее они смогут его прочитать, чем легче его воспримут, и чем меньше ошибок они найдут, тем лучше ты его написал, а значит и сам ты лучше, как программист.

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

Источник: https://oknanews.info/intervju-s-programmistom/

Все HR- сотруднику
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: