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 довольно простой язык, поэтому привлекает большое количество народа, и если вдруг, в ближайшее время появится что-то более простое и удобное, эта контингентная прослойка моментально бросит питон. То есть дело, как обычно в самих людях.
При этом из-за низкого порога вхождения, постоянно идёт приток новых разработчиков в комьюнити. За счёт чего оно растёт и развивается. Ведь никому не нравится хочется столкнуться с нечто подобным.
Синтаксис
Часто люди не согласны мириться с синтаксисом Python, в особенности с пробелами. Выглядит чужеродно и неудобно. Я некоторое время преподавал программирование в заведениях дополнительного школьного образования.
Давайте сравним, как я пишу код на С++:
И как его пишут дети:
Теперь как я пишу код на Python:
И как его пишут дети:
То-то и оно. К пробелам можно привыкнуть за пару дней, а взамен за моральные страдания, вы получите чётко структурированный, лаконичный, легко читаемый программный код, причём он такой у всех программистов, независимо от их уровня. Кстати, у меня на канале также есть видео о том, как научиться ставить пробелы и табы в Python. Если ты новичок, советую ознакомиться.
А вообще, объективно говоря, на вкус и цвет товарищи разные. Думаю, про синтаксис мы закончили.
Типизация
Это одновременно и плюс, и минус. С одно стороны, безусловно, динамическая типизация тянет проблемы в очень крупных проектах и затрудняет тестирование. С другой же, проще даётся новикам, что обеспечивает приток новой крови в сообщество. Также динамическая типизация дает и несколько других бонусов в виде упрощения метапрограммирования, плюшек интроспекции и рефлексии. Также в Python 3.5 появились аннотации типов – type hinting. Да, это не панацея уровня TypeScript, но указание типов стало довольно приятным нововведением, значительно облегчившим жизнь, и программисты очень часто стали им пользоваться.
Если вы не согласны со мной или вам есть что добавить, то милости прошу в комментарии.
Заключение
Подытожить всё выше сказанное хочется фразой Страуструпа, создателя С++:
«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует».
И, как я сказал в начале текста:
«Python уже несколько лет держится в топе языков программирования».
menstenebris
— Что, солдат? Ссымся?
— Так точно. Ссусь.
— Ну это, солдат, не беда. Такая сегодня экологическая обстановка. Все ссутся. Я ссусь. И даже главком пысается, бывает. Но по ситуации. Что ж нам из-за этого, последний долг Родине не отдавать? Твой позорный недуг мы в подвиг определим, пошлем в десантники. Там ты еще и сраться начнешь.
(с) ДМБ