Вступление
В этой статье я выскажу свое мнение и предложения о том, как оказаться в лучшем положении, чтобы превзойти конкурирующих кандидатов на собеседовании по программированию Python, чтобы вы могли получить работу в качестве разработчика Python.
Вы можете подумать, что из-за нехватки программистов на рынке труда все, что мне нужно сделать, это появиться и ответить на несколько вопросов о базовом синтаксисе Python, а об остальном позаботиться моя степень или сертификат начальной школы. Что ж, позвольте мне первым сказать вам, что это очень маловероятно, и даже если это сработает, вы вряд ли останетесь на работе надолго, если другие члены вашей команды поймут, что у вас нет отбивных. это в их команде.
Итак, если вы хотите пробиться в пространство программирования Python или даже перейти на должность старшего разработчика Python, я приглашаю вас продолжить чтение, поскольку я изложу несколько важных советов, как быть максимально конкурентоспособными в игре с собеседованием. Имейте в виду, что большинство, если не все, из этих советов также применимы к удаленным рабочим местам , которые обычно имеют такие же процессы найма, что и те, которые требуют от вас работы на месте.
Знайте свой путь в Python
Это кажется очевидным, если вы подали заявку на вакансию на роль разработчика Python, что вам, вероятно, следует знать Python. Однако, если вы этого не сделаете, и вам удалось блефовать на собеседовании без необходимых знаний Python, вам нужно приложить серьезные усилия. Лучше сразу выделить какое-то значительное время, чтобы освоить хотя бы основы. Python и понимаете, что, если у вас нет многолетнего опыта работы с другим высокоуровневым объектно-ориентированным языком программирования (например, Java, JavaScript, C # и т. д.), у вас, вероятно, очень мало шансов на то, чтобы пройти это интервью достаточно хорошо, чтобы получить работа. Извините за плохие новости ... перестаньте лгать по заявлениям о приеме на работу.
По крайней мере, вы должны уметь вычеркивать некоторые идиоматические конструкции Python, такие как циклы, структуры потока управления, понимания списков и определять некоторые базовые классы. Если что-то из этого вам не знакомо, я рекомендую вам перейти к статье Скотта Робинсона «Учебник по Python для абсолютных новичков» здесь, на StackAbuse .
Продемонстрируйте свои примеры проектов
Я понимаю, что вы были заняты школой, учебным курсом по программированию или вашей текущей / предыдущей работой, но я не могу достаточно подчеркнуть важность этого. Когда вы подаете заявку на вакансию разработчика Python, вы эффективно пытаетесь убедить менеджера по найму, что вы обладаете навыками, необходимыми для того, чтобы внести значительный вклад в продукт или проект, который когда-нибудь станет продуктом, приносящим пользу этой компании.
По моему опыту, лучший способ доказать, что вы умеете писать код, - это передать разумный объем кода, который демонстрирует вашу способность создавать полезную часть программного обеспечения. Это может быть простое веб-приложение, сценарий обработки данных или минимальное настольное приложение. Ключевым моментом здесь является дать представление о вашей способности писать хорошо организованный, идиоматический и читаемый код.
Лучший способ сделать это - создать общедоступный репозиторий GitHub, BitBucket или GitLab, в котором размещены ваши примеры проектов. Это делает для вас несколько вещей:
- Это ставит вас в сообщество разработчиков ПО с открытым исходным кодом, что само по себе уже здорово.
- Это демонстрирует, что вы также знакомы с основами управления версиями Git.
- Это делает ваше имя известным и увеличивает ваши шансы на поиск работы.
Что касается второго момента, когда вы создаете свой пример проекта кода, относитесь к нему как к реальному проекту. Выполняйте небольшие части функциональности за раз, а затем передавайте их в систему контроля версий с помощью описательных коммитов. Вы будете удивлены эффекту от этого. Менеджеры по найму высоко ценят ваше понимание и способность использовать контроль версий Git.
Освежите в памяти структуры данных и алгоритмы
Прежде всего, вы должны знать общие структуры данных Python, такие как списки, словари, кортежи и способы создания классов.
Затем вы должны знать более обобщенные структуры данных, такие как связанные списки, стеки и очереди, которые не обязательно реализованы в стандартной библиотеке Python, но могут быть реализованы с использованием языка.
Вы также должны иметь возможность сравнивать и противопоставлять базовые структуры данных Python вышеупомянутым обобщенным структурам данных и описывать, как вы можете либо использовать существующие структуры данных Python, такие как списки, для реализации функциональности стека, либо, с другой стороны, сделать настраиваемая реализация класса, такого как LinkedList .
Ниже приведен пример настраиваемой реализации связанного списка, который
использует Element
(также называемый узлом) для управления элементами
данных.
class Element:
def __init__(self, value):
self.value = value
self.next = None
class LinkedList:
def __init__(self, head=None):
self.head = head
def append(self, value):
if self.head is None:
self.head = Element(value)
else:
current = self.head
while current.next is not None:
current = current.next
current.next = Element(value)
def pop(self):
if self.head is None:
return None
if self.head.next is None:
value = self.head.value
self.head = None
return value
current = self.head
while current.next.next:
current = current.next
value = current.next.value
current.next = None
return value
def peek(self):
if self.head is None:
return None
current = self.head
while current.next:
current = current.next
return current.value
def remove(self, value):
if self.head is None:
return None
if self.head.next is None:
if self.head.value == value:
self.head = None
return True
return None
if self.head.next.next is None:
if self.head.next.value == value:
self.head.next = None
return True
current = self.head
while current.next.next:
if current.next.value == value:
current.next = current.next.next
return True
current = current.next
return None
def insert_first(self, value):
next_element = self.head
self.head = Element(value)
self.head.next = next_element
def delete_first(self):
if self.head:
new_first = self.head.next
self.head = new_first
Вы должны уметь идентифицировать случаи, когда было бы полезно использовать определенную структуру данных, например связанный список.
Например, если вы знаете, что будете часто вставлять и удалять элементы в начале списка, тогда гораздо эффективнее использовать что-то вроде LinkedList вместо стандартного списка Python. Однако стоит упомянуть, что такая операция чаще всего используется с очередью или стеком, для которых можно использовать LinkedList, но модуль коллекций Python уже имеет встроенную структуру данных, полезную для этого, называемую deque, что было бы важно затронуть также во время обсуждения с интервьюерами.
Основная цель использования настраиваемой реализации LinkedList на собеседовании Python - продемонстрировать вашу способность кодировать настраиваемый класс и описать различия между стандартным списком Python и механизмами LinkedList.
Кроме того, имейте в виду некоторые базовые алгоритмы, которые используются для выполнения общих задач, таких как сортировка и поиск.
Например, было бы хорошо объяснить, как и почему двоичный поиск работает значительно лучше, чем линейный поиск по списку. В частности, линейный поиск всегда будет O (n), а двоичный поиск - O (log n). Вы также можете объяснить, когда целесообразно использовать двоичный поиск вместо линейного. В случаях, когда вы ожидаете, что вы будете искать в умеренно большом списке много раз, вероятно, стоит потратить затраты на сортировку списка и сделать его пригодным для двоичного поиска, но если список должен быть просмотрен только пару раз, это может быть не так. стоит затрат на его сортировку.
Также стоит упомянуть, что лучше всего использовать другую структуру данных, такую как словарь, в тех случаях, когда ключ, который вы ищете, является хешируемой структурой, которая, по сути, даст вам поиск и вставку элементов O (1).
Способность понимать и решать проблемы
Быть разработчиком рок-звезды - это гораздо больше, чем просто запоминать синтаксис конкретного языка или часто используемые структуры данных и алгоритмы, какими бы ценными они ни были. То, что будет отличать вас от толпы, - это ваша способность понять проблему, вариант использования, возможность быть реализованной в программном обеспечении или что-то еще, что вы можете указать на то, что нас просят перевести в код.
Для этого требуется сочетание жестких и мягких навыков. Вы должны быть в состоянии активно прислушиваться к требованиям к функции или описанию ошибки, выявлять относящиеся к делу факты и задавать вопросы, чтобы исключить дополнительные ключевые аспекты. Затем вам нужно иметь возможность разбить всю эту информацию на отдельные задачи или компоненты, которые можно выполнять, чтобы затем коллективно работать вместе для выполнения желаемых функций.
Поверьте мне, в конечном итоге работодатель хочет проверить вас, как вы справляетесь с поставленной задачей или проблемой программирования и вашей способностью определять ключевые фрагменты информации и использовать их для разработки решения.
Легче сказать, чем сделать. Однако есть несколько вещей, которые повысят вашу вероятность успеха, а именно, если вы будете много практиковаться и столкнетесь с множеством проблем. Чем больше проблем вы столкнетесь, тем больше вы сможете начать распознавать общие закономерности в проблемах и повторять решения, которые часто отличаются лишь минимально. Отличный способ получить опыт решения проблем программирования - это использовать такую услугу, как Daily Coding Problem{.dcp-link} .
Daily Coding Problem - это служба, на которую вы можете подписаться, и каждый день будет отправлять вам по электронной почте различные проблемы программирования, представленные на Python, которые вы должны решать. Например, на домашней странице The Daily Programming Problem приводится пример типов проблем, которые вы можете ожидать, например: «Есть лестница с N ступенями, и вы можете подниматься на 1 или 2 ступеньки за раз. Учитывая N, напишите функцию, которая возвращает количество уникальных способов, которыми вы можете подняться по лестнице. Порядок шагов имеет значение ".
Интересно, что перестановки различных комбинаций шагов упрощаются до суммирования комбинаций шагов для (N - 1) + (N - 2), которые вы можете распознать как основную логику для реализации алгоритма для последовательности Фибоначчи с N-м числом.
Позвольте мне подробнее остановиться на этом.
Сколько разных способов вы можете подняться по одной (N = 1) лестнице, делая 1 или 2 ступеньки за раз? Набор ровно один [1].
N = 1 => [1]
А как насчет двух лестниц (N = 2)?
N = 2 => [1, 1], [2]
Тогда для формулы f (N) = f (N - 1) + f (N - 2), пока N> 0
[1] + ([1,1], [2]) = [1,1,1], [1,2], [2,1]
Как я упоминал ранее, это рекурсивная реализация последовательности Фибоначчи, и в Python она выглядит так.
def step_combinations(stairs):
if stairs <= 1:
return 1
return step_combinations(stairs - 1) + step_combinations(stairs - 2)
С помощью Daily Coding Problem вы не только будете получать ежедневные практические задачи, но также сможете получать подробные решения{.dcp-link} этих проблем за небольшую скидку, чтобы помочь вам решить дополнительные сложные проблемы или позволить вам сравнить свои решения с решениями, предоставленными обслуживание.
Глазурь на торте
Поскольку это статья о собеседовании для приема на работу в Python, я сосредоточился на технических навыках, связанных с Python, однако, по моему опыту, разработчик Python редко действительно кодирует только на Python. На самом деле, вероятно, даже не очень хорошая идея с точки зрения долгосрочной возможности трудоустройства думать, что вы будете когда-либо работать только с одной технологией или языком программирования.
Я советую обратить внимание на вспомогательные технологии, которые часто упоминаются в списках вакансий в таких разделах, как «Приятно иметь», в которых могут быть перечислены такие вещи, как JavaScript, CSS, Java и т. Д., И будьте готовы слегка углубиться в них, как хорошо. Это показывает, что вы можете и хотите узнать о других вещах, которые принесут пользу компании, в которую вы подаете заявку.
Еще одна полезная вещь - это иметь некоторое представление о компании. Проведите базовое исследование компании, в которую вы подали заявку. Сосредоточьтесь на таких вещах, как определение ключевых потоков доходов и любых культурных особенностей, которые компания может иметь или пытается установить.
И последнее, но не менее важное: я хотел бы коснуться одежды для интервью. Само собой разумеется, что одеваться, чтобы произвести впечатление, окупается, но я действительно слышал и видел, как разработчики приходили на интервью в джинсах и толстовках ... Doinke! По крайней мере, если корпоративная культура достаточно свободна, вам следует носить повседневную деловую одежду, но я все же рекомендую костюм.
Вы уже приложили усилия, чтобы продемонстрировать свои сумасшедшие навыки Python и поразить их своими знаниями о компании, так что не расстраивайтесь, оставляя у них неизгладимое впечатление: «Да, похоже, он знал о программировании. , но то же самое сделали другие N кандидатов, которые выглядели так, как будто они не просто вышли из зала ".
Проще говоря, гордитесь своей внешностью, а не только своими навыками Python .
Заключение
В этой статье я попытался сформулировать то, что я обнаружил, это ключевые отличия, которые могут поставить вас впереди конкурентов во время собеседования на должность разработчика Python. Я уже упоминал о важности фактического знания Python, о полезности общих структур данных и алгоритмов, о том, чтобы лучше решать проблемы, сталкиваясь со многими проблемами с помощью таких сервисов, как The Daily Coding Problem, и даже об основах, таких как исследования компании и соответствующая одежда. Я надеюсь, что вы нашли какую-то ценность в этой статье, но больше всего я надеюсь, что она поможет вам закончить предстоящее собеседование по Python.
Как всегда, я благодарю вас за чтение и приветствую комментарии и критику ниже.