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

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

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

Avatar for Denis Anikin

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 — язык «высшей лиги»!