Python

Причины популярности Python

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

Diagram of popularity of Python, C#, C++, Java, JavaScript, and R, from 2009 to 2020. Python is highest from 2018 onwards.
Количество тегов у различных ЯП на StackOverflow.

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

Проверка временем

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

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

Простота освоения

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

Не нужно указывать тип данных: вы просто объявляете переменную. Из контекста Python понимает, является ли она целым, плавающим или логическим значением, что представляет огромное преимущество для начинающих. Если вы уже работали на C++, то, вероятно, сталкивались с ситуациями, когда программа не компилируется из-за замены плавающего числа на целое.

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

Универсальность

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

Хотите сократить числа, векторы и матрицы? Вам подойдет NumPy!
Необходимо выполнить технические расчеты? Воспользуйтесь SciPy.
Хотите освоить манипулирование данными и их анализ? Присмотритесь к Pandas.
Хотите начать с искусственного интеллекта? Стоит попробовать Scikit-Learn.

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

Недостатки Python: станут ли они фатальными?

Как и у любой другой технологии, у Python есть свои слабые стороны. Рассмотрим главные недостатки и попробуем оценить, являются ли они такими существенными.

Скорость

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

На это есть несколько причин. Во-первых, он динамически типизирован — вам не нужно указывать типы данных, как в других языках. Эта особенность увеличивает затраты памяти, поскольку программе необходимо сохранить достаточно места для каждой переменной. В результате время вычисления также увеличивается.

Во-вторых, Python может выполнять только одну задачу одновременно. Причина в гибких типах данных — Python должен убедиться, что каждая переменная принадлежит только одному типу данных, а параллельные процессы могут этому помешать. Для сравнения: обычный веб-браузер может запускать с десяток различных потоков одновременно.

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

Область видимости

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

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

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

Лямбда

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

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

Пробелы

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

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

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

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

Из-за активного перехода от компьютеров к смартфонам возрастает потребность в надежных языках для создания мобильного ПО. 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, они неизбежно будут двигаться вверх.

Diagram of popularity of Go, Rust, and Julia, from 2009 to 2020.
Количество тегов у различных ЯП на StackOverflow.

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

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

Читайте также:


Перевод статьи Rhea Moutafis: Why Python is not the programming language of the future

Предыдущая статьяИспользование строк в Rust
Следующая статьяR - язык для статистической обработки данных. Часть 2/3