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. Particular emphasis will be placed on user interface software tools, such as frameworks, SDKs, toolkits, windowing systems, interface builders, prototypers, and advanced user interface development environments. In particular, the course will cover toolkits for building phone/tablet/ubiquitous/novel user interfaces, Internet UI frameworks, Service-Oriented Architecture (SOA) and other component frameworks, APIs for UI development such as Xcode for Apple products, Micrsosoft’s Windows SDKs, Swing and Android toolkits for Java, interactive tools such as Visual Basic .Net and Adobe Flash, 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 an API so it is 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. See also the list of topics.
This is primarily a MS and PhD level course but advanced undergrads may be admitted with permission of the instructor. Prerequisites are 15-212 or equivalent and considerable programming experience. Experience with object-oriented programming and/or software engineering is desirable. Prior experience with user interface design is not required. Homeworks will involve extensive programming, probably in Java. By the end of the course, you will have built your own modern UI framework for building applications on desktops, smartphones, tablets, embedded devices (e.g., for Arduino) and/or the web, which you might find useful for future projects.