Чему нас учит экосистема языка Python?

Чему нас учит экосистема языка Python?
Свой диплом по анализу зловредного сетевого трафика в 2009 году я писал на PHP и SQL в программе Weka (данные и текст диплома доступны тут ). Сегодня подобные задачи решаются в экосистеме Python.

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

В этой статье я приведу собственные аргументы и наблюдения.

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

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

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

Современная разработка научного программного обеспечения с открытым исходным кодом происходит взаимосвязанным образом. Рисунок иллюстрирует концепцию научной экосистемы Python. В основе стека лежит Python (классическая реализация на Си - CPython).


Ядро Python/CPython

Гвидо , автор языка Python, в далекие времена работал над ОС Амеба под руководством профессора Таненбаума. Да, это тот самый ученый, который вдохновил Торвальдса на создание GNU/Linux. Python по идее Гвидо должен был заменить bash, Си и ускорить написания прикладных утилит для ОС Амеба. Новый язык решил актуальную задачу.

В основе Python лежит язык ABC, который Гвидо проектировал когда-то для задач обучения программированию. ABC не стал популярен, так как, по одной из версий он не дожил до эпохи Интернета. Интересно, что до сих пор новые возможности Python соотносятся с позицией начинающего программиста и разработчикам языка удается удерживать низкий порог входа. Гвидо первоначально разработал встроенные инструменты ( редактор IDLE с интерактивным режимом) для обучения.

Гвидо не сразу, но выбрал лицензию PSFL , совместимую с GPL.

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

В состав Python входит большое число модулей для повседневной работы.

Гвидо предусмотрел возможность расширяемости Python с помощью модулей на языке Си, для этого существует детальное описание API . Это как раз помогло построить поверх Python новые модули.

Python включает (относительно) удобный встроенный менеджер пакетов .

Существует хранилище программного обеспечения для языка программирования Python ( Python Package Index ).

Рост популярности Python в первые годы появления, привел Гвидо в компанию Гугл, где он занимался облачными сервисами. Любопытно, что в это время западные вузы стали активно отказываться от обучения lisp-подобным языкам в пользу Python. Западное вузовское сообщество не долго сопротивлялось и постепенно перевело свои вводные ИТ-курсы на Python (в то время у нас преподавали С/С++ и Java), выросло поколение стартаперов со знанием Python. Затем Гвидо перешел в Dropbox, которая содержала ядро программистов на Python и активно участвовала в поддержке языка. Теперь автор языка на пенсии и присоединился к Микрософт в качестве заслуженного инженера , где занимается оптимизацией CPython.

Слой прикладных модулей в экосистеме

Выше над Python находится слой фундаментальных программных пакетов. Эти пакеты предоставляют полезные возможности для всей научной экосистемы. Например Numpy для n-мерных массивов, Matplotlib для построения графиков, Pandas для фреймов данных и Jupyter для интерактивных вычислений.

За каждым из пакетов стоит ученый-разработчик, который первоначально решал собственные научные задачи.
Перечислю некоторых:
- физик Фернандо Перез, автор IPython и Jupyter . Ныне Фернандо доцент в Беркли, где продолжает влиять на развитие Jupyter (идею блокнота взяли, кстати, у Вольфрама ) и инструментов для анализа данных.
- нейробиолог Джон Хантер, создатель библиотеки Matplotlib .  Документация выстроена вокруг примеров графиков .
- астроном Дж. Вандер Плас, создатель Google Colab, автор популярной книги по анализу данных .
- финансовый аналитик Уэс МакКинни, который взял за основу язык R и создал библиотеку pandas, написал первое руководство по pandas .
- бизнесмен и руководитель лаборатории биомедицинской визуализации Трэвис Олифант — создатель NumPy, один из основателей  SciPy, соучредитель фонда NumFOCUS ( годовой отчет ) и PyData, основатель Anaconda.

Здесь отдельного внимания заслуживает экосистема NumPy, представленная на рисунке .




На рисунке ниже перечислены библиотеки, которые построены на основе NumPy .




Слой специализированных проектов

Следующий уровень состоит из специализированных проектов, таких как Scikit-learn для машинного обучения или Dask для параллельных вычислений, на эти проекты полагаются другие участники экосистемы.

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

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

На современном этапе документация пакетов унифицируется благодаря поддержке фонда NumFOCUS.

Проблема установки и обновления экосистемы

На рисунке XKCD показана проблема установки перечисленных выше пакетов, у нее есть свое название "Dependency hell", когда необходимо установить сотни сторонних пакетов.



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



На этом завершаю обзор экосистемы Python. Получилось кратко, так как каждый модуль заслуживает отдельной статьи :)
Python
Alt text

Если вам нравится играть в опасную игру, присоединитесь к нам - мы научим вас правилам!

Подписаться

Дима Федоров

Open Source и аналитика данных в ИБ