Вырастаем над проблемами Python

в 12:22, , рубрики: python, Блог компании Avito, конференции

Привет! Меня зовут Дмитрий Климинский, я работаю back-end разработчиком в Avito. Сегодня я хочу поделиться с вами впечатлениями от нашей поездки на конференцию PyCon CZ 2017, которая прошла в Праге. Мне давно хотелось узнать, какие темы обсуждают зарубежные коллеги, чем они отличаются от “нашей” повестки. И это стало возможным, когда меня в составе небольшой команды разработчиков отправили в Чехию. Конечно, оказалось, что перед зарубежными коллегами стоят такие же задачи и вопросы. Но вот угол зрения докладчиков и те акценты, которые они расставляют, показались мне интересными. Под катом — короткие заметки по интересным докладам, особенности чешской конференции и несколько фото.

Вырастаем над проблемами Python - 1

В Праге обсуждали все те же извечные проблемы языка Python: асинхронность, GIL, тестирование и, естественно, разницу между 2-м и 3-м питоном. На мой взгляд, это уже традиция: ну какой PyCon, если мы не обсудим GIL, не поноем в кулуарах про 2-й питон, не сделаем очередной велосипед для тестирования и не похвастаемся, как быстро работает асинхронность? Всё это — атрибуты типичной конференции по Python, питонистам со стажем это все уже может надоесть, но, видимо, без этого никуда. Думаю, что такие темы полезны для любого новичка, и хорошо что эти вопросы постоянно поднимаются. Так, например, живой рассказ от профессионала о неких основополагающих концепциях языка будет гораздо более полезен для начинающих, чем длинные книжные мануалы.

Вырастаем над проблемами Python - 2

Да, был доклад с django, много тем про тестирование, была лекция и мастер-классы по интернету вещей, docker-у. Короче, все современные тенденции были включены в доклады. Собственно, поэтому мы и любим посещать конференции. Мы с коллегами делали небольшие заметки по тем докладам, которые показались нам интересными. Делимся.

Чистый Python для распределенных вычислений

Автор этого доклада является этичным хакером. При внедрении кода в чужую систему нельзя ставить библиотеки, но практически везде есть Python. Пришлось реализовать на чистом Python утилиты для подбора паролей, dns resolving, сканирования портов. Разработчик рассказал, как он разделяет нагруженную работу между процессами. Вкратце: для распределения между ядрами одной машины используются queues.

from multiprocessing import Process, Queue

Если надо распределить вычисления между разными компьютерами, добавляется BaseManager. Все это выглядело очень занятно на экране и в презентации. Но, конечно, очевидно, что в реальной жизни, если нет явных ограничений, лучше пользоваться другими средствами для распределенных вычислений.

Micro Python в условиях ограничений со стороны железа

Другой докладчик рассказал о программировании радиоуправляемых лодок. Там используется многозадачная операционная система реального времени FreeRTOS и очень ограничен ресурс. Python — основной язык программирования, т.к. с его помощью легче работать с бизнес-логикой и прототипированием. Для оптимизации системы, сборки ядра он использует scons, который позволяет управлять билдингом с-программ, в том числе системных вещей.

Про нейминг

Был на PyConCz и доклад про то, что называют 2nd hardest thing in computer science — нейминг. Рекомендации автора:

  • в названии метода стоит указывать глагол;
  • не использовать “капитанские” аббревиатуры и выражения типа data, data2;
  • осторожнее с синонимами, выбор названий переменных должен быть обоснован их использованием: user и customer это не всегда одно и то же;
  • не стоит использовать в названии класса общее слово “Manager”, лучше употреблять *Builder, *Creator и т.п.;
  • не использовать “магические” числа; хороший пример — в библиотеке requests есть константы для кодов ответа HTTP: 200, 400;
  • не использовать общеупотребимые слова, такие как, например, transform — здесь необходимо уточнение что и как трансформируется;
  • не использовать отрицание в названии.

Про “мокание”

Еще один доклад — это история о правильно выбранном подходе. Помимо всем известного mock для тестирования есть и другие, более простые операции (spy, stub, spies…), которые использовать более желательно, для того, чтобы тестирование было качественным. Важно выбирать инструменты исходя из понимания, что именно тестируется.

Был на конференции и доклад об эволюции языка Python и его будущем. Интересно услышать об этом от экспертов, которые дают системный, структурный подход. Порадовало то, что было несколько докладов про интернет вещей и мастер-классы на эту тему. Становятся ясны потребности рынка и то, как им отвечает технология.

Отличия

Но есть одна особенность, которая, на мой взгляд, сильно выделялась по сравнению с российскими конференциями по Python. Это моральная составляющая программирования. Вы задумывались, сколько человек вы убили своим кодом? Нет, серьезно, это не шутки, докладчик приводил примеры, когда из-за багов умирали люди. И речь идет не только об автопилотах или системах жизнеобеспечения, а например, о мессенджерах. А сколько выбросов CO₂ в атмосферу принес ваш код? Защита окружающей среды — тоже тема отдельного доклада. А чему нас учит первая в истории хакерская атака? А как нам обучать новичков Python, и вообще зачем становиться наставником? Поразительно, сколько этических проблем поднималось в докладах.

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

Вырастаем над проблемами Python - 3

Спасибо всем читателям за внимание к этому посту. Напоминаю тем, кто интересуется новыми тенденциями в разработке на Python, что совсем скоро, с 16 по 17 июля, в Подмосковье пройдет PYCON RUSSIA 2017.

Автор: dkliminsky

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js