company_banner

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

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



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



    Да, был доклад с 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, что совсем скоро, с 16 по 17 июля, в Подмосковье пройдет PYCON RUSSIA 2017.
    Авито
    257.80
    У нас живут ваши объявления
    Share post

    Comments 10

      +1
      > извечные проблемы языка Python: асинхронность, GIL

      а это точно проблемы языка Python? Может это проблемы тех кто использует питон там где нужен Elixir/Haskell или что-то вроде того?

      > тестирование

      а есть подробности в чём проблема?

      > и, естественно, разницу между 2-м и 3-м питоном.

      да вроде все популярные библиотеки и фреймворки мигрировали, не? Если кто-то остался на старом питоне, то это не проблема питона
        0
        Видимо неверно выразились. Это скорее не проблемы, а особенности, формулировку в посте поправим.

        Но проблема перехода на 3-й питон никуда не делась. В позапрошлом году, например, на российском PyCon спросили у кого второй, руку подняло ползала, учитывая что Python 3 вышел в еще 2008 году. На конференции в Праге мы вообще встретили парня, который на версии 2.3.
          +1
          Только недавно собирался перейти на 3ку, все поставил, настроил — буквально через пару дней ставлю CLI для облака — «для установки требуется Питон 2, чмоки».
            0

            У меня все проекты под Python 3. На удивление легко прошел переход, может быть, потому что стараюсь писать чистый код. :) Может быть, они недостаточно сложные.


            В переходный период использовал одновременно python 2 и 3. Ничего не мешает. CLI для облака явно может существовать в отдельном virtualenv под Python 2.

              0
              Лично у меня проблемы были только с разницей в целочисленном делении между 2 и 3 Питоном. Чистый код тут не поможет — надо всё тестировать.
                0
                Добавлю, есть такой замечательный инструмент pyenv. Очень рекомендую ставить сразу вместе с плагином pyenv-virtualenv. Решил все мои проблемы про разные версии, окружения и их комбинации.
            0

            Вот если тут будет 100%, тогда уже можно будет надеется (хотя на самом деле и то не факт).


            А тут собраны библиотеки, которые очень много где используются, а значит, и второй питон процветает, так что пока проблемы таки питона.

              0
              А это точно актуальный список? Там написано что ansible не поддерживает, но судя по доке не всё так плохо
                0

                К сожалению, вроде не все базовые модули переехали на python3.

          • UFO just landed and posted this here

            Only users with full accounts can post comments. Log in, please.