Найти в Дзене
Small Entropy

Почему Python для меня стал объективным тупиком

Оглавление
Изображение взято из свободных источников
Изображение взято из свободных источников

Данная статья - моё личное мнение. Более того, я Python программист, который начинал использовать язык с первых версий. Сейчас я активно использую NodeJS и JavaScript в повседнейвной работе. И я не могу сказать, что жалею о смене языка программирования.

В то же время - статья носит субъективный характер и не претендует на истину. Она является скорее "мыслями в слух", чем каким-то авторитетным мнением.

Почему Python популярен среди community

Изображение взято из свободных источников
Изображение взято из свободных источников

Я не буду рассказывать историю появляения языка. Всё же wikipedia никто не банил в нашей стране, любой желающий может ознакомиться с исторической справкой и без меня.

Лучше ответим на вопрос: "Почему многие выбирают Python?"

  1. Он очень простой. На самом деле. Писать на Python может любой человек, который прочитает не сложные туториалы.
  2. Для него есть куча бибилиотек, которые позволяют упростить разработку
  3. Для него есть прекрасные IDE, которые сильно упрощают жизню
  4. Для него разработан прекрасный стандарт (PEP8), который помогает писать поддерживаемый код
  5. У него есть возможность использовать С/С++ библиотеки, через FFI
  6. Есть огромное число документации, обучающих материало и т.п.
  7. Очень мощный и агрессивный маркетинг. Рекламные площадки пестрят информацией о курсах на Python, после которых любой может быстро найти высокооплачиваемую работу. Массы очень хорошо клюют на это. И я бы даже сказал, что данный пункт является вторым в причинах популярности Python (первым номером я бы всё же оставил простоту).

Если так все хорошо и замечательно, то почему сильно бытует мнене о том, что Python навсегда останется на задворка Enterprise сектора, в то время как NodeJS (для примера) стал частью официального стека IBM?

Давайте ответим и на этот сложный вопрос.

Хочется сказать лишь перед всем, что будет ниже - когда я познакомисся с Python, то понял, что он меня очаровал. Я думал это будет язык на котором я буду хотеть работать и на котором я проработаю очень долго.
Мне откровенно нравился Flask, я был без ума от скорости Tornado и гибкости некоторых библиотек. Я был влюблён в Python... но скоро он ушёл. Мы с ним поняли, что он слишком примитивен и мне не нравятся его ограничения.
Та же реализация ООП меня сильно разочаровала (с ней я плотно поработал делая небольшую игру на PyGame для самообучения и быстрому вспоминанию формул по колизиям объектов). В ней не было то, что я хотел бы видеть в своём прикладном языке (надо сказать честно, касаемо ООП - такой язык для меня стал только Smalltalk).
Разочаровала меня и реализация FP в Python. Она... примитивная и урезенная...
И таких вещей я нашёл очень очень много. Но пока не об этом!

Переход на NodeJS и JavaScript

Изображение взято из свободных источников
Изображение взято из свободных источников

Проработав длительное время на Python мне подвернулась работа в одном крупном ecommerce проекте (интернет-магазин очень большого поставщика строительных материалов), где мне было откровенно говоря лень ковыряться в legacy на Python/Django (там был атомный звиздец).

Поэтому, когда мне предолжили сделать мобильную версию на JavaScript и выбрать для реализации пректа framework я согласился сразу. Потом был проект с возможностью чата и видеозвонками с менеджерами (WebRTC), потом каталога сервисов (простая морда к БД), единой авторизации и много всего ещё.

После frontend-разработки у меня появился хороший навык обращения на NodeJS и мне нужно было собрать очень быстро прототип WebRTC звонилки, для тестов внутри компании. Поискав готовые решения на Python, я переключился на NodeJS, нашёлся подходящий под мои задачи EasyRTC... и так пошло дальше. Дают проект - прототип собирается на NodeJS за неделю, прикручивается MongoDB (именно тогда я осознал всю мощь NoSQL баз данных и научился их правильно готовить).

Чуть позже, когда я начал выбирать стек для очередного проекта, я все же задумался: "Почему я не беру Python, который не плохо знаю и я, и команда, а выбираю NodeJS?"

И вот тут я мог осознать, что на самом деле я очень долго критикую Python и больше не хочу писать на нём ничего.

Что мне стало не нравится в Python

Мем взят из вободных источников
Мем взят из вободных источников

Хочу предупредить всех нежных душой натур и прочих джангистов, далее идёт субъективное восприятие Python и его проблем. Это именно то, что я считаю не достойным и не имеет никакого отношения к истине, которую я, конечно, же не знаю.

  1. Синтаксис с отступами. Да, одна из главных фишек синтаксиса языка мне стала быть банально не удобной. Я заметил, что читать код оформленный в {} куда более просто и приятно, нежели то, что мне предлагаю Python. Аргументация в виде "зато следит за стилем написания" для меня перестала иметь смысл, как только я настроил для JS/NodeJS нормально ESLint и прехук для git.
  2. Отсутствие private методов и свойств. Это раздражало и на JS тоже (но чуть меньше, ибо можно было сделать защищенные методы и переменные через замыкания), хочу заметить (и решилось относительно недавно, за счёт добавления в стандарт настоящих приватных методов и свойств(которые начинаются с "решётки" и не доступны без гетеров/сетеров).
  3. GIL. Блокирующий интерпретатор VM является достаточно большой проблемой. До появления Asyncio было просто невозможно без массы дополнительных библиотек ускорить Python (отсюда и необходимость в том же Tornado). Скорость работы Python достаточно низкая, а фреймворки типа Sanic на самом деле являются просто серверами, написанными на другом языке и использующие Python в качестве скриптового языка. В таких случаях у меня всегда возникает вопрос - а зачем мне "клей" и не лучше ли взять нормальный инструмент.
  4. Отхождение от собственного дао. Чтобы оставлять Python простым для начинающих разработчиков создатели языка начали "пихать" в язык массу специального сахара для реалзации простой типовых вещей. При этом семантика часто отличается, а главное - теперь стало несколько способов сделать одно и то же, и так же как в Perl не очевидно какой способ лучше. Тогда в чём профит от примитивизма?
  5. Мутабельность. При разработке HiLoad сервисов я понял на сколько ценными инструментами являются асинхронные функции и возможность параллелить выполнение чего-то. И важной частью в этом является возможность сделать данные иммутабельными. JS это умеет из коробки. Python - нет лаконичного и простого способа (быть может я его не нашёл).
  6. Убогие лябды. В python они могут быть только однострочными. А мне часто надо было более одной строки. Можно, конечно, сделать для этого отдельную функцию, но зачем?
  7. Низкий уровень в среднем по больнице у сообщества. Большая часть программистов достаточно низкого уровня. Многие пришли с не профильных специальностей и плохо понимают теорию. Они скорее кодеры, нежели программисты. Отсюда - найти полный ответ на просторах сети (с пояснением почему так, а не по другому) - достаточно сложно.
  8. Модули даже для самых простых задач. Часто в Python уже есть модуль решающий не большую, типовую проблему. Часто - по сути, он добавляет просто сахар для языка, которого нет и не будет никогда. И, в дополнене, из пункта 7 мало кто задумывается как это работает и можно ли было сделать лучше. Получаем проблему оптимизации.
  9. Культ. Python сообщество всё больше напоминает религиозную секту, где всё подряд решается пакетами и есть пакеты, которым принято поклоняться. На любую задачу Web берите Django и не смейте критиковать. Она прекрасна. Не смейте критиковать GIL, это единственный правильный подход. И так далее.

Все это в целом и сподвигло меня, вот уже более пяти лет писать на NodeJS и больше никогда не возвращаться к Python.

Для меня роль Python стала предельна мала. В моих рабочих проектах он используется для бизнес-логики, а в pet-проектах он был заменён на JS и Perl, о чём я ни разу не пожалел.

Статья - чисто субъективное мнение. Быть может будет кому-то интересна. Но если вы не согласны - будет не плохо обсудить. Пишите комментарии, буду рад дискуссии.