В современной научной практике все большую роль играют программное обеспечение и вычислительные методы, позволяющие проводить сложные анализы, моделировать процессы и получать результаты, которые невозможно было бы достичь без вычислительных технологий. Однако вместе с ростом сложности систем и масштабом используемого кода возникает важная проблема — как обеспечивать прозрачность и возможность понимания этих цифровых инструментов другими исследователями. Вопрос о том, как документировать и объяснять программное обеспечение и вычислительные процедуры так, чтобы коллеги могли убедиться в их корректности и использовать их в своей работе, остаётся актуальным уже несколько десятилетий. Сегодня мы рассмотрим исторические попытки решения этой задачи и современный взгляд на проблему с учётом новых технологий и идей, базируясь на последних исследованиях и опыте разработчиков научного ПО. Одной из радикальных проблем является непрозрачность как традиционного программного обеспечения, зачастую объёмного и многоуровнего, так и современных методов на основе искусственного интеллекта.
В последние годы широко обсуждается тема объяснимого искусственного интеллекта (Explainable AI), поскольку алгоритмы массово используются для принятия важных решений, при этом зачастую оставаясь чёрным ящиком для пользователей и даже исследователей. Однако стоит отметить, что схожая проблема существует у традиционного научного программного обеспечения. Даже если исходные коды доступны в открытом доступе, их величина и сложность не позволяют большинству пользователей в полной мере понять все используемые модели, гипотезы и скрытые предположения, заложенные в код разработчиками. В реальности же многие важные аспекты работы программ остаются недоступными для понимания или лёгкой проверки. Поэтому практика рецензирования именно исследовательского программного обеспечения как научного результата приобретает всё большую значимость и необходимость.
Однако для того, чтобы такой рецензирование стало возможным и эффективным, сама методика написания кода должна быть ориентирована на читаемость и понятность широкому кругу учёных, не обязательно обладающих высокой квалификацией в области профессиональной разработки ПО. Традиционные методы инженерии программного обеспечения, созданные для индустриальных проектов, не всегда подходят для научного контекста, где важна прозрачность и чёткое объяснение заложенных алгоритмов и идей. Этот вызов начал осознаваться ещё несколько десятков лет назад, что привело к появлению концепций, направленных на объяснимость и понятность кода. Одной из таких концепций стала идея литературы программирования, предложенная Дональдом Кнутом в 1984 году. Литературное программирование подразумевает интеграцию программного кода с его текстовым объяснением в едином документе.
Кнут считал, что программирование — это не только задача для машины, но, прежде всего, средство объяснения людям, чего именно должна достичь машина, и как это реализовано. Такая методика способствует тому, что код становится своего рода рассказом, доступным не только для компьютера, но и для исследователей, заинтересованных в понимании алгоритмики и логики решения. Системы типа WEB, созданные для поддержки литературного программирования, обеспечивают инструментальные средства разделения и одновременной работы с программным кодом и его комментариями. Известные примеры — программы TeX и Metafont, написанные Кнутом, которые получили высокую оценку именно за доступность и качество документации. Тем не менее, литературное программирование ориентировано в основном на статические артефакты — исходный код и документацию, которые не имеют непосредственного выполнения в контексте этого процесса.
Для полноценного понимания работы сложного программного обеспечения зачастую требуется не только читать код, но и запускать примеры, анализировать промежуточные результаты и видеть изменение данных под воздействием алгоритмов. Классические инструменты литературного программирования не поддерживают такой интерактивности, ограничивая возможности исследования и обучения. Следующий важный этап — появление вычислительных блокнотов, таких как Mathematica, MathCAD, и особенно широко распространённого сейчас Jupyter Notebook. Эти среды позволили объединить код, пояснения, результаты выполнения и визуализацию в одном документе, поддерживающем интерактивное исследование и презентацию данных. Блокноты стали цифровыми аналогами лабораторных журналов, позволяющими отслеживать ход вычислений и исследовательские шаги.
Их преимущество — возможность напрямую запускать ячейки с кодом, видеть результаты и визуализации, объединённые со связным повествованием. Однако вычислительные блокноты имеют свои ограничения. Главная их особенность — линейная структура, предполагающая последовательное выполнение команд и описаний. Это не всегда подходит для комплексных программных систем, где могут существовать несколько взаимосвязанных, но отдельных повествовательных линий, отражающих разные аспекты работы программ. Кроме того, блокноты не предоставляют простого способа доступа к более низкоуровневым библиотечным функциям, которые вызываются в их коде.
Пользователь не всегда может «кликнуть» на используемую функцию и перейти к её исходному тексту, чтобы детальнее понять механизм работы. Несмотря на то, что многие виджеты и интерактивные элементы позволяют управлять параметрами и визуализацией, сами их реализации скрыты и декодировать их невозможно напрямую из блокнота. Именно по этой причине вычислительные блокноты частично решают задачу логирования исследований и интерактивного анализа, но они недостаточно подходят для научных публикаций, ориентированных на широкий круг читателей и исследователей — своего рода публикаций вычислительной науки, которые объединяют код, данные и методы в понятной и устойчивой форме. Параллельно с этим развивается идея объяснимых образовательных материалов с интерактивными компонентами — так называемых «Explorable Explanations» (исследуемые пояснения). Это формат, в котором пользователь одновременно читает объяснения и экспериментирует с параметрами модели или алгоритма, получая мгновенную обратную связь.
Такой интерактивный подход значительно улучшает понимание, поскольку позволяет не просто пассивно ознакомиться с результатом, а прожить процесс познания и проверить гипотезы самостоятельно. Тем не менее, в реализациях explorable explanations акцент делается скорее на визуализацию и взаимодействие, чем на открытость и прозрачность самого программного кода, управляющего этими элементами. В последние годы появляются комплексные подходы к построению объяснимых программных систем. Они объединяют элементы документирования кода, интерактивных примеров, визуализаций, и автоматической генерации пояснений на основе работы самой системы. Такие решения снимают ограничение единственного линейного нарратива, позволяя создавать сложные, взаимосвязанные объяснения с возможностью глубокого изучения каждого компонента.
Одним из ярких примеров является Glamorous Toolkit, который предлагает расширенный интерфейс с множественными панелями просмотра объектов, интерактивными элементами и мгновенным доступом к исходному коду, обеспечивая уровень прозрачности на профессиональном уровне. Однако такие платформы пока что лучше всего подходят для использования внутри исследовательских коллективов или организаций, где члены находятся в тесном сотрудничестве и готовы вкладываться в поддержание и развитие программных компонентов. Для широкой научной аудитории, разобщённой по всему миру и работающей в долгосрочной перспективе, важны иные свойства — долговечность, доступность и стандартизация публикаций. Традиционные научные статьи в журналах остаются ключом к научной коммуникации, несмотря на то, что они сегодня чаще представлены в цифровом формате, часто в виде статических PDF-файлов без интерактивности и полноценной интеграции цифровых ресурсов. Проблема цифровой публикации в вычислительной науке — это не просто перевод текста на экран компьютера.
Здесь необходим комплексный формат, включающий код, данные, результаты экспериментов и средства для интерактивного исследования, которые будут доступны любому читателю без дополнительных технических барьеров. Таким универсальным решением становится использование веб-технологий, ведь браузер есть у всех, и он не требует установки специализированного программного обеспечения. Проект HyperDoc иллюстрирует попытку создать такую среду для публикации вычислительных исследований. HyperDoc комбинирует гипертекстовые страницы и программный код в едином репозитории, поддерживая ссылки и транслюцию (встраивание) результатов вычислений прямо в текст. Особенное внимание уделяется прозрачности: исходный код функций и классов доступен мгновенно, что позволяет читателю буквально «щелкать» по ссылкам и переходить к исходному коду, изучая детали реализации.
Технологии sandboxing ещё не реализованы полностью, поэтому публичное выполнение кода ограничено, но для локального использования сервис предоставляет все необходимые возможности для глубокого взаимодействия с материалом. Основой разработки HyperDoc стал язык Common Lisp — выбор автора продиктован двумя важными требованиями к языку: обширная поддержка интроспекции кода (что важно для создания динамических, легко исследуемых артефактов) и надёжность с точки зрения стабильности языка и библиотеки, что критично для долговременных публикаций в науке. В отличие от динамично меняющихся языков и библиотек, таких как Python, Common Lisp предлагает гарантии неизменности среды и позволяет создавать более устойчивые к изменениям публикационные системы. Этот аспект не менее важен, чем удобство восприятия кода и его понимания. Дальнейшие планы развития подобных систем ориентированы на создание полноценных цифровых публикаций — эквивалентов научных статей, монографий и учебников с интегрированными вычислительными модулями.
В перспективе важной задачей остаётся интеграция и стандартизация форматов, создание удобных сред для взаимодействия автора и читателя, а также обеспечение безопасности и доступности вычислений на серверной стороне. В конечном счёте, развитие объяснимого программного обеспечения и вычислительных методов — это путь к формированию нового языка науки, где код и данные воспринимаются как неотъемлемая часть научной коммуникации. Открытость, прозрачность и доступность цифровых артефактов способствуют не только воспроизводимости и проверяемости результатов, но и ускоряют развитие исследовательских направлений, повышая доверие к новым методам и технологиям в науке. Современные вызовы требуют от исследовательских сообществ совместных усилий по созданию и внедрению новых правил и стандартов, которые сделают программное обеспечение научных исследований доступным для понимания и анализа всеми заинтересованными сторонами. Технологические инновации, такие как литературное программирование, вычислительные блокноты, explorable explanations и комплексные объяснимые системы, должны быть объединены в единую экосистему, способную обеспечивать долговечность, интерактивность и прозрачность научных вычислений.
Таким образом, цель прозрачного и понятного научного программного обеспечения — не только техническая задача, но и культурный сдвиг в подходах к научной работе, когда программный код становится частью интеллектуального наследия, доступного и понятного всему научному сообществу.