Introduction to Systematic Program Design

Dara Monasch / Wednesday, June 5, 2013

Once upon a time, on an afternoon late last week, it was a pleasant 98 degrees here in Cranbury, NJ…  On that day, a young Infragistics employee was sitting in the temperature-controlled office, pondering what to do that afternoon that would both keep her out of the sweltering heat, but also not bore her to tears (mind you, Game of Thrones Season 3 Episode 9 hadn’t been released yet at this time, so she wasn’t busy crying herself to sleep at night). A few moments later, a reminder appeared in her inbox from Coursera. Introduction to Systematic Program Design was beginning on Monday. Success! The young lady now had a purpose in life for the next eight weeks.

And so begins the next installment of D-Coding… The University of British Columbia’s Introduction to Systematic Program Design, provided online by Coursera.

Course Requirements & Purpose:

Duration: 8 Weeks

Homework: Once a Week

Quizzes: Once a Week

The main learning goals for this course are (excerpted from the syllabus):

  1. Understand a systematic design process.
    This is demonstrated by being able to write programs for a reasonably complex task, where the ability to use the "one task - one function" rule can be demonstrated.
  2. Understand that programs are written both to run on computers and for people to read. 
    This is demonstrated by being able to write code that is readable, well organized, documented, and tested.
  3. Understand the relation between information and data. 
    This is demonstrated by being able to design the data representation for a reasonably complex problem, and to describe the information encoded in the given data.
  4. Understand that the structure of the data a program operates on determines many elements of the program's structure. 
    This is demonstrated by being able to identify correspondences between a data definition and a program that operates on that data. Also by being able to identify how potential changes to a data definition would affect a program.
  5. Understand that one can replace repetitive code with an abstraction in a systematic way. Understand that this is at the heart of designing libraries. 
    This is demonstrated by being able to produce examples of code before and after abstraction: before, where one can see the repeated code, and after, where one can see the abstraction and verify that it provides the solution to the original problem, as well as several other similar problems. Students should also be able to design a program that uses existing libraries or existing code to solve a new problem.
  6. Understand that programs can be described using notations other than code, and that these models can facilitate program design. 
    This is demonstrated by being able to identify correspondences between non-code models of a program and the program itself and by being able to use non-code models in program design.


I’m definitely really excited for this class, and I think it’s really interesting that it will be taught in a “made up language”, specifically created for students that are taking this course progression. I’m excited by that because it truly feels like everyone is on the same plane, and I’ll be learning from the ground up, without any preconceived notions about how familiar the student body is with a particular language. 

In addition, the instructor took a lot of time in the first two videos (that’s how far I’ve gotten so far) to ensure the students that the Pythagorean theorem is the “hardest math” we’ll be doing, which, if you’ve read “Casting Variables in C (No, You’re Not Just Bad at Math)”, you’ll know makes me very, very grateful.

I’m going to do my best to update weekly with summaries of what I’m learning, so anyone that’s interested can follow along. AND if anyone out there is also taking this class, feel free to ping me and we can chat about it!


Feel free to comment here on my blog, or find me on Twitter @DokiDara.

By Dara Monasch