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

Аноним Автор

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


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


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


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


Успех Python отражается в трендах Stack Overflow, которые измеряют количество тегов в сообщениях на платформе. Учитывая размер 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, тенденция для всех них очевидна: рост.


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


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