CSE 331 Spring 2018

CSE 331 Spring 2018

Software Design and Implementation


Course Information

Meetings:

Lecture MWF 9:30 GUG 220
Section AA Thu 8:30 EEB 003
Section AB Thu 9:30 MGH 287
Section AC Thu 10:30 MGH 251
Section AD Thu 11:30 EEB 037
Section AE Thu 12:30 EEB 037

Contact:

Office Hours:

Mon 11:00 to 12:00 CSE 021 Weifan Jiang
Mon 5:00 to 6:30 CSE 007 Cody Kesting
Tue 11:00 to 12:00 CSE 220 Tim Chirananthavat
Tue 2:30 to 3:30 CSE 021 Alexey Beall
Wed 10:30 to 11:30 CSE 546 Zach Tatlock
Wed 3:30 to 4:30 CSE 021 Hongtao Huang
Thu 10:30 to 11:30 CSE 006 Jake Sippy
Thu 3:30 to 4:30 CSE 007 Chen (Jason) Qiu
Fri 10:30 to 11:45 CSE 003 Leah Perlmutter
Fri 3:30 to 4:30 CSE 021 Zhu (Ruby) Li
Fri 4:30 to 5:30 CSE 021 Yifan (Vanadis) Xu

Administrative:

Course Materials

Mar 26 L1 Introduction
Mar 28 L2 Reasoning About Code: Basics
Mar 29 S1 Hoare Logic, Git
Mar 30 L3 Reasoning About Code: Loops
Apr 2 L4 Specifications
Apr 4 L5 Abstract Data Types (ADTs)
Apr 5 S2 Loop Reasoning, Project Setup in Eclipse
Apr 6 L6 Representation Invariants
Apr 9 L7 Abstraction Functions
Apr 11 L8 Testing
Apr 12 S3 ADTs and Homework 4
Apr 13 L9 Design
Apr 16 L10 Equals and Hashcode
Apr 18 L11 Subtyping
Apr 19 S4 Graphs, Testing, and Homework 5
Apr 20 L12 Assertions and Exceptions
Apr 23 L13 Generics 1
Apr 26 S5 Midterm Review (Homework 6 and Interfaces)
Apr 27 L14 Generics 2
May 2 L15 Debugging
May 3 S6 Homework 6 and Interfaces
May 4 L16 Events and Callbacks
May 7 L17 Graphics and GUI Programming
May 9 L18 GUI Events
May 10 S7 Dijkstra’s Algorithm and Homework 7
May 11 L19 The Checker Framework
May 16 L20 Design Patterns 1
May 17 S8 Model-View-Controller and Homework 8
May 18 L21 Design Patterns 2
May 21 L22 Systems Integration
May 23 L23 Verified Systems
May 24 S9 Design Patterns
May 31 S10 Final Review
Jun 1 L25 Demos and Wrap Up!

Assignments

Fri Mar 30 5:00 PM Homework 0
Wed Apr 4 11:00 PM Homework 1
Tue Apr 10 11:00 PM Homework 2
Fri Apr 13 11:00 PM Homework 3
Fri Apr 20 11:00 PM Homework 4
Fri Apr 27 11:00 PM Homework 5
Wed May 9 11:00 PM Homework 6
Wed May 16 11:00 PM Homework 7
Wed May 23 11:00 PM Homework 8
Fri Jun 1 11:00 PM Homework 9

Reading Schedule and Quizzes

All Quizzes are due at 11pm on the dates below.

Mar 31 Get books:
Pragmatic Programmer (PP)
Effective Java (3rd edition EJ3 or 2nd edition EJ2)
Apr 10 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)
Quiz1
Apr 17 EJ3: 17, 50, 56
(EJ2: 15, 39, 44)
(EJ titles: Minimize mutability, Make defensive copies when needed, Write doc comments for all exposed API elements)
Quiz2
Apr 24 PP: 4, 7, 8, 26, 33, 34, 43
(PP titles: Good-Enough Software, The Evils of Duplication, Orthogonality, Decoupling and the Law of Demeter, Refactoring, Code That’s Easy to Test, Ruthless Testing)
EJ3: 12, 15, 16, 17, 51, 52, 57, 58, 62, 68
(EJ2: 10, 13, 14, 15, 40, 41, 45, 46, 50, 56)
(EJ titles: Always override toString, Minimize the accessibility of classes and members, In public classes use accessor methods not public fields, Minimize Mutability, Design method signatures carefully, Use overloading judiciously, 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)
Quiz3
May 1 PP 22 - 24
(PP titles: Dead Programs Tell No Lies, Assertive Programming, When to Use Exceptions)
EJ3: 10, 11, 13, 14, 49, 69 - 74, 77
(EJ2: 8, 9, 11, 12, 38, 57 - 62, 65)
(EJ titles: Obey the general contract when overriding equals, Always override hashCode when you override equals, Override clone judiciously, Consider implementing Comparable, Check parameters for validity, all items in the “Exceptions” section except for “Include failure-capture information in detail messages” and “Strive for failure atomicity”)
Quiz4
May 8 EJ3: 18 - 20, 22, 23, 40, 64
(EJ2: 16 - 20, 36, 52)
(EJ titles: 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 hierachies to tagged classes, Consistently use the Override annotation, Refer to objects by their interfaces)
Quiz5
May 15 EJ3: 26 - 31 (EJ2: 23 - 28)
(EJ titles: all items in the “Generics” section except “Consider typesafe heterogeneous containers”)
Quiz6
May 22 PP: 18, 27, 29
(PP titles: Debugging, Metaprogramming, It’s Just a View)
Quiz7
May 29 EJ3: 1-4, 6, 7 (EJ2: 1-6)
(EJ titles: all items in the “Creating and Destroying Objects” except for “Avoid finalizers”)

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.

Suggestion: Only tackle these practice exams after you’ve complete independent studying. Then use them as a check for how well you are prepared by first working the problems using blank exams and then checking your answers against the sample solutions.

Midterm: Monday, April 30, 9:30 AM (in class)

Final: Wed, June 6, 8:30 AM

Resources

CSE 331 Tools Docs

CSE 331 Concepts Docs

Additional Resources