Skip to the content.
This is the Winter 2022 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

Weeks Remote vs in Person

See Canvas for all zoom meeting links, and see the Remote instruction section of this document for more details.


Click here for a visual schedule of class times and office hours times and locations .

Class Time: M/W/F 12:30pm - 1:20pm PDT MGH 241
Lab Times: AA: Th 12:30 pm PDT MOR 225
  AB: Th 1:30 pm PDT MOR 221

Course staff


Lauren Bricker Lauren Bricker (she/her)
Office Hours: 2:30-3:30 M/W


Section AA Thevina Dokka Thevina Dokka (she/her) Henry Heino Henry Heino (he/him)
Section AB Kellie Gui Kellie Gui (she/her) Jacob van't Hoog Jacob van’t Hoog (he/him)
Section support/Grading Jay Lin Jay Lin (they/them)    
Infrastructure Jasper Palmer Jasper Palmer (he/him)    

(More information on Pronouns)

Course Learning Goals

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:

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

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.


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:

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.

Course Structure

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


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.

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. We will use interactive techniques during class to check for your understanding on these materials. Stay on top of the course materials and bring your questions to class!

Lecture Participation

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 your understanding. 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 as well as group discussion and review. We also highly encourage questions - often many students share the same question and those questions can help the instructor gauge student understanding. Part of your final grade will be an assessment of how you participate by asking or answering questions in the classroom, but also through a variety of technologies.


On Thursdays, you will participate in a weekly lab, held at either 12:30 or 1:30 pm 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.

Course Support

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:

Required Course Work

This is a 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 require programming that will include a very scaffolded and structured portion and a very open ended portion where you demonstrate your learning. Many assignments will require you to take create a video of your functioning app. Some assignments will be evaluated by other people, through structured peer review or user testing.

Some assignments will be completed in a week while others will take two weeks, with a checkpoint in the middle.

Reports and Reflections

Each assignment will include a detailed reflection or report that will also help the course staff see how you have synthesized the learning goals for this class.

Note that a few reflection assignments will overlap with another assignment. In other words, you may be completing a reflection from one assignment while you are beginning to code on another one.

Final project

Your Final Project, done the last two weeks of the quarter, will be to develop an app of your own choosing (with some guidance from the course staff). The scope of project will be about as large as one of the larger programming assignments and must be an “original” idea, i.e. it can not be a typical “game” or app you will find on line.

The project will be broken into four phases: design, implementation, user testing, and a writing a report/reflection.

Formal Assessments

There will not be a midterm or final exam in this class this quarter. Instead, your knowledge will be assessed via your code and detailed reflections related to those coding projects.

However, will be “practice” quizzes each week that will allow you to check for your own understanding on the material in the course. You will be graded up to 2 points for your effort on each completed practice quiz. Practice quizzes will be considered as part of your participation grade.

EPA (effort, participation and altruism)

You will be assessed on the following:

With the exception of practice quiz scores, the calculation of your EPA score is kept internal to the staff (i.e. not disclosed to students).


Grades will be assigned approximately as follows:

Late Days

You have 5 free late days which will automatically be applied until they run out.

Most assignments will allow up to 2 late days before the assignment is locked, after which you will receive a zero on that assignment. The exeption is for where the nature of the assignment necessitates that the code (and possibly a video) are due before the rest of the assignment (evaluation and reflection). In those cases you will be allowed to use up to 2 late days for the coding portion, and up to 1 late day for the reflection. Note: some assignments a checkpoint approximately halfway through the time you are to be working on it. You may not use any late days on checkpoints.

Once you run out of free late days, each day beyond the initial due date (up to the lock date) that your assignment is turned in will incur a 10% penalty on the assignment that was due. This means, if you are out of late days and turn an assignment in late, you would lose up to 20% on your code and 10% on your report/reflection.

If you need to turn in an assignment late under special circumstances, please email the instructor to schedule a meeting for PRIOR to when the assignment is due. During this meeting we will discuss the circumstances for this ask and determine if extra time is warranted.

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.

Remote Instruction


All remote sessions for this course are scheduled to run synchronously via Zoom. These Zoom sessions will be recorded and will be made available as soon as possible after the class session. We will do our best to capture the presenter’s audio, video and computer screen. Student audio and video may 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:

For more details on how to use Zoom in this course, please see our documentation page.

Guidelines and Expectations

Students are expected to adhere to the following expectations for remote instruction in CSE 340. These guidelines are intended to help class go more smoothly, facilitate questions and group activities, and foster a sense of community within the class.

Note: It may be helpful for some students to see the instructor speaking even when the instructor is sharing their screen. This can be achieved by right clicking the instructor’s video and choosing “pin” video. Then, under “view options” you can choose the side-by-side option which will enlarge the instructor video

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.

The Allen school support staff have a limited number of Android phones available to check out for 24 hours throughout the quarter. To borrow a phone you must visit the Allen School Help Desk (in Allen/CSE 207) during regular business hours. In the event that you need a phone during times of remote instruction, you may email (support@cs) or call (206.685.1224) and ask them to leave a phone at the front desk for pick up.

Should you need a phone for a longer period of time due to personal circumstances, we will ask you to send a private email message to the instructor to ensure a phone can be shipped to you as soon as possible.

Class Expectations and Academic Conduct

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, or 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.

The Allen School seeks to create a more diverse, inclusive, and equitable environment for our community and our field (see the Allen School’s Inclusiveness Statement). Specific things we will do to promote welcoming class environment include:

Academic Conduct

Academic integrity is an important value that we adhere to in this class. The details of how this will be implemented in this class, please see the Academic Conduct page, but in summary:

Indigenous Land Acknowledgement

The University of Washington acknowledges that we are on sacred land of the first peoples of Seattle, the Coast Salish people, past and present. We honor, with gratitude, the land which touches the shared waters of all tribes and bands within the Suquamish, Tulalip and Muckleshoot nations.