Course Information
Meetings:
Lecture | MWF | 1:10 pm - 2:10 pm | GUG | 218 |
Section AA | Thu | 1:10 pm - 2:10 pm | MGH | 074 |
Section AB | Thu | 1:10 pm - 2:10 pm | ARC | 160 |
Contact:
- Message Board
- For questions, clarifications, and discussions. Use your UW login to access. Most online activity will happen on this board. Enrolled students should automatically have access.
- Course Staff:
cse331-staff [at] cs.washington.edu
- For special circumstances. Please use the message board whenever possible.
- Mailing List:
cse331a_su18 [at] uw.edu
- Low traffic, but mandatory. Critical reminders and emergency change of plans will be announced to this list. Enrolled students should be subscribed automatically.
Office Hours:
Mon | 2:10 pm - 3:30 pm | CSE 216 | Leah Perlmutter | Instructor |
Tues | 5:00 pm - 6:00 pm | CSE 5th floor breakout | Joyce Zhou | TA |
Wed | 10:30 am - 11:30 am | CSE 006 | Jong Ho Lee | TA |
Wed | 3:30 pm - 5:30 pm | CSE 5th floor breakout | Frank Qin | TA |
Thurs | 11:00 am - noon | CSE 5th floor breakout | Frank Qin | TA |
Thurs | 5:30 pm - 7:30 pm | CSE 5th floor breakout | Matt Xu, Haiqiao Chen | TA |
Fri | 2:00 pm - 3:00 pm | CSE 023 | Wei Liao | TA |
Fri | 5:00 pm - 6:00 pm | CSE 5th floor breakout | Joyce Zhou | TA |
Administrative:
Course Materials
Lectures
Mon | Jun | 18 | L1 | Introduction |
Wed | Jun | 20 | L2 | Hoare Logic: Basics |
Fri | Jun | 22 | L3 | Hoare Logic: Loops |
Mon | Jun | 25 | L4 | Specifications |
Wed | Jun | 27 | L5 | Abstract Data Types (ADTs) |
Fri | Jun | 29 | L6 | Representation Invariants |
Mon | Jul | 2 | L7 | Abstraction Functions |
Wed | Jul | 4 | Holiday | |
Fri | Jul | 6 | L8 | Testing |
Mon | Jul | 9 | L9 | Design |
Wed | Jul | 11 | L10 | Equals and Hashcode |
Fri | Jul | 13 | L11 | Equals and Hashcode (See L10) |
Mon | Jul | 16 | Midterm | |
Wed | Jul | 18 | L12 | Subtyping and Subclassing |
Fri | Jul | 20 | L13 | Assertions and Exceptions |
Mon | Jul | 23 | L14 | Generics 1 |
Wed | Jul | 25 | L15 | Generics 2 |
Fri | Jul | 27 | L16 | Debugging |
Mon | Jul | 30 | L17 | Callbacks and Observers |
Wed | Aug | 1 | L18 | Graphics and GUIs |
Fri | Aug | 3 | L19 | GUI Events |
Mon | Aug | 6 | L20 | Design Patterns 1 |
Wed | Aug | 8 | L21 | Design Patterns 2 |
Fri | Aug | 10 | Kendra Yourtee: (Interviewing Demystified) | |
Mon | Aug | 13 | L22 | System Development |
Wed | Aug | 15 | L23 | Wrapup |
Sections
Thu | Jun | 21 | S1 | Hoare Logic, Git |
Thu | Jun | 28 | S2 | Loop Reasoning, Project Setup in Eclipse |
Thu | Jul | 5 | S3 | ADTs and HW4 |
Thu | Jul | 12 | S4 | Graphs, Testing, and HW5 |
Thu | Jul | 19 | S5 | HW6 and Interfaces |
Thu | Jul | 26 | S6 | Subtyping, Dijkstra’s, and HW7 |
Thu | Aug | 2 | S7 | MVC and HW8 |
Thu | Aug | 9 | S8 | Design Patterns |
Thu | Aug | 16 | S9 | Final Review |
Assignments
Wed | Jun | 20 | 10:00 PM | Homework 0 |
Mon | Jun | 25 | 10:00 PM | Homework 1 |
Mon | Jul | 2 | 10:00 PM | Homework 2 |
Thu | Jul | 5 | 10:00 PM | Homework 3 |
Thu | Jul | 12 | 10:00 PM | Homework 4 |
Thu | Jul | 19 | 10:00 PM | Homework 5 |
Thu | Jul | 26 | 10:00 PM | Homework 6 |
Thu | Aug | 2 | 10:00 PM | Homework 7 |
Thu | Aug | 9 | 10:00 PM | Homework 8 |
Thu | Aug | 16 | 10:00 PM | Homework 9 |
Reading Schedule and Quizzes
EJ: Effective Java (3rd edition EJ3 or 2nd edition EJ2)
Quiz schedule:
Quiz Due Date | Link to Quiz | Assignment |
Thurs Jun 21, 10:00 PM | Quiz1 | PP: Preface, 1, 2, 5, 21, 31, 35, 44 |
(PP titles: The Cat Ate My Source Code, Software Entropy, Your Knowledge Portfolio, Design by Contract, Programming by Coincidence, Evil Wizards, It’s all writing) | ||
———— | ||
Thurs Jun 28, 10:00 PM | Quiz2 | PP: 4 |
(PP title: Good-Enough Software;) | ||
EJ3: 12, 15, 16, 17, 50, 56 | ||
(EJ2: 10, 13, 14, 15, 39, 44) | ||
(EJ titles: Always override toString, Minimize the accessibility of classes and members, In public classes use accessor methods not public fields, Minimize mutability, Make defensive copies when needed, Write doc comments for all exposed API elements) | ||
———— | ||
Thurs July 5, 10:00 PM | Quiz3 | PP: 7, 8, 33, 34, 43 |
(PP titles: The Evils of Dupication, Orthogonality, Refactoring, Code that’s Easy to Test, Ruthless Testing) | ||
EJ3: 51, 52 | ||
(EJ2: 40, 41) | ||
(EJ titles: Design Method Signatures Carefully, Use Overloading Judiciously) | ||
———— | ||
Thurs July 12, 10:00 PM | Quiz4 | PP: 26 |
(PP title: Decoupling and the Law of Demeter) | ||
EJ3: 10, 11, 13, 14, 57, 58, 62, 68 | ||
(EJ2: 8, 9, 11, 12, 45, 46, 55, 56) | ||
(EJ titles: Obey the general contract when overriding equals, Always override hashCode when you override equals, Override clone judiciously, Consider implementing Comparable, Minimize the scope of local variables, Prefer for-each loops to traditional for loops, Avoid strings where other types are more appropriate, Adhere to generally accepted naming conventions) | ||
———— | ||
Thurs July 19 | n/a | No reading this week. Dedicate your time to Homework 5 :) |
———— | ||
Thurs July 26, 10:00 PM | Quiz5 | PP: 22, 23, 24 |
(PP title: Dead Programs Tell No Lies, Assertive Programming, When to Use Exceptions) | ||
EJ3: 49, 18, 19, 20, 22, 23, 40, 64, 69, 70, 71, 72, 73, 74, 77 | ||
(EJ2: 38, 16, 17, 18, 19, 20, 36, 52, 57, 58, 59, 60, 61, 62, 65) | ||
(EJ titles: Check parameters for validity, Favor composition over inheritance, Design and document for inheritance or else prohibit it, Prefer interfaces to abstract classes, Use interfaces only to define types, Prefer class hierarchies to tagged classes, Consistently use the Override annotation, Refer to objects by their interfaces, Use exceptions only for exceptional conditions, Use checked exceptions for recoverable conditions and runtime exceptions for programming errors, Avoid unnecessary use of checked exceptions, Favor the use of standard exceptions, Throw exceptions appropriate to the abstraction, Document all exceptions thrown by each method, Don’t ignore exceptions) | ||
———— | ||
Thurs Aug 2, 10:00 PM | Quiz6 | EJ3: 26, 27, 28, 29, 30, 31 |
(EJ2: 23, 24, 25, 26, 27, 28) | ||
(EJ titles: Don’t use raw types in new code, Eliminate unchecked warnings, Prefer lists to arrays, Favor generic types, Favor generic methods, Use bounded wildcards to increase API flexibility) | ||
———— | ||
Thurs Aug 9, 10:00 PM | Quiz7 | PP: 18, 27, 29 |
(PP titles: Debugging, Metaprogramming, It’s just a view) | ||
———— | ||
Thurs Aug 16, 10:00 PM | Quiz8 | EJ3: 1, 2, 3, 4, 6, 7 |
(EJ2: 1, 2, 3, 4, 5, 6) | ||
(EJ titles: Consider static factory methods instead of constructors, Consider a builder when faced with many constructor parameters, Enforce the singleton property with a private constructor or an enum type, Enforce noninstantiability with a private constructor, Avoid creating unnecessary objects, Eliminate obsolete object references) |
Exams
Below are some links to past exams. The overlap between previous offerings of the course and this quarter isn’t always exact, so you should not worry too much about questions on topics we haven’t covered. In some quarters, the second exam was a full-length final exam, in others it was a second exam intended to be the same difficulty as the midterm.
Midterm: Monday, July 16, 2018, 1:10 - 2:10 PM (in class)
Final: Friday, August 17, 2018, 1:10 - 2:10 pm (in class)
The 18su final will cover only the second half of course material.
Resources
CSE 331 Tools Docs
CSE 331 Concepts Docs
Additional Resources
- Java 8 API
- CSE GitLab
- Git Book
- Java Tutorial
- Google Java Style Guide
- Sun Java Conventions (1997, but still good!)
- JDK Download (get Java 8)
- Eclipse Download (get Eclipse for Java Developers)