Создатель FastAPI Себастьян Рамирес: «Можно достичь многого даже без глубоких технических знаний»

Интервью с создателем FastAPI Себастьяном Рамиресом

Вступление

Предлагаем вашему вниманию интервью с Себастьяном Рамиресом (Sebastián Ramírez), энтузиастом open source, создателем FastAPI, Typer и SQLModel. Себастьян занимается построением программных продуктов, созданием решений для систем обработки данных и машинного обучения, ранее руководил командами разработчиков в разных странах мира.

Интервью

Evrone: Диапазон твоих навыков впечатляет: фронтенд и бэкенд-разработка, DevOps. Что ты думаешь о концепции full-stack разработки, которая так привлекает многие технологические компании? Должны ли большинство разработчиков стремиться к этой цели или у этого подхода есть недостатки?

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

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

 

Evrone: Все твои флагманские проекты — FastAPI, Typer и SQLModel — работают с новыми аннотациями типов Python. Последний релиз Python 3.10 сделал этот механизм ещё лучше благодаря синтаксису для объединения типов из PEP-604, который оперативно стал доступен для импорта из __future__ в более старых ветках. Что ты думаешь об этом новом синтаксисе, который можно использовать даже вместо типа Optional?

Себастьян: Мне это нравится! Python раз от раза становится всё лучше и лучше, всё удобнее в использовании, редакторы и инструменты присоединяются к поддержке этих новых фич, и для библиотек они полезны.

Фактически у меня есть готовый PR, в котором я переписал всю документацию FastAPI с использованием новых, более удобных способов объявления типов, одновременно объясняя и показывая, что нужно сделать в текущих и старых версиях Python. Я объединю и выпущу его после следующего релиза Pydantic, поддерживающего эти новые фичи.

 

Evrone: Ты недавно присоединился к компании Forethought. Расскажи немного о ней и о том, как тебе удается совмещать эту работу с консалтингом и вкладом в развитие open source?

Себастьян: Цель компании Forethought — преобразование клиентского опыта путем применения человеко-ориентированного ИИ для обслуживания клиентов. Если использовать более чёткие технические термины, — компания занимается сложным машинным обучением и распределенными системами, в особенности это касается обработки естественного языка. На этой базе создано несколько продуктов, которые улучшают клиентский опыт.

В Forethought мы используем несколько моих проектов с открытым исходным кодом, так что компания получает от них выгоду.  Одно из условий моей работы там заключается в том, что я трачу большой процент своего рабочего времени на эти open source проекты.
Кроме того, в Forethought согласились, что я работаю на них три дня в неделю, а остальные два дня могу выступать как внешний консультант других команд или просто больше заниматься open source разработками.

Такая гибкость и ориентация на открытый исходный код — вот что убедило меня присоединиться к Forethought. И команда, и продукты компании просто потрясающие!

Evrone: Твой проект FastAPI опирается на обширное исследование. Полный отчет об этом можно прочесть на сайте проекта. А как насчет твоего нового проекта SQLModel? Есть ли проекты,которые тебя вдохновляли в этом случае?

Себастьян: Да, я использовал несколько ORM и аналогичных библиотек для обработки данных. Я хотел объединить возможности SQL из SQLAlchemy с удобством и простотой Pydantic.

В своей основе SQLModel — это комбинация SQLAlchemy и Pydantic. Объем кода пакета на самом деле довольно мал. Основная часть работы заключалась в том, чтобы попробовать много разных вещей и найти лучший способ объединить оба продукта вместе, сохранив при этом совместимость с обоими, и повысить удобство для разработчиков.

Evrone: Каково это — сопровождать такой популярный проект с открытым исходным кодом? Что самое трудное для тебя как для автора и сопровождающего FastAPI?

Себастьян: Больше всего времени уходит на то, чтобы отвечать на вопросы на GitHub. Вот почему я так ценю помощь тех, кто также подсказывает людям ответы.

Evrone: Ты используешь веб-сервер uvicorn и веб-фреймворк Starlette. Они основаны на новом протоколе ASGI, который пока не принят в качестве PEP. Насколько стабилен современный стек ASGI по сравнению со старым, проверенным WSGI? С новыми асинхронными Django и ORM, которые уже не за горами, мы надеемся писать больше асинхронного кода, но безопасно ли это сейчас?

Себастьян: Это во многом зависит от того, что считать безопасным. Например, многие банки до сих пор имеют кодовые базы на COBOL, потому что не считают переход на что-то другое безопасным.

По данным официального опроса, FastAPI — третий по популярности веб-фреймворк у разработчиков Python. У разработчиков StackOverflow он также на третьем месте по популярности, сразу следом за React и Vue.js. Его используют многие компании. Мне кажется, это говорит о том, что на него можно положиться.

С другой стороны, хотя FastAPI и является асинхронным фреймворком, он также совместим с синхронным кодом. Если вы объявите не асинхронную, обычную функцию def, FastAPI поступит разумно и запустит ее в пуле потоков (благодаря Starlette). Таким образом, для использования FastAPI не обязательно переходить к полной асинхронности. С FastAPI вы можете даже полностью отказаться от использования async/await в своем коде.

В документации FastAPI есть много информации об async в посвящённом этому аспекту разделе. Там можно узнать об этом подробнее.

Evrone: Недавно FastAPI включили в последний рейтинг ThoughtWorks Technology Radar как одну из технологий, которые предприятиям следует опробовать. Это утверждение поддерживают 37 тысяч звезд на GitHub. Какие преимущества крупным компаниям  может дать использование FastAPI?

Себастьян: Я думаю, что для компаний и предприятий наиболее привлекательны:

 •    высокая скорость разработки, которая позволит быстрее получать ценность из кода;
 •    уменьшение количества ошибок, поскольку потребуется меньше кода и меньше дублирования, а также благодаря использованию аннотаций типов;
 •    соответствие стандартам, что очень помогает при взаимодействии с другими инструментами и системами.

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

Evrone: Во всех твоих проектах код покрыт тестами на 100%. Это твоё личное предпочтение или такое высокое тестовое покрытие дает какое-то реальное преимущество?

Себастьян: И то, и другое. 😅 Это личное пристрастие, но это также гарантирует, что весь код действительно выполняется во время тестов, и вероятность того, что всё протестировано правильно, повышается.

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

Evrone: В прошлом году ты рассказал в Твиттере забавную историю о том, что не смог устроиться на работу, требующую 4-летнего опыта работы с технологией, которую ты сам же и создал всего 1,5 года назад. Этот твит действительно отразил «болевую точку» отрасли и разошелся по всему интернету. Каково чувствовать себя «интернет-звездой» и «героем мемов»?

Себастьян: Это было очень прикольно. 😆 Сначала я решил не писать об этом в Твиттере, думал, что это не так уж смешно, но в последний момент сказал себе: «Да ладно, твитну, пусть это всего лишь немного забавно».

Потом пару дней я не мог пользоваться приложением Twitter на телефоне, потому что как только я его открывал, оно тут же падало из-за потока новых уведомлений.
В результате тысячи людей подписались на меня в Twitter и попросили добавить их в друзья в LinkedIn.

Тут есть некая ирония: я сделал несколько инструментов с открытым исходным кодом, и кажется, полезных, но главным моим свершением в Twitter оказался «умеренно забавный» твит. 😂

Evrone: FastAPI — один из самых быстрых фреймворков Python, о котором говорят: «Простота, как у Flask, батарейки, как у Django, производительность, как у Go». Разработчики любят проводить бенчмарки для разных вещей, но действительно ли важно иметь такую выдающуюся производительность, в то время как узкое место часто находится в коде доступа к базе данных или в коде бизнес-логики? Как консультант часто ли ты сталкиваешься с тем, что производительность фреймворка становится причиной «бутылочного горлышка»?

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

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

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

Evrone: Недавно компания Microsoft вывела автодополнение на новый уровень с помощью своей службы GitHub Copilot, основанной на искусственном интеллекте. Что ты думаешь об этом? Может ли это стать будущим разработки программного обеспечения или мы уже сейчас видим какие-то очевидные минусы?

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

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

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

Evrone: За последние годы ты неоднократно выступал на ИТ-конференциях, как оффлайн, так и онлайн. Чем для тебя новый онлайн-формат отличается от старых добрых очных встреч и вечеринок?

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

Evrone: RealPython — один из лучших ресурсов для изучения Python, и ты недавно запостил там статью. В чем его секрет? Почему их статьи так хороши и связано ли это как-то с тем, что документация твоего проекта также замечательная? Есть у тебя какие-то секреты для курсов «как писать на технические темы»?

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

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

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

Evrone: Если бы ты мог изменить одну вещь в FastAPI, не заботясь об обратной совместимости, что бы это было?

Себастьян: Хороший вопрос. На самом деле нет ничего такого, что мне сильно не нравится в FastAPI. 🎉

Когда у меня будут все (или большинство) фич и документация, которые я хочу для FastAPI, перед выпуском первой версии 1.0.0, я, вероятно, сделаю несколько небольших обновлений внутренних частей (которые, скорее всего, пользователи не будут применять). Если же их используют, это изменение может стать критическим, но это также поможет мне понять, какие внутренние составляющие нужно открыть и т.д. Будет в основном внутренняя чистка, ничего радикального.

Спасибо за приглашение! 🚀

Заключение

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

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