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

Из Python в Go и обратно - Андрей Минкин

Из Python в Go и обратно - Андрей Минкин

GopherCon Russia

April 23, 2021
Tweet

More Decks by GopherCon Russia

Other Decks in Programming

Transcript

  1. Кто я? CTO в Mad Devs 5+ лет админил 5+

    лет кодил на Python 5+ лет кодил на Go 15+ лет в IT Докладчик, ментор и активно делюсь опытом
  2. Disclaimer В докладе не будет объективности, чего-то поучительного, а просто

    много набросов, субъективщины и личного опыта и набитых шишек и куча непонятных отсылок и мемчиков Кто поймет, тот поймет (с)
  3. Кому будет полезен доклад Go разработчикам, которые не знают о

    Python Python разработчикам, которые изучают Go Разработчикам, которые хотят послушать доклад по фану Люди, которые сомневаются в выборе Go как языка для своего сервиса
  4. Что было в 2014 Я тимлид в Namba Taxi Стек:

    Python (Django/Twisted) / Ruby (eventmachine) / Node.js (socket.io) Доклад
  5. Что было в 2014 Плагина для Idea для Go нет

    Вимом тогда я не пользовался Был какой-то liteide, который не очень заходил Метод с маленькой буквы не публичный
  6. Я в 2015 Поддержка Python 2 закончится в 2020 На

    Python 3 мало библиотек Переезд на Python 3 заставляет усомниться в правильности выбора профессии
  7. О, есть сообщество О, есть плагин для idea О, есть

    готур О, а на Go можно программировать Что изменилось
  8. Go vs Python: Первые впечатления err := something() if err

    != nil { return nil, err } try: something() except e: raise
  9. А может быть нет? defer func() { if err :=

    recover(); err != nil { fmt.Println(err) } }() err := something() if err != nil { panic(err) }
  10. Стадии принятия Don’t just check errors, handle them gracefully Это

    ведь похоже на TDD Зато мой код более очевиден.
  11. Обработка ошибок конечно надоедает, но 1. Код становится понятнее 2.

    Код становится предсказуемее 3. Приходится мириться с if err != nil
  12. Python vs Go: Concurrency/async/threading Event Loop aka Reactor - Twisted

    - Asyncio - async/await Threads/ThreadPool CSP go
  13. К чему пришли Python + Go для всего Хорошо работает

    - Производительность - Time to market - Качество
  14. Iris 1. Много звезд 2. Отличная активность проекта 3. Много

    закрытых issues 4. Достаточно понятный и простой код 5. Хороший роадмап
  15. Что такое iris на самом деле Переписанная история Сквош коммитов

    Постоянно измененная API Да и вообще подробнее тут
  16. Чему я научился Код библиотеки нужно ревьюить с многих сторон

    - Проверять код на качество - Проверять наличие звезд - Активность ничего не значит, если тул работает хорошо
  17. Что не так с API на Go Очень много ручной

    работы при написании REST API - Генераторы - Reflect - Очень много бойлерплейта Выгода не очень очевидна - Если только нет требований к максимальному перформансу
  18. А почему весь мой код на Go такой плохой? Нет

    читаемости Код запутанный Сложно писать тесты
  19. SOLID? Тесты? - Нужда заставила - Кодить по модулям -

    прикольно - Так вот как выглядит SOLID
  20. Я был типичным питонистом - Django, если в web разработке

    - Про SOLID не слышал - Действует в рамках шаблонов - Пользуется pytest, unittest
  21. К чему это приводит - Нет понимания устройства обычного веб

    приложения - Нет понимания низкого уровня и примитивов синхронизации - Местами рвется мозг с непривычки
  22. Первый шаг к пониманию SOLID Тестовый фреймворк - Оформляй пакет

    как модуль в питоне - Напиши тест вместо проверки в main.go - Тестовый фреймворк удобен из коробки - А еще есть бенчмарки
  23. Спустя 5+ лет программирования на Go что получил + Больше

    друзей в сообществе + Больше знакомых + Лучшее понимание SOLID, OOP и дизайна + Лучшее понимание построения архитектур + Лучшее владение инструментами
  24. Привет, Python - Завезли типы - Завезли 3й питон -

    Завезли pipenv - Починили unicode и теперь нет возни с ним - Prospector (скупой аналог golangci-lint) - Black (аналог go fmt)
  25. Что общего у обоих языков? Менеджмент зависимостей у обоих вызывает

    боль Go mod и pipenv одинаково медленные и проблемные в некоторых случаях
  26. Python vs Go Централизированный Пакеты вызывают доверие Подвержен Dependency confusion

    атаке Децентрализированный Пакеты не вызывают доверие Не подвержен Dependency confusion атаке
  27. Плюсы Go сообщества - Поддержка - Подкасты - Много разных

    абмассадоров - А еще разработчикам языка интересно, что нужно сообществу.
  28. Распил монолита на го на сервисы на питоне Потому что

    джуны на Go стоят дороже, а пользы от них меньше
  29. Что в Go прям отлично + Golangci-lint + Grpc +

    Godoc + go mod + UNIX философия + If err != nil /trollface + Более читаемый код
  30. Чего не хватает в Python? - Аналога godoc - Нормального

    металинтера(prospector хорош, но его мало) - Более простых типов - Небольшой диктатуры - Форматера из коробки
  31. Выводы В мире есть не только Go Код библиотек нужно

    и важно ревьюить перед использованием SOLID лучше осваивать в Go … ради $, … для души (вставьте свое) Go разработчики хотят незаслуженно больше денег :trollface: Все сообщества одинаково токсичны и нет
  32. Когда Go? Нужно что-то асинхронное и многопоточное Нужно что-то для

    gRPC Есть понятные требования по перформансу Есть люди, которые это будут поддерживать и мы сможем найти их на рынке
  33. Когда Python? REST и прочие API Где есть много бойлерплейт

    кода Где есть требования к минимальному time-to-market