Mastery- Azalee Bostroem

Sep 30, 2012 • Azalee Bostroem

I based my questions on what I find most important in my work. I think this can generalize to most science. I would love to know the expert answer to these.

  1. How do I document what I’ve done so that my work is repeatable by someone else?

Novice: Don’t

Intermediate: In line comments. Keep a notebook. Provide big picture information in a doc string at the beginning.

Expert: All of the above. Write a readme file. Keep examples of how to run the code. Version control the code and output as an example. I haven’t ever used make files, but would this be an appropriate place for one?

  1. How do I write programs which I can reuse? How do I organize my work so that I can reuse it?

Novice: Don’t write reusable programs.

Intermediate: Write short functions with optional input parameters. Keep a central program folder for each project.

Expert:

  1. How do I test my code in a time efficient manner (I know this is very context specific)?

Novice: Test everything once you’ve finished the whole program. Make sure you get the reasonable results on the analysis you wrote your program for.

Intermediate: Test each function as you write it on a know case.

Expert: Write a set of test functions? Use assertion to catch common errors?

  1. How do I make my work available to others?

Novice: Email upon request

Intermediate: Put on shared storage location

Expert: Use a version controlled repository

  1. How do I track things I’ve tried that haven’t worked?

Novice: Don’t

Intermediate: Keep a notebook

Expert:?

  1. What should my code output and to where?

Novice: Data and plots to the screen and terminal windows

Intermediate: Data and plots written to files

Expert: In addition to writing data and plots to files write a log detailing the execution.