Basic Skills for Reproducible Research

Computer literacy

File systems

  • Need to understand the concept of how files are organized on a computer file system. Important concepts include:

Files

  • Need to understand the different types of files that can exist on a computer, and how to work with them. Important concepts include:

    • Text vs. binary files

    • Different types of text files (e.g. comma-separated vs tab-separated)

Command line

  • need to understand how to access the command line interface on one’s computer and how to use it to perform operations. Important concepts include:

    • Moving around the file system

    • Working with files and directories (creating, removing, moving)

Editing text files

  • It is very useful to know how to edit text files from the command line.

  • All of these require learning of somewhat unintuitive key combinations for various operations, so it’s useful to keep a cheat sheet handy

  • On UNIX-like systems (Mac OS, Linux) popular alternatives include:

  • If you want to see geeks getting into religious wars, Google “vim vs emacs”

UNIX

Knowledge of basic UNIX skills can really up your game when it comes to getting things done, if you work on Mac OS (and even on Windows, you can install a Linux subsystem that gives you access to UNIX).

Software Carpentry provides an excellent overview of the basics of the UNIX shell, covering the following essential topics:

  • Navigating files and directories

  • Working with files and directories

  • Pipes and filters

  • Loops

  • Shell scripts

  • Finding things

There is also an additional lesson on more advanced topics, including:

  • Manual pages

  • Working remotely

  • Transferring files

  • Permissions

  • Directory structure

  • Job control

  • Aliases and shell customization

  • Shell variables

Makefiles

The UNIX make utility is very useful for automating computational workflows.

Software Carpentry offers a tutorial on Automation and Make that introduces how to work with Makefiles to automate processing.