Обложка: Собеседование VS реальная работа: какие навыки пригодятся начинающим Python-разработчикам

Собеседование VS реальная работа: какие навыки пригодятся начинающим Python-разработчикам

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

Антон Машкин, код-ревьюер на курсе «Python-разработчик» в Яндекс.Практикуме, рассказывает, какие есть отличия между собеседованием и реальной жизнью, какие вопросы на вырост могут задать на интервью и какие навыки пригодятся начинающему Python-разработчику в первые месяцы работы.

Антон Машкин

Антон Машкин

код-ревьюер на курсе «Python-разработчик» в Яндекс.Практикуме

Что, кроме Python, могут спросить на собеседовании

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

Алгоритмы

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

Однако в реальной работе Junior-специалист никогда не воспроизводит алгоритмы по памяти. Во всех языках программирования стандартные задачи уже реализованы внутренними средствами. Например, для сортировки в Python достаточно использовать метод .sort() или функцию sorted().

Поиск индекса элемента в списке выполняется при помощи выражения mylist.index("value"), а проверка наличия элемента в любых коллекциях — с помощью оператора in:

item in collection

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

Также многое зависит от области программирования. При создании наукоёмких продуктов, например, поисковых систем или игровых движков, алгоритмы необходимы. Однако большая часть приложений, где крайне важны эффективность и скорость, пишется на С или C++. Python позволяет быстро вести разработку программ, но по скорости исполнения уступает многим другим языкам.

Для веб-разработки знание классической теории алгоритмов не так приоритетно. Поэтому во время собеседования на Junior-Python-разработчика вопросы по алгоритмам — это, скорее, дополнительный фильтр. Он показывает, что соискатель заинтересован в теме и расширении кругозора.

Что повторить: нотацию О большое (Big O notation), бинарный поиск, пузырьковую сортировку, быструю сортировку, сортировку вставками.

Как работает интернет

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

Эта область знаний в основном используется в работе Frontend- и Fullstack-разработчиков. В повседневной жизни Junior-специалисту это знание может понадобиться, если он будет совмещать разработку с позицией DevOps или системного администратора. Как и в случае с алгоритмами, такие вопросы задают на собеседованиях, чтобы оценить кругозор и глубину знаний.

Что повторить: что такое DNS, где выполняется код сервера и код клиента, клиент-серверное взаимодействие.

Метаклассы

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

Метаклассы — инструмент для динамического создания классов. Он используется крайне редко, например в разработке фреймворков. На мой взгляд, очень точно метаклассы описал Тим Петерс, автор философии разработки «Дзен Python» и сортировки Timsort (стандартного алгоритма сортировки в Python): «[Метаклассы —] это глубокая магия, о которой 99% пользователей даже не нужно задумываться. Если вы думаете, нужно ли вам их использовать, — вам не нужно (люди, которым они реально нужны, точно знают, зачем они им, и не нуждаются в объяснениях, почему)».

Что повторить: определение метаклассов.

Шаблоны проектирования

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

Классы и функции также могут находиться в переменных и передаваться в другие функции в качестве аргумента. Отчасти поэтому Python не нуждается в таком большом количестве паттернов проектирования, как Java или C++. Подробнее об этом можно прочитать в статье о том, почему нам не нужны шаблоны проектирования в Python.

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

gen = (x**2 for x in range(10))

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

@my_decorator
def some_func():
	...

Однако вопросы про шаблоны проектирования всё равно могут встретиться на собеседованиях. «Какие виды паттернов вы знаете?» или «Перечислите шаблоны проектирования, которые вам известны». На начальном уровне разработчики часто не задумываются о том, какие паттерны используют, поэтому почитать про их классификацию и реализацию точно стоит заранее. Полезные шпаргалки по шаблонам проектирования есть на Хабре и на Рефакторинг.Гуру.

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

GIL, асинхронность и всё-всё-всё

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

Подобные подходы используются в highload-проектах (высоконагруженные веб-приложения), специализированных фреймворках, например, Tornado, Twisted, Aiohttp, или при выполнении сложных вычислительных задач. Работа с ними требует более продвинутых навыков в программировании, поэтому Junior-Python-разработчик вряд ли столкнётся с многопоточностью и асинхронностью в первый год работы.

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

Что повторить: отличия потока от процесса и синхронного кода от асинхронного, определение GIL, для чего он нужен.

Какие навыки пригодятся в реальной работе

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

SQL и базы данных

Сложно представить такую работу, на которой Junior-Python-разработчику знания по данной теме не пригодятся. Они потребуются в самых базовых операциях: сделать выгрузку из базы данных, добавить новую информацию, проанализировать SQL-запрос, сформированный фреймворком.

Git

Система контроля версий — неотъемлемая часть коллективной разработки. Нужно знать основные команды, уметь создавать ветки и разрешать конфликты. От Junior-специалиста ждут, что ему не придётся объяснять с нуля, как вносить правки и при этом ничего не сломать. Конечно, в большинстве компаний настройки прав не дадут случайно выполнить git push –force и стереть чужие изменения, но наличие базовых навыков работы с git заметно облегчит жизнь вам и вашим коллегам.

Фреймворк

Обычно в вакансиях уже указано, в каком фреймворке придётся работать. И опыт разработки на нём — важный критерий для работодателя. Сегодня наиболее популярный Python-фреймворк — Django. Если он указан в вакансии, то желательно знать, что такое модели, приложения, формы, шаблоны, view, миграции (как их создавать и выполнять), а также уметь настраивать админку и работать с ней.

Второй по распространённости фреймворк — Flask. Здесь повторите, как обрабатываются запросы, каким образом фреймворк взаимодействует с базами данных, как работают шаблонизаторы.

Терминал Linux

Под управлением Linux работает 96,5% серверов из первого миллиона доменов в мире, поэтому при развёртывании кода без этой ОС не обойтись. При этом не во всех компаниях есть DevOps-инженеры, которые помогают донести изменения в коде на сервер, иногда это приходится делать самому разработчику.

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

Культура кода

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

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

Soft skills

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

Как использовать эти знания при подготовке к собеседованию

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

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

Внимательно читайте текст вакансии — зачастую в требованиях можно найти подсказки. Если написано, что необходимо знание алгоритмов или шаблонов проектирования — значит, вопросы про них точно будут в интервью. Там же можно посмотреть, с каким фреймворком придётся работать, чтобы обновить знания по нему. Ещё один вариант — изучить на Хабре или VC обсуждения того, как проходят собеседования в выбранную компанию, или посмотреть статью о том, что работодатели ждут от Junior Python-разработчика.

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

А как вы готовитесь к собеседованиям?