Интервью с Кеннетом Рейцем, автором pipenv и requests

Кеннет Рейц: «Правила не выбиты в граните, иногда их нужно нарушать»

Кеннет Рейц — известный разработчик и участник международных конференций. Кроме программирования, он занимается фотографией и музыкой. Многие знают его по его проектам с открытым исходным кодом: requests — простой, но элегантной библиотеке для работы с HTTP; и pipenv — инструменту для работы с пакетами и виртуальными окружениями. Мы воспользовались возможностью взять у него интервью. Кеннет поделился мыслями о главных сложностях с масштабированием приложений, применении парадигмы async/await в Python, рассказал о своём проекте PyTheory и природных способностях к программированию.

Интервью

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

Кеннет: Важнее всего — сделать мою жизнь проще. Любовь, отношения, дружба, стабильность и домашний уют.

 

Evrone: По твоему опыту в роли product owner’а в Heroku, какие главные трудности испытывают разработчики при масштабировании приложений на Python?

Кеннет: Если быть абсолютно честным, самая главная проблема в неверных представлениях инженеров о моделях многозадачности в разрезе дочерних процессов и потоков, горизонтальном и вертикальном масштабировании.

Кто-то думает, что больший объем памяти решит все проблемы производительности. Проблему масштабирования нельзя решить, если не учитывать производительности сети; идемпотентность, таймауты и возможность повторного выполнения асинхронных запросов; блокирующие системные вызовы вроде DNS-запросов. Таймаут должен быть у любой операции, всегда.

Чрезмерная оптимизация — тоже распространенная тенденция. Простое лучше сложного, помните? Железо обычно гораздо дешевле времени инженеров, и оно может существенно уменьшить нагрузку на команду разработки. Не оптимизируйте преждевременно.

Например, гринлеты (как в gevent) могут быстро решить больше проблем, чем мы думаем.

 

Evrone: Какие у тебя впечатления о переходе на Windows и VS Code после многих лет на Sublime и macOS? Как программисту, что тебе нравится в твоей новой среде и чего не хватает из старой?

Кеннет: Ничего особенно. Я использую обе среды, и они хорошо работают вместе. Я использую VS Code на обеих платформах. Мне нравится функция синхронизации, и WSL2 мне тоже нравится.

 

Evrone: Как автор pipenv, какие сложности в управлении зависимостями ты считаешь самыми значительными для Python?

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

Я счастлив, что pipenv достиг такого успеха. Разработка была сплошным удовольствием! Вот почему у него подарочная коробка на логотипе.

 

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

Кеннет: Да, конечно! Способность экстраполировать звуки и выразить их на настоящем инструменте — это уже абстрактный и сложный навык, а выражение эмоций на инструменте — тем более. Программирование не так уж от этого отличается, с определенной точки зрения.

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

 

Evrone: Иногда pipenv требуется много часов на разрешение графа зависимостей. С технической точки зрения, что происходит все это время?

Кеннет: Медленное соединение с Интернетом. Выполните `pipenv --verbose` и вы увидите, что происходит, или выполните `pipenv install --no-lock`, чтобы избежать этой трудоёмкой операции. Чтобы обеспечить стопроцентную воспроизводимость сборок на всех операционных системах, приходится скачивать пакеты (wheels) для всех операционных систем, а не только для вашей текущей, чтобы вычислить их контрольные суммы. Это может занять много времени.

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

API сервиса PyPI может и предоставляет хотя бы часть этой информации, но для приватных пакетов этот процесс производится вручную, а это важный сценарий использования pipenv.

Всё в этой жизни — компромисс. Нельзя одновременно съесть торт и сохранить его на потом. Торта может вообще не существовать, как в игре Portal.

 

Evrone: Как автор «Hitchhiker’s Guide to Python» («Автостопом по Python»), что ты думаешь об образовании разработчиков? Нужна ли нам «компьютерная наука» со всей математикой, алгоритмами и структурами данных, или нужно что-то другое?

Кеннет: Нам нужны инструменты для любителей, простые среды, в которых они смогут исследовать и творить. Нужно как можно меньше препятствий для входа. У меня вот в седьмом классе не было кредитной карты. А у вас? Яркий пример такой простой среды для начинающих: repl.it

 

Evrone: Исходя из твоих экспериментов с async в requests и async responder, что ты думаешь о парадигме async/await в Python? Какие сложности она создает и какие возможности обещает разработчикам?

Кеннет: Я думаю, async/await — отличные ключевые слова, и их нужно использовать осмысленно и сдержанно. Это не магическое заклинание для пробуждения сверхсилы в приложении. На самом деле они могут стать источником многих видов скрытой сложности и накладных расходов.

Я предпочитаю использовать эти ключевые слова только в изолированных компонентах кода или в микросервисах.

 

Evrone: Если бы ты мог вернуться в прошлое и дать более молодому себе совет о разработке твоего шедевра — requests, что бы ты посоветовал?

Кеннет: Следуй своей интуиции.

 

Evrone: Что ты думаешь об аннотациях типов и постепенной типизации, которые недавно появились в Python?

Кеннет: Они отлично подходят для слоёв кода, по которым проходят границы API, особенно если они интегрируются с инструментами автодополнения кода и прочим.

 

Evrone: Ты спроектировал множество программных API «с человеческим лицом». Что ты можешь посоветовать другим разработчикам?

Кеннет: Прочитать «The design of everyday things» («Дизайн привычных вещей») Дона Нормана.

 

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

Кеннет: Больше творческих исследований. PyTheory — теория музыки для людей. Там много простора для исследований. Я хотел бы задействовать numpy и scipy для исследования влияния математических соотношений интервалов и аккордов в разных музыкальных системах и темперациях на сенсорное восприятие, и, скажем, его связь с восприятием цветов и эмоций.

Я вложил в этот код очень много труда, хоть это пока и не очевидно из README.

 

Evrone: Что ты думаешь о модной нынче роли «full-stack разработчика» и Python в качестве языка для бэкенда?

Кеннет: Bash — прежде всего. Потом уже Python. Bash — восхитительный язык.

 

Evrone: Ты знаешь Python уже очень давно. Что ты можешь посоветовать людям, которые хотят податься в разработчики в 2020-м году?

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

Заключение

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

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