Успех Python отражается в тенденциях Stack Overflow, рассчитанных по количеству тегов в постах, что является довольно хорошим показателем популярности языка, учитывая размер платформы.
Количество тегов у различных ЯП на 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 — очень медленный язык. В среднем ему требуется в 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.
На рынке ЯП появилось несколько новых конкурентов:
На рынке есть и другие языки, но именно Rust, Go и Julia восполняют недостатки Python. Все эти языки эффективны в технологиях будущего, особенно в искусственном интеллекте. Хотя их доля на рынке все еще невелика, что отражается в количестве тегов на StackOverflow, они неизбежно будут двигаться вверх.
Количество тегов у различных ЯП на StackOverflow.Учитывая повсеместную популярность Python в настоящее время, на его замену может потребоваться целое десятилетие.
На данный момент трудно предсказать, какой из языков встанет на его место — Rust, Go, Julia или новый язык будущего. Однако, учитывая проблемы с производительностью, которые являются основополагающими в архитектуре Python, он неизбежно сдаст свои позиции.
Перевод статьи Rhea Moutafis: Why Python is not the programming language of the future
Комментарии