Почему питон говно

Почему питон говно

Почему 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 есть несколько свойств, которые помогли ему стать популярным языком. Но есть и слабые места, которые уничтожат его в будущем.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Единственная верная предъява это скорость.
Но почему проблемой являются отступы вместо скобок или динамическая типизация? Отступы в любом случае придется делать, иначе код станет не читаемым.
Компилятора нету? А как же Numba или PyPy? Да пускай не идеальные компиляторы, но питон на скорость не претендует.
Runtime error это вообще смех, да грех, вы два раза написали о том, что питон интерпретируемый язык?
Go не заменит питон, так как он строго типизированый и далеко не такой простой как python про julia уже более правдеподобно, но ближайшие года julia будет только набирать обороты. Как Rust может заменить python, если это конкурент c/c++, а не python.
Статья бредовая.

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

Проблема отступов для управления блоками кода:

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

2. Могут быть проблемы при банальном мерже: Например у вас есть функция один разработчик вставил в начало условие — все тело +1 отступ, другой в середину функции добавил оператор — у него отступы были старые. Автоматической слияние пройдет отлично, но код работать не будет.

ох уж эти жёлтые заголовки
питон очень сильно ушёл в data science и стал чем-то вроде пыхи в плане порога вхождения
никто его уже там не заменит в виду тонн кода и библиотек и будущее питона именно за ds
одновременно сильно сдал позиции в веб, из-за чего я сам перешёл с него на java

D может заменить. В общем он сейчас на это и претендует.

А в чём собственно говоря приемущество отсутствия строгой типизации и нормального форматирования кода в виде фигурных скобок?
Типы в питоне и так есть, просто в нормальных яхыках, вы читаете код, вы понимаете где и какой тип возвращаеться, а в питоне пойди угадай, что возвращает функция GetVasia(). Т.е. я абсолютно не понимаю, какую проблему решает тот факт, что не надо объявлять типы? Вы всё равное не сможете совершать операции над разными типами данных, ибо это приведёт в исключению выполнения, какой тогда в этом смысл? С каких пор int x = test.GetVal() стало блин хуже чем x = test.GetVal() .
Фигурные скобки. серьёзно. я конечно понимаю, что типичный код пайтон-разработчика — подключить 1000 библиотек, и написать something = DoAmazingThings(), но вы попробуйте на пайтоне написать больше 30-50 строчек кода. у вас глаза на лоб вылезут, пока вы поймёт где какой отступ был сделан, и какая часть кода к какому "блоку" относиться. В чём сложность использования нормальных фигурных скобок для визуального разграничения блоков кода?
Ну так вообще, у пайтоне есть своя ниша, это ХэллоВорлд приложения с использованием очень богатых библиотек, т.е. как язык что бы показать своей бабушке, какой у неё умный внучек, какие нейросети делает — самое то. Но когда я вижу +- серьёзные приложения на пайтоне. бууээээ. Понятия не имею, зачем это делают.
ах да, в качестве первого языка брать пайтон — хреновая идея. Это как учиться ездить на машине сразу с автомата — ездить уметь будешь, но посади тебя за механику, повесишься.

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

Уже три года пишу на питоне, и никогда не возникало проблемы с отступами. Если уж совсем всепечально, есть прекрасные IDE (например, PyCharm), который все делает за Вас.
С++ код не требует соблюдать отступы, чтобы код работал, но все нормальные разработчики их делают, причем стараются соблюдать конвенцию (2 или 4 пробела, например) и почему-то никто не кричит о том, что: "Ааа, это кошмар, попробуй уследи за всеми этим отступами!"

Долгое время я писал на C++ и никакого дискомфорта не испытываю от того, что в Питоне скобок нет. На мой взгляд наоборот очень классно, что блоки выделяются пробелами, и этого достаточно. Философия Питона — это практичность. Зачем тогда добавлять ещё одну сущность в виде скобок для выделения блока?

Насчёт ниши Питона. Ну тут даже комментировать нет никакого желания, просто дам реплику: Java для тех криворуких, кто не смог освоить С++ и управление памятью вручную. (Сарказм, ага)

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

Python плохой язык?

Где ты в Python возможности увидел?
Сферы применения — по большому счету только бек-енд. А там есть PHP, Node.js, Ruby, C++. Первый способен дать тебе кучу разных проектов в Web’е, второй — кучу разных проектов во всех областях. С третим и четвертым и кучи не надо — они дадут немного проектов, но таких, где тебе цены не будет (особенно C++ -большинство даже не поймет, как на нем вообще бек-енд писать). А Python просто еще один язык под бек-енд и ничего больше.

«а главное простота» — проще чем что? PHP еще проще, JS тоже не сложен.
Зато в Python многое не как в нормальных языках:
https://otvet.mail.ru/question/217450780
То есть не только сам мало на что годен, но и сочетать с чем-то другим его труднее, чем нормальный язык.

*Самый лёгкий в изучении

*Даст основы 70% всех языков программирования

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

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

Он хорош но имеет недостатки:

*Работает медленнее java в 5-6 раз

*Работает медленнее C++ в 9-10 раз

*Он не для серьезных мощных игр или слишком мощных программ

*Часто ошибки видны только после того как запустите программу а не до ее запуска и за того что Пайтон очень шедяший

*На нем нельзя делать приложения для мобильных и иногда приходится подстраиваться под операционную систему

Он отлично подходит для создания программ которые не требуют слишком много мощность или скорость так как разница скорость в 1-2 секунды не один человек не заметит.

Он хорошо для быстрого создания программ — скорость производства и лёгкость за которую платишь медленным запуском функции.

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

«За что вы так меня не любите?» (с) Python

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

те, кто Python боготворят;

те, кто делают вид, как будто его не существует, или о нём практически не слышали;

те, кто ненавидит Питон всем сердцем.

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

Скорость

Наверное, каждый слышал, что Python медленный и уступает в скорости другим языкам по типу С++, С# и т.д.

Отрицать это глупо, однако дьявол, как обычно, в деталях. Python интерпретируемый язык, он по определению не заточен под разработку проектов, специфика которых требует межгалактической скорости. Если используют для других целей и проектов. Там, где это нужно, все узкие, критические для производительности места и библиотеки (например, Numpy) обычно пишут на С или Fortran и оборачивают в питон-код. А в большинстве оставшихся мест это скорость-то особо не нужна или не сильно критична. Кстати, если всё-таки кровь из носу нужно повысить производительность, никто не запрещает использовать другие реализации интерпретатора, например, PyPy, Stackless, Numba и т.д.

К слову, Python далеко не самый медленный язык по сравнению с конкурентами в «своей весовой категории», взять те же PHP и Ruby.

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

Ниша Python – это веб, скриптинг и Data Science. Он хорош именно в этих сферах. Если тебе нужны сложные вычисления, CPU-bound задачи, то тебе надо смотреть в сторону свеженького Rust или С/С++. Никто не заставляет писать highload на Питоне. Поэтому попытки ругать Python за скорость схожи с ситуацией, когда ты покупаешь кроссовки на два размера меньше и ругаешь потом фирму за то, что в кроссовках их производства неудобно ходить. Или пытаешься гонять в футбол в свадебных туфлях с носами. Ну вы поняли.

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

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

Проблемы с многопоточностью и GIL (запрещенная на территории РФ организация)

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

Если тебе обязательно нужно миллион виртуальных потоков, то просто используй Elixir, Erlang или Go. Они с прицелом на это и создавались. Зачем ты ругаешь дуршлаг за то, что вода из него утекает? Ругать надо себя, если ты, будучи «крутым прогером», не способен подобрать подходящий инструмент или перестроиться под особенности задачи.

Допустим, в процессе обработки запроса будет сделано несколько обращений, к API, к базе данных или кэшу. Сервера могут быть сколь угодно быстрыми, но всё упрётся в скорость передачи данных по сети и ожидание ответов от сервисов. В I/O-bound задачах (на которых Python и применят чаще всего) потоки питона отлично работают, для CPU-bound Python и не предназначен. Кстати, в альтернативу потокам без каких-либо ограничений можно плодить процессы. Да, они заметно тяжеловеснее, однако при грамотном менеджменте и работе с ресурсами можно добиться довольно эффективной работы. Просто надо немного подумать, это вам не просто библиотеки импортировать)

Низкий порог вхождения

Не сказал бы, что это ужасный минус. Но большинство людей говорят, что Python плодит низкоквалифицированных разработчиков, которые способны только импортить библиотеки, где всё уже сделано за них и всё готово. Знаете, еду из ресторанов, пакетиков, Макдоналдса и другого фастфуда готовить тоже не надо. Всё уже собрано, разложено и пожарено. Надо лишь заказать, сделать импорт, если вам угодно. Только вот почему-то не все люди используют готовую пищу. Многие готовят самостоятельно, зачастую сильно заморачиваются в поисках качественных продуктов, способа приготовления, стараются питаться правильно и экологично. Однако они могут позволить себе съесть фастфуд или заказные блюда в редких случаях, зачастую под какой-то повод или, например, вынуждено перекусить на ходу.

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

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

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

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

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

Скриншот сделан 12.04.2021

Синтаксис

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

Давайте сравним, как я пишу код на С++:

И как его пишут дети:

Теперь как я пишу код на Python:

И как его пишут дети:

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

А вообще, объективно говоря, на вкус и цвет товарищи разные. Думаю, про синтаксис мы закончили.

Типизация

Это одновременно и плюс, и минус. С одно стороны, безусловно, динамическая типизация тянет проблемы в очень крупных проектах и затрудняет тестирование. С другой же, проще даётся новикам, что обеспечивает приток новой крови в сообщество. Также динамическая типизация дает и несколько других бонусов в виде упрощения метапрограммирования, плюшек интроспекции и рефлексии. Также в Python 3.5 появились аннотации типов – type hinting. Да, это не панацея уровня TypeScript, но указание типов стало довольно приятным нововведением, значительно облегчившим жизнь, и программисты очень часто стали им пользоваться.

Если вы не согласны со мной или вам есть что добавить, то милости прошу в комментарии.

Заключение

Подытожить всё выше сказанное хочется фразой Страуструпа, создателя С++:

«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует».

И, как я сказал в начале текста:

«Python уже несколько лет держится в топе языков программирования».

Ссылка на основную публикацию