Readings

There are two required readings, namely, this website and the following chapter on “ego-less programming” of the following book:

This incredibly old book contains a lot of astute observations about the relationship between code and its creator, the software developer. Don’t get scared just because it uses code snippets from COBOL. The observations, and Weinberg’s suggestions on how to think about/react to them are good ones.

The following lists of (also old) books and book chapters cover many of the ideas from this course:

  • Gamma, Helm, Johnson, Vlissides. Design Patterns. Addison-Wesley, 1995

    Duke’s library makes the online version available to all students.

    While editors keep dictionaries and style guides on their shelves, beginning software developers put this book on their desk.

  • Beck. Extreme Programming Explained. Addison-Wesley, 1999

    Beck is one of the first “explainers” of test-driven and extreme programming. He picked it up from 1980s academics, with whom he shared lab space in the 1990s. This book explains the whole eco-system of test-driven, example-driven, iterative software design and coins the phrase “extreme” programming. The philosophies are reminiscent of those of Fundamentals I and II—scaled to size.

    The book is a handy reference of how to approach software development in this style, though it could have been written as a 10 page essay.

    Duke’s library currently makes the online version available to all students.

    Beck also wrote an equally concise book on agile programming. You may wish to look into this one, too.

  • Felleisen, Findler, Flatt, Krishnamurthi. How to Design Programs (Second Edition). MIT Press, 2018

  • Felleisen, Findler, Flatt, Gray, Krishnamurthi, and Proulx. How to Design Classes. draft, 2012

  • Williams, Kesler. Pair Programming Illuminated. Addison-Wesley, 2002

    Williams conducted extensive research under Keller’s guidance on pair programming: the what, the how, its benefits, its potential downsides, the common misunderstandings, etc. This book presents her dissertation results as an easily accessible guide to the practice.

  • Freeman and Robson, with Sierra and Bates. Head First Design Patterns: A Brain-Friendly Guide. O’Reilly, 2021.

  • Fowler, Scott. UML Distilled. Addison-Wesley, 1997 This book is one of many that explains UML and how to use some of it. This course uses UML simply as a “doodling notation” because you may encounter it in the real world.

  • Hunt and Thomas. The Pragmatic Programmer. Addison-Wesley, 1999

    Do not stop reading about the practice of software development after you take your first, second or third job. Keep up with what articulate developers have to say about creating good software and the practices that help. This book is an example of this kind of reading, practical and good advice from experienced programmers in a guru-style manner.

    Duke’s library currently makes the online version available to all students.

  • Bloch. Effective Java, Second Edition or Third Edition. Addison-Wesley, 2008. Duke’s library currently makes the online version available to all students.

Back to ECE495 home