Computer Science
>
>

CSE 340 Interaction Programming

Spring 2022

University of Washington

This course focuses on the design and programming of interactive systems, exploring various programming paradigms, event handling, and accessibility. It requires prior knowledge of Java and familiarity with data structures. This course helps to develop user-friendly interfaces and study existing interfaces. Although the platform used is Android, it's not strictly an Android programming course.

Course Page

Overview

Interactive technology is changing society. Some of today’s interfaces are used by a billion people at a time. Almost everything we create is created for people to use, through user interfaces. We will learn about interactive systems, including programming paradigms and design of event handling, layout, undo, accessibility and context awareness.

Prerequisites

The only official requirement for this class is that you have taken CSE 142 and 143 or an equivalent class, meaning you are comfortable programming in Java, and have some experience with data structures.

There are other skills that are required for the class that are not explicitly taught, which means you should plan to spend extra time (either independently or in OH) learning and practicing those skills. These include:

  • working in an Integrated Development Environment (IDE) that is more complicated than JGrasp
  • Using a version control systems (Git)
  • Reading and understanding library and toolkit documentation
  • Reading and understanding a larger starter code base
  • Reflecting on and explaining the coding work you have done
  • Reading through assignment specifications which are “more complicated and less detailed” than a typical Introduction to CS assignment specification.

Taking CSE 391 just before or concurrently with 340 can help, but our staff can also assist where needed.

The specific platform and language for this class are Java on Android phones (or simulators); using the IntelliJ IDE (Android Studio). While Google is switching over to Kotlin, there are good reasons to start learning Android with Java first.

Note that this class is designed for CSE majors, and other students who work regularly with information technology and are strong programmers. While we will consider applications from outside the major, other restrictions may limit space for such students.

Learning objectives

Why should I take this class?

Interfaces are an important part of our daily lives and many of them are created as a connection from a human to a machine. Even a new machine learning algorithm or a database system requires some human connection in order for those systems to work.

User interfaces are incredibly important, but interactive user interaction requires a different programming paradigm than you may have learned before. In this you will learn how to:

  • write an event-driven program which reacts to user input and displays output using abstractions in a structured and maintainable way. These abstractions generally transfer to almost any other user interface toolkit.
  • think about the design and implementation of novel interaction techniques such as voice based interfaces or augmented reality, in order to enrich the user experience.
  • build inclusive and accessible user interfaces.
  • implement implement user-centered features, such as Undo, that following well studied design principles that are applicable in any user interface.
  • critique and study existing user interfaces using light weight informal and formal methods.
  • communicate your findings through comprehensive reports as well as reflections on your learning

The Course Details page describes each of our course modules as well as other classes that complement the learning goals in CSE 340.

Textbooks and other notes

What should I expect as a student in this class?

This is an interaction programming course which will teach the abstractions that underly all user interfaces (see the Course Details page for more information). To learn these concepts, we will cover a mix of theoretical aspects of HCI (such as how to predict the time it will take to click on a button, or why Undo is important to implement) and practical aspects of HCI (such as how to handle user interface events). What we will not cover is Android programming.

To re-iterate, this is not an Android programming class and you will be expected to research Android programming yourself. We will point you at the relevant of Android documentation but you must be willing to read through and explore this documentation on your own.

Taking any class is a commitment, and this one is no exeception. We want to make sure you get the most out of your experience. Below is some information about prerequisites and expectations.

Other courses in Software Engineering

CSE 331 Software Design & Implementation

Spring 2022

University of Washington

CS 190: Software Design Studio

Winter 2023

Stanford University

15-414 Bug Catching: Automated Program Verification

Spring 2022

Carnegie Mellon University

Courseware availability

Slides available at Schedule

No videos available

Assignments available at Assignments

Resources available at Documentation

Covered concepts