In this class, you'll learn how to think like a software engineer. You'll learn what software engineers do and how they do it. You'll also learn about the contexts in which a software engineer sits—a team, an organization, a market, and a society—learning to understand how your low-level engineering skills are connected to these larger contexts. By the end of the course, you should be able to enter any organization and understand the social and technical contexts in which you are writing software. If you want to become a great software engineer, this is the course for you.
To learn these things, this course has three major phases:
Additionally, we'll use the labs throughout the quarter to practice interpersonal skills critical to being a great software engineer.
You should aspire to be a software engineer or to work closely with them. Because we'll be building for the web, you should also know:
I'm available to talk about jobs, careers, graduate school, research, class, and anything else. My office hours this quarter are Tuesday and Thursday 1-3pm in MGH 015, though occasionally I need to schedule things over them. To guarantee I'll be around, write me in advance to secure a time.
The TA will be available Wednesdays from 3:30pm—5:30pm at the Mary Gates Commons. For alternative appointments, email the TA to schedule a meeting.
We will use smartphones and laptops throughout the quarter to facilitate activities and project work in-class. However, research and student feedback clearly shows that using devices on non-class related activities not only harms your own learning, but other students' learning as well. Therefore, I only allow device usage during activities that require devices. At all other times, you should not be using your device. I'll help you remember this by announcing when to bring devices out and when to put them away.
This quarter we have 8 teams:
|Team Go!||GitHub Site||Try it! (Follow instructions on email invite from Harshitha).|
|Git Schwifty||GitHub Site||Try it!|
|Team TBD||GitHub Site||Try it!|
|LAVJ||GitHub Site||Try it!|
|KSJI||GitHub Site||Try it!|
|Three Musketeers||GitHub Site||Try it!|
|Pug Life||GitHub Site||Try it!|
|Pass-n-Play||GitHub Site||Try it! (Use your TestFlight invite instead of the App Store).|
|Week 1 — What is software engineering?|
|Week 2 — What do software engineers do?|
|Week 3 — Defining requirements|
|Week 4 — Specifying Code|
|Week 5 —
How software engineers
(Andrew at Autism at Work Summit 2018 in Redmond, Washington)
|Week 6 — Verifying Code|
|Week 7 — Evolving Code|
|Week 8 — Sprint|
|5/19, 5pm||No class||
|Week 9 — Sprint|
|Week 10 — Sprint (Andrew at ICSE 2018 in Gothenburg, Sweden)|
|6/3, 5 pm (Sunday)||No class||
|6/4, 5 pm (Monday)||No class||
|6/5, 5 pm (Tuesday)||No class||
|6/6, 5 pm (Wednesday)||No class||
|6/7, 4:30pm-6:20pm (Thursday)||Final in EEB 003||
There are 100 points you can earn in this class:
After rounding your points to the nearest integer, I'll map your 100 points to a 4.0 scale using the table below.
|≥ 97 → 4.0||91 → 3.5||85 → 2.9||79 → 2.4||73 → 1.8||67 → 1.3||61 → 0.7|
|96 → 3.9||90 → 3.4||84 → 2.8||78 → 2.3||72 → 1.7||66 → 1.2||≤ 60 → 0.0|
|95 → 3.8||89 → 3.3||83 → 2.8||77 → 2.2||71 → 1.6||65 → 1.1|
|94 → 3.7||88 → 3.2||82 → 2.7||76 → 2.1||70 → 1.5||64 → 1.0|
|93 → 3.6||87 → 3.1||81 → 2.6||75 → 2.0||69 → 1.5||63 → 0.9|
|92 → 3.5||86 → 3.0||80 → 2.5||74 → 1.9||68 → 1.4||62 → 0.8|
Each day in class we'll practice some skill. You'll get 1 point if you engage in and complete the activity. How to get credit for the activity will depend on the activity; sometimes being present will be enough, sometimes being to class on time will be enough, and sometimes you'll have to turn something in.
Readings are due at the beginning of each lecture (twice a week). Each time, you'll need to come prepared to discuss two things: 1) the chapter written by Andy Ko and 2) a reading or podcast you've selected from the chapter's list of further readings.
The day that each reading is due, we'll do the following:
Your answer is correct, you'll receive 1 point. I will give partial credit for partially correct answers, at my discretion.
Your selected reading assignment is your choice. Before class, read one of the articles linked in the reading. You'll see links to most readings in the chapter; they're in the ACM Digital Library, which UW gives you free access to while on campus. To gain access off campus, you'll need to use the UW Libraries proxy.
For an additional 1 point of reading credit, submit to Canvas a summary of between 200 and 500 words that:
When reading the article, here are a few points to remember:
In class, after we discuss the assigned reading, we will:
If you really don't want to read one of the readings I've selected, you're welcome to write me with a different recommendation. The reading you choose can be academic, or it can be an extensive blog post, video, or podcast that concerns the topic for the day.
The midterm will test your knowledge of the reading from the first seven weeks of class. Why include a midterm? It'll incentivize you to read more closely and retain what you read better. It'll also help me differentiate who really knows the material and who doesn't so that we may assign grades that best reflect your knowledge. It will cover every topic in the assigned readings and every skill practiced in class.
The midterm will consist entirely of true/false questions. (Fun!) Your final points will be
11 x fraction_correct. Also note that any questions that more than 60% of students in
the class get wrong will be excluded from the final score as they were likely confusing or concern
material that I taught poorly.
The project is split across eleven homework assignments, each worth a different amount:
The goal of the project is for you to practice planning and executing a software engineering project in order to experience the nuances of setting up processes, constraints, and plans for an organization. Note, however, that because the timeline for the project is so short, it won't give you a deep, longitudinal experience with software engineering, nor will it give you practice with massive complexity or scale. I believe these kinds of experiences are best left to practice in industry, as they're very difficult to replicate in the artificial setting of a university.
Note that in the final three weeks of the course, we'll use class time primarily for team meeting time. The TA and I will be available as consultants to help you debug, do research on libraries, and provide advice on implementation efforts. You are not required to come to class those days, but I highly recommend using the time for team coordination and help.