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.
Originally posted 2012-01-25 by Greg Wilson in Education.
comments powered by Disqus