Scott Meyers: Better Software - No Matter What
Some development practices improve software quality, regardless of the domain of the application, the language in which it's written, the platform on which it runs, or the users it is intended to serve. This seminar explores fundamental principles, practices and standards that improve software quality, no matter what the software does, how it does it, or whom it does it for. Unlike most treatments of software quality, this seminar focuses on the ciritcal role that programmers play, and it discusses specific strategies applicable to their activities.
Course Highlights
Participants will gain
- An understanding of why programmer discretion plays a rey role in determining software quality
- Knowledge of specific practices that help improve the quality of any software effort
- Insights into the quality-related interactions of specifications, programming and testing
Who Should Attend
The primary audience for this seminar is the people responsible for the code: programmers, team leads and development managers. The information is also well-suited for professionals who work with such people (e.g. QA personnel) or who are interested in improving their organizations's software development process.
Format
Lecture and question/answer. There are no hands-on exercises.
Detailed Topic Outline
1. The crucial role of programmers in software quality
2. How quality improvement practices reduce development costs
3. Requiring and enforcing useful specifications
- What is a useful specification?
- Design by contract
- Assertions
4. Designing interfaces that are easy to use correctly, hard to use incorrectly
- Applies to both APIs and UIs
- The principle of least astonishment
- Chosing good names
- Designing "nice" classes
- The importance of consisstency
- Employing progressive disclosure
- Preventing resource leaks
- Documenting interfaces before implementing them
- Introducing new types
- Constraining available values
5. Embracing static analysis
- Compiler warnings
- Lint and similar utilities
- Custom parsers and analyses
- Code reviews and inspections
6. The keyhole problem
- What it is, how it manifests itself
- Why it matters
- How it can be avoided
7. Minimizing duplication
- Why duplication is bad
- Source code duplication vs. object code duplication
- Preventing source code duplication
- Preventing object code duplication
- Beyond code duplication
8. Embracing Automated Unit Testing
- Unit tests
- Test-Driven Development
9. Retrospectives
- What they are
- Their benefits, both technical and social
- When to hold them; who should participate
- The importance of safety
- Phases (Preparation - Meeting - Follow-Through)
- Kick-off retrospectives
10. Why the material in this seminar applies to you, no matter how special your circumstances
11. Further Reading
Scott Meyers

Scott Meyers is an author and consultant with over thirty years of software development experience. His three best-selling "Effective C++" books defined a new genre in technical publishing, and his "Effective C++ CD" broke more new ground.
His consulting and research work has spanned a wide range of industries and topics, including regulatory genetics, CAD/CAE applications and video games. His current work focuses on identifying fundamental principles for improving software quality.
Scott is Consulting Editor for Addison-Wesley's Effective Software Development Series and sits on Software Development Magazine's technical advisory board. One of the world's foremost authorities on C++ software development, he offers consulting and training services to clients worldwide. He received his PhD in Computer Science form Brown University in 1993.




