Resources

This page provides more detailed information about individual lectures as well as links to various resources. Students are encouraged to review the slides before the lecture.

Lecture videos are available in a shared folder on university SharePoint. You will need to log in with your CAS credentials to access the files. Use <your-login>@cuni.cz on the log-in screen where <your-login> is the login name you use to log into the Study Information System (SIS).

Lectures

Date Title Downloads
2021-03-04 Introduction, software development Slides
2021-03-11 API design Slides
2021-03-18 API design Slides
2020-03-25 Class design Slides
2020-04-01 Class design Slides
2020-04-08 Design principles SlidesSRPOCPLSPISPDIP
2020-04-15 Unit testing and testable design Slides
2020-04-22 Design principles in design patterns Slides
2020-04-29 Design principles in design patterns (continued) Slides
2020-05-06 Design principles in design patterns (finished), Method design SlidesSlides (method design)
2020-05-13 Method design (continued) Slides (method design)
2020-05-20 Method design (finished), Defensive programming Slides (method design)Slides (defensive programming)
2020-05-27 Basic building blocks – variables and constants Slides
2020-06-03 Structured programming primitives – sequencing, selection, and iteration Slides
Additional topics: code formatting, documentation, refactoring (not covered during the lectures) Slides (formatting)Slides (documentation)Slides (refactoring)

Literature

The course is mostly based on the 2nd edition of the Code Complete book by Steve McConnel (also in Czech):

  • McConnell, S. Code Complete: A Practical Handbook of Software Construction. 2nd edition, Microsoft Press, 2004, ISBN 978-0735619678
  • McConnell, S. Dokonalý kód: Umění programování a techniky tvorby software. 2. vydání, Computer Press, 2006, ISBN 80-251-0849-X

While there are many other books dealing with the software development and maintenance, only a few put such a strong emphasis on writing program code. Another useful source of insight is the 2nd edition of the Effective Java book by Joshua Bloch:

  • Bloch, J. Effective Java. 2nd edition, Addison-Wesley, 2008, ISBN 978-0-321035668-0

With respect to design principles, essays and books by Robert C. Martin are a time-proven classic, and when it comes to design patterns and their connection to design principles, I have found the Head First Design Patterns book by Eric Freeman, Elisabeth Robson, Kathy Sierra, and Bert Bates to be both entertaining and enlightening:

  • Freeman, E., Robson, E., Sierra, K., and Bates, B. Head First Design Patterns. 2nd edition, O’Reilly, 2014, ISBN 978-0-59600712-6

Online resources

In addition to books, many interesting essays and articles on software design and good practices can be found on the web. Links to many of those can be found in the notes to lecture slides.

When it comes to design and testing, the online guide on Writing Testable Code by Miško Hevery provides a set of guidelines that help keep certain design malpractices at bay and testers happy:

  • Hevery, M. Writing Testable Code. Available online.