First Lessons in Programming, Software Carpentry Review

As mentioned a few times, Matt Davis and I taught the Python section of the Software Carpentry Boot Camp this past week.  Overall the experience was positive.  We had approximately 4 (stretched to 5) hours, and developed our own curriculum with a fairly strong narrative.  Almost every exercise focused on a task, taking a CSV data-file (eventually a large set of such files), loading it up, performing calculations on it, and outputting results.

The biggest single failure, IMO, is that our exercises were too involved.  Matt mentions in his blog post that he would have done more "filling in" for the exercises, so that students would just be able to focus on a few key lines.  I'm of the mind that having more exercises which are still "blank canvases" (though possibly with the *interfaces* defined in the files), but that build more slowly would have provided a better experience.  We could experiment with that.  At the least, a number of the exercises needed to be broken down into smaller, more easily explained tasks.  These were not take-home exercises, after all.  They were to be solved "live", so no exercise should have had more than one "goal".

Setup and system configuration was a major time sink.  In such a compressed time-frame, having an hour or so of your time disappear into "how to install Python" and "how to work around OSX Lion marking every file edited with TextMate quarantined (not executable)" issues is a rather huge loss.  Software Carpentry is looking at how to address those issues.  As Matt points out, Udacity's (or Crunchy's) model might work there, but it wouldn't leave the student's with a working dev environment at the end of the class.

Student level became something of an issue for a handful of students.  They were already familiar with loops, variables, data-types, etc, and were looking for a "I'm a MatLab user, show me how to use Numpy" type introduction.  Software Carpentry is more of a "I know how to use Office, Facebook and Google, how do I start programming" level course.

I would be tempted to compress one of the other topics (e.g. remove shell *scripting* and only cover basic shell operations, maybe adding ssh basics), and possibly defer one of the other topics entirely (SQL and image processing), which would give ~ 5 hours more to the programming course.  While shell scripting is useful, image processing is cool, and SQL is valuable, getting people up to speed with how to solve problems with code would mean an online tutorial/workshop could cover SQL, a special-interest workshop could cover image processing, and people who were interested could easily pick up shell scripting, having already learned how to program in one language.  Matt's suggestion that we do more "motivational" introductory material is interesting as well.

I'm hoping to teach some other introductory Python courses from the curriculum we developed, so I'll try to address some of these issues going forward.


  1. Jason

    Jason on 02/29/2012 2:34 a.m. #

    I think you have a tough job, how do you prioritize teaching things that are all important?

    Even though setup was a time sink you say: Software Carpentry is more of a "I know how to use Office, Facebook and Google, how do I start programming" level course." If you can't get your system setup you can't even begin to program.

    And for me, I'd rather spend my time with data than getting my system setup, installing dependencies, etc. So, if someone could teach me principles of getting x-cool-package.egg to run, I'd be much more productive.

    I'm unfamiliar with Udacity's model but you may want to experiment with ipython notebooks.

  2. Andrew Malcolmson

    Andrew Malcolmson on 03/02/2012 2:47 p.m. #

    A couple of alternatives to installing Python locally:

    1) Pythonanywhere from the IronPython folks in the UK. Your choice of Bash or IPython shells and you can run your app on their servers.
    2) NeutronIDE, a fork of the Ace Javascript editor running under Django. Includes a top-up terminal view. Works great on my Debian server.

    I use both of these on my Chromebook where I have no option of local installs.

Comments are closed.


Pingbacks are closed.