Thursday, September 17, 2009

The New OOP344 - Object Oriented Programming II Using C++ @ Seneca

During summer of 2009 I attended POSSE (Professors' Open Source Summer Experience) and got many ideas to help introduce students to open source.
I decided to change one of the subjects I teach in Seneca to a "Simulated Open Source Model".
I believe by doing this, I can help the students understand the open source method of development in a less stressful and more controlled environment and encourage them to take the open source subjects later in Seneca.

The first time I got involved with an open source subject in Seneca, I found out that the step from educational programming to open source programming is a little too big for many of the students.
Before the students take the first open source subject in Seneca:
  • The lengthiest program they dealt with is few hundred lines of code.
  • They have done it either by themselves or in a group of 2 or 3 students.
  • They have to come up with a solution by themselves, through research or help of the prof.
The first time a student is introduced to open source;
  • The code size of the projects is hundreds of thousands of lines if not millions.
  • They have to learn to work with huge groups developers.
  • The source of their code it open for everyone to see and criticize and they probably will never meet the person helping and guiding them in their code.
This major change I believe makes the job of the student and professor very difficult. The learning curve is very steep and students keep up with difficulty.

I believe by having an introductory subject like OOP344 as a semi open source subject, students will become familiar to the type of work awaiting them, when they take the "real" open source subject.

Since this is a college, we teach through practice; OOP344 topics are taught in parallel with developing an application that is probably the first complicated program they encountered.

In the application, the student is to take over the text-base console input/output routines of several different platforms and write some kind of simple interactive "dialog box". The IO routines are written in C language and later encapsulated into classes using C++ and then some kind of a "dialog box" is written using these classe. Eventually, at the end, an application (like a record browser) is written using the "dialog box" class.

This project is done individually.

  • The project is changed to something that is just big enough not be able to be done by one person. (a Text editor for this semester)
  • The first part of the assignment will be done individually (the basic "C" IO routines) so they can learn,exercise and then be evaluated for their programming skills. This will take 3 to 4 weeks.
  • The C++ part of the assignment will be done in teams.
  • At the beginning of the 3rd week, the students will be asked to form groups in larger teams than they usually do, ( I am thinking of up to 8 students but I am open to suggestions)
  • The Teams are required to use a repository (SVN or Mercurial... suggestions?) for their source code.
  • The assignment is fully designed. Students can, by only follow the specs, have a simple text editor. But if they want to, they can add as much features as they want or change the specs to make it work with desired features. (this should be approved by the prof to make sure the additions are feasible)
  • The students are required to blog about their work and help each other through their blogs and they will be mark accordingly for their collaborative work and their contribution.
  • They are required to maintain and contribute to the wiki pages created for the subject.
  • They are required to use IRC for their meetings and immediate questions. (I will also set "online office hours" on IRC to encourage use of IRC.)
Take a look at here for to see the course as it develops....


  1. Hi, Fardad.

    Wonderful work! It will give me ideas on exposing my Java programming students (JAC444) to open source software development. Hopefully they will be prepared to undertake open souce development in a separate course.


  2. Object-oriented programming (OOP) is a programming language model organized around "objects" rather than "actions" and data rather than logic. Historically, a program has been viewed as a logical procedure that takes input data, processes it, and produces output data. The programming challenge was seen as how to write the logic, not how to define the data. Object-oriented programming takes the view that what we really care about are the objects we want to manipulate rather than the logic required to manipulate them. Examples of objects range from human beings to buildings and floors down to the little widgets on your computer desktop.