Чему нас учит экосистема языка Python?
Свой диплом по анализу зловредного сетевого трафика в 2009 году я писал на PHP и SQL в программе Weka (данные и текст диплома доступны тут). Сегодня подобные задачи решаются исключительно в экосистеме Python.
Python удалось обойти ключевые проблемы открытого программного обеспечения и занять новые ниши, для которых он не предназначался. Почему этот язык занимает первые строчки рейтингов?
В этой статье я приведу собственные аргументы и наблюдения.
Термин “экосистема” часто используется для описания современного научного программного обеспечения с открытым исходным кодом.
Википедия определяет экосистему как совокупность совместно обитающих организмов и условий их существования, находящихся в закономерной взаимосвязи друг с другом и образующих систему. s Современная разработка научного программного обеспечения с открытым исходным кодом происходит взаимосвязанным образом. Рисунок иллюстрирует концепцию научной экосистемы 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.
