Почему 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 комментариев
Написать комментарий...
сеня петров

Не являюсь IТ-специалистом, да и вообще мало смыслю в этой теме. Но считаю, что ответ один - потому что время идёт. Когда-то Паскаль и Бертран считались самыми используемым языками. А теперь где они? Разве что в средних школах на допотопных компах. То же самое будет и с Питоном, Джавой, С и прочими. А на смену им придут новые языки. 

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

Паскаль до сих пор преподают как начальный язык, а Delphi (это паскаль на максималках) сейчас позволяет делать такие вещи, которые не то что питону, но и с# сложнодостижимы.

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

Так и запишем, некрофилия и отсутствие кругозора.

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

Ты - идиот? Во-первых, я пишу на разных языках. Во-вторых, это ты не понимаешь, что такое Delphi. Который обновляется, к сведению каждые четверть года. Недавно вышла новая версия среды. RAD Studio 10.4. Delphi сейчас кроссплатформенный язык. Это у тебя кругозор сужен. Иди почитай о возможностях языка или новости посмотри.

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

Да мне этого достаточно

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

Так и запишем, "идиот".

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

Почему идиот?

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

Ну вот смотри. Кто-то, а возможно и ты сам, придумал приложение. Классное и пока уникальное. Что ты будешь делать? Правильно, писать.

Или вот. Клиент хочет приложение, даёт тебе тех. задание и требования само-собой. 

Где в этих случаях определяется конкретный язык?

Тебе это будет важно в твоём проекте? Например, Delphi. Ты пишешь программу на FMX. Отлаживаешь её под виндой с полноценным отладчиком. Далее, компилишь её под андроид, иос, линукс. Готово. Проект будет работать везде, не требуя ни каких предустановок. Ни дот нет, нужной версии, ни qt библиотек и будет весить мегабайт 20 на винду (на остальные платформы зависит от самих платформ)

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

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

Странно, что общество не ценит такой замечательный язык. Работы мало, в индексах популярности плетётся на последних местах.
http://pypl.github.io/PYPL.html

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

Потому что компания, которая имеет монополию на язык и на среду (в тот момент Borland Delphi 7) была выкуплена, а один из основателей языка был перетянут Microsoft, кстати именно он сейчас работает на C#. Новый владелец долгое время ничего не делал, а среда, которая кстати до сих пор работает, кем-то используется и всё ещё позволяет создавать приложения не получала развития. Никакого. Были какие-то выпуски, но лишь для смены визуала самой среды. И эксперимент в виде .NET версии среды (странная дичь).
А буквально лет 6-7 назад, компания таки начала активную разработку самой среды и нововведений в сам язык. Сделали упор на кроссплатформенность и всего за пару лет добились работоспособности на всех популярных платформах. 
Сейчас среда обзавелась массой возможностей, нативные скины под VCL, гибкая система скинов под кросплатформ (FMX). Возможность разработки разных компоновок окна под разные платформы, размеры или DPI. И всё это единственным проектом и одной кодовой базой. Ничего не нужно переписывать или дописывать под конкретную платформу. 
Например, я буквально за 2 дня написал плеер для вк, без рекламы и других ограничений, под винду и андроид. Многопоточное, универсальное приложение с OAuth2 авторизацией, без костылей и всяких проблем. 

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

истенно так ,потому что даже Юнити - это по факту собственость макрасофт .выбора особоа нет ты или раб макрасофта ли рабыня гугла плея....или визуал студия или СДК Андроид

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

Ну я могу все это из Delphi делать. Там даже есть живая настройка сцены как в игровых средах.
Без прямой привязки к Android SDK. Хотя без него конечно не соберёшь проект, но он нужен косвенно.

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

Ну если он так хорош, то люди подтянутся. В общем время рассудит.

Ответить
Развернуть ветку
Честный Человек

Согласен, Delphi хорош... но дорого :-( 
Из-за легализации Delphi, я  перешёл из делфистов в WEB-программисты, теперь показывают в браузере то что года-то показывал в windows-приложении, все инструменты бесплатные.
Ну и с предложениями о работе нет проблем, так как использую современный востребованный стек технологий.

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