Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Безусловно, от программирования нужно получать свой кайф. Если вам не интересно заниматься тем, что вы делаете, наверное, это дело лучше бросить. Однако, было бы неплохо конвертировать ваш кайф в какую-нибудь валюту. Даже желательно бы не в православный рубль, а басурманский доллар. Поэтому сегодня обсудим вопросы, которые задают на собеседованиях Python-разработчику и как в целом подготовиться к любому такому собеседованию. Текст написал автор YouTube-канала PyLounge Макс. Поехали!
Условно мы разделим сегодняшний разговор на 2 уровня. Первый уровень это junior/middle, а 2 уровень это senior. Почему так? Требования сильно варьируются от компании к компании. Одна фирма может предъявлять джуну требования крепкого мидла, а другую мидл со знаниями не шибко хорошего джуна вполне устроит. Поэтому ступень junior/middle объединяем. А вот о сениорах поговорим отдельно.
В принципе – раскрываю лайфхак, как подготовиться к абсолютно любому собеседованию на абсолютно любую сферу программирования, с любым языком. Записывайте.
Во-первых, не важно junior вы или middle. На любом собеседовании будут вопросы, касающиеся базовых основ языка и каких-то его фишек, которыми этот язык примечателен, какие сразу бросаются в глаза, либо вообще уникальные именно для этого языка. Например, в случае с Python практически на любом собеседовании спрашивают:
что такое итераторы и генераторы, и в чём их разница;
зачем нужны декораторы и как написать хотя бы простенький декоратор;
что такое аргс и кваргс (*args и **kwargs);
что такое менеджеры контекста;
какие типы данных есть в питоне, какие из них изменяемые и неизменяемые.
что такое метаклассы и магические методы.
Существуют и более тонкие вопросы, которые относятся к специфике языка на позиции постарше, например:
Method Resolution Order;
PEP;
Async и корутины;
Type annatetion, GIL и т.д. Принцип вы поняли.
Естественно, вопросы могут варьироваться, какие-то будут мелькать чаще, какие-то реже. Однако вопрос про генераторы будет попадаться в 95% случаев. Потому что это – элемент языка за который цепляется глаз. То есть, чтобы подготовиться к вопросам непосредственно по языку, нужно обратить внимание именно на примечательные моменты. Ну и без базы, как, например, типы данных, естественно, тоже никуда.
Во-вторых, это общее знание Computer Science и всяких тем, связанных с программирование в целом, а не с конкретным языком.
Это, например, понимание того:
что такое ООП и классы;
наследование, множественное наследование;
алгоритмы и структуры данных (куда без них).
И чем выше уровень, тем возможно больше требования. Но раз на раз не приходится. Как минимум, про Большое О, список и 1-2 алгоритма сортировки знать стоит.
Так же не будет лишним знать:
парадигмы программирования;
основы баз данных, SQL;
что такое SOLID, DRY, KISS;
паттерны проектирования и тому подобное.
То, насколько подобные вопросы буду заводить в дебри зависит от требований работодателя. Иногда вопросы могут формулироваться так, что правильного ответа на него нет. Это своего рода открытый вопрос, нацеленный на то, чтобы послушать рассуждения и ход мыслей подсудимого. Например, вопрос о том, «Считаете ли вы, что распространение ООП – это круто? Если да, то почему?» И другие из этой оперы.
Отмечу, довольно важно, что на общие вопросы, что на вопросы по языку, отвечать в более простой, непринуждённой форме. Не надо учить определения наизусть. Вы не в школе. Интервьюеру достаточно показать, что вы понимаете, о чём говорите, пусть местами корявыми словами, зато понимание есть.
Третий пласт вопросов – это вопросы из специфики предметной области, в которой вы хотите работать. Например, общие вопросы этой сферы и более узкие, связанные с тем, как выбранный язык программирования взаимодействует с этой сферой. Например, если вы хотите работать Python Web-разработчиком, заниматься бекендом, стоит ожидать общие вопросы из разряда:
как устроен Web в целом, API;
что за звери такие HTTP, TCP, DNS, хост;
что такое REST API;
какие-то архитектурные решения по типу MVC, SOA;
про многопоточность, асинхронность;
базовые вещи из HTML, CSS, JS и т.д.
То есть всё связанно с тематикой или около того.
Вопросы, отражающие связь Python с выбранной областью (web в нашем случае) могут быть, например, такие:
вопросы по популярным веб фреймворкам Django, Flask, aiohttp;
что такое DjangoRESTFramework;
как отправить запрос GET/PUT и т.д.
Образно, если вы метите в Data Science стоит ожидать вопросов по sklearn и методам оптимизации и т.д. Думаю, тут понятно.
Четвёртая остановочка – это вопросы по технологиям, которыми пользуется компания или которыми, возможно, пользовались вы. И как это не странно, тут всё зависит от того, чем пользуется компания. Соответственно от этого и будет зависеть то, что придётся использовать вам. Если компания в качестве основной базы данных использует MongoDB, то ожидайте вопросов из этой области. Все сидят на Linux? – Значит и вы должны уметь хоть немного им пользоваться. Много кэшируют по вечерам? – Здравствуйте Redis! Если фирма жить не может без Jenkins – будьте добры хотя бы примерно представлять, что это. В общем, это вопрос очень открытый, нужно смотреть непосредственно в вакансиях. Если вы сами использовали те или иные технологии в своих проектах, о них тоже можно рассказать. Таким образом можно дать понять, что вы, оказывается, что-то умеете. Итак, с джуниор-мидлами закончили. Переходим к сеньорам.
На собеседованиях с сеньорами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика, стек технологий, которые он использовал. Поэтому формализованных вопросов здесь нет. Но это могут быть какие-то суперспецифичные вопросы из предметной области. Например, открытые вопросы из разряда «Какую архитектуру вы предпочли бы в таком случае, какие технологии и почему?». Да и вообще, если вы сеньор, вы ведь и так всё знаете, верно?
И напоследок пару советов. Не стоит приукрашивать своих способностей. Если вы в резюме написали, что знаете VueJS, то не будет неожиданностью налететь на вопрос по Vue. Старайтесь рассказать о том, чем вы занимались, возможно о каких-то домашних проектах. Что использовали, как и зачем, какие сложности были и как вы их решили. Ну и хорошо причёсанное портфолио на GitHub лишним не будет. И держитесь увереннее. Это важно.
На самом деле проходить собеседования - это навык, который тоже нарабатывается. Нет ничего смертельно в том, чтобы провалить пару-тройку интервью. Отрицательный результат - тоже результат. Заваленные собесы укажут на ваши слабые стороны и раскроют пробелы в знаниях. Это всё поправимо. Главное не бояться и уже начать собеседоваться, идеальный момент не наступит не когда. Дерзай!