05-830, User Interface Software, Spring, 2000

Number: 05-830 (offered by the Human Computer Interaction Institute)
Time: MW 10:30-11:50
Room: 3420 WeH
12 University Units
Available for CS PhD credit and MS credit for INI, MSE and HCII Master's
Undergraduates require permission of the instructor

Enrollment limited to 20 students.

Instructor: Brad Myers

Office: Newell-Simon Hall (NSH) 3601
Phone: x8-5150
E-mail: bam@cs.cmu.edu
Office hours: By appointment, or just drop by and see if I'm in.
Secretary: Ava Cruse,
NSH 3611
TA: None

Course Web Page:

You are looking at the course Web page.  The URL is: http://www.cs.cmu.edu/~bam/uicourse/2000spring/

Here is the schedule of all lecture material, readings, homework and tests:



Here are the benchmarks created by the class this year.


This course will cover the research and implementation of user interface software. The students will get a comprehensive understanding of all the approaches that have been investigated by researchers and commercial systems for user interface software. This will be of value to people planning to be user interface researchers or implementers. After a quick overview of the design of user interfaces, we will concentrate on how to implement the chosen design. Particular emphasis will be placed on user interface software tools, such as windowing systems, toolkits, interface builders, prototypers, and advanced user interface development environments. In particular, the course will cover MS Windows, OLE, MFC, Macintosh Toolbox, MacApp, OpenDoc, X/11, Motif, Visual Basic, Director, HyperCard, Java Swing, Java Beans, and various research systems like Amulet, InterViews, and subArctic. Lectures will discuss the fundamental principles behind all of these systems, while showing the historical progression of the ideas from research prototypes to commercial systems. Today's research topics and open issues in user interface software will be emphasized throughout. Homeworks will primarily consist of each student implementing a small project on at least 4 different user interface tools during the semester, in order to experience first-hand the breadth of techniques used in modern tools. Students will all use an interactive prototyping tool first, like HyperCard, Director, Visual Basic or Delphi. Then each student will implement the same interface in three other "high-level" tools, which will be chosen so that the full range of tools is covered by members of the class. Students will study and use the "usability engineering" development methodology and will compare and evaluate the various tools for ease of learning and effectiveness.

This is primarily a MS and PhD level course but some advanced undergrads may be admitted with permission of the instructor. No prior HCI experience is required.

Why Study This?

Surveys show that over half of all programming time is spent on the user interface portion across a wide variety of application types, and this percentage is increasing as requirements for more complex interfaces grows. In addition, the tools and methods available for building user interfaces continually change and improve. Therefore, it is vital for software engineers to be familiar with user interface design and user interface software.


15-212 and considerable programming experience. Students must know C++. Experience with object-oriented programming and/or software engineering is desirable. Prior experience with user interface design is not required.

The course syllabus and schedule will be similar to last year's. See:

Required text

None. If you have no prior HCI course, you SHOULD buy the Nielsen text below.

Recommended texts

Jakob Nielsen. "Usability Engineering". Boston: Academic Press, Inc. 1993. 0-12-518406-9 (paperback) or ISBN 0-12-518405-0 (hardcover)

Donald A. Norman, "The Design of Everyday Things". New York: Doubleday, 1988. ISBN 0-385-26774-6 (paperback) $12.95

Brad A. Myers, "Languages for Developing User Interfaces", Wellesley, MA (289 Linden Street, 02181, 617-235-2210): A.K. Peters, LTD, 1992. ISBN 0-86720-450-8. $49.95


Unfortunately, there is no text that covers the bulk of the course, so there will be extensive readings handed out. In order to prioritize your work, I have marked all readings as "required" or "optional." The tests will not include material from the optional group (unless it was also covered in class), but they are interesting and/or important articles that a user-interface-software-expert should be familiar with.


The grades will be based on:
Benchmark task description and presentation 5%
UI Examples Presentation 5%
4 Implementation Homeworks (14% each) 56%
Participation In Class 4%
MidTerm 10%
Final Exam 20%

In-class presentations

All class members will be giving a number of in-class presentations.  In particular, each class member will be presenting their benchmarks in class, and discussing each of their implementations throughout the term.


Extra copies of the readings, homework assignments and other handouts will be available in the bins outside my office.  The lecture notes will be available on the web the day before the lecture, linked from the course's schedule page, and will not be handed out in class--you can make a hardcopy if you want.


There will be material covered in class that is not available in the readings, so attendance at all lectures is highly recommended.


All homework must be typed. No handwritten assignments please.

Missed Tests

Make up tests will not ordinarily be given. If you know you are going to have to miss a test for valid reasons, discuss it with me and you can take the test early. If you miss a test due to a medical emergency, you must notify me or my secretary before the exam.


It is the policy of this class not to give incompletes.  All of the assignments end with an in-class presentation of your work, so you will need to have each one finished on time.  Note that the course load is designed to be quite uniform during the term, since there is no big project at the end.

Programming Environments

You will be implementing a benchmark program four times using four different user interface tool.  The first one will be a "prototyping tool," such as:

Next, you will implement the benchmark in two other toolkits of your choice.  Options include:

The final (fourth) implementation of the benchmark will be using my Amulet toolkit.  Amulet includes many innovations designed to make most types of interfaces significantly easier.

The goal is that everyone will have a good understanding of different toolkits and their strengths and weaknesses.  Another goal is to develop and test a set of benchmark tasks to see if they can reveal any interesting information about the toolkits.