The title of this post is taken from the reaction of the first person I showed this course schedule to. If we're really going to teach Software Carpentry in one university term (12-13 weeks), this is the pace we'll have to move at. What do you think? Is it crazy, or just nuts? And what, if anything, can be done about it?
- This course is designed for graduate students in science and engineering and their professional peers, which allows a faster pace than would otherwise be possible.
- All problem sets are due one week after being assigned; their due dates aren't marked to avoid cluttering the table. Based on past experience, each problem set is 4-6 hours of work.
- There is no midterm or final examination.
|2010-09-07||Introduction to course||Post single-paragraph professional biography to course web site|
|2010-09-09||Associative data structures: sets; dictionaries||Problem set #1 (sets & dictionaries)|
|2010-09-14||Tracking down bugs: visual debuggers; breakpoints; watchpoints; debugging strategies|
|2010-09-16||Read text files: data processing patterns; incremental development||Problem set #2 (parsing); in-lab practical exam on debuggers and debugging|
|2010-09-21||Quality assurance: data processing patterns; incremental de||Problem set #3 (designing tests)|
|2010-09-23||Regular expressions: patterns; groups; operators; anchors; finite state machines||Problem set #4 (regular expressions)|
|2010-09-28||Iterative program design: choosing data structures; refactoring; tuning||In-lab "live design" exercise|
|2010-09-30||First-class functions: functions as objects; apply; map; reduce||Problem set #5 (functional programming)|
|2010-10-05||Coding style: cognitive concerns; style rules; refactoring revisited||Problem set #6 (code reviews); in-lab code review|
|2010-10-07||File systems programming: directories as files; permissions; properties||Problem set #7 (finding duplicate files)|
|2010-10-12||Version control: motivating problems; update/commit; merge||In-lab setup and practice with Subversion or Mercurial|
|2010-09-14||Image processing: image representation; operators; recursion||Problem set #8 (image transformations)|
|2010-10-19||Data parallelism: array operations; shape operations; masking||Problem set #9 (numerical linear algebra and cellular automata)|
|2010-10-21||Performance: algorithmic vs. actual efficiency; profiling; tuning||Problem set #10 (profiling and speeding up small programs)|
|2010-10-26||Task automation: dependencies; dependency graphs; rules||Problem set #11 (using Make/SCons for data provenance)|
|2010-10-28||Spreadsheets: data representation; unitary operations; aggregation; visualization||Problem set #12 (data analysis using Excel or Calc); in-lab discussion of data visualization|
|2010-11-02||Databases: simple queries; filtering; aggregation; sub-queries||Problem set #13 (data analysis using SQL)|
|2010-11-04||XML: elements vs. attributes; syntax; recursion||Problem set #14 (extracting information from XML documents)|
|2010-11-09||Object-oriented programming: classes vs. instances; defining methods; constructors; data hiding|
|2010-11-11||Object-oriented programming (cont.): polymorphism; inheritance; operator overloading||Problem set #15 (rewriting previous examples using classes)|
|2010-11-16||Information architecture: data modeling; entity-relationship analysis; class diagrams||Problem set #16 (designing data representations); in-lab design of data representations for simple problems|
|2010-11-18||User interfaces: reactive programming; basic GUI components||In-lab demonstration of GUI toolkit|
|2010-11-23||User interfaces (cont.): model-view-controller; design guidelines||Problem set #17 (constructing GUI controllers for previous example programs)|
|2010-11-25||Web programming: HTTP request cycle; passing parameters; special characters; fetching data||Problem set #18 (downloading and analyzing data)|
|2010-11-30||Web programming (cont.): providing data; maintaining state; security concerns||Problem set #19 (a simple data server); in-lab guest lecture on information security|
|2010-12-02||Parallel programming: task and data decomposition; Amdahl's Law|
|2010-12-07||Parallel programming (cont.): map/reduce||Problem set #20 (map/reduce parallelization of previous example)|
|2010-12-09||Teamwork: key empirical results in software engineering|
|2010-12-14||Teamwork (cont.): SCRUM; teamware||In-lab demonstration of Trac and Google Code|