Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Почему в 2021 году на python можно писать хорошие backend'ы

Почему в 2021 году на python можно писать хорошие backend'ы

Denis Anikin

July 02, 2021
Tweet

More Decks by Denis Anikin

Other Decks in Programming

Transcript

  1. Или «python — хороший язык» Или «на python зря ругаются»

    Почему в 2021 году на python можно писать хорошие backend'ы
  2. Я — Аникин Денис 2 Вдруг кому-то важно кто делает

    доклад — team lead в команде Chat, Raiffeisenbank — cl в Python Community — fullstack: разрабатываю на python и typescript — занимаюсь devops — мой сайт: https://xfenix.ru/
  3. Причины возникновения доклада 4 шутка Спасибо коллеге, Даниилу J 1

    языковой шовинизм Python очень часто подвергается бесчисленному количеству нападок 2
  4. Причины возникновения доклада 5 шутка Спасибо коллеге, Даниилу J 1

    языковой шовинизм Python очень часто подвергается бесчисленному количеству нападок 2 странный имидж Python часто «определяют» как язык чуть ли не для отсталых 3
  5. Цели, которые я хочу достичь этой презентацией 7 Воодушевить людей

    не бояться и не стесняться языка Предложить позиционирование python с моей точки зрения
  6. Цели, которые я хочу достичь этой презентацией 8 Донести свою

    позицию Воодушевить людей не бояться и не стесняться языка Предложить позиционирование python с моей точки зрения
  7. Цели, которые я хочу достичь этой презентацией 9 Донести свою

    позицию Разобрать и разнести мифы Воодушевить людей не бояться и не стесняться языка Предложить позиционирование python с моей точки зрения
  8. Цели, которые я хочу достичь этой презентацией 10 Донести свою

    позицию Разобрать и разнести мифы Ответить на претензии Воодушевить людей не бояться и не стесняться языка Предложить позиционирование python с моей точки зрения
  9. Цели, которые я хочу достичь этой презентацией 11 Донести свою

    позицию Разобрать и разнести мифы Ответить на претензии Описать более-менее объективно как обстоят дела Воодушевить людей не бояться и не стесняться языка Предложить позиционирование python с моей точки зрения
  10. 12

  11. Динамическая типизация План презентации 13 Пунктов будет больше, поэтому я

    выписал лишь ключевые 1 Язык для быстрых прототипов 5 Почему не взять нормальный язык со статической типизацией? 2 Безопасность языка 6 Скорость 3 Популярность 7 Язык для новичков 4 Будущее 8
  12. Динамическая типизация — это зло? 17 Языки с динамической типизацией

    существуют не как шутка, у их появления была причина. На этих языках разработка чаще всего: Быстрее Проще Приятнее
  13. А минусы есть? 18 — Мы пишем больше тестов —

    В рантайме могут появляться ошибки
  14. Статическая типизация побеждает? 19 — https://danluu.com/empirical-pl/ — Есть масса исследований,

    которые говорят о преимуществах статической типизации, однако мета-исследование выше ловит многие известные исследования на ошибках и неубедительности Не совсем
  15. А что считает Uncle Bob? 21 https://twitter.com/unclebobmartin/status/1135894370165710848 Его мнение: полностью

    корректная и обоснованная иерархия типов в вашем проекте не гарантирует поведенческую корректность. Коротко — статическая типизация не отменяет тесты на бизнес-логику
  16. Динамическая типизация 22 — Пишем много тестов — Есть потенциал

    на ошибки в рантайме — Пишем быстро — Пишем надежно — С помощью пирамиды тестирования покрываем большую часть потенциальных ошибок — Пишем приятно J
  17. Подробно об аннотациях 24 ✅ значительно улучшить статические проверки вашего

    кода MyPy, typing и аннотации типов. С помощью этого всего можно:
  18. Подробно об аннотациях 25 ✅ значительно улучшить статические проверки вашего

    кода ✅ уберечься от массы ошибок MyPy, typing и аннотации типов. С помощью этого всего можно:
  19. Подробно об аннотациях 26 ✅ значительно улучшить статические проверки вашего

    кода ✅ уберечься от массы ошибок ✅ получить экстра функциональность языка: константы, прототипы, final классы и методы MyPy, typing и аннотации типов. С помощью этого всего можно:
  20. Подробно об аннотациях 27 ✅ значительно улучшить статические проверки вашего

    кода ✅ уберечься от массы ошибок ✅ получить экстра функциональность языка: константы, прототипы, final классы и методы ✅ на базе этого построены современные фреймворки: pydantic, fastapi MyPy, typing и аннотации типов. С помощью этого всего можно:
  21. Подробно об аннотациях 28 ✅ значительно улучшить статические проверки вашего

    кода ✅ уберечься от массы ошибок ✅ получить экстра функциональность языка: константы, прототипы, final классы и методы ✅ на базе этого построены современные фреймворки: pydantic, fastapi ✅ работает и статически и динамически (wow!) MyPy, typing и аннотации типов. С помощью этого всего можно:
  22. Все путают, а вы теперь не будете 29 Типизация и

    аннотации типов — разные вещи! https://docs.python.org/3/reference/datamodel.html в питоне есть своя система типов и она описана в официальной документации
  23. Итоги по динамической типизации 32 Динамическая типизация — это не

    минус! И даже напротив: — быстрая разработка — дополнительная надежность: статический анализ, аннотации типов, статический анализ аннотаций, интроспекция аннотаций в рантайме — как минимум, не уступает статической
  24. Что не так с python: а чего бы не взять

    язык со статической типизацией то?
  25. 34

  26. Это самый главный вопрос про аннотации 35 — вы чего-то

    питон в какой-то неправильный язык превратили, я люблю тяп-ляп- шлёп-шлёп, а вы превратили, вот, со своими аннотациями «паршивыми» Комментарии в интернете
  27. Это самый главный вопрос про аннотации 36 — вы чего-то

    питон в какой-то неправильный язык превратили, я люблю тяп-ляп- шлёп-шлёп, а вы превратили, вот, со своими аннотациями «паршивыми» — почему бы не взять «нормальный» язык? Комментарии в интернете
  28. Это самый главный вопрос про аннотации 37 — вы чего-то

    питон в какой-то неправильный язык превратили, я люблю тяп-ляп- шлёп-шлёп, а вы превратили, вот, со своими аннотациями «паршивыми» — почему бы не взять «нормальный» язык? — зачем? Комментарии в интернете
  29. Это самый главный вопрос про аннотации 38 — вы чего-то

    питон в какой-то неправильный язык превратили, я люблю тяп-ляп- шлёп-шлёп, а вы превратили, вот, со своими аннотациями «паршивыми» — почему бы не взять «нормальный» язык? — зачем? — никому не нужно Комментарии в интернете
  30. Это самый главный вопрос про аннотации 39 — вы чего-то

    питон в какой-то неправильный язык превратили, я люблю тяп-ляп- шлёп-шлёп, а вы превратили, вот, со своими аннотациями «паршивыми» — почему бы не взять «нормальный» язык? — зачем? — никому не нужно — это мусор в коде Комментарии в интернете
  31. Главная боль питона 42 — Это король всех претензий к

    python! — Ахилессова пята — Боль? — Унижение?
  32. 43

  33. Что, если я скажу, что это не проблема? 45 —

    Так python быстрый? — Конечно нет — ❌ Python – возможно самый медленный язык на планете
  34. 46

  35. 48

  36. Рецепты 49 Для I/O bound задач мы берем асинхронность AsyncIO

    Для CPU bound задач, как это не странно, тоже отчасти асинхронность: мы делаем «воркеры», которые и обрабатывают вашу нагрузку +
  37. Асинхронный python 50 — нативная поддержка async/await в языке начиная

    с 3.5 — невероятный обширный набор async библиотек: есть (почти) всё — у нас есть libuv как drop-in replacement
  38. Highload 51 На highload сервисах (>1000rps) в ряде мест с

    python может быть непросто. Но у меня нет цели доказать вам, что python годен для всего Я доказываю другое: python, возможно, негоден лишь для небольшого скоупа задач.
  39. Итого 52 — python быстр и хорош в асинхронных задачах,

    которые и составляют основную массу веб бекенд задач в мире — для некоторых кейсов вы сможете взять pypy, cython и etc — для некоторых — можно написать свой воркер на go, rust, etc
  40. Популярные тезисы 54 — язык для новичков — первый язык

    для старта — супер-, мега- элементарный, за вечер разберешься … — естественно уже есть статья, где питон неудачный язык для первого, потому что плохой J — Брагилевский… впрочем, вы знаете, что он думает о python
  41. 55

  42. Так же 61 — в python есть метаклассы и метапрограммирование

    — python поддерживает массу парадигм разработки: куча видов concurrency (параллелизм, асинхронность, csp, structured concurrency и т.п.)
  43. Так же 62 — в python есть метаклассы и метапрограммирование

    — python поддерживает массу парадигм разработки: куча видов concurrency (параллелизм, асинхронность, csp, structured concurrency и т.п.) — для питона написан миллион ФП библиотек
  44. Так же 63 — в python есть метаклассы и метапрограммирование

    — python поддерживает массу парадигм разработки: куча видов concurrency (параллелизм, асинхронность, csp, structured concurrency и т.п.) — для питона написан миллион ФП библиотек — и (на самом деле) много чего ещё
  45. Итоги по «новичковости» 64 — разговоры о том, что python

    «очень простой для одного вечера» происходят от плохого знания языка или плохого к нему отношения — язык требует освоения и он не прост. Тоже самое можно сказать про любой другой язык
  46. Неприятный факт о python 66 Треды в python не умеют

    работать параллельно из-за GIL
  47. Почему это не такая большая проблема 68 — веб сильно

    асинхронный — скейлимся процессами
  48. Почему это не такая большая проблема 69 — веб сильно

    асинхронный — скейлимся процессами — скейлимся подами (считай, те же процессы с чуть большим наслоением абстракций)
  49. Для чего же используются треды в python? 70 Как это

    не сбивает с толку, но GIL имеет привычку «отпускаться» на I/O. Поэтому можно получить асинхронность с помощью тредов и GIL
  50. Итого по GIL 71 — сложно для новичков (отсылка к

    предыдущей главе) — неочевидно — нельзя использовать для cpu-bound, можно для io-bound — большой проблемы не представляет
  51. У меня один ответ: посмотрите на наш тулсет для тестирования

    73 — для python существует один из сильнейших фреймворков для тестирования — pytest. Это абcолютно великолепный инструмент!
  52. У меня один ответ: посмотрите на наш тулсет для тестирования

    74 — для python существует один из сильнейших фреймворков для тестирования — pytest. Это абcолютно великолепный инструмент! — для python существует невероятно впечатляющий фреймворк property-based fuzzy тестирования hypothesis и он чертовски хорош! Его использует даже стандартная библиотека (где-то кто-то вспоминает одноименный хаскелл фреймворк)
  53. У меня один ответ: посмотрите на наш тулсет для тестирования

    75 — для python существует один из сильнейших фреймворков для тестирования — pytest. Это абcолютно великолепный инструмент! — для python существует невероятно впечатляющий фреймворк property-based fuzzy тестирования hypothesis и он чертовски хорош! Его использует даже стандартная библиотека (где-то кто-то вспоминает одноименный хаскелл фреймворк) — для python существует mutmut, фреймворк мутационного тестирования
  54. У меня один ответ: посмотрите на наш тулсет для тестирования

    76 — для python существует один из сильнейших фреймворков для тестирования — pytest. Это абcолютно великолепный инструмент! — для python существует невероятно впечатляющий фреймворк property-based fuzzy тестирования hypothesis и он чертовски хорош! Его использует даже стандартная библиотека (где-то кто-то вспоминает одноименный хаскелл фреймворк) — для python существует mutmut, фреймворк мутационного тестирования — faker! Factory boy, mixer, django seed — куча расширений для pytest
  55. 77

  56. 79

  57. Ответственность за сбои 80 За java и c# стоят крупные

    компании, а за python? Кто ответит, когда все сломается? Ещё холивары
  58. Ответственность за сбои 81 За java и c# стоят крупные

    компании, а за python? Кто ответит, когда все сломается? Довольно откатанные технологии, такие как «языки» обычно редко ломаются, а баги в опенсорсе правятся довольно оперативно и открыто. С закрытым кодом всё не так прозрачно и однозначно, и ещё это очень дорого. Ещё холивары
  59. Безопасность 83 Тулсет в «опенсорс» языках небезопасен. Собственно, в любом

    софте вам придётся использовать сторонние библиотеки и почти всегда какой-то опенсорс. Это данность. Ещё холивары
  60. Какие тренды 94 — python ускоряется в 5 раз (смотрите

    наш открытый митап) — subinterpreters (есть потенциал на более простое решение проблемы GIL) — тулинг вокруг python будет развиваться всё быстрее — аннотации типов становятся взрослым инструментом — на ближайшие 5 лет минимум у python всё безоблачно
  61. Веб фреймворки 96 — FastAPI. Если вы не пробовали —

    он вас удивит. Супер быстрое написание бекендов, большая скорость, много позитивной, удивительной магии — Django. Лучший фреймворк для MPA: сайты, админки
  62. Цитируем #1 98 «тут python, какая сильная типизация» В python

    сильная типизация. Она же строгая J
  63. Цитируем #2 99 «пишу на python скрипты, особо ничего о

    нем не знаю, а нужен серьезный язык — возьмите с#» Python — серьезный язык. На нём разрабатывать не только приятно и быстро, но теперь и надежно.
  64. Цитируем #6 103 «Да, нашествие статической типизации в скриптовые языки,

    которые до этого дцать лет нормально жили без нее - это печально» Речь об аннотациях типов. Печального нет ничего, нам нужна большая надежность, мы её получаем.
  65. Ключевые тезисы 105 — python очень надежен для большинства кейсов

    — python используется авторитетными компаниями для бекенд разработки: Yandex, Google — у python развитый тулинг для разработки и тестирования — python ускоряется, но даже сейчас имеет кучу средств для быстрого cpu-bound — в python фантастические фреймворки — на python приятно писать
  66. Финально 106 — Если вы собираетесь что-то писать, подбирать команду,

    нанимать с нуля: присмотритесь к python, это язык номер 1, с которого начинается современный бекенд! — Если вы пишите на python и по какой-то причине стесняетесь, не уверены — теперь вы знаете, что у вас для этого нет причин J — Python — язык «высшей лиги»!