«Python хорош для быстрого решения проблем в 2020 году, как и 15 лет назад»
Армин Ронахер (Armin Ronacher) — плодовитый разработчик, который существенно повлиял на развитие экосистемы программного обеспечения Python, создав такие популярные проекты, как Flask и Jinja2. В последние 10 лет он работал над различными программами с открытым исходным кодом и над коммерческими проектами. Мы воспользовались возможностью поговорить с ним о его жизни и карьере. Армин рассказал нам о своей работе в Sentry, поделился мыслями об обработке ошибок на бэкенде, о различиях между Rust и Python, о gradual typing и рассказал, как ему удаётся достичь баланса между работой и личной жизнью.
Интервью
Evrone: Твоя должность — «Director of Engineering». Как выглядит твоя повседневная работа в Sentry?
Армин: Моё рабочее время обычно делится на две части. Я работаю с 9 до 15–16, когда нужно забирать детей из детского сада. Затем вечером я общаюсь онлайн с людьми из разных часовых поясов. Такое двухсекционное расписание меня устраивает, ведь я могу проводить время с детьми, пока на улице светло. Что касается моих обязанностей, главное для меня — сделать так, чтобы все люди, которые работают со мной, занимались тем, что значимо для дела. Это особенно важно потому, что Sentry — это компания с офисами в разных частях света. Я участвую в найме новых разработчиков, решаю проблемы сотрудников, помогаю с архитектурой, формирую или объясняю видение продукта для проектов компании и, наконец, помогаю в решении нестандартных проблем разработки. Такая вот смесь.
Evrone: Популярный подход
Армин: Сначала определим, что такое full stack в сложном проекте? Конечно, для тривиального приложения стек на деле состоит только из
Evrone: Недавняя реструктуризация Mozilla ударила по многим разработчикам языка Rust. Как ты думаешь, это повлияет на развитие языка?
Армин: Лично меня огорчает происходящее в Mozilla. Как и Mozilla, мы — проект с открытым исходным кодом, превратившийся в коммерческое предприятие. Наши пути несколько раз пересекались. Иногда мы используем технологии Mozilla, как и она использует наши. Наверняка изменения в Mozilla окажут влияние на язык Rust в целом, но я не думаю, что
Еvrone: Как думаешь, почему создание и поддержка пакетов в Python — такое сложное дело?
Армин: Непросто дать однозначный ответ, но я считаю, что причина сводится к техническим трудностям и отсутствию целостного подхода. Например, сообщество Rust посчитало важным создание инструментов управления зависимостями, и проект Cargo вошёл в состав языка. В мире Python наоборот, инфраструктура управлениями пакетами (pip, setuptools, virtualenv) в основном разрабатывается независимо от языка. Технически Python имеет много недостатков, которые затрудняют его использование. Например, вы можете загружать только одну версию библиотеки для проекта, так что с зависимостями не разгуляешься.
Evrone: Если сравнить Python, Rust, TypeScript и другие языки, с которыми ты работаешь: какая стратегия обработки ошибок в
Армин: Так как я работаю в компании, специализирующейся на отчётах о сбоях, на меня валится куча ошибок бэка:) Урок, который я извлёк из этого — проектировать типы ошибок надо не менее тщательно, чем другие возвращаемые значения. Контекстной информации об ошибках всегда не хватает. Слишком часто разработчики просто оборачивают сообщение об ошибке в исключение, и не задумываются, как другие люди будут обрабатывать эту ошибку. Пренебрежение типизацией ошибок — источник постоянных проблем. Я помню, как код обработки некой базы данных проверял наличие определённого типа ошибки подключения, сопоставляя сообщение с шаблонами на нескольких языках (немецким, французским
Evrone: Случается ли, что при работе с Rust тебе недостает
Армин: Несомненно. Python — очень зрелый, взрослый язык, в нём есть много такого, чего не найдёшь в других языках. Прочим экосистемам понадобится немало времени, чтобы приобрести такие богатые возможности, какие накопил Python. Одна из первых вещей, которые я заметил, когда писал в основном на Rust, — то, что его экосистема быстро адаптировалась к реалиям 2020 года, но не к старым технологиям. Как только мне пришлось столкнуться с XML вместо JSON, я обнаружил, что поддержка XML в Rust довольно слабая. Ещё один момент: поскольку Python сам по себе довольно медленный язык, отладочные опции в коде не сильно влияют на производительность. Отладочный код можно оставить даже на рабочей системе. Писать так же на Rust — значит отказаться от его основного преимущества — скорости.
Evrone: Как, по-твоему, лучше всего оценивать квалификацию разработчиков программного обеспечения?
Армин: Трудный для меня вопрос. По моим ощущениям, единственно правильного способа нанимать или оценивать кандидатов не существует, многое зависит от того, насколько хорошо вы понимаете людей в целом. Есть сообщество, участники которого только и делают, что отшлифовывают вопросы собеседований в компаниях FAANG, и это, несомненно,
Evrone: Считаешь ли ты, что Python —
Армин: Я вроде бы не считал, что Python
Если бы пришлось обучать
Evrone: Имея в активе много языков программирования, какую операционную систему и IDE ты предпочитаешь?
Армин: Компьютеры ужасны. Я одновременно люблю и ненавижу macOS. Всё ещё сижу на ней и каждый раз, когда пытаюсь перейти на
Evrone: Новый асинхронный синтаксис и подход async/await недавно завезли в Python, Rust, TypeScript — во все языки, с которыми ты работаешь. Что думаешь о таком подходе к многозадачности в нашем коде?
Армин: Пребываю в сомнениях. Я думаю, что при правильном использовании у него много преимуществ, но он излишне прячет проблемы многозадачности. Подход с async/await к тому же плох отсутствием явного наблюдения и управления использованием ресурсов, поэтому гораздо проще превысить лимит доступных ресурсов. Это то, чем традиционный многопоточный код из коробки (который в основном использует пулы потоков) не страдает. Также важно понимать, что, хотя во многих языках есть async/await, подходы в них разные. Трудно найти более несхожие вещи, чем дизайн async/await в Rust и JavaScript.
Evrone: Python, похоже, завоевывает мир. Есть ли у него реальные конкуренты среди языков общего назначения?
Армин: Python, похоже, захватывает планету благодаря data science. Думаю, что теряя популярность в мире
Evrone: Ты получил большой опыт, работая с Flask и открытым исходным кодом, в Sentry опыт еще углубился, ты владеешь многими языками программирования. Как эксперт, что ты думаешь о будущем Python?
Армин: Думаю, что он будет всё больше специализироваться на одних экосистемах и полностью уйдёт из других. Это до некоторой степени согласуется с тем, что происходило в прошлом. Например, авторы отказались от попыток сделать Python популярным встраиваемым языком (для скриптов внутри игр и приложений) или языком для мобильной разработки. Также Python не годится для десктопных приложений, особенно если вы хотите распространять их через магазины вроде AppStore. Однако он становится популярнее в serverless и data science приложениях, а также в управлении конфигурациями. Я отметил, что мой шаблонизатор всё чаще используется не в
Evrone: Что ты думаешь о новом подходе «gradual typing», представленном в Python, JavaScript (через TypeScript), Ruby, PHP и других динамических языках?
Армин: Думаю, что это здорово. Мне очень нравится TypeScript, и я считаю, что этот проект стоит копировать и для других языков.
Evrone: Как одновременно руководить разработкой ПО, быть отцом троих детей, сбалансировать работу с личной жизнью и избежать выгорания?
Армин: На момент интервью детей пока что двое, хотя через несколько дней… (
Лично для меня подходит режим работы в два приема с перерывом между ними. Это удобно, поскольку мы живем в Вене, а головной офис находится в
Как только я определяю ситуацию, которая меня огорчает или выводит из себя, я больше не пытаюсь её предотвратить или избежать. Вместо этого я стараюсь заранее понять, что именно вызывает у меня такую эмоциональную реакцию. Не всегда срабатывает, но в целом мне очень помогает. Например, я не дергаюсь так
Заключение
Нам было интересно побеседовать с Армином и больше узнать о его подходе к жизни и работе. В Evrone мы часто используем фреймворк Flask, разрабатывая индивидуальные решения для наших заказчиков. Если у вас есть крутые идеи и вы любите Python так же, как любим его мы, просто свяжитесь с нами, и мы вместе создадим ваш новый продукт.