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

Команда Mail.ru Cloud Solutions перевела колонку Rhea Moutafis «Why Python is not the programming language of the future». Автор перевода не всегда разделяет мнение автора статьи.

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

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

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

Популярность языка программирования можно отследить по динамике количества тегов на самом востребованном у разработчиков ресурсе — Stack Overflow. Так, судя по графику, рост Python начался с 2010 года, а стремительным он стал в 2015 году. В то время как R в течение последних нескольких лет находится на плато, а многие другие языки находятся в упадке. У такой популярности Python есть причины.

Популярность языков программирования на Stack Overflow

Время существования

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

Если у вас появится какая-то проблема с этим языком, то решить ее, скорее всего, получится примитивным поиском в Google — наверняка кто-то уже опубликовал мануал с алгоритмом и примером кода.

Простота

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

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

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

Код Python довольно просто читать. Просто сравните синтаксис Python и C++.

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

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

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

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

Недостатки Python, которые могут уничтожить этот язык

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

Скорость

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

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

Конечно, вы можете возразить — кого сейчас волнует эта скорость, ведь компьютеры и серверы стали такими мощными, что в итоге «медленно» означает выбор между загрузкой приложения за 0,01 секунды или 0,001 секунды. Действительно, конечному пользователю нет разницы.

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

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

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

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

Лямбда-функции

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

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

Пробелы

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

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

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

Пробелы делают код более читаемым, но менее удобным в сопровождении Irvan Smith на Unsplash

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

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

В Python такая возможность как бы есть — пакет под название Kivy. Но нужно учитывать, что Python не был создан для мобильных устройств. Использовать его можно, результат будет даже приемлемым, но зачем, когда можно взять более подходящий язык, созданный для разработки мобильных приложений. Например, фреймворки для кроссплатформенной мобильной разработки: React Native, Flutter, Iconic и Cordova.

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

Ошибки во время выполнения (Runtime Errors)

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

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

Что может заменить Python в будущем

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

  • Rust — в нем так же, как и в Python, переменная не может быть случайно перезаписана. Но за счет концепции владения и заимствования в Rust решена проблема с производительностью. Кстати, именно Rust разработчики называют самым любимым языком.
  • Go стоит рассматривать начинающим разработчикам. Он довольно прост в освоении, поддерживать код тоже не трудно. Плюс разработчики на GO сейчас одни из самых высокооплачиваемых.
  • Julia подходит для крупномасштабных технических вычислений. Раньше для этого нужно было использовать Python или Matlab плюс библиотеки C++. После выхода Julia потребность в жонглировании языками отпала.

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

Динамика роста на Stack Overflow

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

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

Что еще почитать по теме:

0
125 комментариев
Написать комментарий...
Алексей Евтеев

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

Ответить
Развернуть ветку
Геннадий Малинин

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Геннадий Малинин

Не усложнит. А ещё есть Паскаль

Ответить
Развернуть ветку
Alexey

Паскаль морально устарел давным-давно. Про ООП просто смешно. Давайте учить школьников пихать классы везде, где можно и нельзя,при том, что в 70% случаев ООП спокойно заменяется тем же функциональные программированием без потери в производительности/читабельности.
По типизации согласен, но это не значит, что нужно сразу учить ради этого C/C++. 

Ответить
Развернуть ветку
Геннадий Малинин

Чем устарел паскаль?

Ответить
Развернуть ветку
Alexey

Как минимум тем, что есть более быстро развивающиеся аналоги, которые не дадут ни Object Pascal/Delphi, ни его не-ООПшному старшему брату занять сколь-нибудь значительную нишу на рынке. 
Я согласен, что для изучения алгоритмов и самой базы Паскаль хорош, однако только на этом самом базовом уровне. 
В Delphi я со своей колокольни вижу пока только один плюс - наличие нативного конструктора, который таки неплох (и опять же, есть сильный аналог в виде Qt). 

Ответить
Развернуть ветку
Геннадий Малинин

Delphi позволяет писать приложения для всех платформ одной кодовой базой. Т.е. код будет работать на всех платформах одинаково. Ты вообще не понимаешь о чем говоришь. Ты и понятия не имеешь о возможностях Delphi

Ответить
Развернуть ветку
Alexey

Ну на "ты" мы, вроде, не переходили.
Конечно, я не работал ни с Borland Pascal, ни с Object Pascal, ни с Python. Просто так зашёл в комментарии повыделываться. 
Вот незадача, абсолютное большинство проектов на питоне спокойно имеет себе кроссплатформенность. В некоторых случаях для этого даже не требуется pyinstall. Сомневаюсь я в Вашем реальном рабочем опыте, ох сомневаюсь. 

Ответить
Развернуть ветку
Геннадий Малинин

Кроссплатформенность питона обеспечивается исключительно тем, имеется ли интерпретатор на целевую платформу. В то время как на Delphi программы работают независимо от того, что установлено. Питон - это просто скрипт. Он в принципе не зависит от платформы. 
Но ты действительно не понимаешь о чем говоришь.
Особенно на это указывает то, что ты сравниваешь Turbo Pascal и Delphi. Это совершенно разные языки. С совершенно разными возможностями. 
 Для того, чтобы что-то вам хоть отчасти понимать, погуглить RAD Studio. Посмотрите часть возможностей. FMX, нативность и отсутствие зависимостей исполнительных файлов. 
Я профессионально занимаюсь программированием на Delphi, разрабатываю программы для интернет провайдера и занимаюсь сторонними проектами. 
Так что посмотрите для начала на этот язык, а потом пробуйте что-то аргументировать.  

Ответить
Развернуть ветку
Valentine Bobrovsky

Твой технологический стэк отлично объясняет твое невежество и старческий максимализм своего яп.

Ответить
Развернуть ветку
122 комментария
Раскрывать всегда