Principles of Good Design
Good design is an important aspect of programming and product development in general. In computer science, good design is what differentiates between a program that works and a program that works well. Good design is key aspect for a program to be portable, scalable, and reusable. Good design includes, but is not limited to, a program that has a fast run-time, is modularized for easy debugging, robust, consistent, and not repetitive in code.
- 
    
Lecture (Part 0)
 - 
    
Lecture (Part 1)
 - 
    
Lecture (Part 2)
 - 
    
Notes
 - 
    
Supplementary Resources
- Avilay Parekh on What is Good Software Design?
 - Wells Riley on Startups, This is How Design Works
 - Andrej Bauer on Programming Language Design
 - Stack Overflow discussion on What does a good programmer’s code look like?
 
 - 
    
Thought Questions
- In more general terms, what is good design?
 - Can you compare two products where one has better design than the other (such as a Samsung phone and an iPhone)?
 - Why is good design important? Why is it important in programs as well as physical objects?
 - How can design be evaluated? What tests or parameters are helpful for doing so?
 - What design choices do you make every day?