Zach Tatlock / Winter 2016 CSE 331 Software Design and Implementation Lecture 24 Wrap Up.

Slides:



Advertisements
Similar presentations
CSE 331 wrapup CSE 331 University of Washington. CSE 331 goals Enable students to manage complexity ensure correctness write modest programs.
Advertisements

Intro to CIT 594
Intro to CIT 594
CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.
A-1 © 2000 UW CSE University of Washington Computer Programming I Lecture 1: Overview and Welcome Dr. Martin Dickey University of Washington.
CSE341: Programming Languages Lecture 26 Course Victory Lap Dan Grossman Spring 2013.
CSE 331 Software Design & Implementation Dan Grossman Fall 2014 Lecture 1 – Introduction & Overview 1CSE 331 Fall 2014.
1 Design and Integration: Part 1 Nuggets about Design vs Project Management.
CSE 140 wrapup Michael Ernst CSE 140 University of Washington.
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Lecture 0 – Course Introduction 1CSE 331 Au12 One handout up front!
CSE 331 Software Design & Implementation Dan Grossman Winter 2014 Lecture 1 – Introduction & Overview 1CSE 331 Winter 2014.
CSE 331 SOFTWARE DESIGN & IMPLEMENTATION MIDTERM REVIEW Autumn 2011.
17-Dec-03 Intro to CIT 594 ~matuszek/cit594.html.
CSE 219 Computer Science III Program Design Principles.
Introduction to CSE 331 Software Design & Implementation Winter 2011
1 Design and Integration: Part 2. 2 Plus Delta Feedback Reading and lecture repeat Ambiguous questions on quizzes Attendance quizzes Boring white lecture.
Comp 311 Principles of Programming Languages Lecture 1 Course Overview and Culture Corky Cartwright August 25, 2008.
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Wrapup 1.
Lecture 2 Intro. To Software Engineering and Object-Oriented Programming (1/2)
CSE 190p wrapup Michael Ernst CSE 190p University of Washington.
CSE 331 Software Design & Implementation Dan Grossman Spring 2015 Course Victory Lap (Based on slides by Mike Ernst, Dan Grossman, David Notkin, Hal Perkins)
© 2006 Pearson Addison-Wesley. All rights reserved 2-1 Chapter 2 Principles of Programming & Software Engineering.
Zach Tatlock / Winter 2016 CSE 331 Software Design and Implementation Lecture 1 Introduction.
Interfaces, Mixins, & Multiple Inheritance CSE 413 Autumn 2008 Credit: Dan Grossman, CSE341, Sp08.
CSE 331 Software Design & Implementation Hal Perkins Fall 2015 Lecture 1 – Introduction & Overview (Based on slides by Mike Ernst, Dan Grossman, David.
Computer Networks CNT5106C
CSE 331 Software Design & Implementation Hal Perkins Winter 2015 Lecture 1 – Introduction & Overview (Based on slides by Mike Ernst, Dan Grossman, David.
Lecture 2 Intro. To Software Engineering and Object-Oriented Programming (1/2)
Cs498dm Software Testing Darko Marinov January 24, 2012.
Introduction to CSCI 1311 Dr. Mark C. Lewis
CSE341: Programming Languages Lecture 26 Course Victory Lap
Programming Languages Dan Grossman 2013
Computer Network Fundamentals CNT4007C
CSE 219 Final exam review.
CSE 331 Software Design and Implementation
CSc 020: Programming Concepts and Methodology II
CSE 160 Wrap-Up UW CSE 160 Winter 2017.
Computer Networks CNT5106C
CSE 374 Programming Concepts & Tools
CSE 331 Software Design & Implementation
Object-Oriented Software Engineering Using UML, Patterns, and Java,
CSE 331 Software Design & Implementation
CSE 403 Software Engineering
University of Washington Computer Programming I
Lecture 2 of Computer Science II
CSE 331 Software Design & Implementation
Introduction CSE 1310 – Introduction to Computers and Programming
Software Testing and Maintenance Introduction
Objects First with Java A Practical Introduction using BlueJ
CSE 331 Software Design and Implementation
Introduction to Programming 2
CSE 331 Software Design & Implementation
CSE341: Programming Languages Lecture 26 Course Victory Lap
EECE 310 Software Engineering
CSE 331 Software Design & Implementation
COS 260 DAY 16 Tony Gauvin.
Organization of Programming Languages
Intro to CIT 594
CSE403 Software Engineering Autumn 2000 Design (Overview)
Principles of Programming Languages
CSE 331 Software Design & Implementation
Objects First with Java A Practical Introduction using BlueJ
CSE341: Programming Languages Lecture 26 Course Victory Lap
CSE 331 Software Design & Implementation
CSE341: Programming Languages Lecture 26 Course Victory Lap
Objects First with Java A Practical Introduction using BlueJ
What Is Good Software(Program)?
CSCE 314: Programming Languages Dr. Dylan Shell
CSE341: Programming Languages Lecture 26 Course Victory Lap
Information system analysis and design
Presentation transcript:

Zach Tatlock / Winter 2016 CSE 331 Software Design and Implementation Lecture 24 Wrap Up

Today Reminder: course evals Project demos Final-exam information A look back at CSE 331 –High-level overview of main ideas and goals –Connection to homeworks –Context Also: –Thank-yous

Final-exam information Monday, 8:30-10:20 AM Comprehensive but weighted towards the 2 nd half of the course Old exams on the web –Some questions won’t apply if we didn’t do similar things

CSE 331 What was it all about? But first….

Huge thanks to the folks who made it work Course staff: Vinod, Chris, Justin, Deric, Cindy Special thanks to all of you for lots of good test questions :) This course is itself a sophisticated system requiring design, implementation, and debugging ;)

Credits Great course material based on work by: –Michael Ernst –Hal Perkins –Dan Grossman –David Notkin –Dozens of amazing TAs –Hundreds of incredible students (you!)

From our first lecture…

10 weeks ago: Welcome! We have 10 weeks to move well beyond novice programmer: Larger programs –Small programs are easy: “code it up” –Complexity changes everything: “design an artifact” –Analogy: using hammers and saws vs. making cabinets (but not yet building houses) Principled, systematic software: What does “it’s right” mean? How do we know “it’s right”? What are best practices for “getting it right”? Effective use of languages and tools: Java, IDEs, debuggers, JUnit, JavaDoc, git, Checker Framework, … –Principles are ultimately more important than details You will forever learn details of new tools/versions

10 weeks ago: Goals CSE 331 will teach you to how to write correct programs What does it mean for a program to be correct? –Specifications What are ways to achieve correctness? –Principled design and development –Abstraction and modularity –Documentation What are ways to verify correctness? –Testing –Reasoning and verification

10 weeks ago: Managing complexity Abstraction and specification –Procedural, data, and control flow abstractions –Why they are useful and how to use them Writing, understanding, and reasoning about code –Will use Java, but the issues apply in all languages –Some focus on object-oriented programming Program design and documentation –What makes a design good or bad (example: modularity) –Design processes and tools Pragmatic considerations –Testing –Debugging and defensive programming –[more in CSE403: Managing software projects]

Some new slides to tie the pieces together…

Divide and conquer: Modularity, abstraction, specs No one person can understand all of a realistic system Modularity permits focusing on just one part Abstraction enables ignoring detail Specifications (and documentation) formally describe behavior Reasoning relies on all three to understand/fix errors –Or avoid them in the first place –Proving, testing, debugging: all are intellectually challenging

How CSE 331 fits together Lectures: ideas Specifications Testing Subtyping Equality & identity Generics Design patterns Reasoning, debugging Events Systems integration  Assignments: get practice  Design classes  Write tests  Write subclasses  Override equals, use collections  Write generic classes  Larger designs; MVC  Correctness, testing  GUIs  N/A

We’ve come far in CSE 331! Compare your skills today to 10 weeks ago –Theory: abstraction, specification, design –Practice: implementation, testing –Theory & practice: correctness Bottom line aspiration: Much of what we’ve done would be easy for you today This is a measure of how much you have learned There is no such thing as a “born” programmer! Genius is 1% inspiration and 99% perspiration. Thomas A. Edison

DEMOS

What you will learn later Your next project can be much more ambitious –But beware of “second system” effect Know your limits –Be humble (reality helps you with this) You will continue to learn –Building interesting systems is never easy Like any worthwhile endeavor –Practice is a good teacher Requires thoughtful introspection Don’t learn only by trial and error! –Voraciously consume ideas and tools

What comes next? Courses –CSE 403 Software Engineering Focuses on requirements, software lifecycle, teamwork –Capstone projects –Any class that requires software design and implementation Research –In software engineering & programming systems –In any topic that involves software Having an impact on the world –Jobs (and job interviews) –Larger programming projects

Final slide System building is fun! –It’s even more fun when you’re successful Pay attention to what matters –Take advantage of the techniques and tools you’ve learned (and will learn!) On a personal note: –Don’t be a stranger: I love to hear how you do in CSE and beyond as alumni Closing thoughts?