Schedule and Readings
- All lectures are: Thuesday and Thursdays, 3:05PM - 4:25PM Eastern Time, in GHC 4102.
- All labs are: Fridays, 3:35PM – 4:25PM – WEH 4623
- CMU-only note: Access to some pdfs and the ACM Digital Library is restricted to only those on a CMU machine. Use VPN if you are at home. For VPN, here are the CMU instructions for VPN. In the Cisco AnyConnect dialog, you may need to use the "Library Resources VPN" in the "Group" drop-down (which is not the default).
The final schedule and readings will be available soon. Here is the tentative list of topics:
- Introduction to Course; What are "Software Structures for User Interfaces"; and Why are user interfaces hard to design and implement?
- What is "User Interface Software", Overview of UI Software and Tools
- Review of HTML and CSS
- Review of JavaScript
- Input 1: Conventional Input Models for Handling Input Events
- Input 2: Declarative input models; "Interactor" (Behavior) Objects in Garnet and Amulet and
- Output 1: Basic 2D Computer Graphics
- Output 2: Graphics Models: Structured Graphics; Multiple Hierarchies; Object-Oriented Techniques
- UI Software Models: Lexical-Syntax-Semantics, Seeheim Model, MVC, Design Patterns, State Diagrams
- UI Implementation Concepts: Callbacks, Resources, Widget Hierarchies, Geometry Management
- React for JavaScript
- Some Other Web Toolkits - jQuery, AngularJS, Vue, Bootstrap, etc.
- Evaluation of APIs and UI Tools, API Usability, Cognitive Dimensions
- Command Objects & Support for Undo
- Toolkit support for Gestural Input Techniques, Handwriting Recognition
- Constraints and Data Bindings
- Connecting to the backend - Web Services and Databases
- Toolkits for building speech/conversational/chatbot User Interfaces, and Visualizations
- Interactive Tools: Prototypers (HyperCard, Director, Visual Basic, Balsamiq), Interface Builders, Sketching Tools
- Software Engineering for UIs: How to create high-quality UIs in the context of Agile and other software development processes
- Simple User Interface Toolkits and End-User Programming for UIs; Low-Code / NoCode
- Toolkit support for Assistive and Accessible Interfaces; Web Accessibility
- Toolkits for 3D Programming and the UIs of Games