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

IT Boroda

visibility
14 Янв 2020
Даже если он будет пользоваться большим спросом еще несколько лет

502


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

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

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


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


503


Моментальный снимок тегов на различных языках программирования на StackOverflow.
В то время как R был плато в течение последних нескольких лет, и многие другие языки находятся на устойчивом спаде, рост Python кажется неудержимым. Почти 14% всех вопросов StackOverflow помечены тегом "python", и тенденция идет вверх. И тому есть несколько причин.


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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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


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

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

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



504


Пробелы делают код более читаемым, но менее ремонтопригодным.
В 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++, которые необходимы в крупном масштабе. Теперь можно использовать Джулию вместо того, чтобы жонглировать двумя языками.
В то время как на рынке есть и другие языки, Rust, Go и Julia-это те, которые исправляют слабые патчи Python. Все эти языки преуспевают в будущих технологиях, особенно в области искусственного интеллекта. Хотя их рыночная доля все еще невелика, что отражается на количестве тегов StackOverflow, тенденция для всех них очевидна: вверх.


505


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

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