Time and Place: Mondays and Wednesdays,
1:30PM - 2:50PM in GHC 4301
Instructor: Brad A. Myers (bam@cs.cmu.edu)
Office: NSH 3517
Office Hours: By appointment or walk-in
Course Web page: www.cs.cmu.edu/~bam/uicourse/830spring20/ (temporarily: uicourse.org)
Piazza page: piazza.com/cmu/spring2020/05830/


  1. Course Description
  2. Why Study This?
  3. Prerequisites
  4. Evaluation Comments
  5. Readings
  6. Attendance

Course Description

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, or people interested in learning how to provide user interface frameworks for others. After a quick overview of tools to help with the design of user interfaces, we will concentrate on how to implement the chosen design. The course will cover user interface software tools, such as frameworks, SDKs or APIs, toolkits, windowing systems, interface builders, prototypers, and interactive software tools. In particular, the course will cover toolkits for building phone/tablet/ubiquitous/novel user interfaces, Internet (JavaScript) UI frameworks, web services and other component frameworks, APIs for UI development such as Xcode, Microsoft's Windows SDKs, Swing and Android toolkits for Java, various JavaScript libraries such as AngularJS, React, and jQuery, interactive tools such as Balsamiq, Visual Basic .Net and Adobe XD, 2-D and 3-D graphics models for UIs, and various research systems like Amulet, subArctic, Context Toolkit, ConstraintJS, and Papier Mache. 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. Other topics will include designing APIs so they are usable by the target programmers, and how to evaluate user interface tools and frameworks. Today's research topics and open issues in user interface software will be emphasized throughout.

Why Study This?

A significant percentage 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 - for example, new libraries for JavaScript seem to pop up every week. Our research shows that a poorly designed API can impact programmer performance by significant amounts, and poorly designed UI tools can be a waste of both the user's and vendor's time. Therefore, it is vital for CS-oriented user interface specialists and software engineers in general to be familiar with the appropriate design of user interface software.

By the end of the course, you will have built your own modern UI framework or SDK for building applications across various platforms, which you might find useful for future projects. There will also be a final project of your own selection, which may be a research contribution possibly suitable for conference submission.

This course counts as an elective in any of the HCII's undergraduate or Master's degree programs. It counts as a "Technical" course in the HCII PhD program, and it counts as a "Design" course (as in software design) in the ISR PhD program.

Note that this course is only offered occasionally, so you should definitely take it now! No telling when it will be offered again! (It was previously offered Spring'17, Spring'13, Spring'09, Fall'04, and Spring'03, so it is on approximately a 3 or 4-year cycle.)


This is primarily a MS and PhD level course but some advanced undergrads may be admitted with permission of the instructor. Prerequisites are an advanced programming class and considerable programming experience. Experience with object-oriented programming and/or software engineering is strongly recommended. However, prior experience with user interface design is not required. Homeworks will involve extensive programming, probably in Java or JavaScript. (However, if you are good programmer but in a different language, please let me know.)

To be clear, this course is for strong programmers. You will need to write about 7,500 lines of code on your own for the homeworks. Just having taken 15-112 or something like PUI would probably not be sufficient.

Evaluation Comments from last time this course was offered (2017)

Very interesting course!

I've learned a lot of interesting tools and very inspirational ideas about making a user-friendly tools.

Material was interesting.

The class gave some solid background and historical developments.

I LOVE the style of the homework and LOVE the fact that everything together end up as a complete toolkit. It gives a comprehensive understanding on how every little piece come together to form the interactive widgets that we all take as granted.

The contents of the lectures were quite interesting and covered a huge range of topics.

Thanks so much! Your course inspired me a lot!


Required text

None. If you have no prior HCI course, you SHOULD buy the Nielsen Usability Engineering book (referenced as "Nielsen Text" in the schedule)


There is no text that covers the bulk of the course, so there will be extensive readings assigned, as listed on the schedule. In order to prioritize your work, I have marked all readings as "required" or "optional." The material from the optional group are interesting and/or important articles that a user-interface-software-expert should be familiar with.


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