Python и попкорн

Не всегда получается донести до собеседников причину, по которой я смотрю на мир Python с попкорном в руках. Попробую тут.
Сразу две вводные.
Python — инструмент. Если в нём что-то не устраивает, скорее всего, вы применили инструмент не к той задаче. Oy vey iz mir! Я написал на Python прошивку к реалтаймовому процессингу на карточных чипах, а оно не работает! Плохой, плохой Python! Очевидно, дело не в языке, но в ДНК специалиста. У правильно применяющих всё хорошо. У них, впрочем, и с BASIC хорошо будет. Голова на плечах рулит.
Python — не универсальный инструмент и не панацея от криворукости (уже писал, что на самом деле писать хороший код на Python сложнее, чем на Java/C++), но из-за кажущейся простоты порога входа получил армию фанатов. Часть критики Python вызвана желанием потыкать палочкой этот вот детский сад, для которого нет большего счастья и радости, чем не указывать типы. Так вот, это эссе не критика, не замахивание на святое и не всё то, что желает читать стремительно наполняемый кровью мозг.

Потреблению попкорна способствует история Python 3 и поддержки оной версии сообществом. Сегодня у меня в очередной раз всколыхнулся потому, что хотел почитать логи MongoDB более цивилизованно (aka с помощью mtools). Открываю, вижу «mtools is not currently compatible with Python 3», закрываю.

Шёл 2006 год (12 лет назад он был). Гвидо создаёт PEP 3000. Или лучше назад отойти? Не понять, какой год считать годом появления Python 3, т.к. Гвидо о нём думал ещё раньше. Скажем, в 2004 году запостил флеймообразующий постик «Optional Static Typing to Python» (у питонистов тогда знатно глаза и пальцы разгорелись, понадобились умиротворяющие постики). Как ни крути, но если вам кажется, что Python 3 — что-то новое, ну вот пару-тройку лет назад появилось, то нет. Более того, уже в декабре 2008 года был выпущен Python 3.0 final.
Добавлю фона для сравнения.
Kotlin — разрабатывается с 2010 года (думаю, всё-таки раньше начали), первый релиз в 2011 году. Swift — разрабатывается с 2010 года, первый релиз в 2014 году. Go — разрабатывается с 2007 года, первый релиз в 2009 году. Rust — разрабатывается с 2006 года, первый релиз в 2010 году. Эти даты должны вам помочь увидеть живую практику других языков. За 2..4 года разработка, воодушевлённый народ начинает фигачить вовсю тоже уже через 2..4 года, хоть у Swift особенный кейс, там один вендорный язык для вендорной платформы заменяется другим, потому особо выбора не было.

Что же произошло с 3.0? А ничего. Он сразу утонул под критикой. Вот удобная известная статья, в которой всё основное собрано. Шли годы. Вышел 3.1 (2009), 3.2 (2011), 3.3 (2012). Воз стоял на том же месте. Питонисты всё так же расползались по двум лагерям. В основном (я обгуглился переписок, интервью и прочего тех лет) война шла на трёх фронтах.
Во-первых, критиковали производительность. Бенчмарки, в которых 3.x был заметно медленнее 2.7, взывали к разуму. Но… матёрые сторонники прогресса (да и Python’а в целом) отбивались аргументом «нам и не надо!» С технической точки зрения аргумент настолько меня забавляет, что детализирую. Вот хороший пример — Python норм, проблема не в нём, а если в нём, напишите важное на C/C++ или юзайте Cython. Знаю немало питонистов. Живых таких реальных мужчин от 20 до 35 лет возрастом. С удовольствием представляю, как они пишут быстрокод на C/C++, ага. Гвидо, между тем, придерживался той же аргументации (говорящий заголовок статьи: «Van Rossum: Python is not too slow»):

It is usually much more effective to take that one piece and replace that one function or module with a little bit of code you wrote in C or C++ rather than rewriting your entire system in a faster language, because for most of what you’re doing, the speed of the language is irrelevant.

Я б добавил, что разумнее сразу писать на чём-то, что потом не потребует внедрения ещё одного-двух языков в стек, но это наверняка будет гораздо менее выразительно, чем писать на Python. В любом случае репутация 3.x была подмочена, т.к. столько лет делают, а везде и заметно быстрее не стало.

Во-вторых, несовместимость. За то, что 3.x не собирался поддерживать выполнение кода 2.x, Гвидо был виртуально бит задолго до релиза 3.0, но стоял на своём упорно. Мигрируйте и будет вам счастье, даже сделали 2to3, всех проблем не решавший, но всё же. Один фиг предполагалось, что вы просмотрите глазами весь свой исходник. И ладно бы, но как быть с мегатонной библиотек? Что вам радости, если 80% всех зависимостей совместимы с Python 3, а 20% нет? Должны быть 100%. Как итог, каждый уважающий себя питонист раз в неделю ходи(л|т) на py3readiness.org, проверяя, ну когда же, ну блин же. И если в Java/C++ 99.99% проблем миграции вам укажет компилятор, то в Python не так. При неудачном забеге звёзд вполне можно получить выстрел в рантайме просто потому, что в какой-нибудь уголок забытый не заглянул глазами, не потрогал руками.
В-третьих, нафига? Линейных разработчиков вопросы стратегии и legacy не волнуют. Их волнует, чтобы переход с X на Y был пыщ-пыщ. А Python 3 сумму пыщ-пыщ добрал лишь вот относительно недавно. Версия 3.6 (конца 2016 года) в сумме с возможностями предыдущих версий выглядит прям вот интересно и убедительно. Правда, с опозданием. Я не зря выше остановился на 3.3. Кажется, что это версия, на которой в умах произошёл надлом. Четыре года от первого релиза, а лучше не стало. Работает медленно. Никаких увлекательных свистелок-перделок, которыми можно заманить жаждущих хлеба со зрелищами. Планетарная миграция даже не началась, да и куда мигрировать, если вы сидите на версии Django, которую никто даже и чесать не собирается? В общем, всё плохо. И вот это «всё плохо» в головах устаканилось намертво.

И всё. Сообщество знатно затвердело. Как одни слепо за Путина, а другие слепо за Навального, так и тут. Можно хоть монтировку согнуть об иные лбы, но лбы совершенно искренне не будут понимать, зачем им Python 3. В их мире Python 2.7 вечен, Python 3 вечно медленный (это давно не так), не поддерживается (это давно не так), в нём нет прикольных фич (это давно не так). В 2018 году (спустя 10 лет релиза!) мир вовсю осваивает четыре новых языка, но мир питонистов до сих пор не может перейти на тройку. Ну вот никак. Это постоянный цирк и бардак. Самый распоследний 2.7.x вышел в конце 2016 года. Ветка не поддерживается, ветка не развивается. Всё равно будем держаться за неё до последнего!
В финале докину ещё примеров того, как в стороне от цирка развивается планета. С 2011 года по 2017 год вышли C++11, C++14, C++17. Вышел PHP7 в 2015 году. Вы [не] будете смеяться, но даже успели выпустить стандарт Fortran 2008 и вот-вот доработают Fortran 2018 (ранее Fortran 2015). Ужасный, медленный и кровавый мир Java успел выродить Java 7, 8 и 9 (позавчера и 10). А, да, первый релиз MongoDB вышел в 2009 году. Блокчейны… криптовалюты… квантовые процессоры…
А Python 2.7 (ветка началась в 2010 году, напомню) вовсю в production’е. И до фига живых людей не хотят от неё отказываться. Потому со стороны вся эта смешная история и смотрится с попкорном. Слишком уж в разрыве от общей практики происходит, слишком фанатично (aka не профессионально) воюет сама с собою эта часть сообщества, чтобы не превратиться в многолетний анекдот.
PS. Да, на собеседования приходят питонисты, которые заранее говорят, что Python 3 не знают совсем. Его нет в их текущей работе, а вне работы причин узнать не было. Радуюсь. Восхищаюсь.
PPS. Полтора года назад уже затрагивал тему, но чуть иначе и менее ссылочно. Не могу сказать, что всё кардинально изменилось. Не-а.

Python и попкорн: Один комментарий

  1. Насчёт медленного Python я даже статью перевёл — https://habrahabr.ru/post/329988/, но неужели так всем нужна скорость?! К тому же в 3.6 убрали один if и получили прирост производительности в 10%, а учитывая опциональную типизацию, которая может помогать вычислять типы и тем самым более оптимально расходовать ресурсы, то я уже и не уверен, что python 2.7 покажет хоть какую-то скорость. А вообще с появлением корутин (и asyncio как следствия) в 3.4, типизации в 3.5, оптимизации в 3.6 на окаменелости 2.7 даже смотреть не хочется. Уверен, что как только его уберут из MacOS и Ubuntu как интерпретатор по умолчанию, разработчики начнут забывать его быстрее.

Добавить комментарий