---
layout: default
warning: draft
---

<h1> Welcome to Interaction Programming! </h1>
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:

* TOC
{:toc}

# Class Times

See [Canvas]({{site.canvas}}) for all zoom meeting links

**Class Time:** M/W/F at 10:30am PDT \\
**Lab Times:** 9:30am PDT (Section AA) and 10:30 am PDT (Section AB)

# Course staff

(More information on [Pronouns](https://www.mypronouns.org/))

## Instructor

![Jen Mankoff](assets/img/staff/mankoff.jpg){:width="80px"} | [Jennifer Mankoff]({{site.author.url}}) (she/her) <br>  Office Hours: TBD

## TAs

:--: | :---------: | :-- | | :--: | :---------: | :--
	**Section AA** | ![Taylor Gotfrid](assets/img/staff/gotfrid.jpg){:class="ta-picture"} | Taylor Gotfrid (she/her) | | **Section AB** | | David Chen (he/him)
	**Infrastructure** |  ![Jeremy Zhang](assets/img/staff/zhang.jpg){:class="ta-picture"} | Jeremy  Zhang (he/him) | | | | 

# 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

- How to write an event-driven program which reacts to user input and
  displays output. If you’ve never done this before, the abstractions
  you will learn are standard in almost any user interface toolkit. Even
  if you have, too often, without attention to structure, interfaces
  become impenetrable spaghetti code.
- How to think about the design of novel interaction techniques. As
  devices diversify, so too do the ways in which people interact, from
  voice based interfaces to augmented reality. By understanding the
  principles of interaction technique design you can do a better job of
  making interactions that users will want, which improves both the user
  experience and the business value of what you create.
- How to avoid common gotchas in the implementation of user
  interfaces. We will teach you the proper way to create Accessible Interaces and
  implement features like Undo. We will also touch on other design principles (no
  modal dialogues; good use of color; inclusion of support for help and
  so on) that work in any user interface!ß

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 CS 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](https://dzone.com/articles/java-vs-kotlin-which-language-android-developer-sh).

Note that this class is designed for CS 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 Modules

| Module        | Interaction Programming Theory    | Programming Practice  |
|---------------|-----------------------------------|-----------------------|
| Visual        | - Interface Toolkits<br>- Interactor Hierarchy<br>- Peer Review<br>- Visual Design Tips | - Android Programming<br>- Drawing on a Canvas<br>- Bounding Boxes<br>- Animation |
| Layout        | - Visual Layout<br>- Layout Constraints<br>- Layout algorithm                                                                                                                       | - Layout in Android                                                                         |
| Accessibility | - Accessible Design Principles                                                                                                                                                      | - Building Accessible Apps                                                                  |
| Events        | - Input Devices and Types<br>- Event Handling<br>- Model View Controller<br>- Essential Behavior<br>- Finite State Machines<br><br>                                                 | - Java callbacks<br>- Event handling in Android<br>- Build a novel color picker interactor  |
| Interaction   | - Physical computing<br>- Motor Design Tips<br>- Predicting and testing interactor efficiency<br>- Application design principles<br>- Quantitative Study Design <br>- Data Analysis | - Building pop up menus                                                                     |
| Behavior      | - Theories of User Behavior<br>- Behavior Change<br>- Machine Learning<br>- Application Security<br>- Heuristic Evaluation                                                          | - Implementing a drawing program<br>- Implementing undo/redo feature                        |


# 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.

## Zoom

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:

Change their Zoom screen name to a school appropriate screen name that hides any personal
identifying information such as their name or
UW Net ID, and not share their computer audio or video during their Zoom sessions.


## Lectures

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

Active Learning is an educational approach that has been demonstrated to increase student performance
in STEM subjects ([cite](https://www.pnas.org/content/111/23/8410)). Thus class time will be
used as much as possible for activities, discussion and review. You will be graded on participation
in lecture via answering checks for understanding using a variety of technologies, including poll everywhere.
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 4 quizzes held
during the last 15-30 minutes of Friday lecture every other week, beginning the third week. The final
project will incorporate a deeper reflection that covers all course material.

### 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.

- You are not required to have your video turned on during lecture except for during group activities in breakout rooms
- Please keep your mic muted unless you’re asking a question
- To ask a question, please type “hand” in the chat in Zoom. The instructor or moderator will call on
you and then you can unmute your mic and ask your question
- You may also post questions in the chat, but you may be asked to unmute your mic and ask your question aloud
- There will be individual and group based activities which you are expected to participate in (please
  contact the instructor if you not able to participate in the lectures synchronously due to your
  current living situation. )
- 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

## Lab

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.

- You are required to have your video on at all times. This is not to monitor you, but to help
create a sense of community in the classroom
- Please keep your mic muted unless you’re asking a question
- To ask a question, please type “hand” in the chat in Zoom. A TA will call on you and then you
can unmute your mic and ask your question
- You may also post questions in the chat, but you will be asked to unmute your mic and ask your question aloud
- There will be individual and group based activities which you are expected to participate in

# Workload

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. 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 modu

FIX: Homework will typically involve either a single (one-week) part or be split into two parts, with each about a week long

# 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:

- We have a class discussion board on [Ed]({{site.piazza}}), where you can
  make public posts that benefit the whole class, and are answered more
  quickly because your fellow students can help the course staff by
  responding also. This is the best way to ask questions about things
  like homework. Before posting, please search through the questions
  that have already been posted in case someone has already asked the
  same question.
- We hold office hours (see above). If none of those times work for
  you. You can also discuss matters with us privately on the [Ed]({{site.piazza}}) discussion
  board. Using Ed gets the whole course staff at once and is usually faster than
  email. Lastly, if none of these work for you you can send an email
  asking to set up an appointment.

# Class Expectations

The class is a shared learning environment, and it is important that
you treat everyone in the class with respect. Some specific things we
will do to try to make the class a welcoming environment:

- **Accessibility**: We have attempted to make all the course materials
  accessible according to web standards. If you need any additional
  support, we am always happy to work with you and
  [Disability Resources for Students (DRS)](http://depts.washington.edu/uwdrs/)  to make sure
  that the class meets your needs. DRS offers a wide range of services for students with
  disabilities that are individually designed and remove the need to reveal sensitive medical
  information to the course staff, but it is important to start the process as soon as possible to avoid delays.
- **Inclusivity**: We will be working toward a broad base of examples,
  and a welcoming environment for all. Please let us know if you see
  opportunities to improve this.
- **Working Together**: Working together is encouraged, as
  long as you in the end implement your own code (it is not directly copied from
  another student or any other source on the internet), and make sure to
  document any information you get from other students in comments at
  the top of the relevant file.
- **Integrity**: Academic integrity is an important value that we adhere to in this class.
  Instructors are expected to respect student privacy, and treat students fairly. Students are
  expected not to share code/solutions with the broader public, and not to plagiarize or cheat,
  as described in the [Allen school conduct guidelines](https://www.cs.washington.edu/academics/misconduct). For more details on how this will be implemented in this class, please see the
  [Academic Conduct](academic-conduct) page.

# Grading

Grades will be assigned approximately as follows:

- 70%: Assignments
- 15%: Effort, participation and altruism (EPA)
- 15%: Assessments

## EPA (Effort, participation and altruism)

You can earn "points" for each of the following:

- **Effort:** Attending office hours, lectures, and sections. Keeping up with the discussion board.
- **Participation:** Asking questions in lecture and on the discussion board, voting on peer instruction questions, interacting with TAs and other students.
- **Altruism:** Helping others in lecture, during office hours, and on the discussion board.

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 two 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.

- Coding Assignments: Regrade requests for homework assignments must be
submitted within one week of when the grade was returned to you. You must do two things in
order to request a regrade of a homework (failure to do these two things may result in the
  regrade not happening):
  - Reply to the code review comment that is prompting your request of the regrade. You can find
  your code review comments in your GitLab repository for that assignment.
  - Send a private message on [Ed]({{site.piazza}}) to the instructors that you are requesting a
  regrade. Include a link to the repository in your message and a written summary describing
  why your work should be reexamined.

- Exams and Written Assignments: We will use Gradescope to grade exams and manage regrade requests.
Via Gradescope, you should submit any requests separately for each problem with an
explanation of why you want this problem regraded. The time limit for such regrade requests will
be detailed in the email you receive from Gradescope.

# Exams
There will be four short examlets at the start of class, every other Friday.

- April 17
- May 1
- May 15
- May 29

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.


# Religious Accommodations
Washington state law requires that UW develop a policy for accommodation of student absences or
significant hardship due to reasons of faith or conscience, or for organized religious activities.
The UW’s policy, including more information about how to request an accommodation, is available at
[Religious Accommodations Policy](https://registrar.washington.edu/staffandfaculty/religious-accommodations-policy/).
Accommodations must be requested within the first two weeks of this course using the
[Religious Accommodations Request](https://registrar.washington.edu/students/religious-accommodations-request/)
 form on UW's site.


# 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:

- CSE 154: Web Programming: [Sp 20](https://courses.cs.washington.edu/courses/cse154/20sp/)
  This course covers languages, tools, and techniques for developing interactive and dynamic web
  pages. Topics include page styling, design, and layout; client and server side scripting;
  web security; and interacting with data sources such as databases.
- [HCDE 310: Interactive Systems Design &
  Technology](https://www.smunson.com/teaching/hcde310/a17/) This course is a
  project based course that teaches how to prototype applications on the
  web using Python that solve human problems or enable new
  activities. Includes information about APIs and how people interact with them. It
  differs from CSE 340 in its choice of platform. Additionally, it
  doesn’t cover the theory of UI programming, nor issues such as
  accessibility, undo, and so on.
- [INFO 343: Client side web
  development](https://canvas.uw.edu/courses/1118282) This is a
  programming course, and there will be significant overlap between the
  courses, as INFO 343 also touches on event based programming, output,
  and accessibility. [CSE 154: Web
  Programming](https://courses.cs.washington.edu/courses/cse154/20sp/)
  also covers some related
  material. However, both are about programming on the web using
  JavaScript instead of on Android, using Java. In addition, CSE 340
  covers more of the theory of UI programming and design, similar to
  HCID 520.
- [CSE 440: Introduction to
  HCI](http://courses.cs.washington.edu/courses/cse440/); [441: Advanced HCI](http://courses.cs.washington.edu/courses/cse441/) This is an advanced series of courses for undergraduate
  seniors. The focus of 440 is less on programming and more broadly on
  methods for designing, prototyping, and evaluating user interfaces to
  computing applications, while 441 is an open ended capstone
  course. These are excellent follow on courses to 340, for a student
  who wants to go deeper into how to make usable, enjoyable effective
  interfaces, and how to solve interesting problems with HCI. Related is
  [CSE 510](http://courses.cs.washington.edu/courses/csep510/), the HCI
  course for the professional masters program.
- HCID 520: User Interface Software +
  Technology ([Wi 17](http://uwdata.github.io/hcid520/17wi/), [Wi 16](http://faculty.washington.edu/ajko/hcid520/) [Wi 19](https://canvas.uw.edu/courses/1256337))
  This course
  teaches about user interfaces, including what they are, how they are
  built, and some inventions in user interface software and
  technology. There are many similarities between these classes. However HCID 520
  is only open to [MHCI+D students](https://mhcid.washington.edu/) Masters students.
- [HCID 521: Prototyping](https://canvas.uw.edu/courses/1128377/assignments/syllabus)
  This class is for the [MHCI+D students](https://mhcid.washington.edu/)
  only and focuses on prototyping techniques, not implementation. It
  covers everything from paper prototyping to physical interfaces to 3D
  printing.