CS349 - Developing User Interfaces

If you're seeing this message it's because you're looking at web pages in the undergrad computing environment, either through the course account for se382 or through the course account for cs349. These pages are copied once a day from the pages I maintain on www.cgl.uwaterloo.ca: subject to all the usual caveats about scripts unexpectedly ceasing to operate, et al. If something goes wrong I rely on hearing about it from somebody in the class, preferably by a posting to the newsgroup. If you think they're not up to date, you can try looking at the master version which is rooted at http://www.cgl.uwaterloo.ca/~wmcowan/teaching/cs349/index.html.


So long ago that I no longer remember when, Ric Holt asked me to create a curriculum for a user interface course to be offered as part of the Software Engineering program. I did so, based on the philosophy described below, delivered it to Ric, and consigned the matter to the oblivion of my aging brain.

Some time later Arnie Dyck came into my office: CS students had discovered the proposal, and wanted to know why such a course could not be offered for them, human-computer interaction being at that time an obvious void in the undergraduate curriculum. I gave Arnie my opinion that the user interface was as important a part of computer systems as the operating system, and that a user interface course should be offered in third year, to be followed by two specialized courses in fourth year: computer graphics, which exists, and human-computer interaction, which does not yet exist.

Arnie agreed, the software engineering curriculum was dusted off, and I began offering a fourth year course, CS498R. (CS498 is a course with a calendar description so general that pretty well any course can be offered using its number. It is used for experimental offerings of courses that may, if successful, be calendarized later.) CS498R would be a shakedown cruise for the software engineering course and for a possible computer science course.

In the event CS498R was very successful: the first year there was one section, the second year two, and the third year three. It is now reincarnated in two bodies - CS349 and SE382, identical twins, as you might say, or less politely, clones. You can see their ancestry, lecture notes, assignments, exams, etc., by looking at my pages for CS498R. I have put the CS498R on a bit of a diet to make it more suitable for third-year students, most of the students in CS498R having been in fourth year. The result, however, has not been the removal of advanced content, but of basic content, current students having had more exposure to Java in first and second year. (Don't worry, you will be unlearning most of that, but unlearning is much more easy than learning, as is discussed in the course.)


What type of course should be offered to undergraduate computer science students as an introduction to user interfaces? The usual answer is: a high-level survey of the entire field of human-computer interaction. A course like this does a good job of letting students know what it would be like to specialize in human-computer interaction, but fails to treat any topics in enough depth to give students useful skills, which is appropriate for specialists who would expect to develop such skills in further courses.

But if one thinks, as I do, that user interfaces are as important a part of of computer science as operating systems, it's not obvious that a survey course is the right thing for students. In particular, here's what I found when I talked to students and employers.


  1. Winter, 2004
  2. Spring, 2004
  3. Winter 2005
  4. Spring 2005
  5. Spring, 2010


  1. Winter, 2006 Course Notes


A small collection of my favourite books and articles on user interfaces and human-computer interaction.

Return to: