January 25, 2012: The Big Picture

I'm trying to be systematic about re-designing the core curriculum of Software Carpentry. So far, I've identified 11 common questions:

Q01: How can I write a simple program?
Q02: How can I make the program I've written easier to reuse?
Q03: How can I reuse code that other people have written?
Q04: How can I share my work with other people?
Q05: How can I keep track of what I've done?
Q06: How can I tell if my program is working correctly?
Q07: How can I find and fix bugs when it isn't?
Q08: How can I get data into my program?
Q09: How can I manage my data?
Q10: How can I automate this task?
Q11: How can I make my program faster?

whose answers depend on three fundamental principles:

F01: It's all just data.
F02: Programming is a human activity.
F03: Better algorithms are better than better hardware.

These break down into 11 more specific principles:

P01: Code is just a kind of data.
P02: Metadata makes data easier to work with.
P03: Separate models and views.
P04: Trade human time for machine time and vice versa.
P05: Anything that's repeated will eventually be wrong somewhere.
P06: Programming is about creating and composing abstractions.
P07: Programming is about feedback loops at different timescales.
P08: Good programs are the result of making good techniques a habit.
P09: Let the computer decide what to do and when.
P10: Sometimes you copy, sometimes you share.
P11: Paranoia makes us productive.

which in turn translate into 11 recommendations:

R01: Use the right algorithms and data structures.
R02: Use a version control system.
R03: Automate repetitive tasks.
R04: Use a command shell.
R05: Use tests to define correctness.
R06: Reuse existing code.
R07: Design code to be testable.
R08: Use structured data and machine-readable metadata.
R09: Separate interfaces from implementations.
R10: Use a debugger.
R11: Design code for people to read.

Here's how I see all this mapping onto the curriculum (assuming we replace agile development with number crunching):

Comments and suggestions would be very welcome.

< OlderNewer >

This post originally appeared in the Software Carpentry blog.