Sean Munson
smunson at uw dot edu
Raina Langevin
rlangevi at uw dot edu
Hannah Twigg-Smith
htwigg at uw dot edu
Han Feng
xhfeng5 at uw dot edu
Zuo Wang
zwang36 at uw dot edu
But please try Slack first!
In HCDE 310, we cover identifying opportunities and building interactive systems to solve problems in human centered design & engineering.
We will use the Python programming language, with the initial few weeks devoted to reviewing programming concepts and introducing Python's syntax. Over the quarter, you will specify, design, build, and justify design solutions in terms of user experience and technical design choices.
This course has been designed for students with some prior programming experience — such as CSE142 or CSE160 — though it is okay if you are not comfortable or confident with that prior experience. Weekly assignments provide a venue for applying programming concepts. Assignments will focus on data manipulation and the creation of small applications that leverage data and computational resources from larger, publicly available sources. The course culminates in a final project.
If you have substantial prior programming experience, some of this course — particularly the few weeks on key programming concepts — will likely be review. Compared to other UW courses that involve programming, HCDE310 will focus on developing good practices for pulling, processing, and presenting web data, and on building interactive applications using that data.
If you are concerned that you'll be bored with weekly assignments, the teaching team is happy to support you in figuring out extensions or ways to start the project early, to best support your learning goals.
This course focuses on identifying technical opportunities to build interactive sytems, translating those ideas into application designs, and then building prototypes of those applications. You will gain experience with computer programming, data processing, and software design skills. While other HCDE courses will focus on design from the user, interaction, and visual perspectives, HCDE310 will focus on leveraging existing technical resources to build systems that solve human problems or to enable new activities. You will learn to specify, justify, and build technical systems.
This course should be good preparation for building prototypes of the systems you design in future HCDE classes, for processing data you get from user logs or from surveys (again, useful for other HCDE courses and directed research groups), as well as for future courses like HCDE 411 Information Visualization, HCDE 439 Physical Computing, and HCDE 451 Prototyping.
In the information age, these skills are essential, irrespective of the degree you plan to pursue. Students planning to do work that requires data analysis is required are likely to pick up valuable life-long skills.
We'll be using Python. If you have previously taken CSE142, you'll find that Python is a bit different than Java. Compared to Java, Python is flexible and lets you get away with a lot; this can be wonderful for some and unnerving for others. For example, in Python, the following can be typed and immediately executed:
2 + 3You get
5
printed out as the answer. In C++, the corresponding program has multiple lines and they require much more explanation.
Python is a wonderful language for general applications and prototyping. It has been used extensively for data analysis (more flexible than spreadsheets), data plotting, building dynamic web sites, games, etc. It is used in many organizations, companies, and applications, incuding NASA, Mozilla, Yelp, Pinterest, Path, Reddit, the National Labs, Google (in fact, Google hired the developer of Python), Eve Online, and Civilization IV.
While all computer languages can largely do all tasks that other computer languages can do, sometimes one language is better than another for a specific task (e.g., C programs often provide better performance but Python programs take less time to write and can be more reliable). Thus, it is useful to be exposed to multiple languages if you are going to take multiple computer science classes. Recruiters often look for experience in a variety of languages. Python is a great language to learn. You will find it to be a versatile language with a good developer community and many resources available that you can use to continue to learn.
At the end of this course, students should be able to:
We will build these systems using the Python programming language, and so you will also review or learn the following specific programming skills:
Use the two books as references. Zelle is better to get a quick overview of the language. Downey's book is better when it comes to understanding the details. We will refer to both books during the course and point to the readings from the two books. In general, there is significant overlap in the material between the books. We will generally recommend readings from each book. Memorization is not required in this course.
On Canvas, we have provided instructions for downloading and installing Python 3. There's a good chance your computer already has Python 2.x installed, especially if you are on a Mac. Please, though, make sure you are using Python 3.x as some of the syntax has changed between 2.x and 3.x and most examples and homeworks will not work in earlier versions.
We will show you how to run your Python programs from a command-line and to edit and debug using PyCharm.
If you have something of a private nature that you don't want to share with the other students, feel free to send a message to one of us individually.
You should “bring” your laptop to each class session. In class, we will mix lecture, lab, homework, and project time -- you will need your laptop to work on this. Following along with the code in the lecture portions may also help you learn faster.
You may refer to the HCDE laptop policy.
The first time you learn technical material it is often challenging. We are going to cover a wide range of topics in the course and we will move quickly between topics. Because it is our goal for you to succeed in the course, we encourage you to get help from anyone you like, especially in the portion of the course before the midterm and even for the completion of assignments.
However, you are responsible for learning the material, and you should make sure that all of the assistance you are getting is focused on gaining knowledge, not just on getting through the assignments. If you rely too much on help completing assignments (rather than help learning the material) and/or fail to master the material, you will struggle immensely with the project and when you encounter programming opportunities in the future, when you must work toward your own goals. The final submission of each assignment must be in your own “words.”
If you receive assistance on an assignment, please indicate the nature and the amount of assistance you received. If the assignment is computer code, add a comment indicating who helped you and how. Any excerpts from the work of others must be clearly identified as a quotation, and a proper citation provided (e.g., in the comments of the code if it is a code fragment you have borrowed). If you are a more advanced student and are willing to help other students, please feel free to do so. Just remember that your goal is to help teach the material to the student receiving the help. It is acceptable for this class to ask for and provide help on an assignment via the course discussion site, including posting code fragments. Just don't share complete answers. If it seems like you've posted too much on the class site, one of the instructional staff will contact you to let you know, so don't worry about it.
Course conduct is governed by the University of Washington Student Conduct Code and the College of Engineering Academic Misconduct Policy. You should also acquaint yourself with the HCDE Plagiarism Policy.
To reiterate, the collaboration policy is as follows: Collaboration in the class is encouraged for assignments — you can get help from anyone as long as it is clearly acknowledged. Use of solutions from previous quarters is not allowed. The authorship of any assignments must be in your own style and done by you, even if you get help. Any significant help must be acknowledged in writing.
I like a relaxed, collaborative classroom where everyone feels comfortable. If UW COVID guidance changes to allow it, you are welcome to bring drinks or snacks to class. You can (and should) bring your laptop to class. I would rather have you come to class and listen with one ear than not come to class at all. As a courtesy to others, be sure to put your phone on silence/vibrate. Coming late to and/or leaving early from class is okay, as long as you don't disturb your classmates. Ask questions at any time, and if you have some expertise in a particular topic, please to raise you hand and share it with the class.
Our primary purpose in class is to interact and learn from each other. While non-participation (sleeping; checking email) is permitted, we urge you to consider its effect on your fellow students. Class is a lot more fun when everyone is engaged; a few visibly disengaged or distracted people can suck the energy out of class. We reserve the right to ask you a question to try to reengage you if you seem to have checked out, but we will try not to do this in an embarrassing way.
Being masked, not being able to eat, being concerned about your wellbeing and wellbeing of loved ones is certainly not an ideal learning environment. Last year, we made remote work, though it required considerable additional effort, creativity, and patience from everyone: students and instruction team alike. I am hoping that returning to the classroom removes some friction to collaboration and learning, but if circumstances change so that it creates more stress and barriers to participation than it resolves, we will pivot to remote temporarily or long-term as needed.
In class, please wear your mask except to drink. If you need to eat and it is not a break time, please feel free to step out. You will need your Husky card to access our classroom. If you are sick, please stay home.
Even as we return to campus, you may be in a situation that means that returning to campus is not right for you. I plan to record and post all class sessions using Panopto. Slides will be available before and after class. Office hours will offer a choice of in-person and remote options. At 90 students, though, I don't think I can simultaneously stream class in real-time and fully engage in the classroom.
Late policies, detailed below, are designed for flexibility if you have to temporarily prioritize other parts of your life ahead of UW. If you experience a longer-term disruption, please reach out to me and I'll work with you and student services on an appropriate plan.
Your experience in this class is important to us. If you have already established accommodations with Disability Resources for Students (DRS), please communicate your approved accommodations to us at your earliest convenience so we can discuss your needs in this course.
If you have not yet established services through DRS, but have a temporary health condition or permanent disability that requires accommodations (conditions include but not limited to; mental health, attention-related, learning, vision, hearing, physical or health impacts), please contact DRS at 206.543.8924, uwdrs@uw.edu, or disability.uw.edu. DRS offers resources and coordinates reasonable accommodations for students with disabilities and/or temporary health conditions.
Reasonable accommodations are established through an interactive process between you, your instructor(s), and DRS. It is the policy and practice of the University of Washington to create inclusive and accessible learning environments consistent with federal and state law.
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. Accommodations must be requested within the first two weeks of this course using the request form.
The University of Washington Student Conduct Code (WAC 478-121) defines prohibited academic and behavioral conduct and describes how the University holds students accountable as they pursue their academic goals. Allegations of misconduct by students may be referred to the appropriate campus office for investigation and resolution.
Harassment will not be tolerated, and consequences will include immediate removal from the Slack workspace and other course tools. I also emphasize the importance of respecting your classmates' (and teaching team's) boundaries around how and when they wish to be contacted.
I am not an official required to report under UW’s Title IX plan. This means I am not legally required to report misconduct or crime; if you share a problem with me, I will work with you to determine next steps. An exception is if anyone involved is under 18. You also can reach out to UW confidential advocates or SafeCampus.
There will be assignments throughout the course (nearly much every week and sometimes mini exercises during a class). Regular assignments allow you to learn the material in small “chunks” and to keep a close eye on how well you understand the material. In some cases, we will do part or all of the assignments during a class session, though you will submit it later.
Generally, part of the sessions will be lab time. The teaching staff will be there and will circulate. You can confer with other students and the instructors. This is a great time to work on assignments, and you may be able to finish the weekly assignment in the lab — but don't count on it.
It is important that you keep up with the assignments and that you seek help — from the teaching team or your classmates — if you are struggling.
If the teaching team becomes concerned that you are relying too much on peers for the homework, we reserve the right to ask you to participate in a conversation about any of your assignments, in which you explain how your code works or complete similar assignments, and to factor that conversation into your grade.
Late homeworks. Assignments typically build on each other and we discuss approaches to past assignments in class. There is a built-in grace period for assignments between the deadline and the start of the next class, but after that, late assignments will initially be scored as a zero or graded for the parts that are complete and turned in by the start of class.
For autumn 2022, we are piloting the following approach for all late homework assignments: once you turn in a complete assignment, you may walk through the assignment in office hours with any of the TAs or Sean and receive up to full credit. If office hours do not work, please reach out in advance to schedule an alternate time; any alternate times must be scheduled before the last day of class (though may be scheduled to occur during finals week).
Additionally, because unpredictable life events happen, we will drop your lowest homework grade at the end of the quarter. However, because unpredictable life events are, well, unpredictable, we encourage to you turn in every homework on time even if it is only partially complete.
Project. There will be one project in the last 4 weeks of the quarter, where you bring all the skills you have learned to one significant problem solving task. You will learn debugging skills, modularity skills, and testing skills. We think the project will be interesting to do and help you pick up life-long problem solving skills that will be useful even beyond programming.
Because projects are individualized, we can be more flexible on project deadlines than on homework deadlines.
Resource writeup. As a supplement to the project, you will write up a description of an interesting data source or API that other students might want to use in their final project, or an interesting python module or package. More about this later in the quarter. You are free to use any online module or package to talk about, but one list of many of the Python modules can be found at: Python Global Module Index.Class participation, helping others, interacting on Slack and answering questions, asking good questions that lead to interesting discussions, and pointing out corrections to lectures or code will contribute to participation, which you can use to help boost your grade.
Constructive participation on Slack is the same as constructive participation during class or office hours. Attendance is not required to earn participation.
While participation can be a maximum of a 5% change, the most common adjustment is 0-2 points.
The graded work in the course will be weighted roughly as follows to determine a final grade. (Note that, in rare cases, participation points could allow you to earn above 100%):
Weekly Assignments | 55% |
Project: | 40% |
Python module/package or data source writeup ("resource writeup") | 5% |
Participation: | ±5% |
Also see the HCDE grading policy.
The course effectively consists of two parts. In the first part we march through Python in quick fashion; this is largely reviewing and strengthening your knowledge. In the second part, we will focus on data analysis and other applications. We will keep some flexibility in the schedule. If it seems like we need to spend more time on a particular topic, we will shuffle the schedule. It is important for you to let us know when you are having problems. This will help us pace the material appropriately, cover some material in greater depth, and revisit material if necessary.
The course is designed for students with limited programming experience (e.g., CSE142). If you stick with the course and invest the necessary time, you will be amazed at how much you will learn in 10 weeks and at the doors opened by developing your familiarity with programming and computational thinking.
If you do not have a lot of programming experience, some concepts may take some time to sink in. Do not worry too much if you feel like you are in a fog at times. The assignments are the best way to track your progress through the material.
Usually the biggest problem students encounter in the course is trying to do everything in a few hours right before an assignment is due. If you only think about the course a few hours each week, you will get some of the details but they will not mesh together to provide the big picture. In contrast, once you understand the big picture, you will have a solid framework for looking up or learning new details as-needed. The textbook will become an easily scanned reference for you once you know what to look for and why you are looking for it.
Cramming does not work well when dealing with the material in this course. This is because the material in the course is fairly straightforward once you “get it” — once you understand some basic principles. No amount of memorization will make up for not having the big picture. Try not to get stuck on any one thing; it is easy once you have the big picture concepts down (though this does not mean that I don't still encounter puzzling and confusing challenges!). If you do get stuck on something and feel like you are going in circles, ask for help, look at something else, or come at the problem from a different direction.
Good luck and welcome aboard!
Week | Dates | Topic | Suggested Reading (complementary in parens) | Homework |
---|---|---|---|---|
1 | Sept 29 | Introduction to the Course, Computers, & Python. |
Zelle ch 1 Downey ch 2, 6-7 On the Value of Command-Line “Bullshittery” (Eytan Adar) |
HW0: SW installation; basic string operations |
2 | Oct 4, 6 |
Operations on strings and lists. Iteration on sequences. File operations. Version control. |
Zelle ch 3 Zelle ch 7 Zelle 4.5 (Downey ch 5) |
HW1: Count chars, words, lines in a file. File operations. |
3 | Oct 11, 13 |
Conditionals Dictionary data structure Functions. Parameter passing and returning values Mashups & APIs |
Zelle ch 3 Zelle ch 7 Zelle 4.5 (Downey ch 5) |
P0: Find an interesting API HW2: Contributor counts |
4 | Oct 18, 20 |
Indefinite iteration; nested data structure, and nested iteration JSON processing Introduction to Objects Ideation & Prioritization |
Zelle ch 6 “The Art of Brainstorming” |
HW3: Do more than HW2, with less. Output as .csv files; generate charts in Google Docs, Excel, or D3 P1: Adding value to data |
5 | Oct 25, 27 |
Objects and Classes URL lib; Try/except; |
Zelle ch 8 Zelle ch 10 Tutorial on urllib; |
HW4: Calculate likes and comment frequencies from a JSON feed, use classes |
6 | Nov 1, 3 |
1 Nov: Mid quarter feedback, REST APIs 3 Nov: REST APIs continued, lab time |
HW5: Fetching and processing a live feed. | |
7 | Nov 8, 10 |
8: Sorting & List Comprehensions 10: TBD |
List comprehensions: Wikipedia; another explanation w/ nice examples |
|
8 | Nov 15, 17 |
15 Nov: Jinja Templates & Flask 17 Nov: HTML & CSS (briefly), Deploying Flask apps to Google Cloud and PythonAnywhere. |
HW6: APIs, Sorting, more data processing. | |
9 | Nov 22, 24 |
22: TBD 24: Thanksgiving; no class |
P2: Project proposal. |
|
10 | Nov 29, Dec 1 |
29: Working with forms for user input in Flask 1: Flask & OAuth; App Engine Datastore |
||
11 | Dec 6, 8 |
6: Location & maps (brief); project time 8: Quarter wrap-up (brief); project time |
6 Dec: HW7 - Flask & APIs due 8 Dec: R1 - Resource writeup | |
F | Dec 13 |
13 Dec - P3: Final projects due |
This course is based on SI/EECS182 at the University of Michigan, which I redesigned with Paul Resnick in Winter 2009. Chuck Severance, Eytan Bakshy, and Atul Prakash have substantially improved the course before and since, and I have included many of their innovations in this syllabus.