$30 off During Our Annual Pro Sale. View Details »

Почему в 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'ы

    View Slide

  2. Я — Аникин Денис
    2
    Вдруг кому-то важно кто делает доклад
    — team lead в команде Chat, Raiffeisenbank
    — cl в Python Community
    — fullstack: разрабатываю на python и typescript
    — занимаюсь devops
    — мой сайт: https://xfenix.ru/

    View Slide

  3. Причины возникновения доклада
    3
    шутка
    Спасибо коллеге, Даниилу J
    1

    View Slide

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

    View Slide

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

    View Slide

  6. Цели, которые я хочу достичь этой презентацией
    6
    Воодушевить людей не
    бояться и не стесняться языка

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 12

    View Slide

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

    View Slide

  14. Давайте начнём
    14

    View Slide

  15. Что не так с python:
    динамическая типизация

    View Slide

  16. «Динамическая типизация — это
    не инструмент для разработки.
    Это чепуха (паршивая)»
    Известная статья Фила Ранжина
    16

    View Slide

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

    View Slide

  18. А минусы есть?
    18
    — Мы пишем больше тестов
    — В рантайме могут появляться ошибки

    View Slide

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

    View Slide

  20. Однозначных доказательств, что
    статическая типизация
    превосходит динамическую
    у нас нет
    20

    View Slide

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

    View Slide

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

    View Slide

  23. Но это не всё!
    Python предлагает вам
    gradual typing
    23

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. Все путают, а вы теперь не будете
    29
    Типизация и аннотации типов — разные вещи!
    https://docs.python.org/3/reference/datamodel.html
    в питоне есть своя система типов и она описана в
    официальной документации

    View Slide

  30. Как выглядят аннотации типов
    30

    View Slide

  31. Аннотации типов: ещё интереснее
    31

    View Slide

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

    View Slide

  33. Что не так с python:
    а чего бы не взять язык со статической
    типизацией то?

    View Slide

  34. 34

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. Ответ всё тот же:
    аннотации типов + mypy
    повышают надежность
    40

    View Slide

  41. Что не так с python:
    скорость

    View Slide

  42. Главная боль питона
    42
    — Это король всех претензий к python!
    — Ахилессова пята
    — Боль?
    — Унижение?

    View Slide

  43. 43

    View Slide

  44. Что, если я скажу, что это не проблема?
    44
    — Так python быстрый?

    View Slide

  45. Что, если я скажу, что это не проблема?
    45
    — Так python быстрый?
    — Конечно нет
    — ❌ Python – возможно самый медленный язык на планете

    View Slide

  46. 46

    View Slide

  47. Неожиданное отступление.
    В разработке мы решаем 2 класса задач:
    cpu bound и
    i/o bound
    47

    View Slide

  48. 48

    View Slide

  49. Рецепты
    49
    Для I/O bound задач мы берем
    асинхронность
    AsyncIO
    Для CPU bound задач, как это не
    странно, тоже отчасти
    асинхронность: мы делаем
    «воркеры», которые и обрабатывают
    вашу нагрузку
    +

    View Slide

  50. Асинхронный python
    50
    — нативная поддержка async/await в языке начиная с 3.5
    — невероятный обширный набор async библиотек: есть (почти) всё
    — у нас есть libuv как drop-in replacement

    View Slide

  51. Highload
    51
    На highload сервисах (>1000rps) в ряде мест с python может быть непросто.
    Но у меня нет цели доказать вам, что python годен для всего
    Я доказываю другое: python, возможно, негоден лишь для небольшого скоупа задач.

    View Slide

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

    View Slide

  53. Что не так с python: язык для новичков

    View Slide

  54. Популярные тезисы
    54
    — язык для новичков
    — первый язык для старта
    — супер-, мега- элементарный, за вечер разберешься

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

    View Slide

  55. 55

    View Slide

  56. ФП: протокол итерации
    56

    View Slide

  57. ФП: генераторы не так просты
    57

    View Slide

  58. ФП: декораторы
    58

    View Slide

  59. ФП: разные модули, builtins
    59

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  65. Что не так с python:
    GIL (оно же «скорость 2»)

    View Slide

  66. Неприятный факт о python
    66
    Треды в python не умеют работать параллельно из-за GIL

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  70. Для чего же используются треды в python?
    70
    Как это не сбивает с толку, но GIL имеет привычку «отпускаться» на I/O.
    Поэтому можно получить асинхронность с помощью тредов и GIL

    View Slide

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

    View Slide

  72. Что не так с python:
    кривой язык для «быстрого
    набрасывания прототипов на джанге»

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  77. 77

    View Slide

  78. Что не так с python:
    безопасность

    View Slide

  79. 79

    View Slide

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

    View Slide

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

    View Slide

  82. Безопасность
    82
    Тулсет в «опенсорс» языках небезопасен.
    Ещё холивары

    View Slide

  83. Безопасность
    83
    Тулсет в «опенсорс» языках небезопасен.
    Собственно, в любом софте вам придётся использовать сторонние библиотеки и
    почти всегда какой-то опенсорс. Это данность.
    Ещё холивары

    View Slide

  84. Более приятные вещи.
    Популярность языка

    View Slide

  85. TIOBE — 2 место
    85

    View Slide

  86. PYPL — 1 место
    86

    View Slide

  87. Redmonk — 2 место
    87

    View Slide

  88. GitHut — 2 место
    88

    View Slide

  89. StackOverflow — 3 место
    89

    View Slide

  90. Количество упоминаний в резюме (2019 год, увы,
    новее не нашел) — 4 место
    90

    View Slide

  91. Python — фантастически
    популярный язык, чей потенциал
    к росту до сих пор не исчерпан!
    91

    View Slide

  92. Будущее языка

    View Slide

  93. Странная для enterprise картина
    93

    View Slide

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

    View Slide

  95. Фреймворки и пакеты

    View Slide

  96. Веб фреймворки
    96
    — FastAPI. Если вы не пробовали — он вас удивит. Супер быстрое написание
    бекендов, большая скорость, много позитивной, удивительной магии
    — Django. Лучший фреймворк для MPA: сайты, админки

    View Slide

  97. А теперь разбираем цитаты людей из
    индустрии! 6 прекрасных мнений

    View Slide

  98. Цитируем #1
    98
    «тут python, какая сильная типизация»
    В python сильная типизация. Она же строгая J

    View Slide

  99. Цитируем #2
    99
    «пишу на python скрипты, особо ничего о нем не знаю, а нужен серьезный язык —
    возьмите с#»
    Python — серьезный язык. На нём разрабатывать не только приятно и быстро, но
    теперь и надежно.

    View Slide

  100. Цитируем #3
    100
    «каждый знает python»
    Не каждый!

    View Slide

  101. Цитируем #4
    101
    «некошерный язык программирования»
    Не более и не менее кошерный язык чем все остальные.

    View Slide

  102. Цитируем #5
    102
    «python приносит большой вред»
    Не злите змею и всё будет хорошо.

    View Slide

  103. Цитируем #6
    103
    «Да, нашествие статической типизации в скриптовые языки, которые до этого дцать
    лет нормально жили без нее - это печально»
    Речь об аннотациях типов.
    Печального нет ничего, нам нужна большая надежность, мы её получаем.

    View Slide

  104. Итоги

    View Slide

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

    View Slide

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

    View Slide

  107. https://github.com/xfenix
    [email protected]
    Спасибо. Вопросы?

    View Slide