diff --git a/.gitignore b/.gitignore index 5456d29..a1dcbef 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ renv renv.lock # Notepad++ backup file *.bak +.Rproj diff --git a/README.md b/README.md index d78e11a..7441e8f 100644 --- a/README.md +++ b/README.md @@ -6,25 +6,6 @@ This repository contains a course on documenting research software that has been This course will introduce you to the different ways we can provide guidance to future users and maintainers of our code. These coding best practices range from the very simple, such as leaving a few handy notes, to the complex, generating a reference website that includes tutorials and a detailed reference. The right approach for your projects will probably be a blend of these, and depends on the context and your audience. -## Why document software? - -No code is self-explanatory. It’s a tool we design, or, more often, a complex organism that develops as we use it, such as a library of functions used within a research team to perform certain kinds of analysis. - -It’s a common occurrence to get a software package, whether it’s written by ourselves, a colleague, or someone else, that’s near-impossible to use because it’s unclear what each function or tool does. Maybe we look at the source code itself, but we can’t make head-nor-tail of it. Maybe the only person who can use this software is the person who wrote it—unless you wrote it and forgot what you were thinking when you did! - -### Advantages of good documentation - -There are many advantages to writing guidance to go along with your research software. Software documentation helps yourself and others to use it successfully in the future and read your code ensuring that its value is sustained. - -It helps with your software engineering practice to reflect on what the purpose of the software is and to articulate what each component or module is for. - -Research outputs often depend upon the code used to generate them. Clarity and confidence are essential in using code to perform calculations, simulations, or data analysis. All kinds of research software can be made more reproducible by providing clear context and instructions for using it. - -There are many advantages to making your code more readable. Well-documented software is easier to maintain and has greater sustainability, which means it can continue to be used and modified for a longer period of time, despite changes in technology. If software is more reusable then it encourages others to use it for their research, increasing the number of citations of that software and its overall research impact. - -Writing a useful software package that is well-documented and can be reused in the future means that your code could take on a life of its own, with benefits that extend beyond yourself to your collaborators and other researchers in the future. - - ## Course overview This course introduces the different ways to provide other researchers with useful documentation for your software. @@ -40,4 +21,4 @@ This course introduces the different ways to provide other researchers with usef - Publishing documentation websites - Command line interfaces with usage instructions -There is information about publishing a software package and providing metadata and citation details in Modules 6 and 7 of this course. \ No newline at end of file +There is information about publishing a software package and providing metadata and citation details in Modules 6 and 7 of this course. diff --git a/config.yaml b/config.yaml index 46c4cde..42322d8 100644 --- a/config.yaml +++ b/config.yaml @@ -58,18 +58,18 @@ contact: 'research-it@sheffield.ac.uk' # - another-learner.md # Order of episodes in your lesson -episodes: +episodes: - introduction.md -- writing-readmes.Rmd +- writing-readmes.md # Information for Learners -learners: +learners: # Information for Instructors -instructors: +instructors: # Learner Profiles -profiles: +profiles: # Customisation --------------------------------------------- # diff --git a/episodes/fig/bootstrap-readme-chapters.png b/episodes/fig/bootstrap-readme-chapters.png new file mode 100644 index 0000000..9fe14e3 Binary files /dev/null and b/episodes/fig/bootstrap-readme-chapters.png differ diff --git a/episodes/introduction.md b/episodes/introduction.md index 7065d23..043957b 100644 --- a/episodes/introduction.md +++ b/episodes/introduction.md @@ -1,114 +1,38 @@ --- -title: "Using Markdown" +title: "Why document Code?" teaching: 10 exercises: 2 --- :::::::::::::::::::::::::::::::::::::: questions -- How do you write a lesson using Markdown and `{sandpaper}`? +- What is software documentation? +- Why is documenting code useful for researchers? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Explain how to use markdown with The Carpentries Workbench -- Demonstrate how to include pieces of code, figures, and nested challenge blocks +- Learn the motivation for learning to document software :::::::::::::::::::::::::::::::::::::::::::::::: ## Introduction -This is a lesson created via The Carpentries Workbench. It is written in -[Pandoc-flavored Markdown](https://pandoc.org/MANUAL.txt) for static files and -[R Markdown][r-markdown] for dynamic files that can render code into output. -Please refer to the [Introduction to The Carpentries -Workbench](https://carpentries.github.io/sandpaper-docs/) for full documentation. +No code is self-explanatory. It’s a tool we design, or, more often, a complex organism that develops as we use it, such as a library of functions used within a research team to perform certain kinds of analysis. -What you need to know is that there are three sections required for a valid -Carpentries lesson: +## Why document software? - 1. `questions` are displayed at the beginning of the episode to prime the - learner for the content. - 2. `objectives` are the learning objectives for an episode displayed with - the questions. - 3. `keypoints` are displayed at the end of the episode to reinforce the - objectives. +It’s a common occurrence to get a software package, whether it’s written by ourselves, a colleague, or someone else, that’s near-impossible to use because it’s unclear what each function or tool does. Maybe we look at the source code itself, but we can’t make head-nor-tail of it. Maybe the only person who can use this software is the person who wrote it—unless you wrote it and forgot what you were thinking when you did! -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor +### Advantages of good documentation -Inline instructor notes can help inform instructors of timing challenges -associated with the lessons. They appear in the "Instructor View" +There are many advantages to writing guidance to go along with your research software. Software documentation helps yourself and others to use it successfully in the future and read your code ensuring that its value is sustained. -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +It helps with your software engineering practice to reflect on what the purpose of the software is and to articulate what each component or module is for. -::::::::::::::::::::::::::::::::::::: challenge +Research outputs often depend upon the code used to generate them. Clarity and confidence are essential in using code to perform calculations, simulations, or data analysis. All kinds of research software can be made more reproducible by providing clear context and instructions for using it. -## Challenge 1: Can you do it? +There are many advantages to making your code more readable. Well-documented software is easier to maintain and has greater sustainability, which means it can continue to be used and modified for a longer period of time, despite changes in technology. If software is more reusable then it encourages others to use it for their research, increasing the number of citations of that software and its overall research impact. -What is the output of this command? - -```r -paste("This", "new", "lesson", "looks", "good") -``` - -:::::::::::::::::::::::: solution - -## Output - -```output -[1] "This new lesson looks good" -``` - -::::::::::::::::::::::::::::::::: - - -## Challenge 2: how do you nest solutions within challenge blocks? - -:::::::::::::::::::::::: solution - -You can add a line with at least three colons and a `solution` tag. - -::::::::::::::::::::::::::::::::: -:::::::::::::::::::::::::::::::::::::::::::::::: - -## Figures - -You can use standard markdown for static figures with the following syntax: - -`![optional caption that appears below the figure](figure url){alt='alt text for -accessibility purposes'}` - -![You belong in The Carpentries!](https://raw.githubusercontent.com/carpentries/logo/master/Badge_Carpentries.svg){alt='Blue Carpentries hex person logo with no text.'} - -::::::::::::::::::::::::::::::::::::: callout - -Callout sections can highlight information. - -They are sometimes used to emphasise particularly important points -but are also used in some lessons to present "asides": -content that is not central to the narrative of the lesson, -e.g. by providing the answer to a commonly-asked question. - -:::::::::::::::::::::::::::::::::::::::::::::::: - - -## Math - -One of our episodes contains $\LaTeX$ equations when describing how to create -dynamic reports with {knitr}, so we now use mathjax to describe this: - -`$\alpha = \dfrac{1}{(1 - \beta)^2}$` becomes: $\alpha = \dfrac{1}{(1 - \beta)^2}$ - -Cool, right? - -::::::::::::::::::::::::::::::::::::: keypoints - -- Use `.md` files for episodes when you want static content -- Use `.Rmd` files for episodes when you need to generate output -- Run `sandpaper::check_lesson()` to identify any issues with your lesson -- Run `sandpaper::build_lesson()` to preview your lesson locally - -:::::::::::::::::::::::::::::::::::::::::::::::: - -[r-markdown]: https://rmarkdown.rstudio.com/ +Writing a useful software package that is well-documented and can be reused in the future means that your code could take on a life of its own, with benefits that extend beyond yourself to your collaborators and other researchers in the future. diff --git a/episodes/writing-readmes.md b/episodes/writing-readmes.md new file mode 100644 index 0000000..2c17720 --- /dev/null +++ b/episodes/writing-readmes.md @@ -0,0 +1,53 @@ +--- +title: 'Writing README files' +teaching: 10 +exercises: 2 +--- + +:::::::::::::::::::::::::::::::::::::: questions + +- What is a README file? + +:::::::::::::::::::::::::::::::::::::::::::::::: + +::::::::::::::::::::::::::::::::::::: objectives + +- Explain why and how to write a README file +- Demonstrate how to include pieces of code, figures, and nested challenge blocks + +:::::::::::::::::::::::::::::::::::::::::::::::: + +## Introduction + +A README file is the first thing a user sees when they find your software. It should give them an approachable overview of the package, define what’s possible to achieve with this code, and get them started on the right track to use the software effectively for their research. + +A README contains a brief introduction to the code and shows them how to get started using it. For larger packages, the README forms a concise beginner guide and might link to a more detailed user guide that is located elsewhere. + +## How to write a README + +To start writing a README file, the simplest way is to just create an empty text file called README.txt and start writing. This file should be located in the directory (or folder) that contains your software project. + +Most people prefer to use a file format that allows you to create headers to organise the content into sections or chapters, which is much clearer for the reader. In this case, a Markdown document may be used. Markdown is a simple markup language that allows you to format your text using symbols to represent headers, bold text, bullet lists, etc. that are displayed to the user in an appealing way. + +An example README file in Markdown format is shown below, in a file called README.md where .md is the file extension for Markdown files. + +```md +# My research software + +This software is designed to... + +# Installation + +To install this software... + +# Usage + +To use this package... +``` + +The “#” symbol means that line will be converted into a header and displayed to the reader in a large, bold font. + +If your code is published on GitHub, the home page of your code repository will display the README.md file, including a navigation menu that is automatically created to easily select the section of the document to view. + +!["Imagename"](fig/bootstrap-readme-chapters.png) +