Teaching basic lab skills
for research computing

New Year's Schedule for Software Carpentry

I'm teaching a cut-down version of Software Carpentry at the IASSE in two and a half weeks. I'll have students half days for the weeks of January 16 and 23, and full days for the week of February 6. That's only 20 lectures (rather than 26), so the question is, what to cut? The answer has wider implications, since this will be the version of the course I take to the AAAS workshop.

My plan is:

Jan 16 Introduction Revised to be a forward summary of the whole course.
17 Shell 1
18 Shell 2
19 Version Control
20 Make Revised so that it doesn't depend on Python.
Jan 23 Python 1 Basic features.
24 Python 2 Strings and lists.
25 Python 3 Functions and Libraries.
26 Testing Basic concepts.
27 Mini-Project 1 Build something useful with Python.
Feb 06 Python 4 Dictionaries and exceptions.
Debugging Deepened to include material from Zeller.
07 Python 5 Object-oriented programming.
Unit Testing Use the unit test framework to show what good OO design looks like.
08 Coding Style Update to include an actual Python style guide.
Reflection Complete rewrite: exec, eval, sub-processes, etc.
09 Regular Expressions
XML and DOM
10 Development Process Describe how a good shop actually works (with nods to XP and RUP).
Teamware Based on Trac.

Client-side and CGI web programming, security, and databases have disappeared completely; the three lectures on process have been folded into one; and there's no end-of-course summary. I'm comfortable with those changes; what I don't like is the amount of time spent teaching Python-the-language. I'd rather spend those hours showing them how to use Python to automate development activities, but you can't cut trees 'til you have an ax.

Second, there's no place in this new scheme for a lecture based on Paul Dubois's CiSE article on maintaining correctness. There really ought to be: it shows the jigsaw puzzle of which many good practices are pieces.

Third, I'd like a second project lecture, showing students part of the build system for the course notes. This would let them see regular expressions and DOM in action, and would tie together many of the earlier ideas on automation. It's this or teamware, though, and I think the latter is more important. Having made that decision, I'm wavering on whether to pull out the material on regular expressions and DOM.

Finally, everything I have to say about the development process is now squeezed into a single hour. It makes sense in this case, since IASSE students will get several more courses on the subject, but it's definitely under weight for the AAAS workshop.

So: in order to pull this off, I'm going to have to revise one lecture per day from January 2 onward (including diagrams). I'll post the new materials here until they're polished, at which point I'll swap them into the standard location. I'll blog each time a lecture goes up: timely feedback would be greatly appreciated.

Dialogue & Discussion

You can review our commenting policy here.