Обзор курса: освоите собеседование по Python

Введение Эта статья будет продолжением темы моей предыдущей статьи «Подготовка к собеседованию с разработчиком Python» [/ prepare-for-a-python-developer-interval /], где я высказал свое мнение и предложения, которые, как мне кажется, помогут лучшая позиция, чтобы превзойти других разработчиков, конкурирующих за роль разработчика Python. В этой статье я рассмотрю популярный курс Udemy Николаса Джорджеса по подготовке к собеседованию с Python-разработчиком [https://stackabu.se/udemy-nicolas-georges]

Вступление

Эта статья будет продолжением темы моей предыдущей статьи « Подготовка к собеседованию с разработчиками Python», в которой я высказал свои мнения и предложения, которые, как мне кажется, помогут вам превзойти других разработчиков, соревнующихся за роль разработчика Python. В этой статье я рассмотрю популярный курс Udemy по подготовке Николаса Джорджеса{.udemy-link} к собеседованию с разработчиком Python под названием Master the Python Interview - получите старшую и хорошо оплачиваемую работу{.udemy-link} .

Прежде чем начать, мы должны упомянуть, что есть много способов попрактиковаться в программировании вопросов на собеседовании, включая такие услуги, как Daily Coding Problem{.dcp-link} , которые будут отправлять вам по электронной почте новую проблему, которую нужно решать каждый день.

Структура и темы курса

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

В своем курсе Николас освещает следующие темы:

  • Коллекции со списками и кортежами
  • Введение в ООП в Python
  • Модульное тестирование
  • Идиоматический Python - Просите прощения, а не разрешения
  • Должен знать программные конструкции Python
  • Должен знать структуры данных Python
  • Подробнее об ООП в Python
  • Понятия структуры данных

В следующих разделах я кратко обсуждаю содержание каждого раздела, а также вещи, которые мне нравились и не нравились в каждом. Я заканчиваю дополнительным разделом, в котором обсуждаются вещи, которые, как я считаю, принесут пользу этому курсу Udemy,{.udemy-link} если они будут включены или выполнены по-другому.

Прежде чем перейти к отдельным разделам, я хотел бы отметить, что этот курс преподавался с использованием «устаревшего» Python 2.7, что, на мой взгляд, является небольшим недостатком в курсе. Сообществу Python осталось чуть больше года до полной потери поддержки со стороны команды разработчиков Core в отношении поддержки Python 2. По этой причине я считаю необходимым, чтобы производители контента Python на 100% приняли и использовали Python 3.

Коллекции со списками и кортежами

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

К сожалению, за реализацию списков и кортежей было выдвинуто обвинение, которое я обнаружил либо очень вводящим в заблуждение, либо совершенно неверным. В этом разделе Николас заявляет, что «списки содержат однородные типы данных, в то время как кортежи предназначены для содержания разнородных типов данных». Сначала я подумал, что это просто безобидная оплошность, которой все подвержены в жизни, но позже в этом разделе она была повторена и даже усилена в одной из завершающих викторин.

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

Вот пример списков и кортежей, содержащих одинаковые типы данных, которые представляют собой строки, представляющие буквы моего имени:

 >>> x = ['a','d', 'a', 'm'] 
 >>> y = ('a', 'd', 'a', 'm') 

А вот пример списков и кортежей, содержащих разные типы данных строки, представляющей мое имя, и целого числа, представляющего мой возраст:

 >>> x = ['Adam', 30] 
 >>> y = ('Adam', 30) 

Введение в ООП в Python

В этом разделе Николас объясняет очень важную особенность языка программирования Python, заключающуюся в том, что каждый отдельный элемент языка имеет форму объекта. Из этого вы можете сделать вывод, что язык полностью объектно-ориентированный. Николас продолжает демонстрировать и объяснять использование и полезность многих встроенных функций, которые позволяют программисту проверять такие объекты, как dir() , id() , help() а также другие.

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

Модульное тестирование

Больше всего меня впечатлил этот раздел курса. Я чувствую, что многие, если не большинство, курсы по программированию часто не обращают внимания на важность тестирования своего кода. Николас отлично описывает основы unittest и даже уделяет много времени объяснению того, как использовать разработку через тестирование и почему это важно.

Идиоматический Python - Просите прощения, а не разрешения

Это часть курса, где Николас начинает переходить к общепринятым соглашениям или идиомам сообщества программистов Python. Я не хочу украсть гром Николаса, заходя слишком далеко в объяснение материала, рассматриваемого здесь, потому что я считаю, что он отлично справляется, объясняя, что значит «просить прощения, а не разрешения» и чем это соглашение отличается в Python от на другие языки, например Java.

Должен знать программные конструкции Python

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

Учитывая вышесказанное об этом разделе, я хочу оставить свой обзор этого раздела с чем-то, что я нашел весьма положительным. Мне понравилось, что Николас объяснил, что означает на языке считаться правдивым / ложным - украсть термин из сообщества Javascript. Николас проделал большую работу, потратив время на описание полезности встроенной bool() для проверки логических эквивалентов часто используемых условных выражений для проверки таких значений, как пустые списки, пустые строки, None и другие.

Должен знать структуры данных Python

Здесь Николас вводит дополнительный тип данных коллекции, который известен как set следует сравнение наборов и списков. Во время этого объяснения он раскрывает понятие хэшируемости.

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

Подробнее об ООП в Python

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

Понятия структуры данных

Курс завершается разделом об одной из моих любимых функций Pythonic - понимания. Здесь Николас демонстрирует, как используются понимания и почему вы можете использовать их при работе со списками и словарями.

Темы, которые нужно добавить, которые принесут пользу курсу

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

A. Более идиоматические методы программирования на Python в порядке. Пример того, что я имею в виду, - это просто распаковка кортежей и списков в составные элементы. Я вижу, как это часто демонстрируется в сложных текстах, а также в блогах, и лично считаю, что это соответствует хорошо известной идиоме Python, что явное лучше, чем неявное.

Я думаю, что пример кодирования лучше продемонстрирует мои аргументы. Рассмотрим случай, когда у вас есть список кортежей, где каждый кортеж представляет длину и ширину прямоугольника, и вы хотите перебирать их, чтобы вычислить и отобразить площадь каждого из них. Я могу придумать два варианта, в которых я мог бы реализовать это: (i) один использует индексацию элементов кортежа, и (ii) другой использует распаковку кортежа в осмысленно названные переменные.

Использование индексации:

 >>> shapes = [(1,1), (2,2), (3,2)] 
 >>> for shape in shapes: 
 ... print "Area of shape %.2f" % (shape[0] * shape[1]) 
 ... 
 Area of shape 1.00 
 Area of shape 4.00 
 Area of shape 6.00 

Используя распаковку:

 >>> for width, height in shapes: 
 ... print "Area of shape %.2f" % (width * height) 
 ... 
 Area of shape 1.00 
 Area of shape 4.00 
 Area of shape 6.00 

Для меня второй пример, использующий распаковку, более читабелен и демонстрирует лучшую идиоматическую реализацию Python.

Б. Обсуждение встроенных функций Python, выполняющих операции с коллекциями, было бы отличным дополнением к этому курсу. Многие из встроенных функций были предоставлены, потому что они предоставляют решения общих проблем программирования, но имеют высокооптимизированные реализации, которые часто дают значительное повышение производительности. Некоторые из встроенных функций, о которых я думаю, стоит упомянуть, - это zip , filter и map .

Например, вы хотите отфильтровать список чисел и выбрать только четные. Я могу придумать два общих подхода, которые можно было бы использовать. Тот, который будет использовать цикл для перебора элементов вместе с условным выражением для проверки каждого числа, чтобы увидеть, четное оно или нет, и даже добавить число в отдельные списки, предназначенные для четных чисел. Скорее всего, это будет подход младшего разработчика, который менее знаком с языком. Второй - использовать встроенную filter() вместе с лямбда-функцией для проверки четных чисел.

В коде эти два подхода выглядели бы так:

Первый способ:

 >>> nums = [1, 2, 3, 4, 5, 6, 7, 8] 
 >>> even_nums = [] 
 >>> for num in nums: 
 ... if num % 2 == 0: 
 ... even_nums.append(num) 
 ... 
 >>> even_nums 
 [2, 4, 6, 8] 

Второй способ:

 >>> even_nums = filter(lambda num: num % 2 == 0, nums) 
 >>> even_nums 
 [2, 4, 6, 8] 

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

D. И последнее, но не менее важное: мне бы очень хотелось увидеть упоминание о различиях между Python 2 и 3. В частности, я чувствую, что было бы важно дать несколько указателей для миграции существующих систем с Python 2 на Python 3, что быстро становится приоритетной задачей для многих компаний и приводит к увеличению спроса на старших разработчиков Python.

Заключение

В этой статье я сделал все возможное, чтобы дать подробный и честный обзор курса Udemy, Master the Python Interview - получить старшую и хорошо оплачиваемую работу{.udemy-link} Николаса Джорджеса{.udemy-link} , на который в настоящее время зачислено около 2700 человек.

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

Как всегда, я благодарю вас за чтение и приветствую комментарии и критику ниже.

comments powered by Disqus