Teaching basic lab skills
for research computing

That's, Uh, Pretty Ambitious

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?

Notes

  1. 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.
  2. 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.
  3. There is no midterm or final examination.
Date Topics Events
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
2010-12-16 Review