Главная

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

Даже несмотря на то, что на него будет большой спрос в последующие пару лет

Поделиться:
 

10+

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

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

Почему Python так популярен сегодня?

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

В то время как язык R в течение последних нескольких лет находился на плато, а популярность многих других языков неуклонно падала, рост Python был неудержимым. Почти 14% всех вопросов на StackOverflow имеют тег «python», и эта тенденция только растет. Тому есть несколько причин.

Он довольно старый

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

Низкий порог входа

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

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

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

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

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

Хотите поработать с числами, векторами и матрицами? NumPy — отличный выбор.
Хотите делать расчеты в инженерном деле? Используйте SciPy.
Хотите заниматься анализом данных и работать с большими данными? Окей, попробуйте Pandas.
Разработка искусственного интеллекта? Что насчет Scikit-Learn.
Какой бы ни была ваша проблема, есть огромная вероятность того, что для ее решения есть библиотека Python.
Большой спектр библиотек позволяет Python оставаться в тренде последних разработок, что доказывает всплеск машинного обучения в последние несколько лет.

Недостатки Python — станут ли они фатальными?

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

Скорость

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

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

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

Область видимости (с англ. Scope)

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

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

Lambda функции

Несмотря на всю гибкость в Python, использование lambda-функций довольно ограничено. Lambda в Python могут быть только выражениями, но не операторами. С другой стороны, декларирование и переменных, и выражений — это всегда выражение, что означает, что lambda функции не могут быть использованы для них.
Это различие между выражениями (с англ. expression) и утверждениями (с англ. statement) довольно произвольное и не встречается в других языках.

Пробелы

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

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

Разработка мобильных приложений

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

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

Вот несколько фреймворков, которые широко используются для разработки софта под мобильные устройства: React NativeFlutterIconic и Cordova. Да, ноутбуки и настольные компьютеры будут существовать еще много лет, но поскольку мобильные устройства уже давно превосходят пк/ноутбуки по трафику, можно с уверенностью сказать, что изучения одного лишь Python недостаточно для того, чтобы стать опытным всесторонним разработчиком.

Runtime ошибки

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

Что сможет заменить Python в будущем и когда это случится?
В нише языков программирования появилось несколько весомых конкурентов:
1. Rust обеспечивает такой же уровень безопасности, как и Python — никакая переменная не может быть случайно перезаписана. Но это решает проблему производительности с концепцией собственности и заимствования. Согласно StackOverflow Insights, это также самый любимый язык (“most-loved”) программирования последних лет.
2. Go отлично подходит для начинающих как, собственно, и Python. Интересный факт: разработчики Go — одни из самых высокооплачиваемых программистов на рынке.
3. Julia — очень новый язык, который также конкурирует с Python. Julia заполняет пробелы в крупномасштабных технических вычислениях: обычно для этих целей использовался Python или Matlab в связке со сторонними библиотеками C++. Теперь для этих же целей можно использовать один язык (Julia) вместо двух.
RustGo и Julia исправляют слабые стороны Python. Все эти языки хорошо справятся с технологиями будущего, особенно в искусственном интеллекте. Хотя их доля на рынке все еще невелика, что отражается в количестве тегов StackOverflow, тенденция всех их ясна: уверенный рост.

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

10+