Course Syllabus

Course Description

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:

  • Two weeks of context setting about software, software engineers, and society and establishing trusting relationships with your teammates.
  • Five weeks of readings and skills on key skills in software engineering while you plan a development sprint.
  • Three weeks of a development sprint, followed by a release during finals week.

Throughout, we'll use the labs throughout the quarter to practice interpersonal skills critical to being a great software engineer and teammate.

Note: Faculty members at U.S. universities – including the University of Washington – have the right to academic freedom which includes presenting and exploring topics and content that other governments may consider to be illegal and, therefore, choose to censor. Examples may include topics and content involving religion, gender and sexuality, human rights, democracy and representative government, and historic events. If you are this course outside of the United States, you may have reason to exercise caution when enrolling in courses that cover topics and issues censored in your jurisdiction.

Teams

Your team in this class is the single most important part of your experience. While it can be greatly beneficial in life to have control over who you work with, this isn't always possible. Moreover, a key learning objective in this class is to learn how to work with people you do not know, or have a hard time working with. Therefore, we will assign teams.

Teams will consist of 3-4 people. We'll try to construct teams that are in roughly the same time zones, have overlapping language and work hour preferences, and only has one person who prefers to be the project manager. To gather these preferences, we'll send out a survey prior to the beginning of class, then announce teams before class starts.

Class Time

Because this class is online rather than in person, it's important to understand how we'll use class time, since it won't be like any class you've participated in before.

  • Lecture periods will consist of three interleaved activities:
    1. We'll usually start in Discord (see the schedule), and Amy will give any announcements and reminders, and check in anything influencing your learning.
    2. After announcements, we'll all move to Discord, where there will be ten 15-minute meeting slots, which we will assign to specific teams. Your team will either meet with the instructor or the TA for these 15-minutes. Your project manager must prepare an agenda for these meetings, bringing specific questions, ideas for feedback, and discussion topics. You can think of the TA and I like a mentor; we don't manage you or your project (that's your job), but we are a resource to help your team that you'll meet twice a week. One possible agenda for the instructor/TA meetings should be:
      1. Reading discussion: what did you read and what do you want to know more about?
      2. What questions do you have about the class activity (see below)?
      3. What questions do you have about the homework?
      4. Are there team and workload issues to problem solve?
    3. When you're not in meetings, you'll meet with your team in your team's Discord voice channel. You'll do the class activity, which will be tied to the homework that drive your project forward. Use this time as 2 hours of built-in meeting time to meet with your teammates each week that you don't have to schedule.
    4. In the last 15 minutes of class, the TA and I will be available in Discord for any questions that arise in your teamwork, outside of your 15-minute meeting slot.
  • Lab periods will have a specific 50-minute activity to conduct with students not on your team. This is time to learn about how to be a better teammate, to express frustrations about teammates, to learn about how to resolve conflict with teammates. Each lab will have a specific individual deliverable, due by the end of lab time. You are welcome to do this lab prior to lab time rather than attending. The TA will be available during lab time for questions.

For any team in time zones for which lecture and lab times are unreasonable (e.g, before 8 am or after 8pm in your local time zone), the TA and I will schedule alternative meeting times. In that case, you'll want to schedule your own teamwork and lab time.

Course Location

We'll be using Zoom and Discord this quarter for all synchronous class interactions.

Required Course Materials

You do not have to purchase a textbook for this class. We'll rely exclusively on the online book Cooperative Software Development, which I explicitly wrote for this course, as well as research papers published in digital libraries you have access to through UW Libraries.

You can find the schedule for readings on the Course Schedule.

Required Course Technologies

In this class we'll be using:

  • GitHub. We will be using GitHub, specifically a single GitHub organization that I've created called autumn-info-442a. We'll be creating teams there to represent your teams, and projects, where you'll store your repositories. If you don't have an account already, make one, and you'll be making one. Be sure to include your full name in your profile so we can properly account for your work in grading.
  • Discord. We'll be using Discord for all communication in the course, except for communication about grades (for that, use Canvas).
    • If you don't have a Discord account, create one.
    • Follow this server invite link to join the class Discord.
    • Change your nickname on the server to your real name, so we can learn your names.
    • Familiarize yourself with the channels and their purposes.
      • #questions — post questions you have related to the course and the instructor will monitor to provide answers.
      • #anything — if your topic doesn't fit elsewhere, you can post here. Any topic is fair game, but remember that free speech doesn't mean protection from shaming and anger; choose your topics wisely.
      • All other voice channels — there is one for each team. Use these to meet with your team; Amy and the TA will use it to meet with your team.
    • Don't expect a reply from your TA or instructor sooner than 24 hours after you send it. We have many other responsibilities and won't always reply right away, especially in in the late evenings and early mornings.
    • Note that Discord is not FERPA compliant: it makes no promises about protecting your student records. That means that by using it, you're disclosing any activity related to the class to Discord's cloud-based data centers. If you're not okay with that, you can set up Discord to receive digests of posts to your email, but you won't have to write anything on Discord.
    • If you are in a country that blocks Discord (e.g., China), we will make alternate arrangements for meeting locations.
  • Canvas. Everything else is hosted on Canvas: syllabi, schedules, homeworks, activities, etc.
  • HowToo. Software engineering poses all kinds of problems. HowToo is a research prototype from my lab that helps developers share step-by-step strategies for solving software engineering problems. Think of it like StackOverflow, but but rather than giving you code to reuse, it gives you procedures to follow to solve problems in debugging, testing, configuring builds, evaluating usability, etc. We'll require the use of strategies in homework, and encourage use during your sprint in the last month of class. Some of the students on the research project may reach out to you for brief interviews; please respond to them and share your experiences!

Note: As a UW student living outside of the United States and taking courses remotely, you are subject to the laws of your local jurisdiction. Local authorities may limit your access to course material and take punitive action towards you. Unfortunately, the University of Washington has no authority over the laws in your jurisdictions or how local authorities enforce those laws. If it's illegal for you to use one of the technologies above, talk to me and we'll find a workaround that doesn't threaten your freedom.

Assignments

There are five types of work I'll assess in this class.

Assigned readings (1 point each)

Before each lecture, you'll read a specific chapter of the required text. To get credit for reading, in Canvas, submit a critique of the chapter. A critique must include one substantive thing to improve about the chapter, such as a concept that needs to be better explained, a question you'd like the chapter to answer, or controversy that you felt wasn't adequately discussed. This demonstrates that you've read the chapter, but also helps improve the chapter.

Selected readings (1 point each)

Before each lecture, you'll select a reading or podcast that's cited in required reading and write a summary of it. Most of the readings are 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.

To earn 1 point for your reading, you can do one of two things:

  • Submit to the corresponding Canvas discussion a 3-5 sentence summary of a paper that hasn't been summarized yet. We will deduct 0.5 points if you summarize a paper that has already been summarized by someone else (>2 hours before your time of posting). It should:
    • Summarizes the point of the article. The summary should demonstrate that you have read the paper (and not just the abstract). If the summary is not thorough enough, we may deduct 0.25 points.
    • Describes the thing you found most interesting about the article and explains why it is interesting. Connect the reading to your experiences, other parts of this course, your project, your interests, etc. If there is no mention of what was interesting, we'll deduct 0.5 points. If the summary fails to draw connections from the reading to class or your experience, we will deduct 0.25 points.
    • Includes a citation to what you read. We will deduct 0.25 points if you don't include a citation.
  • Reply to someone else's summary, contributing 3-5 sentences that:
    • Adds detail missing from all other students' summaries. This includes identifying what other posts missed and summarizing it. If either of these is missing, we'll deduct 0.5 points. If the summary is not thorough enough, we'll deduct 0.25 points.
    • Describes the thing you found most interesting about the article and explains why it is interesting, as described above. If this is missing, we'll deduct 0.5 points.

If you don't do any of the above, you'll receive a 0 for the selected reading.

It's easier to write the first summary, since you have less work to do to figure out what's missing, and you'll have more options for reading. So read and post early.

When reading the article, here are a few points to remember:

  • You don't need to read every word to understand the discovery in the paper.
    Not all research papers are well written; expect some to be more accessible than others.
  • Read not only for the discovery of the paper, but the basis on which that discovery was made. Do you believe its result?

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.

Labs (2 points each)

We'll use labs to focus on practical software engineering skills. Rather than work in your teams, you'll work with students from other teams in similar roles. You'll get 2 points for each lab deliverable. Details on the lab grading are in each lab description.

Project (55 points, team grade)

Most of your time will go to your project. It's divided up into 9 homeworks, most of which are team grades. Each homework involve practicing a foundational software engineering skills:

You can make anything, as long as it is hosted and publicly accessible on the internet, using HTML, CSS, and JavaScript standards. It doesn't have to have a server-side component, but it can. It does not have to use specific client or server side technologies, but I recommend popular frameworks such as React and Vue on the client, Django, Flask, and Firebase on the server. You can host your projects anywhere, including UW IT Student Web Hosting, Heroku, Firebase, or hundreds of other options.

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. What you will learn is how to organize your work and your teamwork to be productive. Keeping your project simple is essential to learning these skills.

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. Details on how this work time will be structured are linked in the course schedule.

As noted in homework 1 and homework 9, you'll have the option of recommending a teammate be "fired" you do not believe fulfilled the duties of their role. If everyone on a team fires a person, and your instructors agree with the rationale, they will lose 10 points of their project grade. Be an engaged, communicative teammate, especially when you're having a hard time being productive.

Workload

In the first 7 weeks of class, here's I expect your weekly workload to include:

  • 5 hours of class time
  • 5 hours of homework time
  • 5 hours of reading and summarizing

I the last 4 weeks of class (including finals), it'll be a bit different:

  • 1 hour of lab
  • 14 hours of software engineering (including 4 hours of class time)

You shouldn't have to exceed 15 hours per week, which is the typical expectation for a 5 credit course.

Grading

There are 100 points you can earn in this class:

  • Required reading critique (14 points, 1 point each, individual)
  • Selected reading summaries (13 points, 1 point each, individual)
  • Labs (18 points, 2 points each, individual)
  • Homeworks (55 points, team score)

These are challenging times for everyone, in different ways; I expect grief, sickness, childcare burdens, loss, stress, civic uncertainty, safety uncertainty, and more. Aim for the deadlines posted in Canvas, individually, and as a team, but 1) there will not be consequences for late work during the quarter and 2) for each team homework through Homework 5, you can resubmit for one regrade at any time before finals week, for up to full credit on the revision. There are a few exceptions to this:

  • By the Friday of finals week, 5pm PT, everything not submitted for a grade will get a 0, unless you reach out to me to schedule an incomplete.
  • There are many homeworks that depend on you and your team being on schedule. If you're not on schedule, it may become difficult or impossible to complete a homework. Reach out to me if you find yourself in this situation and we will find a solution that works with your team. We can discuss these situations at our twice-weekly in-class meetings.
  • You cannot resubmit for Homework 6-9, since they all occur at the end of the quarter.

We will map the points you receive to a grade point using the Informatics Standard Grading Scale.

Academic Conduct

Here is how I expect you to behave in this class:

  • Respect each other's humanity. We all have lives, struggles, fears, and goals. You're more than a student, I'm more than a professor, your TAs are more than TAs, and your classmates more more than classmates. Start every conversation remembering that.
  • Respect each other's differences. Technology is for people and people are different: learn about each other's different perspectives, experiences, and ideas.
  • Focus on learning, not grades. Having knowledge and skills is what gets you into majors, internships, jobs, and graduate school. Grades are imprecise, narrow measures of what you know and can do, so if you optimize for them instead of skills, you'll end up with narrow knowledge and skills.
  • Be resourceful. Ask questions, ask for help, and seek expertise. It can be scary to admit you need help, but I expect that you need help. That's how learning happens.
  • Be confident. Even if you don't believe you can learn something, believe you can. It just takes the right instruction, the right practice, and the right feedback. Most of those are my job, so if you're struggling, it's probably my fault.
  • Be demanding. I want this course to be great. If you don't like how it's going, give me feedback. The only way I can make it better is if you tell me what's wrong.
  • Be skeptical. If you don't believe something I say, demand evidence or a better argument. If you hear about some exciting new technology, probe closely to understand its true merits.
  • Be constructive. Don't just critique ideas; use your knowledge of their limitations to make them better. This is especially important when you collaborate with other people.
  • Don't deceive. Tell the truth, even it's hard to share. You didn't do your homework? Admit it, and let's find a way for you get future assignments done on time. You don't understand something? Admit it, and let's help you understand it. You don't want to learn something? Admit, and let's find a way to make it more interesting to you.

I expect you to follow all of these class norms and help enforce them as a community.

These class norms also have some important implications.

  • If you cannot easily access material because of a disability, let me know, because that is a failure to respect the broad diversity of abilities that people have, whether you're different in physical, mental, or learning ways.
  • If you have a concern about a TA not following the norms above, raise it with the TA first. If you cannot resolve it with them, or feel uncomfortable raising it with them, raise it with me. If you feel uncomfortable raising it with me, then you can contact our Dean for Academics, Matt Saxton.
  • If you have a concern about a teammate or classmate not following the norms above, raise it with the TA, and they will escalate it to me if they cannot resolve it.
  • Do not plagiarize, as that puts grades before learning and deceives. If you commit any of the following forms of plagiarism in this class, I will use my discretion to either give you no credit for an assignment or in some cases, for the entire class.
    • Copying content you did not author and presenting it as your own.
    • Copying content and tweaking it to seem like your own, even though it's the same ideas.
    • Reusing content you wrote previously, but presenting it as original.
    • Citing sources as evidence, even when those sources do not present such evidence.
    • Copying someone's answer on a test rather than arriving at the answer yourself.

In addition to these rules, the university also has student codes of conduct. If you violate any of these, I will escalate the issue to our Dean for Academics, who manages student misconduct cases.

Since you'll be writing a lot of code in this class, how do the rules above relate to code reuse? The plagiarism rules for this class are consistent with norms in the software industry and U.S. copyright law, which, by default, gives all rights to the creator; licenses "carve out" rights for users from the default of no rights. That means you can reuse code liberally within the bounds of the rights granted by licenses. Read its license and make sure you have permission to use it; if you can't find a license, you don't have permission.

Accommodations

There are two important kinds of accommodations you can request to support your learning in this class:

  • Accommodations for disability. I strongly encourage you to reach out to Disability Resources for any and all accommodations you might need. They're helpful, constructive, and private, and I'm 100% supportive of anything you need. You don't have to go through DRS to ask for accommodate; you can just ask me, if you feel comfortable.
  • Accommodations for religion. Washington state law requires 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 Faculty Syllabus Guidelines and Resources. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form. I'm fully supportive of this policy; your life is bigger than this class.

Course Summary:

Date Details Due