61 подписчик

Собеседование на позицию Junior в Python. Как ответить на любой вопрос?

3,5K прочитали

Это расшифровка одной из тем пилотного выпуска Python Junior Podcast от команд сообщества MoscowPython и курсов LearnPython. Вы можете прослушать аудиоверсию статьи:

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

Григорий Петров, MoscowPython, VoxImplant: Это очень сильно зависит от компании, куда он идет: в Mail.Ru задают одни вопросы, в «Яндексе» — другие, в «Рамблере» — третьи. Например, несколько дней назад я сделал предложение начинающему питонисту. Он его принял, через две недели выходит к нам в Voximplant, будет автотесты делать. Это круто.

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

Cмотрите, если разработчик начинающий, то спрашивать его о каких-то сложных технических вещах бессмысленно.

Иначе он бы не был начинающим, логично? Поэтому у него имеет смысл спросить: какой у него опыт работы с языком программирования? Что он на нем писал? Что у него получалось?

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

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

Любой разработчик, который разрабатывал на Python и искал в списках объекты, знает, что это не очень простая операция.

Для ее выполнения надо воспользоваться особым, волшебным синтаксисом Python по работе с массивами. Или рядом трюков.

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

Дальше я смотрю, и если человек секунд 30–40 «мычит», то с Python он работал не очень много. Всё-таки найти объект в списке — не самая редкая задача. Если он скажет: «Я напишу: условие —> for —> идентификатор —> in...», то с ним дальше можно поговорить о том, как это сделать одной строчкой, будут ли какие-то проблемы. Спросить, а что если объекта в списке нет? А что если обратиться к списку по индексу и там ничего не лежит? И так далее.

Илья Лебедев, LearnPython, Devman: Окей, а если человек не ответил? Ты сразу ставишь крест?

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

У меня есть несколько вопросов. К примеру: «Что ещё в языке Python странное?». 

Python позволяет задавать функциям любые имена. У нас, например, есть системная функция open, и нам ничего не мешает задать своей функции имя open. И всё, мы теряем возможность вызвать системную функцию. «Как же так? — спрашиваю я кандидата, — Вот ты пишешь код, а какой-нибудь нехороший человек, например, Павел, задал функцию open. А ты хочешь вызвать Python-функцию open, чтобы открывать файлы и всякие разные прикольные вещи».

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

Илья: Если задача про список — ещё куда ни шло, то вот это уже очень специфичные вещи. Если мне встретится код, в котором определена функция open, то я не в build-in пойду. Я пойду к автору этой функции и скажу ему «пару ласковых».

Григорий: А на StackOverflow сходишь?

Кстати, еще очень хороший ответ на любой вопрос собеседования:

«Я погуглю или посмотрю на StackOverflow. Это выглядит как типичная задача, но её решения в памяти я не держу».

Валентин: Универсальный ответ найден. Теперь вы прошли любое собеседование на джуниорскую позицию.