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:
In this class, we will use Java and associated tools like IntelliJ, JUnit, JavaDoc, git, and JavaScript/React, but the goal is to understand the underlying ideas and concepts that are generally applicable to software construction.
We expect to cover the following, with an emphasis on specification and design:
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.
The required books for the course are the following:
There will be assigned readings from these book during the quarter. Questions about the readings may appear on short online quizzes or longer tests, but the main reason to read these books is to become an excellent, professional software developer.
These books are freely available online to UW students. Go to
https://www.oreilly.com/ and click
"sign in" at the upper-right corner. In the page that appears,
enter your netid@uw.edu
UW email address in the email address
box, then click continue (no password needed yet).
You should see a box saying "I'm with University of Washington".
Click the Sign in with SSO (single-sign-on) button that appears
and you will be taken to a regular UW netid login page for verification. After that
you can read any of the hundreds of technical books and other items on the site.
Besides the required text, the following books may be helpful to you, and may be available online at the same web site as the required texts:
Class will be live at the times and locations given in the UW course schedule. Classes will be recorded and usually available later the same day after class. Recordings are not a substitute for attending class and having focused time to concentrate on the course, but they can be a great resource for reviewing things presented in class. The recordings will also be helpful if you need to miss class because of illness or some other unexpected situation.
Each week includes a TA-led section, often focused on preparation for the next homework assignment. These will not be recorded, but worksheets, slides, and handouts will be posted on the course calendars. We will make recordings of tutorial presentations or demos available when needed.
Homework will consist of about 10 assignments, generally one due each week. There are two exceptions to this: one assignment is split over two weeks and one week has two assignments (with one of those assignments being quite short).
We will have fairly traditional midterm and final exam. Exams provide an opportunity to review and assimilate course material in ways that are difficult to do otherwise. Since CSE 331 has two separate lectures this quarter, we will schedule the exams outside of class and at times different from the regular final exam periods assigned in advance to the class. That will allow everyone to take each exam at the same time. Exam dates and times will be announced as soon as possible and we will make arrangements in the (hopefully rare) cases where there are unavoidable schedule or other conflicts.
The ed discussion board will be a primary way for all of us to contact each other. Please use this to post and answer questions, trade ideas, help each other out, and stay in touch outside of class. You can post anonymously if you wish. The course staff will also use this message board to post announcements of general interest as well as corrections or clarifications to assignments.
If you want to ask a question about particular things in your own assignments or code that are not appropriate for public posting (detailed code or solutions, for example), you can post a private message on the discussion board and course staff will do our best to help you out. If the question is a general one without specific details, we might ask permission to re-post it anonymously to help out others who run across similar issues.
We plan to use Gradescope to provide feedback and scores on assignments and exams,
including programming projects. Questions about grading or feedback should be sent
via Gradescope's regrade requests so they can be routed to the appropriate person to handle them.
(Note: if the issue is a programming project that is being resubmitted after modification
so it can be reevaluated for functional correctness, please use email to the
cse331-staff[at]cs
email address to request this.
See details below.)
Regrade requests must be submitted within one week of the time that feedback and graded work is posted. Requests will not be accepted after that time.
If you need to get in touch with course staff about personal issues or questions
that are not appropriate for the discussion board or gradescope,
we ask that you send email to cse331-staff[at]cs
.
This allows us to keep track of your message and be sure that it
gets handled properly by the person(s) on the course staff best able to help you.
Please try to minimize individual email messages to course staff members unless a private message really is appropriate or necessary. We will do our best to help out in these cases, but messages sent to the staff mailing list are much more likely to get a quick response from the appropriate person.
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.
Please refer to university policies regarding disability accommodations or religious accommodations. Those policies will be observed in this class. Let us know what we can do to help.
Your overall grade will be determined roughly as follows (subject to change):
70% | Homework assignments |
10% | Midterm exam |
15% | Final exam |
5% | Quizzes and other |
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 or who fail to take an exam are unlikely to successfully pass the course unless there are extenuating circumstances that have been discussed with the instructor, in advance if possible. Outside of those circumstances, failing the course is highly unusual.
Grades of “incomplete” are reserved for situations covered by the UW policy and are never given simply for failure to complete work on time.
For programming assignments, only, you may request that the staff rerun automated tests after you receive feedback on an assignment. We will not re-evaluate other items including code quality, design, or documentation. A project that is rerun a second time can receive up to 80% of the original possible credit for the automated test portion of the feedback.
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 if all errors are fixed.
If you wish to have the correctness tests for your assignment rerun
after making corrections, you must send
email to the staff email list (cse331-staff[at]cs
) so your request
can be properly handled. Do not use a normal gradescope regrade request for this.
This policy may not be the same as in your other classes. You are responsible for understanding it fully.
You should plan to submit work on time. However, things happen from time to time, or the "one last" bug surfaces just as an assignment is due, or too many things are scheduled on the same day (other work, exams, responsibilities outside of class, etc.). So during the quarter you can occasionally submit work late without requesting permission or making special arrangements. But:
Further:
This basically allows you to use an extra day a few times during the quarter to finish an assignment. You should not "plan in advance" to use late days. They are meant for unexpected circumstances. Requests for "extensions" later in the course due to poor time management that used up available late days early in the quarter, as opposed to real extenuating circumstances, will not be looked on with favor.
This policy may seem rather restrictive but there are two good reasons for it. The first is that given the pace of the course, it can be very difficult to catch up if you fall significantly behind. The second is that many of the project assignments build on previous work. We want to be able to give timely feedback on each assignment before the next assignment that depends on it is due, and to make that happen we need to be able to start reviewing work as soon as it is due.
However, see the following sections about illnesses and other unexpected situations.
If you are sick or not feeling well, stay home. You should not be attending classes if you are not well, and you should seek medical help and do whatever is needed to get well.
If something else happens that makes it difficult to keep up with the class, please let us know so we can help. This could include personal situations of all sorts, including long-term health or other problems, or family situations such as needing to help care for other family members, or many other things, some of which have become all too familiar during the last couple of years during the covid pandemic.
If something like this happens, please be sure to get in touch and let us know about it (email to cse331-staff[at]cs if at all possible or to the instructor if necessary is best). We will work with you to figure out how best to deal with the situation, help you find appropriate resources, or do whatever else we can. That specifically includes figuring out how to handle assigned work for CSE 331, and we have a lot of flexibility to try to do the right thing, whatever that may turn out to be. But please speak up if something goes wrong -- we can't help if we don't know about it. We'll do our best to work with you when you let us know, and this is much easier to do if you get in touch with us as soon as something happens. Please do not wait to speak up hoping that things will magically improve. It's extremely frustrating for both you and the course staff to find out about long standing problems right when something is due, or late in the quarter, when it is very difficult to recover for lost time.
Any attempt to misrepresent the work you submit will be dealt with via the appropriate University mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty. The guidelines for this course and more information about academic integrity are in a separate document. You are responsible for knowing the information in that document.
Do not skip class or section to work on homework, not even late in the quarter when you are more tired and busy. This will cost you time (not to mention learning) in the long run. Class will start promptly, and you will find the entire course easier and more educational if you arrive punctually, well-rested, and ready to pay attention for 50 minutes.
Start homeworks early. They are more difficult than assignments in earlier courses and you need time to make mistakes.
Consider buying a Java programming book (like Core Java) or referencing it online regularly. Past experience indicates that students tend to over-estimate the quality of the information to be found on the web and under-estimate the quality of the information found in such a book. You can ultimately save time by reading a book that is known to be high-quality and up-to-date instead of reading web pages that are either inaccurate or out-of-date or are missing background information you would need, only to find that their advice does not work for you.
Think about which lecture and section material applies to the homework you are working on. Each assignment is carefully designed to apply ideas from class, so if it does not seem that any course materials apply to what you are working on, there is a good chance that you are missing something. Knowing which ideas the homework is designed to apply should make it easier to complete. (The same point applies to quizzes.)
Learn a lot and have fun. All the materials in this course should be valuable for your career success. Mastering these ideas now will make later courses and projects easier. But also be sure to have fun.
The ability of create things, solely with the power of your imagination, that express yourself and positively affect the lives of (potentially) millions of other people is a rare joy that, while available to anyone, most will never experience. For programmers, like yourself, it can be an everyday occurrence. As you dig into the tools and techniques of programming, it is important not to lose sight of the big picture: programming should bring joy, not only to those that use the software you create but also to yourself. Please start by having fun in this class!