Skip to content
May 6, 2013 / Damien Irving

My perfect Software Carpentry boot camp

As mentioned in a previous post, I was involved in organising a Software Carpentry boot camp in Melbourne earlier this year, which was co-hosted by the Australian Meteorological and Oceanographic Society and the ARC Centre of Excellence for Climate System Science. I recently surveyed the participants of that boot camp, with a view to hosting another one next year (see the survey results here). Via this survey and numerous other informal conversations, I’ve essentially been trying to figure out what the perfect boot camp looks like for a weather/climate science audience. In other words, if you only had a couple of days to teach people in our field about scientific computing, what would be the most useful things to teach them? It’s a pretty tough question, but here’s the answer that I’ve come up with:

Pre-camp homework
– The shell

Day 1 (Theme: Programming like a programmer)
– Intro to Python
– Program design and testing

Day 2 (Theme: Keeping track of your shit)
Version Control
– Data management
– Live weather/climate science demonstration

Optional extras (Theme: Stuff that will save you time, effort and heartache)
– Regular expressions
– Databases

Ongoing follow up
Online office hours
– Language specific study groups

At first sight, this might look like a pretty random collection of topics. However, Software Carpentry has been refining the content of its boot camps over many years and many hundreds of participants. My perfect boot camp simply takes the Software Carpentry teaching content that is most relevant to the weather/climate sciences, and makes a few tweaks based on feedback from the Melbourne boot camp. Here’s some points of clarification:

  • The shell is optional pre-boot camp homework, because opinion was strongly divided on whether it should be included. The homework would involve watching the relevant Software Carpentry lessons here.
  • Python is the language of choice, because it’s free, intuitive and popular. This does not mean that only Python users would benefit from the boot camp. The focus is on general programming skills that are transferable to any language.
  • The ‘program design and testing’ unit introduces participants to core programming concepts like test driven development and code structure/flow (e.g. avoiding duplication and breaking down code into chunks/functions that fit into short term memory).
  • Software Carpentry is in the process of adding to its teaching content on data management (see here for details). In addition to simple tips about creating README files and sensible directory structures, at a weather/climate science boot camp this unit should spend a substantial amount of time looking at netCDF files (e.g. file attributes, provenance tracking and utilities like NCO). I presented many aspects of this netCDF content in a previous post about CF compliance. It’s possible to focus on a single file format at a weather/climate boot camp, because the entire profession has adopted this common format, almost without exception.
  • The live demonstration should be given by an experienced programmer in the weather/climate sciences, who incorporates many of the principles of Software Carpentry into their daily computing. The content of that demonstration may look something like this.
  • The ‘optional extras’ are listed in order of popularity, as indicated by the survey responses. One or more of these extras could be squeezed into the Day 1 or 2 program if time permits, or could constitute a stand alone Day 3 (there was quite a bit of support for a third day from survey respondents).
  • Many different programming languages are used in the weather/climate sciences (e.g. IDL, Matlab, R, NCL, Python, Fortran). This means that beyond the content of my perfect boot camp, the learning needs of individual research scientists quickly become language specific. For instance, teaching content on data visualisation was a popular request from survey respondents, however the methods for generating images can vary greatly depending on the language you use. How then, can a boot camp participant continue to improve their programming, long after the boot camp is over? In my opinion, one of the best ways would be for them to establish (or participate in) a small, language specific study group at their own workplace. Much like ‘journal clubs’, where researchers get together on a regular basis to review a paper, groups of people who use the same programming language should regularly get together to review each other’s code and chat about programming.

If you’re interested in more details on any of the teaching content proposed in my perfect boot camp, check out the online lessons at the Software Carpentry website.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: