(←) предыдущая запись ; следующая запись (→)
Личная история про воспроизводимость.
Ситуация:
Полтора года назад мы сделали тул и протокол для анализа данных рибосомного профайлинга. Для толстой монографии про этот самый рибосомный профайлинг.
Через год с лишним после принятия (sic!) статьи Springer соизволил-таки опубликовать его. Это не особенно важно для повествования, но теперь вы знаете, что Springer хуже, чем кажется. Их верстальщик, кстати, не осилил soft-breaks, поэтому команды из pdf-ки разумеется, невозможно скопировать без ошибок. Хотя казалось бы, куда уж хуже?!.
Но! Мы были достаточно прозорливы и все команды протокола опубликовали на гитхабе. Ссылку на него добавили в статью.
Спустя полгода после публикации (в том числе в бумаге, хе-хе…) мы обнаружили несколько ошибок, делающих протокол хуже, чем можно было бы. Ну и, чего уж там, просто багов. Баги мы, разумеется, поправили. Теперь с PyPi будет качаться обновленная версия тула, с гитхаба - обновленный протокол. А читатели, у которых есть лишнее время, чтобы копировать команды из статьи, получат устаревший код. Так им и надо!
За прошедший год разработчики Python исправили баг на своей стороне, благодаря чему формально некорректный, но благополучно работавший код стал падать с ошибкой. Но! Мы и тут подстелили себе соломы - у нас задокументированы все версии утилит, которые надо использовать, чтобы всё работало как надо. И описано, как создать воспроизводимое conda-окружение. Так сказать condom-изировали программу (простите).
Дальше нам нужно было протестировать исправленный протокол. За прошедшие полтора года я (разумеется) напрочь забыл, откуда достать исходные данные. Но! У нас написан скрипт, который позволяет выкачать исходные данные для статьи, не приходя в сознание, для себя ж делали. Мы в сознание вообще не часто приходим — полная удалёнка.
Резюмирую: если у вас существенную часть работы занимает компьютерная обработка данных, будьте как мы и делайте её воспроизводимой. Все три компоненты важны: программное окружение, код и данные. Эта инвестиция времени потом многократно окупится.
И сразу выкладывайте всё в публичный доступ. Только это поможет вам очистить свою совесть, если (когда) вдруг обнаружится, что у вас ошибка.
Хотел бы посоветовать вам не сажать багов, но будем реалистами. Программы бывают двух типов: с багами и те, которыми никто не пользуется.