Поздравляем Python с днем рождения с помощью мемов и объясняем их

Поздравляем Python с днем рождения с помощью мемов и объясняем их

Кроссплатформенный, интерактивный, интерпретируемый – все это характеристики языка программирования Python. Конечно, не питоном единым: мы в ABBYY работаем на C++, C#, JavaScript, ReactJS, Kotlin и некоторых других языках. Но с питоном у нас особые отношения: именно на этом языке наши разработчики и стажеры проверяют различные гипотезы и создают прототипы программ, которые затем могут войти в продукты для интеллектуальной обработки информации. Кроме того, в прошлом году наша опенсорсная библиотека NeoML обзавелась оберткой на Python. Это круто, потому что теперь разработчикам по всему миру осваивать библиотеку и ставить эксперименты стало еще проще.

20 февраля Python исполнился 31 год. Мы в ABBYY решили отпраздновать его день рождения мемами. А чтобы юмор понимали не только программисты, пригласили «пояснительную бригаду» из наших разработчиков.

Читайте, пишите комментарии, скидывайте любимые мемы – мы всегда рады пополнению коллекции.

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Борис
Senior Software Developer

«Благодаря простоте использования и большому количеству production-ready библиотек, Python – самый популярный язык в проектах, связанных с машинным обучением, и его частенько можно встретить в любых других «вычислительных» задачах. К сожалению, исполняется код на Python весьма неторопливо, и обычно на нем пишутся только обвязки (bindings) к производительным библиотекам на C/C++, где и выполняются все «тяжелые» вычисления. Так, например, организованы библиотеки NumPy, TensorFlow и ML-фреймворк ABBYY NeoML. Если данных довольно много, использование NumPy-массивов и функций вместо чистого Python может ускорить исполнение участка кода на порядок и больше! Хотя, конечно, обычно лучше провести замеры на своей задаче самостоятельно, а не полагаться на заявления из интернетов. Иногда чуда не случается, и производительность меняется не слишком заметно».

Петр
Senior Software Developer

«Древняя китайская мудрость гласит: чтобы ускорить код на Python, нужно максимально убрать из него Python. Делать это можно разными способами! Один из них – так называемая векторизация, при которой мы не пишем: «Пройди по всем элементам двух массивов и сложи их», а прямо так и говорим: «Сложи эти два массива», или, другими словами, два вектора. Такие операции в NumPy реализованы на C и вдобавок оптимизированы, например, с помощью SIMD-инструкций. Для большой доли задач это удобно, и к этому привыкаешь. Более сложные операции иногда ломают мозг – как, например, бывает в случае с функцией-швейцарским ножом numpy.einsum, – а какие-то алгоритмы векторизации не поддаются в принципе. Тогда на помощь приходят другие средства, такие как Numba или Cython. Первая делает подмножество Python компилируемым языком, в полном смысле этого слова, а второй подходит к вопросу с другой стороны, расширяя синтаксис Python и позволяя писать на чем-то среднем между Python и C/C++. Есть еще и альтернативные интерпретаторы, вроде PyPy, которые могут быть полезны в других сценариях – например, если речь идет не о машинном обучении и прочем «перемалывании чисел», а о веб-бэкенде. В общем, правда ли, что Python медленный? Да, но это поправимо! :)»

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Сергей
Head of Group, Visual Recording and Screenshot Analysis

«Лучшая мотивация изучать Python, которую я видел! То, что на Java с первого взгляда выглядит как профессиональный код, на Python выглядит как английский язык :)»

Кирилл
Senior Software Developer

«Этот мем связан с довольно старым холиваром о том, с какого языка начинать изучать программирование. Один из основных аргументов, которые приводят сторонники Python о том, почему он должен быть первым языком, лежит в плоскости того, что в нем можно взять и начать писать код, в отличие от приведенной на верхней части картинки Java, где человеку нужно объяснять, что такое class, что такое main и почему в аргументах в main должно быть прописано String [] args».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Петр
Senior Software Developer

«Если пишешь на языке ассемблера (а в вопросах оптимизации нет предела совершенству: ассемблерные вставки есть в коде NumPy и даже у нас в NeoML), ты идешь полностью «в рукопашную» с процессором. Главное не промахнуться… ни в чем!

Язык C – простой и понятный. Но все вручную! Интересный факт: в мире встраиваемого ПО до сих пор не все перешли на него с Ассемблера.

C++ – сложный язык, некоторые возможности которого до сих пор не «отпилены» только из-за обратной совместимости. Можно стрелять очередями, не отказывая себе в сторонних библиотеках и дорогостоящих возможностях языка, а можно выцеливать каждый выстрел.

Если с этой низкоуровневой точки зрения посмотреть, что позволяет вытворять Python… Можно испытать широчайший спектр эмоций. Предположу, что странное приспособление наверху устройства – это модуль multiprocessing запускает дочерние процессы для параллельной обработки, ведь сама эта самоходная конструкция, к несчастью, не может в потоки... Конечно же, пока на помощь не приходят Numba, Cython, иногда – NumPy, и другие».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Кирилл
Senior Software Developer

«Любители лезть со своим уставом в чужой монастырь никуда не исчезнут. Но если вы не хотите пользоваться чем-то, кроме Python, а очень нужно залезть в инфраструктуру .Net'а , то можно не реализовывать Python-подобный синтаксис в C#, а воспользоваться специально созданным для этого IronPython».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Кирилл
Senior Software Developer

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

Петр
Senior Software Developer

«Да ладно тебе, «нелогичность» :) На вкус и цвет все фломастеры разные. По-моему, автор как раз оценил замысел :)».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Борис
Senior Software Developer

«На Python написано много библиотек – на январь 2022 в Python Package Index их больше 350 000! Это поменьше, чем в npm у JavaScript, но скорее всего достаточно для решения вашей задачи: часто просто найти подходящую библиотеку и импортировать ее – половина дела. Кстати, вы действительно можете установить из PyPI библиотеку antigravity, а при исполнении «import antigravity» откроется небольшая пасхалка».

Кирилл
Senior Software Developer

«Думаю, «написано» надо завести в кавычки :)».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Сергей
Head of Group, Visual Recording and Screenshot Analysis

«Эта шутка становится особенно понятной, когда пытаешься исправить ошибку в Python-скрипте на удаленном сервере через консольный редактор. Не так посчитал пробелы – будет ошибка. А если интерпретатор до этого места доходит через несколько часов вычислений, то ... начинаешь любить Python чуть меньше, а страдать – чуть больше».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Борис
Senior Software Developer

«В объектно-ориентированном программировании для улучшения качества кода, то есть его читаемости, переиспользуемости, поддерживаемости, часто используются разные специальные приемы, например, использование интерфейсов и абстрактных классов. Абстрактный класс – это класс, у которого хотя бы один метод объявлен, но не определен, а интерфейс – это класс, все методы которого не определены и у которого нет собственных полей (атрибутов). От таких классов нужно наследоваться и переопределять их методы, так как их оба нельзя инстанцировать, то есть создать объект такого класса. Подробнее про их применение можно почитать, например, на Stack Overflow. Иногда считается, что уметь отличать абстрактный класс от интерфейса – признак хорошего тона :)

В синтаксисе некоторых языков, например, в C#, есть отдельные конструкции для объявления абстрактных классов и интерфейсов, но в Python их не завезли, хотя 20 лет назад некоторые даже хотели. Зато в Python есть модуль abc, входящий в стандартную библиотеку, который позволяет реализовать схожее поведение. Правда, абстрактные классы и интерфейсы в ней как отдельные концепты не существуют – так что, если упростить, можно считать, что в Python это одно и то же».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Кирилл
Senior Software Developer

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

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Сергей
Head of Group, Visual Recording and Screenshot Analysis

«Хороший способ сделать карьеру :). Впрочем, выше джуна так не прыгнешь, по крайней мере у нас в компании».

Поздравляем Python с днем рождения с помощью мемов и объясняем их
Борис
Senior Software Developer

«Во многих языках программирования логические операторы «и», «или» имеют стандартные обозначения, пришедшие из C – «&&», «||». Синтаксис Python разрабатывался, чтобы быть максимально простым и понятным при обучении (в том числе и детей), так что для этих операторов зарезервированы ключевые слова «and», «or».

29
8 комментариев

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

13
Ответить

Обожаю Python, но терпеть не могу, когда его противопоставляют Java, C/C++. Разные они, и созданы для разных задач. Python уместно сравнивать с perl, php, ruby, R (в контексте data science) etc.
Но язык прекрасный! И вот уже достаточно взрослый ))

8
Ответить

Мы вас конечно поздравляем, но идём изучать гошку 😄

7
Ответить

Вот преимущества питона как первого яп: непонимание типов данных, непонимание связей структур данных, непонимание абстракций, 95% питонщиков пишут в императивном стиле, им кто то сказал что питон объектный язык, но что такое объект спроси их и бэ мэ их ответ будет.

3
Ответить

1. А если все-таки не побояться и заглянуть в модуль typing? Прочитать о декларациях типов? На мой взгляд в python изящнее всего решена проблема типизации для контекстно типизированного (фактически нетипизированного) языка.
2. —-- //—-- в модуль collections? Ну и встроенные list, dict, set. И в copy.deepcopy заодно, чтобы не удивляться.
3. —-- //—-- в модуль abc? Вы не поверите! Это [A]bstract [B]ase [C]lasses.
4. 95% как считали? Декораторы, pydantic, dataclasses видели? С точки зрения парадигмы это - декларативный стиль. Про функциональный рассказывать? Есть такой: и лямбды, и partial, и map/reduce, и генераторы. Глубина рекурсии, правда, ограничена целым числом, но его можно изменить. Объектно-ориентированная парадигма тоже присутствует за исключением, пожалуй, сокрытия полей/методов (там соглашение о __dunder). Ну еще нюансы с super() и __mro__.
А вот, что такое "объектный" язык, я и вправду не знаю. Но, если что, все пользовательские классы наследуются от класса object. Это такой объект типа type )

Все, что упомянул, кроме pydantic, есть встроенные модули. Нормальный python-программер о них обычно знает, независимо от того: первый это язык или нет.
Вот чего python действительно не дает - это понимания интерфейсного (контрактного) программирования. Реализовать некое подобие через подмешивание классов с абстрактными методами можно, но как-то не принято это. Здесь явное лучше неявного ))

4
Ответить

Начинать с питона это как начинать работать сборщиком мебели по одним лишь икеевским шкафам. Так можно, и шкаф в итоге будет таки собран, но нормальным сборщиком мебели так точно не станешь.

1
Ответить

После c# изучение python - это такая боль (знаю по себе). В c# я всегда знаю что за тип передо мной, в python перед тобой может быть всё что угодно

3
Ответить