Syllabus

Goals

The aim of this course is to help students write programs of higher quality and increased complexity. This requires creating software that is (1) correct, (2) easy to change, (3) easy to understand, and (4) easy to scale. We will study principled approaches to achieving these four goals.

After completing this course successfully students should be able to:

  • Successfully build medium-scale software projects in principled ways
  • Understand the role of specifications and abstractions and how to verify that an implementation is correct, including effective testing and verification strategies and the use of formal reasoning
  • Analyze a software development problem and be able to design effective program structures to solve it, including appropriate modularity, separation of abstraction and implementation concerns, use of standard design patterns to solve recurring design problems, and use of standard libraries
  • Use modern programming languages effectively, including understanding type systems, objects and classes, modularity, notions of identity and equality, and proper use of exceptions and assertions
  • Use and learn new contemporary software tools, including integrated development environments, test frameworks, debuggers, version control, and documentation processing tools

In this class, we will use Java and associated tools like IntelliJ, JUnit, JavaDoc, and git, but the goal is to understand the underlying ideas and concepts that are generally applicable to software construction.

Approximate Topics

We expect to cover the following, with an emphasis on specification and design:

  • Reasoning about statements, loops, functions, and data types: pre- and post-conditions, invariants, and specifications
  • Testing: coverage, black- and white-box testing, test-first development, regression testing, JUnit
  • Debugging and assertions
  • More advanced Java language issues: generics, exceptions, equality, hashing, subclasses, overloading, and overriding
  • More advanced tools: IDE and version control
  • Code clarity: comments and JavaDoc
  • Program design: modularity, coupling, cohesion, and design patterns
  • User interfaces and event-driven programming

Prerequisites

The only formal prerequisite is CSE 143. We will very much rely on a thorough understanding of the concepts from CSE 143 as well as Java programming skills. We will go much further and you will be challenged to approach software development much differently than you have in CSE 143 or other courses.

Texts

The required text for the course is the following:

  • Effective Java by Joshua Bloch, 3rd ed., Addison-Wesley, 2018.

    Contains a great deal of distilled wisdom about Java best practices, technical details, and style issues.

There will be assigned readings from this book during the quarter, and there will be questions on the exams about those readings.

Besides the required text, the following books may be helpful to you:

  • The Pragmatic Programmer by Andrew Hunt and David Thomas, 20th anniversary (2nd) edition, Addison-Wesley, 2020.

    Contains a great deal of distilled wisdom about software construction and the craft of programming, including many things that those who read the book later in their careers wish they had learned early on.

  • Program Development in Java by Barbara Liskov and John Guttag, 1st ed, Addison Wesley, 2000.

    The content of this well-written book closely mirrors much of the content of the course. The only downside is that it was written 17 years ago, so it is out-of-date with regard to some of key parts of the Java language and libraries. Nonetheless, it is a good place to look for another presentation of the material covered in class, if you can ignore those parts.

Structure

Lectures

Lectures will be given in person, at the locations and times shown on the time schedule. We will try to record each lecture so that students who are unable to attend can watch the video and stay up-to-speed. We cannot guarantee that every lecture will be recorded.

Sections

Each week includes a TA-led quiz section, typically focused on preparation for the next homework assignment. These will not be recorded, but the printed material covered will be posted on the course calendar.

Homework

Homework will consist of 9 assignments, typically with one due each week. Assignments can require either solutions in the form of written answers or typed code or both. Generally, the amount of code required will increase as the course progresses.

Preparation Quizzes

Before each homework is due, there will be a related preparation quiz on Canvas. This quiz will review content from the homework specification and relevant lectures. Our intention is for these quizzes to be short and to require low effort. If you are struggling with a quiz, it is a good indicator to ask for help on the assignment early in the week. You may attempt each preparation quiz as many times as you'd like.

Policies

Inclusiveness

You should expect and demand to be treated with respect by your classmates and the course staff. You belong here, and we are here to help you learn and enjoy a challenging course. If any incident occurs that challenges this commitment to a supportive and inclusive environment, please let the instructor know so the issue can be addressed.

Grading

Your overall grade will be determined roughly as follows (subject to change):

~15% Preparation quizzes
~85% Homework assignments

Homework assignments are not weighted equally because they are of different length and sophistication. Later assignments are likely to be weighted more heavily because they are more involved. (The exact weighting will be determined later on.)

Students are expected to complete all homework assignments. Students who receive no (or essentially no) credit for an assignment risk failing. Outside of those circumstances, failing the course is highly unusual.

Grades of “incomplete” are reserved for situations covered by the UW policy.

Late Policy

Homework assignments are designed to be completed by the due dates listed. We recognize that situations may arise where a student is unable to complete the assignment by those dates. For that reason, we will allow students to submit assignments one day late with no penalty, provided that the following conditions are met:

  • You use no more than one late day per assignment. A “day” means 24 hours from the original due date/time.

  • You use no more than six late days total during the quarter.

Late work not meeting these conditions is only accepted with special permission from the instructor.

In addition, please note that late days are atomic. For example, you cannot split up a late day into three pieces and submit three different assignments each 8 hours late. Anything more than a few minutes late is just as late as something submitted the next day. Late days are intended to cover any emergencies that arise. You should not plan to use up all your late days or you could be left without any when an emergency arises later on.

In the past, many students have felt that CSE 331 is a fast-paced course. This is because homework assignments are cumulative and thus become more difficult over time. When students finish an assignment one date late, this means that they have one fewer day to complete the next, more difficult assignment. For this reason, students who submit late work (especially early in the quarter) can fall behind. Please contact the instructor as early as possible if you are worried that you may be in such a situation.

Each late day allows for an additional 24 hours to complete both the written and coding parts of the assignment. Submiting either part late requires the use of a late day.

Below, we discuss the mechanics of late submissions for each of those parts of the assignments.

Late Written Submissions:  Written assignments will be configured in Gradescope to allow late submissions up to 24 hours after the deadline. You do not need to notify the staff about your late submission. We will check for these automatically and update a running total, in Canvas, showing the number of late days you have used by the time that the grades for that assignment are published.

Late Code Submissions:  To submit late, simply tag your repository with the "hwN-final" git tag betwen 0 and 24 hours after the deadline.

Generally, once you have tagged an assignment, you should not change your mind and re-tag a different commit. However, we will allow tags to be changed if you discover problems that require fixing. If you decide to do this, you must immeditely remove the old tag from your repo while you work on changes and re-apply the tag to the later commit when you are done.

As an an example, suppose that you have an assignment that is due on Thursday at 11:00pm, but you need extra time. You would leave your assignment untagged at the time of the Thursday deadline and instead tag it sometime before Friday at 11:00pm.

Staff Test Re-run

For some assignments, we will allow you to make changes to your assignments after the due date and have us re-run the staff tests on your updated solution. However, we will only change the correctness portion of your score, not style, design, etc. The maximum correctness score you can receive on a test re-run is 80%.

The purpose of this policy is to allow students who make minor mistakes that end up causing a large number of our correctness tests to fail to fix those mistakes and limit the point deduction to just 20% of correctness points. By the end of the course, we expect students to be able to submit correct code the first time, as is expected of programmers in industry. For that reason, we will not re-run the staff tests on HW9.

Contacting Course Staff

There are a number of ways to contact the course staff when you have questions.

  • Emailing all course staff at cse331-staff at cs
  • Emailing a specific TA (see home page for emails)
  • Posting on the Ed discussion board
  • Attending an office hours (see course calendar)
  • Approaching course staff before/after a lecture/section

We encourage you to use all of these! However, we recommend different lines of communication for different situations. If you have questions about course material, we prefer that you post on Ed so that other students can benefit from the answer to your question. Alternatively, you could attend office hours, email your section TA, or talk to a course staff at lecture/section. We prefer to use the course staff email for questions that require multiple staff members. This includes when you submit an assignment after the late deadline, request a staff test re-run, or would like to schedule a one-on-one meeting with some course staff.

Accommodations

Please refer to university policies regarding disability accommodations or religious accommodations.

Academic Integrity

Motivation

A course in which students do not accurately present what they know and the work they have done is worse than having no course at all. Your instructor and your fellow students expect and deserve a basic respect for the integrity of this course and an environment where we can all focus on learning. Therefore, this document establishes a clear understanding of what we all will do with the expectation that it will never be an issue.

If you are ever unclear about how to represent what work you have done, (a) ask and (b) describe clearly what you have done. If you do, the worst that will happen is you will lose some credit on an assignment. This is much better than the alternative.

If you are at all in doubt about whether your collaboration was appropriate, include a description of your collaboration with your homework submission.

If the course staff receives homework submissions that are too similar to have been created independently, or are derived from other sources, we will pursue the maximum penalty allowed by the University.

Collaboration

You are encouraged to discuss the material in this course, including homework problems. We all learn better when we trade ideas with others, including course staff and fellow students. But you must produce your own homework solutions and you must not look at other students' solutions or other information that takes away the intellectual challenge of the homework.

Unless specifically told otherwise, you are to complete assignments individually. You may discuss assignments in general terms with other students including a discussion of how to approach a problem, but the code and other work you submit must be your own. The intent is to allow you to get some help when you are stuck, but this help should be limited and should never involve details of how to write a solution. You may not have another person (current student, former student, tutor, friend, anyone) “walk you through” how to solve an assignment.

Copying someone else's homework or receiving unfair help completing your assignment is cheating (see below), as is copying the homework from another source (the web, other classes, previous course offerings, etc.).

Cheating

Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to your colleagues, to the instructors, to the department and major program, and most importantly, to you. If you feel that you are having a problem with the material, or do not have time to finish an assignment, or have any number of other reasons to cheat, then talk with the instructor. Copying others' work is not the solution.

To avoid creating situations where copying can arise, never e-mail or post your solution files. When using the class discussion board, do not post code that is an attempt to solve a homework problem. If in doubt about what might constitute cheating, send the instructor email describing the situation.

It's not effective for us to try to define a list of all impermissible activities. That approach can tempt people to look for loopholes. Consider: “the code you write must be your own.” This includes things like not using any substantive material or solutions from similar assignments this term or previous terms at UW or elsewhere, including anywhere on the Internet, transcribing solutions from any other source, etc.  Our policy is intended to convey the spirit of the law, fully understanding that the letter of the law may not cover everything that someone may think of.

For additional information and a more detailed discussion, please refer to the Allen School Academic Misconduct Policy page.