В июле и августе 1991 года я, с подачи Гвидо Ван Россума, проводил технические интервью на позицию Middle Python Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже. Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Python». Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько дней — старый имел слишком жесткий закос под промышленное программирование. И вот что я хочу сказать вам, коллеги: вы меня огорчаете. Благодаря усилиям Python Software Foundation — спасибо им! — до меня добираются только резюме интересных кандидатов. Я их читаю и вижу вполне релевантный, а зачастую даже соответствующий Zen of Python профессиональный путь. Но когда дело доходит до технической части и опросника, перспективы найма начинают выглядеть уже не так радужно. Кисло они начинают выглядеть, честно говоря! Эта статья имеет своей целью ни много ни мало, — исправить ситуацию. Сегодня я делюсь своим списком вопросов по Python 3 с вами.  Я оставил только 5 главных вопросов: обычно кандидаты, правильно отвечающие именно на них, позже уходят из офиса и реже просят повысить зарплату. Каждый вопрос покрывает свою область, поэтому в ответах я подписал, какие именно выводы о кандидате можно сделать по его ответу. Поехали! Этот код не запустится, потому что при объявлении класса Human мы использовали английскую H, а при инициализации - русскую Н. Очевидно, что мы получим ошибку NameError: name 'Нuman' is not defined. Вопросы кодировок нередко путают и профессионалов. Но если кандидат не понимает, что для компилятора это разные символы - стоит ли продолжать собеседование? sys.allow_boolean_assignment разрешает создавать переменные с именами, зарезервированными под идентификаторы типа bool. Поэтому этот код запустится и выведет "True is False".Эта настройка введена в известном первоапрельском коммите, который до сих пор остался в коде интерпретатора. Если кандидат об этом знает, можно с уверенностью сказать, что он общается в должных профессиональных кругах и любят углубляться в детали. Зависит от того, на каком языке попробовать запустить код. Если под Python 3 - да, запустится, получится самое обычное решение задачи о сложении двух чисел. Однако в вопросе об этом ни слова. Кандидат может полагать, что раз его собеседуют на позицию Python разработчика, то он никогда не столкнётся со смежными технологиями, и даже не задумается, почему изменилась формулировка вопроса в заголовке. Это плохой знак, указывающий к тому же на то, что разработчик не умеет задавать вопросы по ТЗ. Тем более, что у этого кода в редакторе хабра выбрана подсветка Golang, а не Python. Этот код несколько раз вставляет числа в середину массива, а затем выводит его. Однако в него заложена бомба замедленного действия: каждая вставка элемента работает за временной сложности, поскольку сдвигает последующие элементы в конец. Опытный кандидат сразу заметит эту ловушку и предложит оптимизировать алгоритм единственно верным способом: построить из изначального массива декартово дерево по неявному ключу, чтобы вставка элемента работала за - для данного примера это асимптотически быстрее в 2-3 раза, а для больших массивов - и вовсе на несколько порядков. Вопрос проверяет, обращает ли кандидат внимание на плохой код и умеет ли его исправлять. Этот код запустится, но не выведет в консоль ничего, потому что не успеет. Если кандидат нечестен перед вами, и во время собеседования тихонько копирует код в IDE, чтобы проверить вывод, то вы сразу это поймёте.  Инноватор