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

Интервью с Майклом Кеннеди, основателем подкаста Talk Python To Me

Вступление

Майкл Кеннеди (Michael Kennedy) — успешный предприниматель и разработчик программного обеспечения. Он основал и ведёт еженедельный подкаст Talk Python To Me, который посвящен Python’у и смежным темам разработки программного обеспечения. Он также основатель и основной автор Talk Python Training, онлайн-программы обучения языку Python. Мы воспользовались возможностью побеседовать с Майклом о его опыте программирования. Надеемся, вам будет интересно прочесть интервью.

Интервью

Evrone: Много лет мы в Evrone занимаемся разработкой ПО на заказ. Мы пытаемся организовать в России профессиональные сообщества разработчиков Ruby и Python. В России хорошо знают твои подкасты. Позволь поблагодарить тебя от имени российского сообщества Python за твою работу.

Первый вопрос: если бы Python’а не было, какой язык бы ты выбрал вместо него?

Майкл: Хороший вопрос. Python существует уже очень давно, более 30 лет, что само по себе удивительно. Я начинал программировать на C++ и до сих пор люблю языки в стиле C. Я уже думал о том, что бы выбрал, если бы Python не существовал. Скорее всего, это был бы один из языков в стиле С. Возможно, C# — он мне очень нравится. Я считаю, что это красивый язык. Мне нравится Swift, но его экосистема не так хороша, как сам язык. Его базовые библиотеки не кажутся мне удобными и чистыми. Я много работал с JavaScript, но не хочу заниматься этим больше, чем необходимо. Не то чтобы я JavaScript ненавижу, я его просто недолюбливаю. Так что мой выбор — C#. Особенно сейчас, когда он стал кроссплатформенным. Но пока это возможно, я буду придерживаться Python. Не думаю, что он куда-то исчезнет.

Evrone: Да, Python сейчас поглощает мир программного обеспечения.

Майкл: Так и есть, особенно в области data science.

Evrone: Как ты считаешь, появятся ли в ближайшем будущем методы программирования, которые не будут требовать, чтобы программист знал синтаксис конкретного языка и писал код с применением этого синтаксиса?

Майкл: Примерно раз в 10 лет начинаются разговоры: «Нам больше не нужны программисты. Больше не нужно будет работать в текстовых редакторах». Иногда такой настрой появляется из-за No-Code решений для «программирования мышкой». Иногда из-за аутсорсинга. В США были серьёзные опасения, что многие задания будут переданы на аутсорсинг в Индию, например. Я не считаю это проблемой. По всему миру сейчас больше работы для программистов, чем когда-либо. Не думаю, что в этой области произойдет большая революция. Есть инструменты гораздо лучше тех, которые позволяют создавать low-code или no-code решения. На мой взгляд, самое интересное сейчас — это искусственный интеллект.

Ты наверняка видел GitHub Copilot, который использует Codex в качестве базового ML-движка и позволяет написать какое-то количество документирующих комментариев, а затем сказать «сделай из этого программу». Он обращается ко всему исходному коду на GitHub и переводит английские фразы в код. Я не считаю, что это готовое решение проблемы, но оно показывает, что машинное обучение развивается очень быстро. Есть вероятность, что через 10-20 лет можно будет попросить редактор с искусственным интеллектом написать программу, и он действительно это сделает. Но это не значит, что программистов не будет. Кому-то всё равно придется проверять написанное. Кто-то должен будет поддерживать и развивать его. И я не уверен, будет ли искусственный интеллект хорош настолько, что вам достаточно будет сказать: «Я бы хотел добавить эту функцию. Пожалуйста, перепиши мою программу». Скорее всего, нет. Но я действительно думаю, что все эти штуки с применением ИИ на базе GPT-3 окажут гораздо более интересное влияние на будущее, чем, например, процесс разработки в стиле drag and drop, когда не нужно писать код.

Evrone: Да, технологии нас не вытеснят, мы же люди, нам нравится общаться, мы для этого и созданы. В твоём репозитории есть скрипт для скрепинга подкаста Python, который позволяет каждому копировать все аудиозаписи. Как ты относишься к тому, что твою работу копируют?

Майкл: Да, скачать его может любой желающий. Там примерно пять гигабайт. На скачивание потребуется некоторое время, но это не очень долго. Я действительно много думал об этом. Это надо рассматривать с точки зрения исходного кода и проекта, которые вы размещаете на GitHub, и созданного вами контента, который можно разместить в подкасте или на YouTube. Тут я снова возвращаюсь к размышлениям, в чём же моя настоящая работа? Чего я на самом деле пытаюсь достичь? С помощью подкаста я пытаюсь донести месседж до как можно большего числа людей. Я хочу поделиться подробностями Flask 2.0 или того, как Python используется в астрономии, или какой-то другой информацией. Я хочу донести это до как можно большего количества  людей в разных странах. Поэтому мой подкаст бесплатный. Иногда он поддерживается рекламой, но его можно бесплатно распространять без всяких ограничений. Я призываю всех скачивать и распространять его. Это меня устраивает, потому что у меня также есть курсы по Python. Некоторые из них тоже бесплатные, но за большую часть нужно платить. И это справедливо, верно? Я хочу сделать что-то, что доступно и бесплатно для всего мира, действительно стараюсь поддержать сообщество и поощряю это, но также создаю то, о чём люди захотят узнать побольше, получить для себя что-то большее, и будут платить за это. Они могут и сами так поступать.

Evrone: Спасибо. Здорово, что ты пытаешься помочь разработчикам. Apple — одна из компаний, которая тоже пытается помочь разработчикам. Она произвела революцию мирового масштаба своим новым чипом M1. Чип с системой Apple Neural Engine предлагают использовать разработчикам. Была ли у тебя возможность опробовать его? Что ты думаешь о нём?

Майкл: Я в восторге от Apple Silicon и M1. А то, что чип поставляется с Neural Engine, по-моему, откроет множество очень интересных возможностей. Мы привыкли думать, что для графических процессоров и машинного обучения требуется очень большое, дорогое оборудование, огромные шумные машины.

Но если мы сможем использовать ML на M1 или в телефонах, это позволит выполнять действительно интересные вещи, особенно граничные вычисления. Искусственный интеллект, голосовые ассистенты и тому подобное, подключаемые локально. Я считаю, что это очень позитивный шаг. Здорово, что можно многое сделать с помощью машинного обучения в Python и воспользоваться этими преимуществами. Надо сказать, что я использовал ML только как пользователь, а не как разработчик. У меня есть одно из моих любимых приложений для редактирования всевозможных картинок — Pixelmator Pro. Оно выполняет основную часть своей работы, основываясь на ML. Например, чтобы изменить размер изображения, не требуется применять математические формулы, можно использовать для этого ML-движок и лежащие в его основе нейронные технологии. Мне это очень нравится.

Evrone: Да, наверняка появятся приложения вроде Photoshop или Affinity Design, которые будут обрабатывать изображение, звук и подобные данные с помощью этого движка.
Разработчикам интересны не только истории успеха, но и не совсем успешные истории. Расскажи о каком-нибудь случае, когда в твоей работе что-то пошло не так, и как ты с этим справился?

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

Вывод, который я вынес из этого —  дело не ограничивается разработкой программного обеспечения. Речь идёт о том, как донести информацию до мира. Очень легко мечтать о создании чего-то лучшего. Скажем, мы могли бы сделать намного лучше то, что делает Instagram. Или если бы мы применили идею Airbnb к грузовикам, было бы потрясающе! Большинство из нас могли бы создать такое программное обеспечение. Но пока никто о нём не знает, никто и не придет, чтобы испытать его. Это очень сложно.

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

Evrone: Да, написать программу — это ещё не всё. Не менее важно рассказать об этом тем, кто в ней нуждается. Программам нужны пользователи.

Многие начинающие разработчики используют такие продвинутые инструменты, как среда разработки Jetbrains PyCharm или код Visual Studio с расширением Microsoft Python. Скажи, как начинающим разработчикам избежать превращения программирования из удовольствия в разочарование из-за постоянных предупреждений о неверном коде со стороны среды разработки?

Майкл: Это действительно проблема. Новички сталкиваются со множеством трудностей, и я думаю, что некоторые из них связаны с выбором задачи с неподходящим уровнем сложности. Если выбрать слишком простую задачу, она покажется скучной. Если взять слишком сложную задачу (даже если сначала она кажется выполнимой) это приведёт к разочарованию. Поэтому нужно найти правильный уровень, и я думаю, это поможет, потому что новичку не придётся работать со слишком сложным для него кодом. Это, конечно, очень расплывчатый критерий. Постараюсь дать более полезный совет: когда вы видите предупреждение, не стоит говорить: «Программа всё ещё работает, поэтому я проигнорирую его». Нужно найти минутку и выяснить, что оно означает и чему может вас научить. Например, довольно часто PyCharm предупреждает, что локальная переменная затеняет глобальную. В этом случае нужно просто выбрать для локальной переменной другое имя, чтобы не было путаницы в коде.

Нужно немного притормозить. Разобраться, что к чему, и не просто искать ответ, а стараться  использовать работу над предупреждениями как обучение. Аналогично, не стоит тянуть с применением линтеров к своей программе по полгода. Иначе будет куча проблем, о которых вы даже не подозревали. Если обратить на них внимание с самого начала и разбираться с одной-двумя в день, то всё будет в порядке. Но за шесть месяцев их накопится тысяча, и придётся останавливаться на целую неделю, чтобы их устранить. Это непродуктивно. Вы станете лучше как программист и избежите предупреждений, если вовремя потратите время на то, чтобы понять, о чём вас предупреждают. Исправьте код и двигайтесь дальше. Выгода в том, что при работе с PyCharm и в некоторой степени с VSCode, вы не только узнаете о наличии проблем, иногда редактор предлагает вариант исправления.

Evrone: Поговорим о вдохновении. Поиск интересных и нестандартных решений — вот за что мы, разработчики, любим программирование. Что ты посоветуешь разработчикам? Как найти в себе силы преодолеть рутину и отыскать интерес, вдохновение и радость в разработке программного обеспечения?

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

Например, каждый день вы получаете файл CSV, загруженный через FTP или что-то в этом роде, а затем скачиваете его, запускаете на нём скрипт, и он загружается на FTP-сервер. Затем он попадает в базу данных, и кто-то делает по нему отчет. А ведь вы можете научиться писать демон, который следит за каталогом в поисках загруженного файла, а затем проделывает все операции с ним  автоматически. Подумайте о том, как автоматизировать «скучные вещи».

Если вы сумеете полностью или большей частью автоматизировать выполнение скучной задачи, то каждый раз, когда она запускается, можете улыбнуться и сказать: «Ага, раньше это было неинтересно, но посмотрите-ка на это сейчас». Решение таких проблем также поможет вам расти как разработчику. Вы уже знали, как загрузить CSV и сохранить его в Postgres или что-то подобное. Но вы не знали, как создать системный демон на Linux, который непрерывно работает на Python. Было бы здорово научиться этому. Итак, у вас есть новая блестящая штуковина, с которой вы можете поиграть. К тому же вы навсегда избавитесь от ручного выполнения задачи.

Evrone: Да, это верно. Часто ли тебе как разработчику приходится выбирать, на каком именно сервисе или бессерверной платформе будет работать твоё приложение? И отражается ли выбор на коде?

Майкл: Мне нечасто приходится об этом задумываться. Да, выбор до некоторой степени отражается на коде. Вот что я думаю по поводу облачных платформ. Есть компромисс, на который придётся пойти, если полностью перейти на cloud-native приложения, специально созданные для облака. Вы будете создавать удивительные приложения, использующие каждый отдельный сервис. Знаете, если использовать размещенную базу данных,  размещённые службы электронной почты и формирования очереди, просто последовательно использовать все эти службы, можно создавать действительно интересные приложения, но с двумя ограничениями.

Во-первых, они навсегда привязаны к конкретному облаку. Если приложение построено на базе API и сервисов Amazon, чтобы перейти, например, на Azure или Linode, потребуется почти полная переработка. Следует это учесть, если есть вероятность перехода. Второй недостаток — невозможно работать, если у тебя плохая связь с интернетом или её вообще нет. Если вы летите в самолёте, например, или находитесь на удалёнке из-за ковида и хотите поработать над приложением на скамейке в парке, потому что вы больше не можете сидеть дома, увы, ничего не выйдет. Поэтому я поступаю так: запускаю наши сервисы на виртуальных машинах Linux. 

Они могут работать в Digital Ocean, на Linode, в AWS. Кроме того, я использую пару уникальных сервисов. Например, у меня есть облачный сервис для расшифровки аудио. Он полностью интегрирован с этими API. Но это не влияет на то, где работает остальная часть моего приложения. У меня ещё есть сервис, чтобы распространять видео по всему миру, и я интегрируюсь с этим сервисом. Но это еще не всё о моих приложениях и инфраструктуре.

Итак, вот моя точка зрения. Я предпочитаю иметь приложения, которые можно перенести в другое облако. Меня это устраивает. Может быть, если создавать приложения на AWS Lambda или Azure functions, жизнь была бы проще, но я сомневаюсь в этом. Многие считают, что можно действовать так же, как крупные компании с их невероятным размахом. Есть очень хорошая статья под названием «Вы не Google». Вы не Facebook; вы не LinkedIn. В статье говорится о том, что всё, что эти компании делают в области облачных вычислений и тому подобном, они делают потому, что имеют сотни миллионов пользователей и нулевое время простоя. У вас может быть две тысячи пользователей, и вы можете позволить себе пять секунд простоя раз в месяц. На первый взгляд это небольшая разница, но она очень влияет на сложность того, что вам нужно построить.

Evrone: Многие считают, что Python медленный. Сталкивался ли ты с недостаточной производительностью? Применял ли какие-нибудь настройки для его ускорения?

Майкл: Да, сталкивался, но для меня это не проблема. Я не занимаюсь data science или крупномасштабными математическими вычислениями. Я создаю API, веб-приложения, всё в таком роде, немного автоматизации. Python замечательно подходит для таких ситуаций. Он хорошо взаимодействует с другими системами: с сетью, БД, сторонними API, например, Stripe, почтовых сервисов и так далее. В этой сфере он довольно быстрый. Я бы сказал, что среднее время передачи данных между сетями составляет около 30 миллисекунд. Никто не способен ощутить разницу между 30 и 20 миллисекундами. Можно, конечно, сказать, что потребовалось бы меньше серверов, если бы уменьшить объём вычислений, но на самом деле большая часть времени приходится на ожидание отклика баз данных и тому подобное, так что сильно ускорится не получится. С data science интереснее. Если всё писать на чистом Python, я согласен, это будет работать довольно медленно. Но основная часть того, что происходит на стороне data science, это: «Я собираюсь поставить эту библиотеку. Я собираюсь поставить Tensorflow...» Это на самом деле очень тонкие оболочки вокруг C-кода, а C-код очень-очень быстрый, поэтому можно получить данные на C, а затем просто поработать с ними на Python. В таком случае тоже получится быстро. 

Так что вопрос со скоростью Python неоднозначный. Я признаю, что инструменты вроде Numba или Cython могут быть полезны. Я пару раз использовал Cython. Я слышал о применении Django views в Cython, это показалось мне бредовой идеей. Но в этих представлениях делалось много вычислений, а на Cython это происходило быстрее. Это техническая сторона вопроса. И еще одно соображение, а что именно вы пытаетесь сделать быстрее? Если я могу написать программу на C++, которая выдаст мне результат за 10 секунд, и могу написать такую же программу на Python, которая даст ответ за пять минут, понятно, что C++ быстрее. Но если на написание кода на C++ у меня уйдет неделя, а на написание кода на Python — полдня, то я сэкономил кучу времени. Поэтому я считаю, всё дело в том, что именно нужно оптимизировать. Скорость разработчика, скорость продукта или скорость вычислений? Бывают случаи, когда применять C++ или, например, Go — идеальное решение, но это случается не так уж часто.

Evrone: Есть ли в Python какие-то специфические вещи, которые тебе кажутся  странными или даже ужасными? Что бы ты хотел улучшить в Python’е?

Майкл: Меня вполне устраивает Python. У меня нет к нему серьёзных претензий. Но я назову пару вещей, которые я считаю очень важными, и одну–две, которые кажутся просто странными.

Оператор else мне кажется бессмысленным. Все другие языки могут выполнять цикл без else, обрабатывать исключения без else. Он нечасто используется.

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

Кроме того, я бы хотел, чтобы нажатием кнопки в PyCharm или VScode или с помощью командной строки легко получить исполняемый файл, который можно кому-то передать. Чтобы ему не нужно было устанавливать библиотеки, а просто взять файл и запустить. Я знаю, что есть Pyinstaller и Py2exe, но эти вещи очень хрупкие и не очень простые в использовании. И если бы мы могли  в PyCharm или VScode так же легко, как "run", просто нажать "build" и получить готовый продукт, это было бы здорово. Наряду с этим я бы хотел получить поддержку пользовательских интерфейсов как для настольных, так и для мобильных приложений. Я думаю, что если улучшить по-настоящему эти две вещи — дистрибутив и пользовательский интерфейс, —  Python стал бы суперпопулярным. Он и без них очень популярен, но на нём нельзя создавать мобильные приложения. А если бы можно было, вот было бы круто! Так что я очень бы хотел, чтобы такое произошло.

Evrone: Большое спасибо, Майкл! Приятно было с тобой побеседовать. Я надеюсь, что мы встретимся лично на какой-нибудь оффлайн-конференции. Спасибо и всего хорошего!

Заключение

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

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

 

Мы всегда выбираем новомодную библиотеку, новёхонький инструмент, который можем использовать для решения проблемы. Но часто нужно не это. Нужно просто решить задачу. Один из путей преодолеть сложности или избавиться от скучных, повторяющиеся действий, — использовать свои творческие способности и навыки программирования, чтобы решить проблему раз и навсегда
Майкл Кеннеди
Основатель и ведущий подкаста Talk Python to Me
Связаться с нами
Нужна команда?
Давайте обсудим ваш проект
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.