Почему Python – не язык программирования будущего?

Сообществу программистов потребовалось несколько десятилетий, чтобы по достоинству оценить Python. Но с начала 2010-х годов он переживает бум – и в конечном итоге превосходит по популярности C, C#, Java и JavaScript.

Но до каких пор эта тенденция будет продолжаться? Когда Python в конце концов будет вытеснен другими языками и почему?

Установление точного “срока годности” Python было бы такой большой спекуляцией, что сошло бы за научную фантастику. Вместо этого я оценю достоинства, которые способствуют росту популярности Python сейчас, а также стороны, которые станут его слабым местом в будущем.

Что делает Python популярным в настоящее время

Успех Python отражен в трендах Stack Overflow, которые измеряют количество тегов в сообщениях на платформе. Учитывая размер StackOverflow, это довольно хороший показатель популярности языка.

Теги по различным языкам программирования на StackOverflow.

В то время как R в последние несколько лет стабилен в популярности, а многие другие языки неуклонно ее теряют, рост Python, похоже, неостановим. Почти 14% всех вопросов на StackOverflow помечены тегом “python”, и эта тенденция растет. На это есть несколько причин.

Он старый

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

Так что если у вас возникнет какая-либо проблема при написании скрипта на Python, велика вероятность, что вы сможете решить ее с помощью одного запроса в Google. Просто потому, что кто-то уже столкнулся с вашей проблемой и написал о ней что-то полезное.

Он удобен для начинающих

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

Для начала, нет необходимости указывать тип данных. Вы просто объявляете переменную; Python сам поймет из контекста, целое ли это число, число с плавающей точкой, булево значение или что-то еще. Это огромное преимущество для начинающих. Если вам когда-нибудь приходилось программировать на C++, вы знаете, как обидно, когда ваша программа не компилируется, потому что вы перепутали в коде значение с плавающей точкой и целое число

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

Он универсален

Поскольку Python существует достаточно давно, разработчики создали библиотеку для любой цели.

Хотите подсчитать числа, векторы и матрицы? NumPy – это то, что вам нужно.
Хотите делать расчеты для техники и инженерии? Используйте SciPy.
Хотите достичь успехов в работе с данными и анализе? Попробуйте Pandas.
Хотите начать с искусственного интеллекта? Почему бы не использовать Scikit-Learn.

Какую бы задачу вы ни пытались решить, есть вероятность, что для нее существует пакет Python. Это позволяет Python оставаться на вершине последних разработок, что видно по всплеску развития Machine Learning за последние несколько лет.

Недостатки Python и их фатальность

Основываясь на предыдущей информации, можно предположить, что Python будет оставаться на вершине еще долгие века. Но, как и у каждой технологии, у Python есть свои слабые стороны. Я пройдусь по самым значительным недостаткам, один за другим, и оценю, являются ли они фатальными или нет.

Скорость

Python медленный. Очень медленный. В среднем, для выполнения задачи на Python вам потребуется в 2-10 раз больше времени, чем на любом другом языке.

На это есть разные причины. Одна из них заключается в том, что язык динамически типизирован – помните, что вам не нужно указывать типы данных, как в других языках. Это означает, что необходимо использовать много памяти, потому что программа должна зарезервировать достаточно места для каждой переменной, с которой она работает в любом случае. А использование большого количества памяти означает большое количество вычислительного времени.

Другая причина заключается в том, что Python может выполнять только одну задачу за раз. Это следствие гибких типов данных – Python должен убедиться, что каждая переменная имеет только один тип данных, а параллельные процессы могут это испортить.

Для сравнения, ваш веб-браузер может запускать дюжину различных потоков одновременно.

Но, в конечном итоге, ни один из вопросов скорости не имеет значения. Компьютеры и серверы стали настолько дешевыми, что речь идет о долях секунд. И конечному пользователю неважно, загружается ли его приложение за 0,001 или 0,01 секунды.

Область действия

Первоначально Python был динамически масштабирован. Это означает, что для оценки выражения компилятор сначала просматривает текущий блок, а затем последовательно все вызывающие функции.

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

Python неудачно попытался перейти на статическое масштабирование. Обычно внутренние диапазоны – например, функции внутри функций – могут видеть и изменять внешние диапазоны. В Python внутренние области могут видеть только внешние области, но не изменять их. Это приводит к большой путанице.

Лямбды

Несмотря на всю гибкость Python, использование лямбда-функций довольно ограничено. Они могут быть только выражениями в Python и не могут быть операторами.

С другой стороны, операторы и объявления переменных всегда являются операторами. Это означает, что Lambdas не могут быть использованы для них.

Это различие между выражениями и операторами довольно произвольно и не встречается в других языках.

Табуляция

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

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

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

Мобильная разработка

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

Но не так много мобильных приложений разрабатывается на Python. Это не значит, что это невозможно – для таких целей существует пакет Python под названием Kivy.

Но Python не был создан для мобильных устройств. Поэтому, несмотря на то, что он может дать неплохие результаты при выполнении базовых задач, лучше всего использовать язык, созданный специально для этих целей. Среди широко используемых фреймворков программирования для мобильных устройств – React Native, Flutter, Iconic и Cordova.

Для ясности, ноутбуки и настольные компьютеры будут существовать еще много лет. Но поскольку мобильный трафик уже давно превзошел настольный, можно с уверенностью сказать, что изучения Python недостаточно для того, чтобы стать всесторонне опытным разработчиком.

Ошибки времени выполнения

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

Это хорошо для новичков, поскольку тестирование многому их учит. Но для опытных разработчиков необходимость отлаживать сложную программу на Python является неприятной трудностью. Этот недостаток производительности – самый большой фактор, который ставит “временную метку” на Python.

Что может заменить Python в будущем – и когда это произойдет?

На рынке языков программирования появилось несколько конкурентов:

  • Rust предлагает тот же вид безопасности, что и Python – ни одна переменная не может быть случайно перезаписана. Однако он решает проблему производительности с помощью концепции владения и заимствования. По данным StackOverflow Insights, это самый любимый среди пользователей язык программирования за последние несколько лет.
  • Go отлично подходит для начинающих, как и Python. Он очень прост, что позволяет легко поддерживать код. Интересный факт: разработчики Go – одни из самых высокооплачиваемых на рынке.
  • Julia – это очень молодой язык, который конкурирует с Python. Он заполняет пробел крупномасштабных технических вычислений: использование Python или Matlab, дополненное библиотеками C++, которые необходимы в больших масштабах теперь можно заменить Julia, чтобы избежать “жонглирования” двумя языками.

Хотя на рынке существуют и другие языки, именно Rust, Go и Julia являются аналогами Python, исправляющими его недостатки. Все эти языки преуспевают в новейших технологиях, которым еще только предстоит выйти в свет: прежде всего, в искусственном интеллекте. Хотя их доля на рынке все еще невелика, что отражается в количестве тегов StackOverflow, тенденция для всех них очевидна: рост.

Теги по различным языкам программирования на StackOverflow.

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

Что это будет за язык – Rust, Go, Julia или новый язык будущего – сейчас трудно сказать. Но учитывая проблемы с производительностью, которые являются фундаментальными в архитектуре Python, один из них неизбежно займет его место.

Перевод статьи «Why Python is not the programming language of the future».