Tuesday / Thursday, 1:30-2:50
Instructor: Brad Myers
This is the class website: http://www.cs.cmu.edu/~bam/uicourse/05631fall2020/
More information will be posted here soon.
This course considers the basic and detailed concepts that go into building software to implement user interfaces (UIs). It considers factors of input, output, application interface, and related infrastructure as well as the typical patterns used to implement them. It considers how these aspects are organized and managed within a well-structured object oriented system. We will cover a variety of "front-end" programming contexts, including conventional graphical user interface (GUI) programming for mobile apps (phones, watches and other wearables), web apps, and regular desktop applications, across a variety of programming languages and frameworks. We will also cover programming for data-driven and conversational (AI) user interfaces (including speech and "chat bots"). We will briefly touch on front-end programming for visualizations, games, 3D, and virtual and artificial reality (VR and AR), along with interactive UI tools such as GUI builders, prototypers, and resource editors. The homeworks and project in this course will involve extensive object-oriented programming, so this course is only appropriate for students with a strong programming background. Note that this is NOT an HCI methods course -- we do NOT cover user-centered design or evaluation methods. This course is designed for students in the SCS HCI undergrad Major, but it also available to BHCI second majors or HCI minors, Masters of HCI and METALS students, or any undergrad or graduate students with an interest in the topic and solid prior programming experience, who wish to understand the structures needed for professional development of interactive systems. Note that ALL students who register for this class will initially be placed on a waitlist. Your position on the waitlist is not an indication of whether you will be accepted into the class. Priority for getting into the class are students in the HCII programs (more senior students first), and then others. The graduate (05-631) and undergraduate (05-431) numbers are for the same course with the same work.
Using and designing User Interface (UI) Toolkits and Frameworks; Input, Output and Constraints for User Interface Front End Programming; the Software Structures for Tools such as React, AngularJS, Android, Apple Xcode, Windows SDK, Java Swing, Flutter, Unity, D3, etc.
Students must be strong programmers. For example, having taken 17-214 or 17-514 or 17-437 or 15-214 or 15-213 or 18-213 or 15-513 or 14-513 or equivalent. 15-1xx level courses will not be sufficient. Familiarity with object-oriented programming is strongly recommended. Introductory courses or background in HCI is recommended but not required (note that this is NOT an HCI methods course, so students are expected to learn HCI methods elsewhere).
Most software developers will be involved in programming the front-end of applications, and there are standard software structures that pervade all of the tools that are used to support this.
Students will learn the software structures that have stood the test of time, and are the foundation of user interface frameworks and libraries for various platforms, as well as newer structures for programming the user interfaces for AI, data-driven, game and AR/VR systems.
The course is likely to have multiple programming assignments as the homeworks, a final project, a midterm, and possibly also a final exam.
Students will use a variety of learning resources including documentation for existing user interface frameworks and tools, along with academic research articles (which are all accessible free on-line via University library resources).
Assignments, readings and the project for this course are done outside of class, but should fit within typical expectations based on the number of units of credit.