Monday, January 24, 2022

Book Recommendations for Computer Science Goodness

 

A student emailed me the other day to ask about what books I would recommend they read for some "computer science goodness." They asked about books that I enjoyed and books that shook up how I thought about the field. I could have sworn I wrote a blog post about this in the past. Turns out, I wrote a post in 2016 about books that influenced my teaching practice. I was a bit surprised to find, on searching my blog, that I also wrote a post in 2011 about books that influenced my teaching practice. It's hard to keep these posts DRY.

My list here has some overlap with those other two lists, since a good book will often be multifaceted. Here's a quick list of titles that come to mind with very brief descriptions of why I like them. I've included links to sources or storefronts for reference; I don't make any commission on these. Since I don't have any other real ordering to the recommendations, I've provided them in alphabetical order by author.

  • Alistair Cockburn. Agile Software Development: The Cooperative Game. This book lays out an operationalized definition of what software development is: a cooperative game of invention and communication. It helped me think more specifically about the intersection of my knowledge of software development and game development. It also gives a good grounding in what "agility" means beyond buzzwords.
  • Allen Holub. Holub on Patterns: Learning Design Patterns by Looking at Code. While the original GoF book is undeniably influential, this is my favorite book on design patterns, since it shows how they occur in practice: nested within each other and inside of meaningful contexts. The book is showing its age, and I'd love to see a second edition that uses more modern language features. That said, the first chapter is one of the most brilliant essays on the meaning of OOP.
  • Andy Hunt and Dave Thomas. The Pragmatic Programmer. This is a classic book of good, practical, generally applicable advice for writing high-quality software.
  • Robert C. Martin. Clean Code. Amazing book about how to write high-quality software. The student who emailed me should have already read this, but I'm including it here for completeness' sake.
  • Peter Seibel. Practical Common Lisp. Like a lot of people, I was intrigued by Lisp when I learned it—and when I taught it! But I never quite understood how you would use it to build something substantial, something that wasn't just a classroom toy. This book explains not only that, but why macros and metaprogramming really are the cat's pajamas.

No comments:

Post a Comment