quarto/dist/Writing/documentation.html
2025-06-05 19:17:37 +02:00

1800 lines
152 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="description" content="Ein Überblick und Best Practices für die Dokumantation von Forschungssoftware.">
<title>Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities) Nicole Dresselhaus</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../site_libs/clipboard/clipboard.min.js"></script>
<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../site_libs/quarto-search/fuse.min.js"></script>
<script src="../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../">
<script src="../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Keine Treffer",
"search-matching-documents-text": "Treffer",
"search-copy-link-title": "Link in die Suche kopieren",
"search-hide-matches-text": "Zusätzliche Treffer verbergen",
"search-more-match-text": "weitere Treffer in diesem Dokument",
"search-more-matches-text": "weitere Treffer in diesem Dokument",
"search-clear-button-title": "Zurücksetzen",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Abbrechen",
"search-submit-button-title": "Abschicken",
"search-label": "Suchen"
}
}</script>
<link rel="stylesheet" href="extra-styles.css">
<meta property="og:title" content="Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities) Nicole Dresselhaus">
<meta property="og:description" content="Ein Überblick und Best Practices für die Dokumantation von Forschungssoftware.">
<meta property="og:image" content="https://drezil.de/thumbs/writing_documentation.png">
<meta property="og:site_name" content="Nicole Dresselhaus">
<meta property="og:image:height" content="400">
<meta property="og:image:width" content="697">
<meta name="citation_title" content="Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities)">
<meta name="citation_abstract" content="Diese Dokumentation fasst zusammen, welche wissenschaftlichen Konzepte,
Algorithmen und Theorien hinter der Software stehen. Sie dient dazu, den
Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
">
<meta name="citation_author" content="Nicole Dresselhaus">
<meta name="citation_author" content="GPT-4.5 &amp;amp;quot;deep research&quot;">
<meta name="citation_publication_date" content="2025-06-05">
<meta name="citation_cover_date" content="2025-06-05">
<meta name="citation_year" content="2025">
<meta name="citation_online_date" content="2025-06-05">
<meta name="citation_fulltext_html_url" content="https://drezil.de/Writing/documentation.html">
<meta name="citation_language" content="de">
<meta name="citation_reference" content="citation_title=Collaborative Historical Research in the Age of Big Data: Lessons from an Interdisciplinary Project;,citation_abstract=This book is output of the Living with Machines project;,citation_author=Ruth Ahnert;,citation_author=Emma Griffin;,citation_author=Mia Ridge;,citation_author=Giorgia Tolfo;,citation_publication_date=2023;,citation_cover_date=2023;,citation_year=2023;,citation_fulltext_html_url=https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D;,citation_doi=10.1017/9781009175548;,citation_language=en-US;,citation_series_title=Cambridge Elements: Historical Theory and Practice;">
<meta name="citation_reference" content="citation_title=DFG-Praxisregeln &amp;amp;amp;quot;Digitalisierung&amp;quot;. Aktualisierte Fassung 2022.;,citation_abstract=Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.;,citation_author=Reinhard Altenhöner;,citation_author=Andreas Berger;,citation_author=Christian Bracht;,citation_author=Paul Klimpel;,citation_author=Sebastian Meyer;,citation_author=Andreas Neuburger;,citation_author=Thomas Stäcker;,citation_author=Regine Stein;,citation_publication_date=2023-02-16;,citation_cover_date=2023-02-16;,citation_year=2023;,citation_fulltext_html_url=https://zenodo.org/record/7435724;,citation_language=deu;">
<meta name="citation_reference" content="citation_title=Introducing the FAIR Principles for Research Software;,citation_abstract=Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.;,citation_author=Michelle Barker;,citation_author=Neil P. Chue Hong;,citation_author=Daniel S. Katz;,citation_author=Anna-Lena Lamprecht;,citation_author=Carlos Martinez-Ortiz;,citation_author=Fotis Psomopoulos;,citation_author=Jennifer Harrow;,citation_author=Leyla Jael Castro;,citation_author=Morane Gruenpeter;,citation_author=Paula Andrea Martinez;,citation_author=Tom Honeyman;,citation_publication_date=2022-10-14;,citation_cover_date=2022-10-14;,citation_year=2022;,citation_fulltext_html_url=https://www.nature.com/articles/s41597-022-01710-x;,citation_issue=1;,citation_doi=10.1038/s41597-022-01710-x;,citation_issn=2052-4463;,citation_volume=9;,citation_language=en-US;,citation_journal_title=Scientific Data;,citation_journal_abbrev=Sci Data;,citation_publisher=Nature Publishing Group;">
<meta name="citation_reference" content="citation_title=Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit;,citation_abstract=Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.;,citation_editor=Fabian Cremer;,citation_editor=Swantje Dogunke;,citation_editor=Anna Maria Neubert;,citation_editor=Thorsten Wübbena;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_doi=10.14361/9783839469675;,citation_language=de-DE;">
<meta name="citation_reference" content="citation_title=The Journal of Open Source Software (JOSS): Bringing Open-Source Software Practices to the Scholarly Publishing Community for Authors, Reviewers, Editors, and Publishers;,citation_abstract=Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.;,citation_author=Patrick Diehl;,citation_author=Charlotte Soneson;,citation_author=Rachel C. Kurchin;,citation_author=Ross Mounce;,citation_author=Daniel S. Katz;,citation_publication_date=2025-02-04;,citation_cover_date=2025-02-04;,citation_year=2025;,citation_fulltext_html_url=https://www.iastatedigitalpress.com/jlsc/article/id/18285/;,citation_issue=2, 2;,citation_doi=10.31274/jlsc.18285;,citation_issn=2162-3309;,citation_volume=12;,citation_language=en-US;,citation_journal_title=Journal of Librarianship and Scholarly Communication;,citation_publisher=Iowa State University Digital Press;">
<meta name="citation_reference" content="citation_title=Endings Principles for Digital Longevity;,citation_abstract=Enabling Sustainable Digital Humanities Projects;,citation_author=Endings Project Team;,citation_publication_date=2023-03-03;,citation_cover_date=2023-03-03;,citation_year=2023;,citation_fulltext_html_url=https://endings.uvic.ca/principles.html;,citation_language=en-US;">
<meta name="citation_reference" content="citation_title=Leitlinien zur Sicherung guter wissenschaftlicher Praxis;,citation_abstract=The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.;,citation_publication_date=2024-09;,citation_cover_date=2024-09;,citation_year=2024;,citation_fulltext_html_url=https://zenodo.org/records/14281892;,citation_doi=10.5281/zenodo.14281892;,citation_language=de-DE;,citation_publisher=Deutsche Forschungsgemeinschaft;">
<meta name="citation_reference" content="citation_title=Open Source Research Software;,citation_author=Wilhelm Hasselbring;,citation_author=Leslie Carr;,citation_author=Simon Hettrick;,citation_author=Heather Packer;,citation_author=Thanassis Tiropanis;,citation_publication_date=2020-08;,citation_cover_date=2020-08;,citation_year=2020;,citation_fulltext_html_url=https://ieeexplore.ieee.org/document/9153295/;,citation_issue=8;,citation_doi=10.1109/MC.2020.2998235;,citation_issn=0018-9162, 1558-0814;,citation_volume=53;,citation_journal_title=Computer;,citation_journal_abbrev=Computer;">
<meta name="citation_reference" content="citation_title=Four Simple Recommendations to Encourage Best Practices in Research Software;,citation_abstract=Scientific research relies on computer software, yet software is not always developed following practices that ensure its quality and sustainability. This manuscript does not aim to propose new software development best practices, but rather to provide simple recommendations that encourage the adoption of existing best practices. Software development best practices promote better quality software, and better quality software improves the reproducibility and reusability of research. These recommendations are designed around Open Source values, and provide practical suggestions that contribute to making research software and its source code more discoverable, reusable and transparent. This manuscript is aimed at developers, but also at organisations, projects, journals and funders that can increase the quality and sustainability of research software by encouraging the adoption of these recommendations.;,citation_author=Rafael C. Jiménez;,citation_author=Mateusz Kuzak;,citation_author=Monther Alhamdoosh;,citation_author=Michelle Barker;,citation_author=Bérénice Batut;,citation_author=Mikael Borg;,citation_author=Salvador Capella-Gutierrez;,citation_author=Neil Chue Hong;,citation_author=Martin Cook;,citation_author=Manuel Corpas;,citation_author=Madison Flannery;,citation_author=Leyla Garcia;,citation_author=Josep Ll. Gelpí;,citation_author=Simon Gladman;,citation_author=Carole Goble;,citation_author=Montserrat González Ferreiro;,citation_author=Alejandra Gonzalez-Beltran;,citation_author=Philippa C. Griffin;,citation_author=Björn Grüning;,citation_author=Jonas Hagberg;,citation_author=Petr Holub;,citation_author=Rob Hooft;,citation_author=Jon Ison;,citation_author=Daniel S. Katz;,citation_author=Brane Leskošek;,citation_author=Federico López Gómez;,citation_author=Luis J. Oliveira;,citation_author=David Mellor;,citation_author=Rowland Mosbergen;,citation_author=Nicola Mulder;,citation_author=Yasset Perez-Riverol;,citation_author=Robert Pergl;,citation_author=Horst Pichler;,citation_author=Bernard Pope;,citation_author=Ferran Sanz;,citation_author=Maria V. Schneider;,citation_author=Victoria Stodden;,citation_author=Radosław Suchecki;,citation_author=Radka Svobodová Vařeková;,citation_author=Harry-Anton Talvik;,citation_author=Ilian Todorov;,citation_author=Andrew Treloar;,citation_author=Sonika Tyagi;,citation_author=Maarten Van Gompel;,citation_author=Daniel Vaughan;,citation_author=Allegra Via;,citation_author=Xiaochuan Wang;,citation_author=Nathan S. Watson-Haigh;,citation_author=Steve Crouch;,citation_publication_date=2017-06-13;,citation_cover_date=2017-06-13;,citation_year=2017;,citation_fulltext_html_url=https://f1000research.com/articles/6-876/v1;,citation_doi=10.12688/f1000research.11407.1;,citation_issn=2046-1402;,citation_volume=6;,citation_language=en-US;,citation_journal_title=F1000Research;,citation_journal_abbrev=F1000Res;">
<meta name="citation_reference" content="citation_title=Jupyter Notebooks a Publishing Format for Reproducible Computational Workflows;,citation_abstract=It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.;,citation_author=Thomas Kluyver;,citation_author=Benjamin Ragan-Kelley;,citation_author=Fernando Pérez;,citation_author=Brian Granger;,citation_author=Matthias Bussonnier;,citation_author=Jonathan Frederic;,citation_author=Kyle Kelley;,citation_author=Jessica Hamrick;,citation_author=Jason Grout;,citation_author=Sylvain Corlay;,citation_author=Paul Ivanov;,citation_author=Damián Avila;,citation_author=Safia Abdalla;,citation_author=Carol Willing;,citation_author=Jupyter team;,citation_editor=Fernando Loizides;,citation_editor=Birgit Scmidt;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://eprints.soton.ac.uk/403913/;,citation_doi=10.3233/978-1-61499-649-1-87;,citation_language=en-US;,citation_conference=IOS Press;">
<meta name="citation_reference" content="citation_title=Towards FAIR Principles for&nbsp;Research&nbsp;Software;,citation_abstract=The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.;,citation_author=Anna-Lena Lamprecht;,citation_author=Leyla Garcia;,citation_author=Mateusz Kuzak;,citation_author=Carlos Martinez;,citation_author=Ricardo Arcila;,citation_author=Eva Martin Del Pico;,citation_author=Victoria Dominguez Del Angel;,citation_author=Stephanie Sandt;,citation_author=Jon Ison;,citation_author=Paula Andrea Martinez;,citation_author=Peter McQuilton;,citation_author=Alfonso Valencia;,citation_author=Jennifer Harrow;,citation_author=Fotis Psomopoulos;,citation_author=Josep Ll. Gelpi;,citation_author=Neil Chue Hong;,citation_author=Carole Goble;,citation_author=Salvador Capella-Gutierrez;,citation_publication_date=2020-06-12;,citation_cover_date=2020-06-12;,citation_year=2020;,citation_fulltext_html_url=https://doi.org/10.3233/DS-190026;,citation_issue=1;,citation_doi=10.3233/DS-190026;,citation_issn=2451-8484;,citation_volume=3;,citation_language=en-US;,citation_journal_title=Data Science;,citation_publisher=SAGE Publications;">
<meta name="citation_reference" content="citation_title=Ten Simple Rules for Documenting Scientific Software;,citation_author=Benjamin D. Lee;,citation_publication_date=2018-12-20;,citation_cover_date=2018-12-20;,citation_year=2018;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1006561;,citation_issn=1553-7358;,citation_volume=14;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Ten Simple Rules for the Open Development of Scientific Software;,citation_author=Andreas Prlić;,citation_author=James B. Procter;,citation_publication_date=2012-12-06;,citation_cover_date=2012-12-06;,citation_year=2012;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1002802;,citation_issn=1553-7358;,citation_volume=8;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Software Citation Principles;,citation_abstract=Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.;,citation_author=Arfon M. Smith;,citation_author=Daniel S. Katz;,citation_author=Kyle E. Niemeyer;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://peerj.com/articles/cs-86;,citation_doi=10.7717/peerj-cs.86;,citation_issn=2376-5992;,citation_volume=2;,citation_language=en-US;,citation_journal_title=PeerJ Computer Science;,citation_journal_abbrev=PeerJ Comput. Sci.;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Good Enough Practices in Scientific Computing;,citation_abstract=Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often dont know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.;,citation_author=Greg Wilson;,citation_author=Jennifer Bryan;,citation_author=Karen Cranston;,citation_author=Justin Kitzes;,citation_author=Lex Nederbragt;,citation_author=Tracy K. Teal;,citation_publication_date=2017-06-22;,citation_cover_date=2017-06-22;,citation_year=2017;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510;,citation_issue=6;,citation_doi=10.1371/journal.pcbi.1005510;,citation_issn=1553-7358;,citation_volume=13;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
</head>
<body class="nav-sidebar docked nav-fixed slimcontent quarto-light"><script id="quarto-html-before-body" type="application/javascript">
const toggleBodyColorMode = (bsSheetEl) => {
const mode = bsSheetEl.getAttribute("data-mode");
const bodyEl = window.document.querySelector("body");
if (mode === "dark") {
bodyEl.classList.add("quarto-dark");
bodyEl.classList.remove("quarto-light");
} else {
bodyEl.classList.add("quarto-light");
bodyEl.classList.remove("quarto-dark");
}
}
const toggleBodyColorPrimary = () => {
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap:not([rel=disabled-stylesheet])");
if (bsSheetEl) {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
if (toggle) {
if (alternate) {
toggle.classList.add("alternate");
} else {
toggle.classList.remove("alternate");
}
}
}
};
const toggleColorMode = (alternate) => {
// Switch the stylesheets
const primaryStylesheets = window.document.querySelectorAll('link.quarto-color-scheme:not(.quarto-color-alternate)');
const alternateStylesheets = window.document.querySelectorAll('link.quarto-color-scheme.quarto-color-alternate');
manageTransitions('#quarto-margin-sidebar .nav-link', false);
if (alternate) {
// note: dark is layered on light, we don't disable primary!
enableStylesheet(alternateStylesheets);
for (const sheetNode of alternateStylesheets) {
if (sheetNode.id === "quarto-bootstrap") {
toggleBodyColorMode(sheetNode);
}
}
} else {
disableStylesheet(alternateStylesheets);
enableStylesheet(primaryStylesheets)
toggleBodyColorPrimary();
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
manageTransitions("body", false);
window.scrollTo(0, 1);
setTimeout(() => {
window.scrollTo(0, 0);
manageTransitions("body", true);
}, 40);
}
}
const disableStylesheet = (stylesheets) => {
for (let i=0; i < stylesheets.length; i++) {
const stylesheet = stylesheets[i];
stylesheet.rel = 'disabled-stylesheet';
}
}
const enableStylesheet = (stylesheets) => {
for (let i=0; i < stylesheets.length; i++) {
const stylesheet = stylesheets[i];
if(stylesheet.rel !== 'stylesheet') { // for Chrome, which will still FOUC without this check
stylesheet.rel = 'stylesheet';
}
}
}
const manageTransitions = (selector, allowTransitions) => {
const els = window.document.querySelectorAll(selector);
for (let i=0; i < els.length; i++) {
const el = els[i];
if (allowTransitions) {
el.classList.remove('notransition');
} else {
el.classList.add('notransition');
}
}
}
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
} else {
return false;
}
}
const setStyleSentinel = (alternate) => {
const value = alternate ? "alternate" : "default";
if (!isFileUrl()) {
window.localStorage.setItem("quarto-color-scheme", value);
} else {
localAlternateSentinel = value;
}
}
const getColorSchemeSentinel = () => {
if (!isFileUrl()) {
const storageValue = window.localStorage.getItem("quarto-color-scheme");
return storageValue != null ? storageValue : localAlternateSentinel;
} else {
return localAlternateSentinel;
}
}
const toggleGiscusIfUsed = (isAlternate, darkModeDefault) => {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
}
const changeGiscusTheme = () => {
// From: https://github.com/giscus/giscus/issues/336
const sendMessage = (message) => {
const iframe = document.querySelector('iframe.giscus-frame');
if (!iframe) return;
iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');
}
sendMessage({
setConfig: {
theme: newTheme
}
});
}
const isGiscussLoaded = window.document.querySelector('iframe.giscus-frame') !== null;
if (isGiscussLoaded) {
changeGiscusTheme();
}
};
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
return;
const alternate = e.matches
toggleColorMode(alternate);
localAlternateSentinel = e.matches ? 'alternate' : 'default'; // this is used alongside local storage!
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
}
</script>
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../index.html">
<span class="navbar-title">Nicole Dresselhaus</span>
</a>
</div>
<div id="quarto-search" class="" title="Suchen"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Navigation umschalten" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../index.html"> <i class="bi bi-house" role="img">
</i>
<span class="menu-text">Home</span></a>
</li>
<li class="nav-item">
<a class="nav-link active" href="../About/index.html" aria-current="page"> <i class="bi bi-file-person" role="img">
</i>
<span class="menu-text">About</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="../index.xml"> <i class="bi bi-rss" role="img">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
<a href="" class="quarto-color-scheme-toggle quarto-navigation-tool px-1" onclick="window.quartoToggleColorScheme(); return false;" title="Dunkelmodus umschalten"><i class="bi"></i></a>
<a href="" class="quarto-reader-toggle quarto-navigation-tool px-1" onclick="window.quartoToggleReader(); return false;" title="Lesemodus umschalten">
<div class="quarto-reader-toggle-btn">
<i class="bi"></i>
</div>
</a>
</div>
</div> <!-- /container-fluid -->
</nav>
<nav class="quarto-secondary-nav">
<div class="container-fluid d-flex">
<button type="button" class="quarto-btn-toggle btn" data-bs-toggle="collapse" role="button" data-bs-target=".quarto-sidebar-collapse-item" aria-controls="quarto-sidebar" aria-expanded="false" aria-label="Seitenleiste umschalten" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<i class="bi bi-layout-text-sidebar-reverse"></i>
</button>
<nav class="quarto-page-breadcrumbs" aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item">Serious</li><li class="breadcrumb-item"><a href="../Writing/documentation.html">Writing</a></li><li class="breadcrumb-item"><a href="../Writing/documentation.html">Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities)</a></li></ol></nav>
<a class="flex-grow-1" role="navigation" data-bs-toggle="collapse" data-bs-target=".quarto-sidebar-collapse-item" aria-controls="quarto-sidebar" aria-expanded="false" aria-label="Seitenleiste umschalten" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
</a>
</div>
</nav>
</header>
<!-- content -->
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<nav id="quarto-sidebar" class="sidebar collapse collapse-horizontal quarto-sidebar-collapse-item sidebar-navigation docked overflow-auto">
<div class="sidebar-menu-container">
<ul class="list-unstyled mt-1">
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-1" role="navigation" aria-expanded="true">
<span class="menu-text">Serious</span></a>
<a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-1" role="navigation" aria-expanded="true" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-1" class="collapse list-unstyled sidebar-section depth1 show">
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" role="navigation" aria-expanded="true">
<span class="menu-text">Writing</span></a>
<a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" role="navigation" aria-expanded="true" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-2" class="collapse list-unstyled sidebar-section depth2 show">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Writing/documentation.html" class="sidebar-item-text sidebar-link active">
<span class="menu-text">Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities)</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Writing/ner4all-case-study.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Case Study: Local LLM-Based NER with n8n and Ollama</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Writing/Obsidian-RAG.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">RAG für eine Obsidian-Wissensdatenbank: Technische Ansätze</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-3" role="navigation" aria-expanded="false">
<span class="menu-text">Coding</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-3" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-3" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-4" role="navigation" aria-expanded="false">
<span class="menu-text">Haskell</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-4" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-4" class="collapse list-unstyled sidebar-section depth3 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Advantages.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Talks und Posts zu Haskell</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/FFPiH.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Fortgeschrittene funktionale Programmierung in Haskell</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Lenses.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Lenses</span></a>
</div>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-5" role="navigation" aria-expanded="false">
<span class="menu-text">Code Snippets</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-5" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-5" class="collapse list-unstyled sidebar-section depth4 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Code Snippets/Monoid.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Monoid? Da war doch was…</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Code Snippets/Morphisms.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">*-Morpisms</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Webapp-Example/index.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Webapp-Development in Haskell</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-6" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-6" class="collapse list-unstyled sidebar-section depth4 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Webapp-Example/Main.hs.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Webapp-Example: Main.hs</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Coding/Haskell/Webapp-Example/MyService_Types.hs.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Webapp-Example: MyService/Types.hs</span></a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-7" role="navigation" aria-expanded="false">
<span class="menu-text">Health</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-7" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-7" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Health/Issues.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Mental Health</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-8" role="navigation" aria-expanded="false">
<span class="menu-text">Uni</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-8" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-8" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Uni/Lernerfolg_an_der_Uni.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Wie lerne ich richtig an der Uni?</span></a>
</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="px-0"><hr class="sidebar-divider hi "></li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-9" role="navigation" aria-expanded="true">
<span class="menu-text">Fun</span></a>
<a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-9" role="navigation" aria-expanded="true" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-9" class="collapse list-unstyled sidebar-section depth1 show">
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-10" role="navigation" aria-expanded="false">
<span class="menu-text">Opinions</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-10" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-10" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Opinions/Editors.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Editors</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Opinions/Keyboard-Layout.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Keyboard-Layout</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-11" role="navigation" aria-expanded="false">
<span class="menu-text">Stuff</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-11" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-11" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../Stuff/Bielefeldverschwoerung.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Die Bielefeld-Verschwörung</span></a>
</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="px-0"><hr class="sidebar-divider hi "></li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-12" role="navigation" aria-expanded="true">
<span class="menu-text">Info</span></a>
<a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-12" role="navigation" aria-expanded="true" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-12" class="collapse list-unstyled sidebar-section depth1 show">
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a href="../About/index.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">About me</span></a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-13" role="navigation" aria-expanded="false" aria-label="Abschnitt umschalten">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-13" class="collapse list-unstyled sidebar-section depth2 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../About/Experience.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Highlights of my experiences in the programming world</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../About/Extracurricular.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Studium generale / University-Life</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../About/Work.html" class="sidebar-item-text sidebar-link">
<span class="menu-text">Work-Experience</span></a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</nav>
<div id="quarto-sidebar-glass" class="quarto-sidebar-collapse-item" data-bs-toggle="collapse" data-bs-target=".quarto-sidebar-collapse-item"></div>
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Auf dieser Seite</h2>
<ul>
<li><a href="#einleitung" id="toc-einleitung" class="nav-link active" data-scroll-target="#einleitung">Einleitung</a></li>
<li><a href="#inhaltliche-anforderungen-an-die-dokumentation" id="toc-inhaltliche-anforderungen-an-die-dokumentation" class="nav-link" data-scroll-target="#inhaltliche-anforderungen-an-die-dokumentation">Inhaltliche Anforderungen an die Dokumentation</a>
<ul class="collapse">
<li><a href="#ziel-und-zweck-der-software-statement-of-need" id="toc-ziel-und-zweck-der-software-statement-of-need" class="nav-link" data-scroll-target="#ziel-und-zweck-der-software-statement-of-need">Ziel und Zweck der Software (Statement of Need)</a></li>
<li><a href="#input-output-spezifikation-und-datenbeschreibung" id="toc-input-output-spezifikation-und-datenbeschreibung" class="nav-link" data-scroll-target="#input-output-spezifikation-und-datenbeschreibung">Input-/Output-Spezifikation und Datenbeschreibung</a></li>
<li><a href="#code-abhängigkeiten-und-technische-voraussetzungen" id="toc-code-abhängigkeiten-und-technische-voraussetzungen" class="nav-link" data-scroll-target="#code-abhängigkeiten-und-technische-voraussetzungen">Code-Abhängigkeiten und technische Voraussetzungen</a></li>
<li><a href="#wissenschaftlicher-hintergrund-und-theoretischer-kontext" id="toc-wissenschaftlicher-hintergrund-und-theoretischer-kontext" class="nav-link" data-scroll-target="#wissenschaftlicher-hintergrund-und-theoretischer-kontext">Wissenschaftlicher Hintergrund und theoretischer Kontext</a></li>
<li><a href="#bekannte-limitationen-annahmen-und-fehlermeldungen" id="toc-bekannte-limitationen-annahmen-und-fehlermeldungen" class="nav-link" data-scroll-target="#bekannte-limitationen-annahmen-und-fehlermeldungen">Bekannte Limitationen, Annahmen und Fehlermeldungen</a></li>
<li><a href="#weiterentwicklung-und-beitragsmöglichkeiten" id="toc-weiterentwicklung-und-beitragsmöglichkeiten" class="nav-link" data-scroll-target="#weiterentwicklung-und-beitragsmöglichkeiten">Weiterentwicklung und Beitragsmöglichkeiten</a></li>
<li><a href="#projekt-metadaten-lizenz-zitation-version" id="toc-projekt-metadaten-lizenz-zitation-version" class="nav-link" data-scroll-target="#projekt-metadaten-lizenz-zitation-version">Projekt-Metadaten (Lizenz, Zitation, Version)</a></li>
<li><a href="#zusammenfassung-der-inhaltlichen-anforderungen" id="toc-zusammenfassung-der-inhaltlichen-anforderungen" class="nav-link" data-scroll-target="#zusammenfassung-der-inhaltlichen-anforderungen">Zusammenfassung der inhaltlichen Anforderungen</a></li>
</ul></li>
<li><a href="#format-und-struktur-der-dokumentation" id="toc-format-und-struktur-der-dokumentation" class="nav-link" data-scroll-target="#format-und-struktur-der-dokumentation">Format und Struktur der Dokumentation</a>
<ul class="collapse">
<li><a href="#readme.md-als-zentrales-dokument" id="toc-readme.md-als-zentrales-dokument" class="nav-link" data-scroll-target="#readme.md-als-zentrales-dokument"><code>README.md</code> als zentrales Dokument</a></li>
<li><a href="#keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" id="toc-keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" class="nav-link" data-scroll-target="#keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen">Keine proprietären Formate oder Abhängigkeit von Werkzeugen</a></li>
<li><a href="#strukturierte-unterteilung-in-weitere-dateienabschnitte" id="toc-strukturierte-unterteilung-in-weitere-dateienabschnitte" class="nav-link" data-scroll-target="#strukturierte-unterteilung-in-weitere-dateienabschnitte">Strukturierte Unterteilung in weitere Dateien/Abschnitte</a></li>
<li><a href="#übersichtlichkeit-und-navigierbarkeit" id="toc-übersichtlichkeit-und-navigierbarkeit" class="nav-link" data-scroll-target="#übersichtlichkeit-und-navigierbarkeit">Übersichtlichkeit und Navigierbarkeit</a></li>
<li><a href="#beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" id="toc-beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" class="nav-link" data-scroll-target="#beispiele-codeblöcke-und-ggf.-abbildungen-einbinden">Beispiele, Codeblöcke und ggf. Abbildungen einbinden</a></li>
<li><a href="#umfang-und-fokus-der-dokumentation" id="toc-umfang-und-fokus-der-dokumentation" class="nav-link" data-scroll-target="#umfang-und-fokus-der-dokumentation">Umfang und Fokus der Dokumentation</a></li>
<li><a href="#priorisierung-bei-zeitmangel" id="toc-priorisierung-bei-zeitmangel" class="nav-link" data-scroll-target="#priorisierung-bei-zeitmangel">Priorisierung bei Zeitmangel</a></li>
</ul></li>
<li><a href="#was-macht-eine-gute-dokumentation-aus" id="toc-was-macht-eine-gute-dokumentation-aus" class="nav-link" data-scroll-target="#was-macht-eine-gute-dokumentation-aus">Was macht eine gute Dokumentation aus</a>
<ul class="collapse">
<li><a href="#formelle-prinzipien-open-source-research-fair4rs-und-endings" id="toc-formelle-prinzipien-open-source-research-fair4rs-und-endings" class="nav-link" data-scroll-target="#formelle-prinzipien-open-source-research-fair4rs-und-endings">Formelle Prinzipien: Open-Source-Research, FAIR4RS und ENDINGS</a></li>
<li><a href="#nutzungshilfen-außerhalb-der-dokumentation" id="toc-nutzungshilfen-außerhalb-der-dokumentation" class="nav-link" data-scroll-target="#nutzungshilfen-außerhalb-der-dokumentation">Nutzungshilfen außerhalb der Dokumentation</a></li>
<li><a href="#kontinuierliche-verbesserung-und-feedback" id="toc-kontinuierliche-verbesserung-und-feedback" class="nav-link" data-scroll-target="#kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</a></li>
<li><a href="#positiv--und-negativbeispiele-studieren" id="toc-positiv--und-negativbeispiele-studieren" class="nav-link" data-scroll-target="#positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</a></li>
</ul></li>
<li><a href="#teil-automatisierte-dokumentationswerkzeuge" id="toc-teil-automatisierte-dokumentationswerkzeuge" class="nav-link" data-scroll-target="#teil-automatisierte-dokumentationswerkzeuge">(Teil-)automatisierte Dokumentationswerkzeuge</a>
<ul class="collapse">
<li><a href="#jupyter-notebooks-und-literate-programming" id="toc-jupyter-notebooks-und-literate-programming" class="nav-link" data-scroll-target="#jupyter-notebooks-und-literate-programming">Jupyter Notebooks und literate programming</a></li>
<li><a href="#sphinxmkdocsdoxygen-statische-dokumentationswebseiten" id="toc-sphinxmkdocsdoxygen-statische-dokumentationswebseiten" class="nav-link" data-scroll-target="#sphinxmkdocsdoxygen-statische-dokumentationswebseiten">Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)</a></li>
<li><a href="#docstrings-und-api-dokumentationsgeneratoren" id="toc-docstrings-und-api-dokumentationsgeneratoren" class="nav-link" data-scroll-target="#docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</a></li>
<li><a href="#versionskontrolle-und-kontinuierliche-dokumentationspflege" id="toc-versionskontrolle-und-kontinuierliche-dokumentationspflege" class="nav-link" data-scroll-target="#versionskontrolle-und-kontinuierliche-dokumentationspflege">Versionskontrolle und kontinuierliche Dokumentationspflege</a></li>
</ul></li>
<li><a href="#checklisten-und-vorlagen" id="toc-checklisten-und-vorlagen" class="nav-link" data-scroll-target="#checklisten-und-vorlagen">Checklisten und Vorlagen</a>
<ul class="collapse">
<li><a href="#checkliste-für-die-mindest-dokumentation" id="toc-checkliste-für-die-mindest-dokumentation" class="nav-link" data-scroll-target="#checkliste-für-die-mindest-dokumentation">Checkliste für die Mindest-Dokumentation</a></li>
<li><a href="#implementierung-aller-vorschläge-als-ready-to-use-repository" id="toc-implementierung-aller-vorschläge-als-ready-to-use-repository" class="nav-link" data-scroll-target="#implementierung-aller-vorschläge-als-ready-to-use-repository">Implementierung aller Vorschläge als ready-to-use Repository</a></li>
</ul></li>
<li><a href="#fazit" id="toc-fazit" class="nav-link" data-scroll-target="#fazit">Fazit</a></li>
</ul>
<div class="quarto-other-links"><h2>Weitere Links</h2><ul><li><a href="https://gitea.dresselhaus.cloud/Drezil/quarto/src/branch/main/Writing/documentation.md"><i class="bi bi-filetype-md"></i>Source of this article</a></li></ul></div><div class="quarto-code-links"><h2>Code-Links</h2><ul><li><a href="https://gitea.dresselhaus.cloud/Drezil/code-project-template"><i class="bi bi-cup-hot-fill"></i>Template-Repository „Code-Project“</a></li><li><a href="https://gitea.dresselhaus.cloud/Drezil/data-project-template"><i class="bi bi-cup-hot-fill"></i>Template-Repository „Data-Project“</a></li></ul></div></nav>
</div>
<!-- main -->
<main class="content page-columns page-full" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default"><nav class="quarto-page-breadcrumbs quarto-title-breadcrumbs d-none d-lg-block" aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item">Serious</li><li class="breadcrumb-item"><a href="../Writing/documentation.html">Writing</a></li><li class="breadcrumb-item"><a href="../Writing/documentation.html">Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities)</a></li></ol></nav>
<div class="quarto-title">
<h1 class="title">Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities)</h1>
<div class="quarto-categories">
<div class="quarto-category">Article</div>
<div class="quarto-category">Best Practices</div>
</div>
</div>
<div>
<div class="description">
<p>Ein Überblick und Best Practices für die Dokumantation von Forschungssoftware.</p>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Autor:innen</div>
<div class="quarto-title-meta-heading">Zugehörigkeiten</div>
<div class="quarto-title-meta-contents">
<p class="author">Nicole Dresselhaus <a href="mailto:nicole.dresselhaus@hu-berlin.de" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0008-8850-3679" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
<a href="https://hu-berlin.de">
Humboldt-Universität zu Berlin
</a>
</p>
</div>
<div class="quarto-title-meta-contents">
<p class="author"><a href="https://chatgpt.com">GPT-4.5 “deep research”</a> </p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
<a href="https://openai.com">
OpenAI
</a>
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Veröffentlichungsdatum</div>
<div class="quarto-title-meta-contents">
<p class="date">5. Juni 2025</p>
</div>
</div>
</div>
<div>
<div class="abstract">
<div class="block-title">Zusammenfassung</div>
<p>Diese Dokumentation fasst zusammen, welche wissenschaftlichen Konzepte, Algorithmen und Theorien hinter der Software stehen. Sie dient dazu, den Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.</p>
</div>
</div>
</header>
<section id="einleitung" class="level2">
<h2 class="anchored" data-anchor-id="einleitung">Einleitung</h2>
<p>Die <strong>Dokumentation von Forschungssoftware</strong> ist entscheidend, um wissenschaftliche Ergebnisse nachvollziehbar und Software für andere nutzbar zu machen. Insbesondere in den Digital Humanities (etwa in der Geschichtswissenschaft) entwickeln Forschende neben Forschung und Lehre oft eigene Software meist unter hohem Zeitdruck und ohne formale Ausbildung in Softwareentwicklung. Häufig bleibt die Dokumentation deshalb minimal oder unvollständig, was dazu führt, dass andere (und sogar die Autor*innen selbst) viel Zeit aufwenden müssen, um den Code zu verstehen und anzuwenden. Dabei gilt gute Dokumentation als zentrale Voraussetzung, um Forschungssoftware <strong>auffindbar, nachvollziehbar und wiederverwendbar</strong> zu machen.</p>
<p>Dieser Anforderungskatalog richtet sich an Forschende, die keine Vollzeit-Programmierer sind, und soll <strong>wissenschaftlich fundierte Richtlinien</strong> für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen berücksichtigen Best Practices des Research Software Engineering <span class="citation" data-cites="Hasselbring2020OpenSourceResearch Lee2018Tensimplerules">[( <a href="#ref-Hasselbring2020OpenSourceResearch" role="doc-biblioref">1</a>, <a href="#ref-Lee2018Tensimplerules" role="doc-biblioref">2</a>]</span> und damit einhergehender Prinzipien wie die des <em>Endings-Projekts</em> für digitale Langlebigkeit <span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span> und <em>FAIR4RS-Prinzipien</em><span class="citation" data-cites="BarkerEtAl2022IntroducingFAIR">[<a href="#ref-BarkerEtAl2022IntroducingFAIR" role="doc-biblioref">4</a>]</span>.</p>
<p>Ziel ist es, ein praxistaugliches Gerüst bereitzustellen, das trotz Zeitknappheit die wesentlichen Dokumentationsaspekte abdeckt, um sowohl die <strong>Nachvollziehbarkeit</strong> der Ergebnisse als auch eine <strong>Weiterverwendung</strong> der Software zu ermöglichen<span class="citation" data-cites="Wilson2017GoodEnoughPractices">[<a href="#ref-Wilson2017GoodEnoughPractices" role="doc-biblioref">5</a>]</span>.</p>
<p>Im Folgenden werden die Anforderungen an Inhalt, Format und Umfang der Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt.</p>
</section>
<section id="inhaltliche-anforderungen-an-die-dokumentation" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="inhaltliche-anforderungen-an-die-dokumentation">Inhaltliche Anforderungen an die Dokumentation</h2>
<p>Ein zentrales Problem in der Dokumentation wissenschaftlicher Software ist oft das fehlende <em>Big Picture</em>, also eine klare Darstellung des <em>Was</em> und <em>Warum</em>. Die Dokumentation sollte daher alle <strong>Informationen abdecken, die zum Verstehen, Nutzen und Weiterentwickeln der Software nötig sind</strong><span class="citation" data-cites="EndingsPrinciples221 Lamprecht2020TowardsFAIRPrinciples">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>, <a href="#ref-Lamprecht2020TowardsFAIRPrinciples" role="doc-biblioref">6</a>]</span>. Insbesondere sind folgende Inhalte essenziell:</p>
<section id="ziel-und-zweck-der-software-statement-of-need" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="ziel-und-zweck-der-software-statement-of-need">Ziel und Zweck der Software (Statement of Need)</h3>
<div class="page-columns page-full"><p>Beschreiben Sie <em>was die Software tut</em> und <em>warum sie entwickelt wurde</em>. Nennen Sie den wissenschaftlichen Zweck, das Forschungsproblem oder die Fragestellung, die mit der Software adressiert wird, sowie die <em>Zielgruppe</em> (wer soll sie nutzen?). Dieser Kontext hilft anderen, den Nutzen der Software einzuschätzen. Eine klare Problem- und Zielbeschreibung richtet sich auch nach dem Umfeld ähnlicher Lösungen falls es bereits etablierte Tools gibt, sollte die Dokumentation die eigene Herangehensweise einordnen (z.B. was die Software anders oder besser macht).</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Dieses Tool extrahiert Personen-Netzwerke aus historischen Briefkorpora, um sozialwissenschaftliche Analysen zu ermöglichen.”</em></span></div></div>
</section>
<section id="input-output-spezifikation-und-datenbeschreibung" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="input-output-spezifikation-und-datenbeschreibung">Input-/Output-Spezifikation und Datenbeschreibung</h3>
<p>Dokumentieren Sie alle <em>Eingabeformate, Ausgabedaten und verwendeten Datensätze</em>. Nutzer*innen müssen wissen, welche Daten die Software erwartet (Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert. Idealerweise werden Beispiele angegeben: z.B. Beispiel-Dateien oder -Parameter und die korrespondierende Ausgabe.</p>
<p>Falls die Software mit bestimmten Forschungsdaten arbeitet, beschreiben Sie diese Daten und ihre Struktur. Dies umfasst die <strong>Datenmodelle</strong> (etwa wichtige Felder, deren Bedeutung und kontrollierte Vokabulare) und Annahmen über die Daten.</p>
<div class="page-columns page-full"><p>Gemäß den ENDINGS-Prinzipien sollte die Datenstruktur auch in einem <em>statischen Dokument</em> festgehalten und der Software beigelegt sein so bleibt nachvollziehbar, wie die Software die Daten interpretiert <span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span>. Eine Tabelle oder Auflistung der Eingabefelder und Ausgabegrößen mit kurzen Beschreibungen erhöht die Klarheit. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Eingabedatei: CSV mit Spalten <code>Autor</code>, <code>Empfänger</code>, …; Ausgabe: JSON-Datei mit Netzwerk-Metriken pro Briefwechsel.”</em></span></div></div>
<p>Gerade für JSON-Dateien bietet es sich an ggf. auch ein formelle Spezifikation via <a href="https://json-schema.org/draft/2020-12/json-schema-core">JSON-Schema</a> an.</p>
</section>
<section id="code-abhängigkeiten-und-technische-voraussetzungen" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="code-abhängigkeiten-und-technische-voraussetzungen">Code-Abhängigkeiten und technische Voraussetzungen</h3>
<div class="page-columns page-full"><p>Listen Sie alle <em>Abhängigkeiten</em> (Dependencies) der Software auf. Dazu gehören verwendete Programmiersprachen/Versionen, erforderliche Bibliotheken oder Frameworks, und sonstige Systemvoraussetzungen (z.B. Betriebssystem, Mindesthardware, Datenbank-Versionen). Wichtig ist, <strong>wie</strong> diese Abhängigkeiten installiert werden können. Optimal ist eine automatisierte Installationsroutine (z.B. ein <code>requirements.txt</code> für Python oder ein Paketmanager-Befehl). In jedem Fall sollte die Dokumentation mindestens Schritt-für-Schritt-Installationsanleitungen enthalten (inklusive evtl. benötigter Vorkenntnisse, z.B. <em>“Python 3 erforderlich”</em>). </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Benötigt Python 3.9 und die Bibliotheken Pandas und NetworkX. Installation: <code>pip install -r requirements.txt</code>.”</em> Falls spezielle technische Voraussetzungen bestehen etwa Zugriff auf bestimmte Hardware, ein Hochleistungsrechner oder große Speicherkapazitäten sind diese zu nennen.</span></div></div>
</section>
<section id="wissenschaftlicher-hintergrund-und-theoretischer-kontext" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="wissenschaftlicher-hintergrund-und-theoretischer-kontext">Wissenschaftlicher Hintergrund und theoretischer Kontext</h3>
<p>Da es sich um Forschungssoftware handelt, sollten Sie den <em>wissenschaftlichen Kontext</em> <a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a> offenlegen. Das heißt, erklären Sie die grundlegenden Methoden, Algorithmen oder Modelle, die in der Software umgesetzt sind, zumindest in Überblicksform.</p>
<div class="no-row-height column-margin column-container"><div id="fn1"><p><sup>1</sup>&nbsp;Dieser Hintergrundteil unterscheidet Forschungssoftware-Dokumentation von rein kommerzieller Dokumentation: Es geht nicht nur um <em>wie</em> man das Tool benutzt, sondern auch <em>warum</em> es so funktioniert (Stichwort Nachvollziehbarkeit).</p></div></div><div class="page-columns page-full"><p>Verweisen Sie auf <em>relevante Publikationen</em> oder Theorien, damit andere die wissenschaftliche Grundlage nachvollziehen können. Halten Sie diesen Abschnitt aber prägnant Details gehören in die Forschungsarbeit selbst.</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispielsweise: <em>“Die Implementierung folgt dem Algorithmus von Müller et al.&nbsp;(2019) zur Netzwerkanalyse historischer Korrespondenz.”</em></span></div></div>
<p>Wichtig ist, dass die Dokumentation den <strong>Brückenschlag zwischen Code und Forschung</strong> herstellt. Da viele Wissenschaftler*innen zentrale Aspekte lieber in ihren Artikeln dokumentieren, sollte in der Software-Dokumentation zumindest eine Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer*innen, unter welchen Annahmen oder Theorien das Tool funktioniert.</p>
</section>
<section id="bekannte-limitationen-annahmen-und-fehlermeldungen" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="bekannte-limitationen-annahmen-und-fehlermeldungen">Bekannte Limitationen, Annahmen und Fehlermeldungen</h3>
<p>Geben Sie ehrlich Auskunft über die <em>Grenzen der Software</em>:</p>
<ul>
<li>Welche Fälle werden <strong>nicht</strong> abgedeckt?</li>
<li>Welche <strong>Annahmen</strong> über die Daten oder Anwendungsszenarien werden getroffen?</li>
</ul>
<div class="page-columns page-full"><p> Solche Hinweise verhindern Fehlanwendungen und sparen Nutzern Zeit.</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispielsweise: <em>“funktioniert nur für Deutschsprachige Texte”</em> oder <em>“maximale Datenmenge 1 Mio. Datensätze, da Speicherbegrenzung”</em></span></div></div>
<p>Falls es bekannte <strong>Bugs oder Workarounds</strong> gibt, sollten diese ebenfalls (etwa in einer FAQ oder einem Abschnitt “Bekannte Probleme”) erwähnt werden.</p>
<div class="page-columns page-full"><p>Auch <strong>aussagekräftige Fehlermeldungen</strong> im Programm selbst sind eine Form von Dokumentation: Sie sollten nicht nur kryptisch abbrechen, sondern dem/der Anwender*in idealerweise mitteilen, was schiefging und bestenfalls direkt wie es behoben werden kann. Solche in den Code integrierten Hinweise ergänzen die schriftliche Dokumentation und tragen zur besseren Nutzbarkeit bei.</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Fehler: Ungültiges Datum im Feld XY bitte Format TT/MM/JJJJ verwenden.”</em></span></div></div>
</section>
<section id="weiterentwicklung-und-beitragsmöglichkeiten" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="weiterentwicklung-und-beitragsmöglichkeiten">Weiterentwicklung und Beitragsmöglichkeiten</h3>
<p>Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden, sollte dennoch angegeben werden, wie andere ggf. <em>zur Software beitragen oder Support erhalten</em> können. Ein kurzer Hinweis auf den Issue-Tracker (z.B. <em>“Fehler bitte über GitHub-Issues melden”</em>) oder auf die Kontaktmöglichkeit zum*zur Autor*in (E-Mail) gehört dazu.</p>
<p>Ebenso können <strong>Community Guidelines</strong> skizziert werden: etwa Code-Standards oder ein Verhaltenskodex, falls Beiträge erwartet werden. Für kleinere Projekte reicht oft ein Satz wie <em>“Beiträge durch Pull Requests sind willkommen; bei Fragen wenden Sie sich an…”</em>. <a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a></p>
<div class="no-row-height column-margin column-container"><div id="fn2"><p><sup>2</sup>&nbsp;Dieser Aspekt muss nicht umfangreich sein, zeigt aber Offenheit und sorgt dafür, dass im Falle von Rückfragen die Hürde für Kontaktaufnahme niedrig ist.</p></div></div></section>
<section id="projekt-metadaten-lizenz-zitation-version" class="level3">
<h3 class="anchored" data-anchor-id="projekt-metadaten-lizenz-zitation-version">Projekt-Metadaten (Lizenz, Zitation, Version)</h3>
<p>Teil der Dokumentation sind auch formale Informationen, die im Repository leicht zugänglich sein sollten<span class="citation" data-cites="Lamprecht2020TowardsFAIRPrinciples">[<a href="#ref-Lamprecht2020TowardsFAIRPrinciples" role="doc-biblioref">6</a>]</span>. <strong>Lizenzinformationen</strong> klären die rechtlichen Bedingungen der Nutzung und Weiterverbreitung. Es ist Best Practice, eine <strong>LICENSE-Datei</strong> beizulegen, aber auch in der README kurz zu erwähnen, unter welcher Lizenz die Software steht. Für Forschungssoftware empfiehlt sich eine offene Lizenz (z.B. MIT, BSD oder Apache 2.0 für Code, CC-BY für Daten), um Nachnutzung nicht zu behindern.</p>
<p>Zudem sollte angegeben werden, wie die Software <strong>zitiert</strong> werden kann (z.B. DOI, Paper-Referenz). Ein eigener Abschnitt <em>“Zitation”</em> oder eine <strong>CITATION-Datei</strong> beschreibt, welche Publikation oder welcher DOI bei Verwendung der Software in wissenschaftlichen Arbeiten anzugeben ist. Dies erhöht die akademische Sichtbarkeit und stellt sicher, dass Autor*innen Credits für ihre Software bekommen <span class="citation" data-cites="Smith2016SoftwareCitationPrinciples">[<a href="#ref-Smith2016SoftwareCitationPrinciples" role="doc-biblioref">7</a>]</span>.</p>
<p>Schließlich ist es sinnvoll, eine <strong>Versionsnummer</strong> der Software zu nennen (idealerweise in README und im Tool selbst), damit Nutzer wissen, auf welche Ausgabe sich die Dokumentation bezieht insbesondere, wenn es im Laufe der Zeit Aktualisierungen gibt<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span>.</p>
</section>
<section id="zusammenfassung-der-inhaltlichen-anforderungen" class="level3">
<h3 class="anchored" data-anchor-id="zusammenfassung-der-inhaltlichen-anforderungen">Zusammenfassung der inhaltlichen Anforderungen</h3>
<div class="callout callout-style-default callout-important callout-titled" title="Zusammengefasst sollte die Dokumentation alle **W-Fragen** beantworten">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Zusammengefasst sollte die Dokumentation alle <strong>W-Fragen</strong> beantworten
</div>
</div>
<div class="callout-body-container callout-body">
<ul class="task-list">
<li><label><input type="checkbox"><em>Was</em> tut die Software,</label></li>
<li><label><input type="checkbox"><em>warum</em> wurde sie geschrieben (wissenschaftlicher Zweck),</label></li>
<li><label><input type="checkbox"><em>wer</em> soll sie nutzen,</label></li>
<li><label><input type="checkbox"><em>wie</em> wird sie benutzt (Inputs, Outputs, Abläufe),</label></li>
<li><label><input type="checkbox"><em>womit</em> läuft sie (Umgebung/Abhängigkeiten),</label></li>
<li><label><input type="checkbox"><em>unter welchen Bedingungen</em> (Annahmen/Limitationen) und</label></li>
<li><label><input type="checkbox"><em>wohin</em> können sich Nutzer wenden (Support/Zitation).</label></li>
</ul>
</div>
</div>
<p>All diese Punkte sorgen für <strong>Nachvollziehbarkeit</strong> (im Sinne von Reproduzierbarkeit der Ergebnisse) und <strong>Weiterverwendbarkeit</strong> (im Sinne von Adaptierbarkeit der Software für neue Kontexte).</p>
</section>
</section>
<section id="format-und-struktur-der-dokumentation" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="format-und-struktur-der-dokumentation">Format und Struktur der Dokumentation</h2>
<p>Für Forschende ohne viel Ressourcen muss die Dokumentation <strong>einfach zugänglich, leicht pflegbar und ohne Spezialsoftware</strong> erstellbar sein.</p>
<section id="readme.md-als-zentrales-dokument" class="level3">
<h3 class="anchored" data-anchor-id="readme.md-als-zentrales-dokument"><code>README.md</code> als zentrales Dokument</h3>
<p>Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen Punkte:</p>
<ul>
<li>Zweck der Software,</li>
<li>Kurzbeschreibung,</li>
<li>Installation,</li>
<li>kurzer Nutzungsbeispiel,</li>
<li>Kontakt/Lizenz.</li>
</ul>
<p>Auf Plattformen wie <a href="https://github.com" title="Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft">GitHub</a>, <a href="https://gitlab.com" title="Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking, …). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz">GitLab</a> etc. wird die README automatisch angezeigt, was die Sichtbarkeit erhöht. Die Vorteile von <strong><a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a></strong> sind die einfache Lesbarkeit in Rohform, die breite Unterstützung (auch in Renderern wie GitHub-Webansicht) und die Eignung für Versionierung (Textdatei im <a href="https://git-scm.com" title="Das de-facto Standard-Versionskontrollsystem">git</a>). So bleibt die Dokumentation eng mit dem Code verzahnt und unter Versionskontrolle denn Dokumentation soll statisch und zusammen mit den Daten/Code abgelegt werden<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span>.</p>
</section>
<section id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen">Keine proprietären Formate oder Abhängigkeit von Werkzeugen</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Dokumentation gehört zum Code und muss auch ohne Programm lesbar sein.</p>
</div>
</div></div><p>Um Hürden für die Erstellung und Nutzung der Dokumentation gering zu halten, sollte auf gängige, offene Formate gesetzt werden (Plaintext, <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>, <a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">reStructuredText</a>).</p>
<p><span class="bad-practice">Vermeiden Sie nach Möglichkeit Formate wie Word-Dokumente oder PDF als primäre Dokumentationsquelle solche Formate sind nicht diff-freundlich, erschweren Zusammenarbeits-Workflows und sind meist nicht Teil des Versionskontrollsystems.</span> Ein <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>-Dokument hingegen kann gemeinsam mit dem Code gepflegt werden, und Änderungen sind transparent nachvollziehbar.</p>
<p>Im Sinne der <em>Digital Longevity</em><span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span> ist eine <strong>statische HTML- oder PDF-Version</strong> der Dokumentation (automatisch generiert aus <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> via <a href="https://pandoc.org/MANUAL.html#pandocs-markdown" title="DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen">pandoc</a>) als Teil der Release-Artefakte sinnvoll. <strong>Wichtig ist aber, dass die Quelle der Wahrheit immer die im Repository gepflegte Doku bleibt.</strong></p>
</section>
<section id="strukturierte-unterteilung-in-weitere-dateienabschnitte" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="strukturierte-unterteilung-in-weitere-dateienabschnitte">Strukturierte Unterteilung in weitere Dateien/Abschnitte</h3>
<div class="no-row-height column-margin column-container"><div class="">
<pre class="plain"><code>example-project/
├── README.md
├── CONTRIBUTING.md (optional)
├── CHANGELOG.md (optional)
├── CITATION.md (oder CITATION.cff)
├── LICENSE
├── data/ (optional)
│ └── sample_data.csv
├── docs/ (optional)
│ ├── INSTALL.md
│ └── USAGE.md
├── examples/ (optional)
│ └── example_workflow.ipynb
└── src/
├── script.py
└── module/
└── helper.py</code></pre>
<p>Beispielhafter Struktur eines Code-Repositories</p>
</div></div><p>Sollte die Dokumentation umfangreicher sein, ist es sinnvoll, sie in logisch getrennte Abschnitte aufzuteilen. Dies kann innerhalb der README durch Überschriften geschehen oder durch <strong>zusätzliche <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>-Dateien</strong> im Repository (z.B. eine <code>INSTALL.md</code> für ausführliche Installationshinweise, eine <code>USAGE.md</code> oder <code>TUTORIAL.md</code> für detaillierte Benutzeranleitungen, eine <code>CHANGELOG.md</code> für Changelog etc.). Eine gängige Struktur ist z.B.:</p>
<ul>
<li><code>README.md</code> Überblick (Ziel, Installation, kurzes Beispiel, Lizenz/Zitation)</li>
<li><code>docs/</code> Verzeichnis mit weiteren .md-Dateien für tiefergehende Dokumentation (optional)</li>
<li><code>CONTRIBUTING.md</code> Hinweise für Beiträger (falls relevant)</li>
<li><code>LICENSE</code> Lizenztext</li>
<li><code>CITATION.cff</code> oder <code>CITATION.md</code> wie zu zitieren.</li>
</ul>
<p>Diese Dateien sollten konsistent formatiert und wie oben benannt sein, damit sie leicht auffindbar und ggf. direkt durch Tools verarbeitbar sind.</p>
</section>
<section id="übersichtlichkeit-und-navigierbarkeit" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="übersichtlichkeit-und-navigierbarkeit">Übersichtlichkeit und Navigierbarkeit</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p><em>“Dont Repeat Yourself”</em>: Alle Informationen zu einem Thema (Installation/Nutzung/…) an derselben Stelle sammeln und keinesfalls mehrfach pflegen.</p>
</div>
</div></div><p>Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit Leser schnell die gesuchten Informationen finden. Eine <strong>logische Gliederung</strong> hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am Anfang nützlich sein. <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> bietet z.B. automatische TOC-Generierung auf manchen Plattformen.</p>
<p>Achten Sie darauf, pro Abschnitt nur zusammenhängende Informationen zu behandeln (z.B. alles zu Installation an einem Ort) und Wiederholungen zu vermeiden. Das Mantra <em>“Dont Repeat Yourself”</em> gilt auch für Dokumentation.</p>
</section>
<section id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden">Beispiele, Codeblöcke und ggf. Abbildungen einbinden</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Zeigen statt nur beschreiben konkrete Anwendungsfälle in der Doku verankern.</p>
</div>
</div></div><p>Nutzen Sie die Möglichkeiten von <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>, um die Dokumentation lebendig zu gestalten. Zeigen Sie Code-Beispiele als formatierte Codeblöcke, fügen Sie Links zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein (etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche, etc.).</p>
<p>Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG, Diagramme wenn möglich als SVG für Langlebigkeit). Falls Diagramme der Architektur oder Workflow-Abbildungen hilfreich sind, können diese mit simplen Mitteln erstellt werden<a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>.</p>
<div class="no-row-height column-margin column-container"><div id="fn3"><p><sup>3</sup>&nbsp;zur Not handgezeichnet und abfotografiert, besser jedoch mit Tools wie <a href="https://mermaid.js.org/" title="Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML, …) in Bilder gewandelt werden">mermaid.js</a> Diagrammen in <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> oder <a href="https://graphviz.org/" title="Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg">graphviz</a></p></div></div><p>Diese Visualisierungen sind jedoch nur dann einzusetzen, wenn sie echten Mehrwert bieten und ohne komplexe Build-Prozesse eingebunden werden können. Im Zweifel hat textuelle Beschreibung Vorrang, um nicht vom <strong>Prinzip “keep it simple”</strong> abzuweichen.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Typische Nutzungsszenarien und Workflows">
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-5-contents" aria-controls="callout-5" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Typische Nutzungsszenarien und Workflows
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-5" class="callout-5-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>Zeigen Sie anhand von <em>konkreten Beispielen</em>, wie die Software benutzt wird. Ein <strong>Quickstart-Beispiel</strong> senkt die Einstiegshürde enorm. Dies kann z.B. eine Anleitung sein, wie man mit wenigen Schritten von einer Eingabedatei zum gewünschten Ergebnis kommt.</p>
<p>Beschreiben Sie typische Workflows in nachvollziehbaren Schritten: Eingabe vorbereiten, Software-Befehl/GUI-Aktion ausführen, Ausgabe interpretieren. Ggf. können mehrere Anwendungsfälle skizziert werden (z.B. <em>“Analyse eines einzelnen Briefes”</em> vs.&nbsp;<em>“Batch-Verarbeitung eines gesamten Korpus”</em>).</p>
<p>Diese Beispiele sollten realistisch und möglichst <em>repräsentativ für wissenschaftliche Anwendungen</em> sein. Nutzen Sie gerne kleine, mitgelieferte Datensamples oder Defaults, damit Nutzer die Beispielschritte direkt ausprobieren können. Idealerweise werden Code-Beispiele mit ausgegebenen Resultaten gezeigt (z.B. in Form von Ausschnitten oder, bei Kommandozeilentools, via <code>--help</code> dokumentiert).</p>
</div>
</div>
</div>
</section>
<section id="umfang-und-fokus-der-dokumentation" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="umfang-und-fokus-der-dokumentation">Umfang und Fokus der Dokumentation</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Kann eine neue Person in &lt; 1 Stunde mit Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel ausführen?</p>
<ul>
<li>Wenn ja, ist der Detailgrad angemessen</li>
<li>Wenn die Person hingegen nach 10 Seiten oder mehr als 1 Stunde immer noch nicht weiß, wie sie loslegen soll, muss die Doku fokussierter werden.</li>
</ul>
</div>
</div></div><p>Ein effizienter Umfang lässt sich erreichen, indem sie <strong>alles, was für Nachvollziehbarkeit und Wiederverwendung nötig ist dokumentieren, und alles andere skippen</strong>.</p>
<div class="bad-practice">
<p>Negativbeispiele umfassen:</p>
<ul>
<li>jeder interne Programmiertrick wird erläutert Quellcode-Kommentare richten sich an Entwickler*innen, während die Nutzendendokumentation sich auf Nutzung und Kontext beschränkt</li>
<li>seitenlange Theorieabhandlungen (verweisen Sie stattdessen auf Papers)</li>
<li>generische Erklärungen bekannter Technologien (man muss Git oder Python nicht in der Doku erklären, sondern kann referenzieren)</li>
</ul>
</div>
<p>Halten Sie auch die Sprache prägnant:</p>
<ul>
<li>kurze Absätze</li>
<li>Listen</li>
<li>und einfache Sätze</li>
</ul>
<p>erhöhen die Lesbarkeit.</p>
<p><strong>Fachtermini</strong> aus dem jeweiligen wissenschaftlichen Bereich dürfen verwendet werden, aber erklären/verlinken Sie sie, falls die Zielnutzer sie evtl. nicht kennen.</p>
<section id="fokus-auf-nutzerinnen---nicht-entwicklerinnen" class="level4">
<h4 class="anchored" data-anchor-id="fokus-auf-nutzerinnen---nicht-entwicklerinnen">Fokus auf Nutzer*innen - nicht Entwickler*innen</h4>
<p>Stellen Sie sich beim Schreiben der Doku die verschiedenen <em>Nutzerrollen</em> vor: <strong>“Zukünftiges Ich”</strong>, <strong>Kolleg*innen</strong>, <strong>Fachforscher*innen anderer Disziplin</strong> und ggf. <strong>Software-Entwickler*innen, die den Code erweitern</strong>. Jede dieser Gruppen möchte bestimmte Dinge wissen.</p>
<p><em>Forschende</em> fragen:</p>
<ul>
<li>Was kann das Tool?</li>
<li>Wie benutze ich es?</li>
<li>In welchem Kontext steht es?</li>
</ul>
<p><em>Entwicklende Personen</em> fragen:</p>
<ul>
<li>Wie kann ich beitragen?</li>
<li>Wie funktioniert es unter der Haube?</li>
</ul>
<p>Priorisieren Sie zunächst die erstgenannten (Anwender) deshalb Fokus auf Zweck, Nutzung und Ergebnisse. Konzentrieren Sie die Hauptdokumentation darauf, <strong>das Nutzen und Verstehen der Software von außen</strong> zu ermöglichen.</p>
</section>
</section>
<section id="priorisierung-bei-zeitmangel" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="priorisierung-bei-zeitmangel">Priorisierung bei Zeitmangel</h3>
<p>Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für die Autoren selbst, wenn sie das Tool später wieder anfassen). Entwickler*innendokumentation (z.B. detaillierte API-Dokumente, Code-Kommentare, technische Architektur) kann separat gehalten werden, oder sogar automatisch erzeugt werden.</p>
<section id="minimaldokumentation-kurze-kommentare" class="level4">
<h4 class="anchored" data-anchor-id="minimaldokumentation-kurze-kommentare">Minimaldokumentation: kurze Kommentare</h4>
<p>Beginnen Sie mit einer Minimaldokumentation, die alle Schlüsselaspekte abdeckt (<em>“keine Dokumentation”</em> ist keine Option). <em>Good Enough Practices</em><span class="citation" data-cites="Wilson2017GoodEnoughPractices">[<a href="#ref-Wilson2017GoodEnoughPractices" role="doc-biblioref">5</a>]</span> empfehlen, als ersten Schritt zumindest einen <strong>kurzen erklärenden Kommentar am Anfang jedes Scripts</strong> oder eine README mit ein paar Sätzen zu erstellen. Diese Hürde ist niedrig und bringt bereits Nutzen selbst wenn (noch) keine ausführliche Handbuch-Doku existiert. Später kann die Dokumentation erweitert werden, insbesondere wenn die Software in Kooperation entsteht oder mehr Nutzer gewinnt. Es hat sich gezeigt, dass ausführliche Dokumentation oft erst entsteht, wenn ein echter Bedarf (z.B. durch externe Nutzer) vorhanden ist. Daher: zögern Sie nicht, zunächst <em>klein</em> anzufangen, aber stellen Sie sicher, dass zumindest die kritischen Informationen sofort verfügbar sind (lieber ein 2-seitiges README heute, als das perfekte 30-seitige Handbuch in zwei Jahren, das evtl. nie geschrieben wird).</p>
</section>
<section id="verlinkte-dokumentation-ist-auch-dokumentation" class="level4">
<h4 class="anchored" data-anchor-id="verlinkte-dokumentation-ist-auch-dokumentation">Verlinkte Dokumentation ist auch Dokumentation</h4>
<p>Nutzen Sie <strong>Verweise und vorhandene Ressourcen</strong>. Wenn z.B. Ihr Tool auf einem komplizierten Setup (Datenbank, Webserver) aufbaut, brauchen Sie nicht jede Installationsoption im Detail in Ihrer Doku zu reproduzieren verlinken Sie auf offizielle Installationsanleitungen dieser Abhängigkeiten, und nennen Sie nur Ihre spezifischen Konfigurationen und verlinken sie auf die Dokumentation des Setup-Elementes für alles weitere. Ebenso können Tutorials oder Papers, die schon existieren, als weiterführende Links angegeben werden, anstatt Inhalte redundant zu erklären. Das entlastet Ihre Dokumentation und hält sie schlank.</p>
</section>
<section id="und-anschließend" class="level4 page-columns page-full">
<h4 class="anchored" data-anchor-id="und-anschließend">Und anschließend?</h4>
<p>Wenn der Zeitmangel vorüber ist<a href="#fn4" class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a>, sollte man nach und nach das folgende Kapitel umsetzen.</p>
<div class="no-row-height column-margin column-container"><div id="fn4"><p><sup>4</sup>&nbsp;als ob DAS je der Fall wäre -.-</p></div></div></section>
</section>
</section>
<section id="was-macht-eine-gute-dokumentation-aus" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="was-macht-eine-gute-dokumentation-aus">Was macht eine gute Dokumentation aus</h2>
<section id="formelle-prinzipien-open-source-research-fair4rs-und-endings" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="formelle-prinzipien-open-source-research-fair4rs-und-endings">Formelle Prinzipien: Open-Source-Research, FAIR4RS und ENDINGS</h3>
<p>Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des <strong>Research Software Engineering</strong><span class="citation" data-cites="Hasselbring2020OpenSourceResearch">[<a href="#ref-Hasselbring2020OpenSourceResearch" role="doc-biblioref">1</a>]</span> und den <strong>FAIR4RS-<span class="citation" data-cites="BarkerEtAl2022IntroducingFAIR">[<a href="#ref-BarkerEtAl2022IntroducingFAIR" role="doc-biblioref">4</a>]</span></strong> bzw. <strong>ENDINGS-Prinzipien</strong><span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span> steht.</p>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-note callout-titled" title="FAIR4RS-Prinzipien für Software">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
FAIR4RS-Prinzipien für Software
</div>
</div>
<div class="callout-body-container callout-body">
<p>Die FAIR4RS-Prinzipien sind eine Anpassung der Ursprünglich nur für Daten gedachten FAIR-Prinzipien. Der Fokus liegt hier nicht auf Software selbst, sondern auf eine Nutzung von Software die ein Äquivalent zur Nutzung von FAIR-Daten darstellt.</p>
</div>
</div><div class="callout callout-style-default callout-note callout-titled" title="ENDINGS-Prinzipien">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
ENDINGS-Prinzipien
</div>
</div>
<div class="callout-body-container callout-body">
<p>Die ENDINGS-Prinzipien für digitale Projekte betonen insbesondere die Bedeutung von Dokumentation für Datenstrukturen, offenen Lizenzen, statischen Outputs und Zitierbarkeit.</p>
</div>
</div></div>
<p>Gute Dokumentation bedeutet daher u.a. die Verdeutlichung und Sicherstellung von</p>
<ul>
<li>Reproduzierbarkeit (Installation, Daten, Beispiele),</li>
<li>Offenheit (Lizenz, offene Formate) und</li>
<li>Nachhaltigkeit (Versionierung, Langlebigkeit der Doku).</li>
</ul>
<p>Indem Sie also diesem Anforderungskatalog folgen, berücksichtigen Sie automatisch wichtige anerkannte Prinzipien für gute wissenschaftliche Softwarepraxis.</p>
</section>
<section id="nutzungshilfen-außerhalb-der-dokumentation" class="level3">
<h3 class="anchored" data-anchor-id="nutzungshilfen-außerhalb-der-dokumentation">Nutzungshilfen außerhalb der Dokumentation</h3>
<p>Falls Ihre Software ein <strong>Command-Line Interface (CLI)</strong> hat, stellen Sie sicher, dass eine eingebaute Hilfe vorhanden ist (z.B. Ausgabe bei <code>--help</code>). Viele Nutzer greifen zunächst darauf zurück. Dieses Hilfemenü sollte kurz erläutern, welche Subkommandos oder Optionen existieren. Moderne CLI-Frameworks generieren solche Hilfen oft automatisch aus Ihrem Code (z.B. <a href="https://docs.python.org/3/library/argparse.html" title="Der Argument-Parser der Python-Standardbibliothek">argparse</a> in Python erzeugen <code>--help</code>-Texte). Nutzen Sie das, um konsistente Infos zu garantieren.</p>
<p>Für <strong>GUI-Anwendungen</strong> sollten Tooltips, Hilfetexte in der Oberfläche oder zumindest ein kleiner <em>Help</em>-Abschnitt im Handbuch vorhanden sein. Diese eingebetteten Hilfen ersetzen keine ausführliche Dokumentation, aber sie senken die Schwelle für alltägliche Fragen.</p>
</section>
<section id="kontinuierliche-verbesserung-und-feedback" class="level3">
<h3 class="anchored" data-anchor-id="kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</h3>
<p>Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess. Best Practice sind daher insbesondere:</p>
<ul>
<li>früh Feedback von Testnutzer*innen oder Kolleg*innen einzuholen: Lassen Sie jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen sich Lücken erst im Praxistest (“Ich wusste nicht, was ich nach Schritt X tun soll” etc.).</li>
<li>Planen Sie Zeiten ein, die Dokumentation nachzuführen, insbesondere wenn sich die Software ändert. Ein lebendiges Projekt wird vielleicht Release für Release die Dokumentation erweitern (evtl. neue Tutorials, neue Module dokumentieren). Spätestens zum Release-Zeitpunkt sollten diese auffallen und ggf. als Issues adressiert werden.</li>
<li>Nutzen Sie auch <em>Issues</em> für Dokumentation: Wenn Nutzer Fragen stellen, überlegen Sie, ob die Antwort in die offizielle Doku übernommen werden sollte. So wächst die Dokumentation organisch entlang der tatsächlichen Bedürfnisse.</li>
</ul>
</section>
<section id="positiv--und-negativbeispiele-studieren" class="level3">
<h3 class="anchored" data-anchor-id="positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</h3>
<p>Schlussendlich ist ein guter Weg, die eigene Dokumentation zu verbessern, ist ein Blick auf Projekte mit exzellenter Doku. Im <em><a href="https://joss.theoj.org/" title="The Journal of Open Source Software">Journal of Open Source Software (JOSS)</a></em> werden z.B. Softwareartikel veröffentlicht, bei denen die zugehörigen Repositorien aufgrund des <a href="https://joss.readthedocs.io/en/latest/review_checklist.html">Review-Prozesses</a> vorbildliche READMEs und Wikis haben. Diese können als Vorlage dienen.</p>
<p>Nutzen Sie solche Ressourcen; sie ersparen einem das Rad neu zu erfinden. Allerdings: Adaptieren Sie sie auf Ihre Bedürfnisse nicht jede Vorlage passt 1:1.</p>
</section>
</section>
<section id="teil-automatisierte-dokumentationswerkzeuge" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="teil-automatisierte-dokumentationswerkzeuge">(Teil-)automatisierte Dokumentationswerkzeuge</h2>
<p>Die Dokumentationslast lässt sich durch den Einsatz geeigneter Werkzeuge erheblich senken. Gerade Forschende, die alleine programmieren, können von <strong>(teil-)automatisierter Dokumentation</strong> profitieren, um konsistente und aktuelle Unterlagen zu erhalten, ohne alles von Hand schreiben zu müssen. Im Folgenden werden einige Tools und Möglichkeiten vorgestellt samt Empfehlungen, <em>wann</em> ihr Einsatz sinnvoll oder notwendig ist:</p>
<section id="jupyter-notebooks-und-literate-programming" class="level3">
<h3 class="anchored" data-anchor-id="jupyter-notebooks-und-literate-programming">Jupyter Notebooks und literate programming</h3>
<p>Ein mächtiges Werkzeug gerade in datengetriebenen Geisteswissenschaften sind <strong>Jupyter Notebooks</strong> bzw. <strong>R Markdown Notebooks</strong> <span class="citation" data-cites="KluyverEtAl2016JupyterNotebookspublishing">[<a href="#ref-KluyverEtAl2016JupyterNotebookspublishing" role="doc-biblioref">8</a>]</span>. Diese erlauben es, <em>ausführbaren Code mit erklärendem Text und Visualisierungen</em> in einem Dokument zu vereinen. Für Dokumentationszwecke können Notebooks zweierlei leisten:</p>
<ol type="1">
<li>als <strong>Tutorials/Beispiel-Workflows</strong>, die Nutzer interaktiv nachvollziehen können, und</li>
<li>als <strong>Reproduzierbarkeits-Dokumentation</strong> für analytische Prozesse.</li>
</ol>
<p>Wenn Ihre Forschungssoftware z.B. eine Bibliothek ist, könnten Sie ein Notebook bereitstellen, das einen typischen Anwendungsfall durchspielt (inklusive Daten-Loading, Aufruf der Funktionen, Darstellung der Ergebnisse).</p>
<p>Notebooks senken die Hürde, weil Nutzer direkt experimentieren können, und fördern transparente Forschung, da Code, Ergebnisse und Beschreibung zusammenfließen. Sie sind daher sinnvoll, <strong>wenn der Hauptanwendungsfall die Durchführung von Analysen oder Datenverarbeitungen ist</strong>, die man Schritt für Schritt demonstrieren kann.</p>
<div class="callout callout-style-default callout-warning callout-titled" title="Vorsicht bei Python-Notebooks">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Vorsicht bei Python-Notebooks
</div>
</div>
<div class="callout-body-container callout-body">
<p>Notebooks erfordern eine lauffähige Umgebung das heißt, Sie müssen darauf achten, dass alle Abhängigkeiten im Notebook deklariert sind oder ggf. nachinstalliert werden und die Daten zugänglich sind.</p>
<p>Es hat sich gezeigt, dass Notebooks aus Publikationen oft nicht ohne Weiteres laufen, weil Pfade, Datenquellen oder spezielle Umgebungen fehlen.</p>
<p>Deshalb: Wenn Sie Notebooks als Doku nutzen, stellen Sie sicher, dass sie <em>leicht ausführbar</em> sind (z.B. durch Bereitstellen von Umgebungsdateien wie <code>environment.yml</code> oder Dockerfiles, kleinen Beispieldatensätzen und klaren Anweisungen im Notebook). Ggf. kann man zusätzlich auch reine Markdown/HTML-Exporte von evaluierten Notebooks exportieren und dem Repo beilegen, damit zumindest statisch die Inhalte einsehbar sind.</p>
</div>
</div>
<section id="wann-sollten-sie-notebooks-nutzen" class="level4">
<h4 class="anchored" data-anchor-id="wann-sollten-sie-notebooks-nutzen">Wann sollten Sie Notebooks nutzen?</h4>
<p>Notebooks sind quasi Goldstandard, um wissenschaftliche Analysen nachvollziehbar zu machen. In Projekten, wo es um Data Science Workflows oder interaktive Exploration geht, sollten Notebooks stark erwogen werden, während für ein reines Tool/Script eine gut geschriebene README mit Beispielausgabe ausreichend sein kann.</p>
</section>
</section>
<section id="sphinxmkdocsdoxygen-statische-dokumentationswebseiten" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="sphinxmkdocsdoxygen-statische-dokumentationswebseiten">Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ab einer Codebasis <code>&gt; einige tausend Zeilen</code> oder <code>&gt;5 nontriviale Module</code> sollte eine generierte Dokumentation bereitstehen.</p>
</div>
</div></div><p>Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll sein, eine <strong>Dokumentationswebsite</strong> zu generieren. Tools wie <em><a href="https://www.sphinx-doc.org" title="Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.">Sphinx</a></em> (zusammen mit ReadTheDocs für Hosting) oder <em><a href="https://www.mkdocs.org/" title="Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown">MkDocs</a></em> erlauben es, aus <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>/<a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">reStructuredText</a>-Dateien einen ansprechend formatierten HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare, verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit <em>Continuous Integration</em> lassen sich diese Seiten bei jedem Git-Push automatisch aktualisieren.</p>
<p>Für die Nachhaltigkeit ist wichtig, dass diese Webseiten statisch sind<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">3</a>]</span> d.h. sie funktionieren ohne Server-Backends und bleiben auch offline nutzbar.</p>
<div class="page-columns page-full"><p>Solche Tools sind <strong>sinnvoll, wenn die Dokumentation sehr groß oder öffentlich weit verbreitet</strong> ist z.B. wenn Ihre Software von vielen genutzt wird und Sie ein professionelles Auftreten wünschen, oder wenn Sie die Doku als PDF veröffentlichen möchten. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">In kleinen DH-Projekten ist es oft nicht nötig, extra eine Webseite zu hosten; dennoch kann Sphinx auch lokal HTML/PDF erzeugen, was man dem Repo beilegen kann.</span></div></div>
<section id="wann-sollten-sie-eine-statische-website-generieren" class="level4">
<h4 class="anchored" data-anchor-id="wann-sollten-sie-eine-statische-website-generieren">Wann sollten Sie eine statische Website generieren?</h4>
<p><strong>Verpflichtend</strong> ist so ein Tool selten, höchstens wenn Förderprogramme oder Journals ein dokumentationsseitiges HTML-Manual verlangen. Wenn Sie jedoch planen, Ihre Software z.B. über Jahre zu pflegen und ggf. einem Journal wie JOSS vorzustellen, dann erwartet die Community meist, dass zumindest eine Sphinx/Doxygen-Doku für die API (s.u.) existiert.</p>
</section>
</section>
<section id="docstrings-und-api-dokumentationsgeneratoren" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Benutzt jemand die Software nur, braucht es keine API-Dokumentationen; wird die Software aber woanders eingebunden, ist dieses notwendig. Generation dieser Dokumentation ist daher der beste Weg.</p>
</div>
</div><div id="fn5"><p><sup>5</sup>&nbsp;kurz für: “Documentation String”</p></div></div><p>Nutzen Sie die Möglichkeit, Dokumentation <em>direkt im Quellcode</em> unterzubringen, z.B. in Form von <strong>Docstrings<a href="#fn5" class="footnote-ref" id="fnref5" role="doc-noteref"><sup>5</sup></a></strong> (mehrzeilige Strings in Funktionen/Klassen bei Python, <a href="https://roxygen2.r-lib.org/" title="Generator um aus R Docstrings eine Dokumentation zu generieren">Roxygen</a>-Kommentare in R, <a href="https://www.oracle.com/java/technologies/javase/javadoc.html" title="Generator um aus Java Docstrings eine Dokumentation zu generieren">Javadoc</a>-Kommentare in Java, etc.).</p>
<p>Diese dienen doppelt: Zum einen erleichtern sie es Ihnen und Kollegen, den Code beim Lesen zu verstehen, zum anderen können sie von Tools ausgelesen und zu hübschen API-Dokumentationen verarbeitet werden. Idealerweise dokumentieren Sie <em>jede wichtige <strong>oder</strong> von außen sichtbare Funktion, Klasse oder Modul</em> mit einem kurzen Docstring, der Zweck, Parameter, Rückgaben und ggf. Beispiele enthält. Für kleine Scripte genügen ggf. Modul- oder Abschnittskommentare.</p>
<p>Wichtig ist Konsistenz im Stil halten Sie sich an Konventionen Ihres Ökosystems (z.B. <a href="https://google.github.io/styleguide/">Google Style Guide</a> für Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen)<span class="citation" data-cites="JimenezEtAl2017FourSimpleRecommendations">[<a href="#ref-JimenezEtAl2017FourSimpleRecommendations" role="doc-biblioref">9</a>]</span>. Verlinken sie diese Styleguides in der README. Sogenannte Linting-Tools, wie etwa <strong><a href="https://www.pylint.org/" title="Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.">pylint</a></strong>, können die Verwendung erzwingen.</p>
<p>Mit Tools, wie <strong><a href="https://www.sphinx-doc.org" title="Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.">Sphinx</a></strong>, <strong><a href="https://www.oracle.com/java/technologies/javase/javadoc.html" title="Generator um aus Java Docstrings eine Dokumentation zu generieren">Javadoc</a></strong>, <strong><a href="https://www.doxygen.nl/" title="Generator um aus C/C++ Docstrings eine Dokumentation zu generieren">Doxygen</a></strong>, <strong><a href="https://www.mkdocs.org/" title="Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown">MkDocs</a></strong>,<strong><a href="https://pdoc.dev/" title="Generator um aus Python Docstrings eine Dokumentation zu generieren">pdoc</a></strong> und vielen weiteren, können aus Docstrings automatisiert Webseiten oder PDF-Handbücher generiert werden. Sie lesen z.B. die Python-Docstrings und erzeuge daraus strukturiert eine Dokumentation; Häufig kann über Erweiterungen auch dritte Dokumentation direkt eingebunden und verlinkt werden.</p>
</section>
<section id="versionskontrolle-und-kontinuierliche-dokumentationspflege" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="versionskontrolle-und-kontinuierliche-dokumentationspflege">Versionskontrolle und kontinuierliche Dokumentationspflege</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Die beste Dokumentation ist die, die sich selbst aktualisiert.</p>
</div>
</div></div><p>Eine Form der <em>Teil-Automatisierung</em> ist es, die Dokumentation an den Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben Versionskontrollsystem (Git) liegen wie der Code, damit Änderungen synchron nachverfolgt werden. Es empfiehlt sich, bei jedem größeren Code-Update zu prüfen, ob die Doku noch stimmt (das kann man sich z.B. als Punkt in Pull-Request-Reviews notieren oder per Issue-Template abfragen). Für Projekte mit Continuous Integration (CI) kann man sogar automatisierte Checks einrichten, die z.B. prüfen, ob die Doku gebaut werden kann oder ob Docstrings fehlen. Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z.B. mittels Sphinx) und veröffentlichen sie so ist garantiert, dass <em>die aktuelle Codeversion immer eine aktuelle Doku hat</em>.</p>
<p>Schlussendlich muss aber das Level an Automation für jedes Projekt individuell abgewogen werden.</p>
</section>
</section>
<section id="checklisten-und-vorlagen" class="level2">
<h2 class="anchored" data-anchor-id="checklisten-und-vorlagen">Checklisten und Vorlagen</h2>
<p>Um zu entscheiden, <em>was</em> dokumentiert wird (und was <em>nicht</em>), helfen etablierte <strong>Best Practices</strong> sowie Vorlagen aus der Community. Im Folgenden sind einige bewährte Richtlinien zusammengefasst.</p>
<section id="checkliste-für-die-mindest-dokumentation" class="level3">
<h3 class="anchored" data-anchor-id="checkliste-für-die-mindest-dokumentation">Checkliste für die Mindest-Dokumentation</h3>
<p>Die folgenden Punkte fassen zusammen, was eine gute Dokumentation mindestens enthalten sollte. Sie können auch als <strong>Qualitäts-Checkliste</strong> dienen, um Ihre Dokumentation zu überprüfen:</p>
<ol type="1">
<li><strong>Zielklärung:</strong> Ist der Zweck der Software klar benannt und der wissenschaftliche <em>Need</em> begründet? (Falls nein, ergänzen: <em>Warum existiert dieses Tool?</em>)</li>
<li><strong>Installation &amp; Voraussetzungen:</strong> Sind alle Schritte, um die Software lauffähig zu machen, dokumentiert (inkl. Dependencies, evtl. mit Installationsbefehlen)? Ist ersichtlich, welche Umgebung nötig ist (OS, Hardware)?</li>
<li><strong>Grundlegende Nutzung:</strong> Gibt es eine Anleitung oder Beispiele, wie man die Software verwendet (Eingabe -&gt; Ausgaben)? Ist mindestens ein typischer Workflow beschrieben, idealerweise mit Beispielinput und -output?</li>
<li><strong>Optionen &amp; Schnittstellen:</strong> Falls relevant sind alle wichtigen Funktionen, Befehlsoptionen oder API-Methoden dokumentiert? (Nicht unbedingt jede intern, aber alles, was ein Nutzer aufrufen könnte). Für APIs: Sind Parameter und Rückgaben erläutert?</li>
<li><strong>Validierung &amp; Einschränkungen:</strong> Werden Annahmen und Grenzen der Software genannt? Weiß ein*e Nutzer*in, welche Fälle nicht abgedeckt sind oder worauf zu achten ist (z.B. Datenqualität, maximale Größen)? Transparenz hier verhindert Frustration.</li>
<li><strong>Hintergrund &amp; Referenzen:</strong> Sind die wichtigsten konzeptionellen Hintergründe oder Referenzen angegeben? (Z.B. theoretische Grundlagen, Algorithmen, Literaturverweise). Das muss kein Essay sein, aber ein paar Sätze + Referenzen schaffen Vertrauen in die wissenschaftliche Fundierung.</li>
<li><strong>Kontakt &amp; Weiterführung:</strong> Ist angegeben, wie man Hilfe bekommt oder Fehler melden kann (Issue-Tracker, E-Mail)? Gibt es Hinweise für Beiträge (falls erwünscht) oder zumindest die Information, wer die Autor*innen sind?</li>
<li><strong>Rechtliches &amp; Zitation:</strong> Liegt die Lizenz bei und wird sie genannt? Sind Infos zum Zitieren der Software vorhanden (z.B. “Bitte zitieren Sie DOI XYZ”)? Das stellt sicher, dass die Software nachnutzbar <em>und</em> akademisch kreditiert wird.</li>
<li><strong>Aktualität &amp; Version:</strong> Entspricht die Dokumentation der aktuellen Softwareversion? (Check: Versionsnummern, Datumsangaben). Veraltete Doku kann schlimmer sein als keine planen Sie also ein, die Doku mit jedem Release kurz zu überprüfen.</li>
<li><strong>Konsistenz &amp; Stil:</strong> Wird ein einheitlicher Ton und Stil durchgehalten? (z.B. durchgehende Verwendung gleicher Begriffe für Konzepte, Sprache entweder Deutsch oder Englisch einheitlich je nach Zielgruppe). Kleinliche Fehler (Tippfehler, kaputte Links) sind auszumerzen, da sie Nutzer abschrecken.</li>
</ol>
<p>Diese Checkliste kann vor einem “Release” der Software durchgegangen werden, ähnlich einem Review-Prozess (vgl. <a href="https://joss.readthedocs.io/en/latest/review_checklist.html">JOSS Review-Kriterien</a>, die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch dokumentiert werden muss und was eventuell weggelassen werden kann. <strong>Alles, was für die obigen Punkte nicht relevant ist, kann man tendenziell aus der Hauptdokumentation herauslassen.</strong></p>
</section>
<section id="implementierung-aller-vorschläge-als-ready-to-use-repository" class="level3">
<h3 class="anchored" data-anchor-id="implementierung-aller-vorschläge-als-ready-to-use-repository">Implementierung aller Vorschläge als ready-to-use Repository</h3>
<div class="callout callout-style-default callout-important callout-titled" title="TODO">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
TODO
</div>
</div>
<div class="callout-body-container callout-body">
<ul class="task-list">
<li><label><input type="checkbox">Hier noch auf unsere Template-Repos verweisen.</label></li>
<li><label><input type="checkbox">Template-Repos selbst ggf. automatisch auf Zenodo mit kleinem Erklärungstext veröffentlichen?</label></li>
</ul>
</div>
</div>
</section>
</section>
<section id="fazit" class="level2">
<h2 class="anchored" data-anchor-id="fazit">Fazit</h2>
<p>Die hier präsentierten Anforderungen und Empfehlungen bieten einen <strong>Leitfaden für die Dokumentation von Forschungssoftware</strong> in den Digital Humanities. Sie sind darauf ausgerichtet, mit überschaubarem Aufwand maximale <strong>Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit</strong> zu erreichen.</p>
<p>Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel.</p>
<p>So schließt sich der Kreis zwischen guter <strong>Softwareentwicklung</strong> und guter <strong>Wissenschaft</strong><span class="citation" data-cites="Forschungsgemeinschaft2025LeitlinienzurSicherung">[<a href="#ref-Forschungsgemeinschaft2025LeitlinienzurSicherung" role="doc-biblioref">10</a>, Leitlinie 12]</span>: Dokumentation ist das Bindeglied, das Code und Erkenntnis transparent verbindet. In der Praxis bedeutet dies zwar zusätzliche Arbeitsschritte, doch wie die Erfahrung zeigt, zahlen sich diese in Form von <em>Zeiteinsparung bei Nutzern, höherer Zitierbarkeit und größerer Wirkung</em> der Software aus. Mit diesem Anforderungskatalog sind Forschende gut gerüstet, um ihre Softwareprojekte dokumentationstechnisch auf ein solides Fundament zu stellen trotz knapper Zeit und ohne Informatikabschluss. Denn am Ende gilt: <strong>Gut dokumentierte Forschungscode ist nachhaltige Forschung</strong>.</p>
</section>
<div id="quarto-appendix" class="default page-columns page-full"><section id="tabellarische-übersicht-der-dokumentations-bestandteile" class="level2 appendix column-page"><h2 class="anchored quarto-appendix-heading">Tabellarische Übersicht der Dokumentations-Bestandteile</h2><div class="quarto-appendix-contents">
<div class="">
<table class="caption-top table">
<caption><em>Empfohlene Dokumentationselemente, Inhalte und Umfang.</em> Diese Übersicht kann als Vorlage dienen, welche Komponenten ein Dokumentationspaket enthalten sollte. Je nach Projekt können einige Elemente wegfallen oder kombiniert werden entscheidend ist, dass die Kerninformationen (siehe oben) nicht fehlen.</caption>
<colgroup>
<col style="width: 12%">
<col style="width: 43%">
<col style="width: 31%">
<col style="width: 13%">
</colgroup>
<thead>
<tr class="header">
<th><strong>Dokuelement</strong></th>
<th><strong>Inhalt/Purpose</strong></th>
<th><strong>Format/Ort</strong></th>
<th><strong>Umfang</strong></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>README (Hauptdoku)</strong></td>
<td>Zweck der Software; Kurzbeschreibung; Installationsanleitung; einfaches Nutzungsbeispiel; Lizenz- und Kontaktinfo</td>
<td>Markdown im Root des Repos (statisch versioniert)</td>
<td>12 Seiten</td>
</tr>
<tr class="even">
<td><strong>Eingabe/Ausgabe-Guide</strong></td>
<td>Beschreibung der erwarteten Inputs (Datenformat, Parameter) und generierten Outputs (Dateien, Berichte) inkl. Beispielen</td>
<td>Teil der README oder separate Datei (z.B. USAGE.md)</td>
<td>1 Seite (mit Beispielen)</td>
</tr>
<tr class="odd">
<td><strong>Wissenschaftlicher Hintergrund</strong></td>
<td>Erläuterung der Methode, Theorie, Algorithmen; Verweise auf Literatur</td>
<td>README-Abschnitt “Hintergrund” oder separate Doku (BACKGROUND.md)</td>
<td>0.51 Seite (plus Referenzen)</td>
</tr>
<tr class="even">
<td><strong>Bekannte Limitationen</strong></td>
<td>Auflistung von Einschränkungen, Annahmen, bekannten Problemen; ggf. Workarounds</td>
<td>README-Abschnitt “Limitations” oder FAQ.md</td>
<td>0.5 Seite</td>
</tr>
<tr class="odd">
<td><strong>Beispiel-Workflow (Tutorial)</strong></td>
<td>Schritt-für-Schritt Anleitung mit einem realistischen Anwendungsfall (ggf. mit Code und Screenshot)</td>
<td>Jupyter Notebook (<code>.ipynb</code>) im Repo <code>examples/</code> Ordner oder Markdown in docs/</td>
<td>13 Seiten / entsprechend Zellen</td>
</tr>
<tr class="even">
<td><strong>API-Referenz</strong></td>
<td>Technische Dokumentation von Funktionen/Klassen für Entwickler*innen</td>
<td>Automatisch generiert aus Docstrings (z.B. Sphinx in <code>docs/</code> Ordner, HTML/PDF Ausgabe)</td>
<td>Je nach Codegröße (ggf. umfangreich)</td>
</tr>
<tr class="odd">
<td><strong>CONTRIBUTING</strong></td>
<td>Anleitung für Beitragswillige: Code Style, Workflow, Tests, Kontakt</td>
<td>CONTRIBUTING.md im Repo</td>
<td>0.51 Seite</td>
</tr>
<tr class="even">
<td><strong>LICENSE</strong> / <strong>CITATION</strong></td>
<td>Rechtliche Infos (Lizenztext); Zitationsleitfaden (Bevorzugte Zitierweise, DOI)</td>
<td>Jeweils eigene Datei im Repo (Plain Text/Markdown)</td>
<td>Kurz (Standardtext bzw. Referenz)</td>
</tr>
<tr class="odd">
<td><strong>Release-Information</strong></td>
<td>Versionshinweise, Änderungsprotokoll (Changelog)</td>
<td>CHANGELOG.md oder Releases auf GitHub</td>
<td>fortlaufend pro Version (Stichpunkte)</td>
</tr>
</tbody>
</table>
</div>
</div></section><section id="referenz-websitesservices" class="level2 appendix"><h2 class="anchored quarto-appendix-heading">Referenz Websites/Services</h2><div class="quarto-appendix-contents">
<ul>
<li><a href="https://github.com" title="Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft">GitHub</a>: Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft</li>
<li><a href="https://gitlab.com" title="Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking, …). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz">GitLab</a>: Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking,&nbsp;…). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz</li>
<li><a href="https://joss.theoj.org/" title="The Journal of Open Source Software">JOSS</a>: The Journal of Open Source Software is a developer friendly, open access journal for research software packages.</li>
<li><a href="https://openresearchsoftware.metajnl.com/" title="The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential.">JORS</a>: The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential.</li>
</ul>
</div></section><section id="referenz-software" class="level2 appendix"><h2 class="anchored quarto-appendix-heading">Referenz Software</h2><div class="quarto-appendix-contents">
<ul>
<li><a href="https://docs.python.org/3/library/argparse.html" title="Der Argument-Parser der Python-Standardbibliothek">argparse</a>: Der Argument-Parser der Python-Standardbibliothek</li>
<li><a href="https://www.doxygen.nl/" title="Generator um aus C/C++ Docstrings eine Dokumentation zu generieren">Doxygen</a>: Generator um aus C/C++ Docstrings eine Dokumentation zu generieren</li>
<li><a href="https://git-scm.com" title="Das de-facto Standard-Versionskontrollsystem">git</a>: Versionskontrollsystem</li>
<li><a href="https://graphviz.org/" title="Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg">graphviz</a>: Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg</li>
<li><a href="https://www.oracle.com/java/technologies/javase/javadoc.html" title="Generator um aus Java Docstrings eine Dokumentation zu generieren">Javadoc</a>: Generator um aus Java Docstrings eine Dokumentation zu generieren</li>
<li><a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>: Mittlerweile DER Standard bei plaintext-Dokumenten</li>
<li><a href="https://mermaid.js.org/" title="Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML, …) in Bilder gewandelt werden">mermaid.js</a>: Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML,&nbsp;…) in Bilder gewandelt werden</li>
<li><a href="https://www.mkdocs.org/" title="Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown">MkDocs</a>: Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown</li>
<li><a href="https://pandoc.org/MANUAL.html#pandocs-markdown" title="DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen">pandoc</a>: DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen</li>
<li><a href="https://pdoc.dev/" title="Generator um aus Python Docstrings eine Dokumentation zu generieren">pdoc</a>: Generator um aus Python Docstrings eine Dokumentation zu generieren</li>
<li><a href="https://www.pylint.org/" title="Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.">pylint</a>: Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.</li>
<li><a href="https://roxygen2.r-lib.org/" title="Generator um aus R Docstrings eine Dokumentation zu generieren">Roxygen</a>: Generator um aus R Docstrings eine Dokumentation zu generieren</li>
<li><a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">rst</a>: Alternative zu Markdown.</li>
<li><a href="https://www.sphinx-doc.org" title="Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.">Sphinx</a>: Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.</li>
</ul>
</div></section><section id="bibliographie" class="level2 appendix"><h2 class="quarto-appendix-heading"></h2><div class="quarto-appendix-contents">
</div></section><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Bibliographie</h2><div id="refs" class="references csl-bib-body" data-entry-spacing="0" role="list">
<div id="ref-Hasselbring2020OpenSourceResearch" class="csl-entry" role="listitem">
<div class="csl-left-margin">1. </div><div class="csl-right-inline">Hasselbring, Wilhelm, Leslie Carr, Simon Hettrick, Heather Packer, und Thanassis Tiropanis. 2020. Open <span>Source Research Software</span>. <em>Computer</em> 53: 8488. <a href="https://doi.org/10.1109/MC.2020.2998235">https://doi.org/10.1109/MC.2020.2998235</a>.</div>
</div>
<div id="ref-Lee2018Tensimplerules" class="csl-entry" role="listitem">
<div class="csl-left-margin">2. </div><div class="csl-right-inline">Lee, Benjamin D. 2018. Ten Simple Rules for Documenting Scientific Software. <em>PLOS Computational Biology</em> 14. Public Library of Science: e1006561. <a href="https://doi.org/10.1371/journal.pcbi.1006561">https://doi.org/10.1371/journal.pcbi.1006561</a>.</div>
</div>
<div id="ref-EndingsPrinciples221" class="csl-entry" role="listitem">
<div class="csl-left-margin">3. </div><div class="csl-right-inline">Endings Project Team. 2023. <a href="https://endings.uvic.ca/principles.html">Endings <span>Principles</span> for <span>Digital Longevity</span></a> (Version 2.2.1).</div>
</div>
<div id="ref-BarkerEtAl2022IntroducingFAIR" class="csl-entry" role="listitem">
<div class="csl-left-margin">4. </div><div class="csl-right-inline">Barker, Michelle, Neil P. Chue Hong, Daniel S. Katz, Anna-Lena Lamprecht, Carlos Martinez-Ortiz, Fotis Psomopoulos, Jennifer Harrow, u.&nbsp;a. 2022. Introducing the <span>FAIR Principles</span> for Research Software. <em>Scientific Data</em> 9. Nature Publishing Group: 622. <a href="https://doi.org/10.1038/s41597-022-01710-x">https://doi.org/10.1038/s41597-022-01710-x</a>.</div>
</div>
<div id="ref-Wilson2017GoodEnoughPractices" class="csl-entry" role="listitem">
<div class="csl-left-margin">5. </div><div class="csl-right-inline">Wilson, Greg, Jennifer Bryan, Karen Cranston, Justin Kitzes, Lex Nederbragt, und Tracy K. Teal. 2017. Good Enough Practices in Scientific Computing. <em>PLOS Computational Biology</em> 13. Public Library of Science: e1005510. <a href="https://doi.org/10.1371/journal.pcbi.1005510">https://doi.org/10.1371/journal.pcbi.1005510</a>.</div>
</div>
<div id="ref-Lamprecht2020TowardsFAIRPrinciples" class="csl-entry" role="listitem">
<div class="csl-left-margin">6. </div><div class="csl-right-inline">Lamprecht, Anna-Lena, Leyla Garcia, Mateusz Kuzak, Carlos Martinez, Ricardo Arcila, Eva Martin Del Pico, Victoria Dominguez Del Angel, u.&nbsp;a. 2020. Towards <span>FAIR</span> Principles for&nbsp;Research&nbsp;Software. <em>Data Science</em> 3. SAGE Publications: 3759. <a href="https://doi.org/10.3233/DS-190026">https://doi.org/10.3233/DS-190026</a>.</div>
</div>
<div id="ref-Smith2016SoftwareCitationPrinciples" class="csl-entry" role="listitem">
<div class="csl-left-margin">7. </div><div class="csl-right-inline">Smith, Arfon M., Daniel S. Katz, und Kyle E. Niemeyer. 2016. Software Citation Principles. <em>PeerJ Computer Science</em> 2. PeerJ Inc. <a href="https://doi.org/10.7717/peerj-cs.86">https://doi.org/10.7717/peerj-cs.86</a>.</div>
</div>
<div id="ref-KluyverEtAl2016JupyterNotebookspublishing" class="csl-entry" role="listitem">
<div class="csl-left-margin">8. </div><div class="csl-right-inline">Kluyver, Thomas, Benjamin Ragan-Kelley, Fernando Pérez, Brian Granger, Matthias Bussonnier, Jonathan Frederic, Kyle Kelley, u.&nbsp;a. 2016. Jupyter <span>Notebooks</span> a Publishing Format for Reproducible Computational Workflows. In, Hrsg. Fernando Loizides und Birgit Scmidt, 8790. IOS Press. <a href="https://doi.org/10.3233/978-1-61499-649-1-87">https://doi.org/10.3233/978-1-61499-649-1-87</a>.</div>
</div>
<div id="ref-JimenezEtAl2017FourSimpleRecommendations" class="csl-entry" role="listitem">
<div class="csl-left-margin">9. </div><div class="csl-right-inline">Jiménez, Rafael C., Mateusz Kuzak, Monther Alhamdoosh, Michelle Barker, Bérénice Batut, Mikael Borg, Salvador Capella-Gutierrez, u.&nbsp;a. 2017. Four Simple Recommendations to Encourage Best Practices in Research Software. <em>F1000Research</em> 6: 876. <a href="https://doi.org/10.12688/f1000research.11407.1">https://doi.org/10.12688/f1000research.11407.1</a>.</div>
</div>
<div id="ref-Forschungsgemeinschaft2025LeitlinienzurSicherung" class="csl-entry" role="listitem">
<div class="csl-left-margin">10. </div><div class="csl-right-inline"><em>Leitlinien zur Sicherung guter wissenschaftlicher Praxis</em>. 2024 (Version 1.2). Deutsche Forschungsgemeinschaft. <a href="https://doi.org/10.5281/zenodo.14281892">https://doi.org/10.5281/zenodo.14281892</a>.</div>
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Zitat</h2><div><div class="quarto-appendix-secondary-label">Mit BibTeX zitieren:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@online{dresselhaus2025,
author = {Dresselhaus, Nicole and deep research, GPT-4.5},
title = {Anforderungskatalog für die Dokumentation von
Forschungssoftware (Digital Humanities)},
date = {2025-06-05},
url = {https://drezil.de/Writing/documentation.html},
langid = {de},
abstract = {Diese Dokumentation fasst zusammen, welche
wissenschaftlichen Konzepte, Algorithmen und Theorien hinter der
Software stehen. Sie dient dazu, den Nutzer*innen zu helfen, die
theoretischen Grundlagen nachvollziehbar zu machen.}
}
</code><button title="In die Zwischenablage kopieren" class="code-copy-button"><i class="bi"></i></button></pre><div class="quarto-appendix-secondary-label">Bitte zitieren Sie diese Arbeit als:</div><div id="ref-dresselhaus2025" class="csl-entry quarto-appendix-citeas" role="listitem">
Dresselhaus, Nicole, and GPT-4.5 deep research. 2025.
<span>“Anforderungskatalog für die Dokumentation von Forschungssoftware
(Digital Humanities).”</span> June 5, 2025. <a href="https://drezil.de/Writing/documentation.html">https://drezil.de/Writing/documentation.html</a>.
</div></div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
// Ensure there is a toggle, if there isn't float one in the top right
if (window.document.querySelector('.quarto-color-scheme-toggle') === null) {
const a = window.document.createElement('a');
a.classList.add('top-right');
a.classList.add('quarto-color-scheme-toggle');
a.href = "";
a.onclick = function() { try { window.quartoToggleColorScheme(); } catch {} return false; };
const i = window.document.createElement("i");
i.classList.add('bi');
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Kopiert");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Kopiert");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp("https:\/\/drezil\.de");
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
// target, if specified
link.setAttribute("target", "_blank");
if (link.getAttribute("rel") === null) {
link.setAttribute("rel", "noopener");
}
// default icon
link.classList.add("external");
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>