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:
What is a file path? What is the difference between a relative and an absolute path?
What does “case sensitive” mean?
Resources:
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.