This course provides an introduction to contemporary user interfaces, including the basics of human-computer interaction, the user interface design/evaluation process, and the architectures within which user interfaces are developed. Students implement and evaluate portions of typical user interfaces in a series of programming assignments.

The emphasis in this source is the principles of constructing and implementing user interfaces. Some attention is paid to issues of design and usability, but CS 449 provides more complete treatment of these topics.

Recommended Texts

There are no required texts for this course. All required material will be covered in lecture, and slides will normally be posted prior to class (note that material may be discussed in more detail than the slides cover; you are expected to attend lectures and take notes as required).

The Resources page lists some additional reference material.


All announcements, questions, and answers are on Piazza. When you register, please use an identifier that clearly indicates who you are for the purposes of the course. When you post questions, please make them public so that other students can benefit from the dialog!

Staff & Office Hours

(all email addresses are


Jeff Avery (j2avery@)
DC 3107
Office Hours: Mondays, 1:00 - 2:00 PM

Instructional Assistant

Responsible for helping the instructor develop assignments and marking schemes, resolving mark appeals, and delivering tutorials as-needed.

Shaishav Siddhpuria (spsiddhp@)
DC 3540
Office Hours: Wednesdays, 3:00 - 4:00 PM

Teaching Assistants

Teaching assistants are responsible for marking assignments, marking exams, and holding office hours.

Terence Dickson (tpdickso@)
DC 3540
Office Hours: Tuesdays, 12:30 - 1:30 PM

Connor Flood (cdflood@)
DC 2302C
Office Hours: Mondays, 9:00 - 10:00 AM

Eldar Khalilov (ekhalilo@)
DC 3587
Office Hours: Fridays, 10:00 - 11:00 AM

Hemant Surale (hsurale@)
DC 3540
Office Hours: Thursdays, 3:00 - 4:00 PM

Alex Williams (a27willi@)
DC 3540
Office Hours: Tuesdays, 11:00 - 12:00 PM

David Xu (d44xu@)
DC 3616
Office Hours: Wednesdays, 2:00 - 3:00 PM

Instructional Support Coordinator

The ISC is responsible for long-term support for the course, maintaining the marks spreadsheet, coordinating accomodations (illness, alternate exams, etc), screening for cheating and dealing with the results.

Caroline Kierstead (ctkierst@)
MC 4009


There are four assignments, each worth 10%, a midterm worth 20% (see schedule for date and location), and a final exam worth 40%. Final course grades will be calculated as follows:

 assignments = .10*(A01 + A02 + A03 + A04)/.40
 exams = (.20*Midterm + .40*Final)/.60
 normal = .60 * exams + .40 * assignments
 if assignments < .50 or exams < .50
     grade = min(.47, exams, normal) * 100
     grade = normal * 100 

Note: to pass the course you must pass the weighted average of the assignments and the weighted average of the exams.


Assignments are meant to provide meaningful, engaging experiences in constructing interfaces while giving you the opportunity to create applications you will want to share with others. There's lots of room for creativity in assignments and each will have a component for going above and beyond the basic assignment specification.

The assignments in this course require a significant amount of time. Do not underestimate the time it takes to code interactive applications! Due dates will be posted in the course schedule as assignments become available.

Read the available information about academic integrity very carefully. Plagiarism detection software is used to screen assignments in this course to verify that students aren't sharing code in their assignments.

There are four assignments. The topics are placeholders, meant to illustrate the concepts that we'll be addressing in each.

Assignment Policies

  1. Assignments will be done in Java and Android, and you can write code on any modern desktop platform (Windows, OS X, Linux). Exact details will be provided in the assignment specifications.
  2. Due dates are specified on the Schedule. Late assignments will not be accepted, and will receive a grade of zero.
  3. Submissions must be made via your Git repository.
  4. Assignments are your individual work:
    • You can use code examples provided in-class.
    • You cannot use code anyone else's code in your assignments (this includes current or past students of this course), and you are prohibited from sharing your code with anyone else in the course. You can discuss about how you accomplished something in general terms, but sharing code in any way is prohibited.
    • No external or third-party code is allowed in your assignments. You should not be searching for, and using, code that you find on the Internet (this includes GitHub, Stack Overflow and similar sites). It is perfectly acceptable to search for a general technique (e.g. how does this class work?) but you cannot use any third-party code in your assignments.
    • You are not allowed to make your code publically available on any hosting sites until after the end of the term (this includes a prohibition against posting your assignment in a public repository like Github). If you wish to show your code to potential employers, you should post in a private/restricted repository instead.
    • After assignments are graded, a detailed marks file will be checked into each students private repository containing the marks for that assignment.

Java & Android Development

For assignments, we use Java SE 8 SDK (8u91 or later), which can be installed from the Oracle downloads site. For later assignments, we also use the Android 6.0 SDK (API 23) and Android Studio, which can be downloaded from the Android Developer Site. Specific requirements are described in each assignment specifiation.

Git Setup

We will be using Git, a distributed version control system, for assignment submissions. You are expected to setup your account on the UW Git installation, and "push" your assignments to a private repository on that server to submit them. As per assignment policies described above, you are not allowed to post your assignments online in any other location until after the course is completed.

To access your private repository for this course, you need to git-clone the repo to your local machine.

The command looks like this (replace username with your Quest login name, e.g. mine is j2avery):
git clone

To submit assignments, you need to 'git add' new files, 'git commit' changes and 'git push' to the server (push sends it to the server to be graded!). See Git slides for more information.


Academic Integrity

In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. See Academic Integrity Guidelines for more information.


A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.


A student is expected to know what constitutes academic integrity, to avoid committing an academic offence, and to take responsibility for his/her actions (see Academic Integrity Guidelines). A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline. For typical penalties check Guidelines for the Assessment of Penalties


A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground. A student who believes he/she has a ground for an appeal should refer to Policy 72 (Student Appeals)

Students with Disabilities

AccessAbility Services, located in Needles Hall, Room 1132, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with them at the beginning of each academic term.