Skip to the content.
This is the Winter 2021 final website.

Welcome to Interaction Programming!

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.

For quick links to key things, check out the navigation bar above and the table of contents here:

Class Times

See Canvas for all zoom meeting links

Schedule: Click here for a visual schedule of class, office hours, and section zoom links.
Class Time: M/W/F 12:30pm - 1:20pm PDT
Lab Times: 9:30 am PDT (Section AA) and 10:30 am PDT (Section AB)

Course staff

(More information on Pronouns)


Jen Mankoff Jennifer Mankoff (she/her)
Office Hours: 1:30-2:30 M/W


Section AA Jasper Palmer Jasper Palmer (he/him); Office Hours: 11:30am W; 1:30pm F Zeynep Toprakbasti Zeynep Toprakbasti (she/her); Office Hours: 6:30pm T/Th
Section AB Taylor Gotfrid Taylor Gotfrid (she/her); Office Hours 1:30pm M & 10:00am T Jay Lin Jay Lin; Office Hours: 6:30pm T/Th
Infrastructure Jeremy Zhang Jeremy Zhang (he/him); Office Hours 11:30am W; 1:30pm W    

Should I take this class?

Yes! Some of today’s interfaces are being used by a billion people at a time. Almost everything we create is created for people to use, and user interfaces are how people interact with anything else you do (whether it is a new machine learning algorithm or a database system). User interfaces are incredibly important, but they also represent a different programming paradigm than you may have learned before. This class will teach you

Taking a class is a big commitment, and you will work hard in this class. So we want to help you make sure this is the right class for you. Below is some information about prerequisites and expectations.

Prereqs and expectations

The only 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.

However, if you are not comfortable working in an IDE environment, using version control, and picking up and working with someone else’s library code, you will likely need to plan for extra time with TAs, and possibly attend extra tutoring sessions, to keep up with the class. 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, financial and other restrictions may limit space for such students.

Course Learning Goals

This is an interaction programming course which will teach the abstractions that underly all user interfaces. 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 show some aspects of Android programming and point you at relevant documentation to help.


How do I draw things on the screen? Do you know how to control what is shown to the user?


How do I set up an interface so that it looks the way I want and reacts properly to changes in orientation and size? Do you know how to implement a layout, supporting reactivity and so on?


How do I handle input from the user, both at the application level and within a specific interactor? An advanced but important aspect of android programming is implementing your own interactors. This is strongly tied to event handling because they can only be interactive if you know how to deal with events.


Learn to build an application that meets basic standards that require programmatic support for accessibility, security, and interactivity.

There are interaction programming concepts that need to be considered at the application level. These may not ever show up in a spec, but are still the responsibility of the implementer to consider. Some examples include making your interface secure; supporting undo; and making it accessible. Human behavior is another essential aspect of interface design you must consider. But how does it interact with interface programming? More specifically, this class will cover the following learning goals

Communication about app concerns

You are unlikely to be building an interface in a vacuum – you will need to be able to read specs that are provided to you, identify potential problems, and advocate for new directions. These are communication tasks that are critical to success whether you are building interfaces or designing them. We will cover a sample of these in this class including:

Course Structure

Each week, there will be three hours of lecture material (Monday, Wednesday, Friday) and one TA-led lab (Thursday). In addition the TAs will host office hours, often in pairs.


All schedule sessions for this course are scheduled to run synchronously at your scheduled class time via Zoom. These Zoom class sessions will be recorded. The recording will capture the presenter’s audio, video and computer screen. Student audio and video will be recorded if they share their computer audio and video during the recorded session. The recordings will only be accessible to students enrolled in the course to review materials. These recordings will not be shared with or accessible to the public.

The University and Zoom have FERPA-compliant agreements in place to protect the security and privacy of UW Zoom accounts. Students who do not wish to be recorded should:


Lectures are designed to introduce new material throughout the quarter, motivate key theories and concepts, as well as demonstrate Interface Programming primarily using the Android Studio development environment.

The goals in this class center around learning by doing. This means that hands on time trying out everything from implementation to evaluation is critical to learning. Active learning has been shown to increase student performance in STEM subjects.

Thus, class time will be used as much as possible for in class exercises and surveys, as well as discussion and review. You will be graded on general participation in lecture for understanding using a variety of technologies. We also highly encourage questions in lecture. Often many students share the same question and those questions can help the instructor gauge student understanding.

Lecture Readings

Preparation outside of class and participation in class are both very important and will improve your class experience. The pre-lecture readings and activities are designed to support your studying and learning, particularly as we discuss both theoretical and practical aspects of interface Programming. Stay on top of the course materials, bring your questions to class and seek help if there are problems.

Lecture examlets and final reflection

There will not be a midterm or final exam this quarter. Instead, there will be quizzes held during Friday lecture every 2nd or 3rd week.

Remote Lecture Guidelines and Expectations

Students are expected to adhere to the below expectations for remote lectures. These guidelines are intended to help lecture go more smoothly, facilitate questions and group activities, and foster a sense of community within the class.


On Thursdays, you will participate in a weekly lab, held at either 9:30 or 10:30 am PDT. These labs will be similar those you may have had in other classes - we will spend the 50 minutes answering questions, going over common errors in homework solutions, discussing sample problems in more detail than we can in lecture, and completing exercise worksheets with TAs available to help.

Remote Lab Guidelines and Expectations

Students are expected to adhere to the below expectations for remote labs. These guidelines are intended to help lab go more smoothly, facilitate questions and group activities, and foster a sense of community within the class.


This is a challenging, four credit class, meaning you should expect 8 hours of homework outside of class a week. We hope make the workload as predictable as possible. Assignments will have a fixed and an open ended piece, and some will require a structured peer review. They will typically involve either a single (one-week) part or be split into two parts, with each about a week long.After you turn in an assignment you will also work on a short practice quiz on the most relevant material taught in the assignment.

About a week after the practice quiz we will have an examlet - a short check for your understand on the the prior modules.

Class Coordination

We want you to succeed in this class, and an important way that you do that is by asking questions and discussing course issues with your peers and teaching staff. Some ways to do that include:

Android Studio and Emulator Remote Access

In this class you are required to use Android Studio as well as the emulator or a physical Android phone to test your code with. If you are unable to install Android Stuido on your own machine, you can remotely access virtual lab machines which can run both Android Studio and the emulator. For instructions on how to run the virtual machine and to install the necessary software check this link: Remotely Access Android Studio + Emulator.

Class Expectations

The class is a shared learning environment and it is important it is a welcoming environment for everyone, from all backgrounds. As instructors, we know that students in this class may need materials to be accessible by screen reader, or may need extra time on exams. You may observe religious holidays that overlap class times, or have work, childcare or appointments that have to be prioritized at specific times. As students we also ask you to remember that each person brings different priorities and experiences to class. We should all strive to treat everyone in the class with respect and understanding. Some specific things we will do to try to make the class a welcoming environment:


Grades will be assigned approximately as follows:

EPA (Effort, participation and altruism)

You can earn “points” for each of the following:

EPA scores are kept internal to the staff (i.e. not disclosed to students).

Late Days

You have 3 free late days which will automatically be applied until they run out, following which each late day will incur a 10% penalty on the assignment that was due. Each homework will allow up to 2 late days, after which turn-ins will be given a zero.

Regrade Policy

Reflecting on feedback is one of the most valuable ways you can learn from your mistakes, and we encourage you to do so. If you have a question about a grade you received or if you feel the grade you received is incorrect, please email an instructor for an appointment to discuss the assignment and your grade in detail.

It is also possible for the graders to make mistakes. If that happens we certainly would like to correct the error. Please note the following:

When you request a regrade, we may look at the entire assessment, homework or reflection. Therefore, it is possible for your grade to go either up or down through this process.


There will be 4 short examlets at the start of class, on every other Friday.

Alternate examlets will only be given in unusual extenuating circumstances. You must contact the instructor prior to the examlet date if you believe you need to take the examlet at another time, but no later than least two days prior to the examlets.

More information about the exams, their structure, and what resources you will be allowed to use will be discussed in class and listed on the course website as we approach the these dates.

Other relevant classes to know about

There are a number of classes on campus that teach related concepts which you may wish to consider in addition to this one. As of Spring 2020, here are the ones we are aware of: