alekfed

a

Python

Общий опыт: 6 лет

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

Web-фреймворки

Из всего многообразия Python web-фреймворков мне довелось поработать с тремя:

ORM и базы данных

В Python я обычно работаю с базами данных через ORM SQLAlchemy и Django , хотя порой хватает и SQLAlchemy Core. Голые SQL-запросы, безусловно, незаменимы при оптимизации производительности в условиях растущих нагрузок на сервис, однако, если сервис действительно испытывает такого рода проблемы, возможно, пришло время пересмотреть выбор Python как языка для его реализации?..

До выхода SQLAlchemy 1.4 , в которую была официально добавлена поддержка asyncio через asyncpg и aiomysql, также было интересно поэкспериментировать с DB-библиотеками, дружащими с asyncio, вроде Tortoise , GINO или databases . В настоящий момент, они несколько утратили актуальность.

GraphQL

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

Несмотря на очевидное доминирование JavaScript в этой области, в экосистеме Python также нашлись неплохие библиотеки:

Самая большая проблема со всеми этими библиотеками — отсутствие механизма кэширования запросов к БД с последующим автоматическим формированием batch-запроса ( DataLoader ). В некотором виде эта идея реализована и для Ariadne, и для Graphene (для Raspberry недавно вроде даже появилось полноценное решение ), но спрягать всё это дело с запросами к базам всё ещё не очень приятно, особенно в условиях постоянно меняющихся GraphQL-схем.

Качество кода

Я стараюсь всё время пользоваться типизацией и контролировать типы статическими анализаторами вроде mypy и Pyright (кстати, последний очень даже неплох и как LSP сервер — попроворнее palantir’овского точно).

Из линтеров я в основном использую flake8 , на pylint в какой-то момент забил. Black и yapf особо не находили поддержки в прошлых коллективах, так что привычки к ним нет.

Ну и поскольку, на мой взгляд, тесты являются обязательным элементом CI, pytest мой бро!😄 (кстати, qutebrowser от того же типа тоже 🔥)

(Data) Science & Machine Learning

Богатая научными библиотеками экосистема Python пришлась очень кстати при проведении исследовательской работы в аспирантуре. Для анализа характеристик устройств, которые я разрабатывал, я зачастую использовал pandas (впоследствии также выяснилось, что pandas неплохо стыкуется и с Keras, который я использовал экспериментов с системами управления БПЛА).

Поскольку по основному образованию я являюсь разработчиком систем автоматического управления, естественно, первое время я разрабатывал системы управления в Matlab. Однако, заметив как неплохо всё получается с pandas, я решил перевести и расчёт систем управления на Python. Библиотека python-control вполне покрывала мои нужды.

В дальнейшем, работая над системами управления БПЛА, у меня была идея сделать адаптивный контроллер на основе машинного обучения с подкреплением, так что я связался с Keras . К сожалению, нейросети оказались неподходящей технологией для такой задачи (подробнее в разделе по САУ ).

Другая работа в области ML проводилась при работе над e-commerce платформой. На этот раз было решено использовать Pytorch , поскольку он хоть и весит гиг, но torchvision хорошо ложился на возникшую задачу, да и наличие нужных предтренированных моделей явно было плюсом. Результат получился положительным, но в какой-то момент проект заморозили.


Иллюстрация

Чтож, я не ожидал испанской инквизиции!

На создание этой иллюстрации у меня ушло больше времени, чем на всё остальное! (не вместе взятое) Изначально, я хотел сделать некий коллаж в духе аппликативных анимаций Терри Гильяма с отсылками к бесподобным «Священному Граалю» и «Житию Брайана» и той куче библиотек, что мне довелось использовать:

Python version 1

Python version 1

Но мне не понравился результат. Точнее то, как он смотрелся в общем контексте. В итоге, я решил, что нужно нечто совершенно иное !😅



email icon telegram icon github icon