Данная статья - моё личное мнение. Более того, я Python программист, который начинал использовать язык с первых версий. Сейчас я активно использую NodeJS и JavaScript в повседнейвной работе. И я не могу сказать, что жалею о смене языка программирования.
В то же время - статья носит субъективный характер и не претендует на истину. Она является скорее "мыслями в слух", чем каким-то авторитетным мнением.
Почему Python популярен среди community
Я не буду рассказывать историю появляения языка. Всё же wikipedia никто не банил в нашей стране, любой желающий может ознакомиться с исторической справкой и без меня.
Лучше ответим на вопрос: "Почему многие выбирают Python?"
- Он очень простой. На самом деле. Писать на Python может любой человек, который прочитает не сложные туториалы.
- Для него есть куча бибилиотек, которые позволяют упростить разработку
- Для него есть прекрасные IDE, которые сильно упрощают жизню
- Для него разработан прекрасный стандарт (PEP8), который помогает писать поддерживаемый код
- У него есть возможность использовать С/С++ библиотеки, через FFI
- Есть огромное число документации, обучающих материало и т.п.
- Очень мощный и агрессивный маркетинг. Рекламные площадки пестрят информацией о курсах на 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 и его проблем. Это именно то, что я считаю не достойным и не имеет никакого отношения к истине, которую я, конечно, же не знаю.
- Синтаксис с отступами. Да, одна из главных фишек синтаксиса языка мне стала быть банально не удобной. Я заметил, что читать код оформленный в {} куда более просто и приятно, нежели то, что мне предлагаю Python. Аргументация в виде "зато следит за стилем написания" для меня перестала иметь смысл, как только я настроил для JS/NodeJS нормально ESLint и прехук для git.
- Отсутствие private методов и свойств. Это раздражало и на JS тоже (но чуть меньше, ибо можно было сделать защищенные методы и переменные через замыкания), хочу заметить (и решилось относительно недавно, за счёт добавления в стандарт настоящих приватных методов и свойств(которые начинаются с "решётки" и не доступны без гетеров/сетеров).
- GIL. Блокирующий интерпретатор VM является достаточно большой проблемой. До появления Asyncio было просто невозможно без массы дополнительных библиотек ускорить Python (отсюда и необходимость в том же Tornado). Скорость работы Python достаточно низкая, а фреймворки типа Sanic на самом деле являются просто серверами, написанными на другом языке и использующие Python в качестве скриптового языка. В таких случаях у меня всегда возникает вопрос - а зачем мне "клей" и не лучше ли взять нормальный инструмент.
- Отхождение от собственного дао. Чтобы оставлять Python простым для начинающих разработчиков создатели языка начали "пихать" в язык массу специального сахара для реалзации простой типовых вещей. При этом семантика часто отличается, а главное - теперь стало несколько способов сделать одно и то же, и так же как в Perl не очевидно какой способ лучше. Тогда в чём профит от примитивизма?
- Мутабельность. При разработке HiLoad сервисов я понял на сколько ценными инструментами являются асинхронные функции и возможность параллелить выполнение чего-то. И важной частью в этом является возможность сделать данные иммутабельными. JS это умеет из коробки. Python - нет лаконичного и простого способа (быть может я его не нашёл).
- Убогие лябды. В python они могут быть только однострочными. А мне часто надо было более одной строки. Можно, конечно, сделать для этого отдельную функцию, но зачем?
- Низкий уровень в среднем по больнице у сообщества. Большая часть программистов достаточно низкого уровня. Многие пришли с не профильных специальностей и плохо понимают теорию. Они скорее кодеры, нежели программисты. Отсюда - найти полный ответ на просторах сети (с пояснением почему так, а не по другому) - достаточно сложно.
- Модули даже для самых простых задач. Часто в Python уже есть модуль решающий не большую, типовую проблему. Часто - по сути, он добавляет просто сахар для языка, которого нет и не будет никогда. И, в дополнене, из пункта 7 мало кто задумывается как это работает и можно ли было сделать лучше. Получаем проблему оптимизации.
- Культ. Python сообщество всё больше напоминает религиозную секту, где всё подряд решается пакетами и есть пакеты, которым принято поклоняться. На любую задачу Web берите Django и не смейте критиковать. Она прекрасна. Не смейте критиковать GIL, это единственный правильный подход. И так далее.
Все это в целом и сподвигло меня, вот уже более пяти лет писать на NodeJS и больше никогда не возвращаться к Python.
Для меня роль Python стала предельна мала. В моих рабочих проектах он используется для бизнес-логики, а в pet-проектах он был заменён на JS и Perl, о чём я ни разу не пожалел.
Статья - чисто субъективное мнение. Быть может будет кому-то интересна. Но если вы не согласны - будет не плохо обсудить. Пишите комментарии, буду рад дискуссии.