Saturday, 2 December 2017

My favorite software engineering books

The programming books that I find most interesting are neither about computer science theory nor the latest technology fads. Instead they are about the thought process behind building software and the best practices for doing so.

Here are some of my favorite books on software engineering topics:

The Practice of Programming

The Practice of Programming is a great round-trip through the struggle of writing programs. It covers many aspects that come together when writing software, like design, algorithms, coding style, and testing. Especially useful early on in your programming journey as an overview of challenges that you'll face.

Programming Pearls

Programming Pearls is a collection of essays by Jon Bentley from Communications of the Association for Computing Machinery. There are "Aha!" moments throughout the essays as they discuss how to analyze problems and come up with good solutions.

Bonus link: if you enjoy the problem solving in this book, then check out Hacker's Delight for clever problem solving and optimizations using bit-twiddling.

The Pragmatic Programmer

The Pragmatic Programmer covers the mindset of systematic and mindful software development. It goes beyond best practices and explains key qualities and trade-offs in programming. Thinking about these issues allow you to customize your approach to software development and produce better programs.

Code Complete

Code Complete is a survey of programming best practices. It draws on research evidence on code quality and provides guidelines on coding style. A great book if you're thinking about how to improve the quality, clarity, and maintainability of your programs.

Applying UML and Patterns

Applying UML and Patterns helped me learn to break down requirements and come up with software designs. This is a great book to help you get past the stage where programs you write from scratch are unmaintainable spaghetti code. I don't know how well this book has aged and would probably ignore the details of UML and Use Cases but the essence remains valuable.

Bonus link: if this book helps you design programs from scratch, then Refactoring will help you recognize that software is "soft" and can be changed substantially in a safe way by following a disciplined approach.

Writing Secure Code

Writing Secure Code discusses software security and the various classes of bugs that lead to security holes. Security is essential for writing code because the majority of programs have a security boundary where they process untrusted inputs. It's important to have a background in security as well as language and technology specifics of secure coding.

Producing Open Source Software

Producing Open Source Software explains how open source projects and communities work. It covers topics like licenses, project governance, source control, code review, and more. If you are getting contributing to open source or considering running an open source project then this book will prepare you.

Conclusion

These books all contributed to how I think about software development. Let me know which practical programming books you like in the comments!

3 comments:

  1. Thanks, that's a nice list! ... and concerning recommendations for other practical programming books, have a look at "Hacker's Delight" from "Henry S. Warren" - there are lots of good algorithms in there.

    ReplyDelete
    Replies
    1. Yes, Hacker's Delight is great. It was mentioned as a side note under Programming Pearls in the post.

      My favorite algorithm from the book is the "SIMD-style" population count that looks something like this:

      unsigned int pop_count(unsigned int val)
      {
      val = (val & 0x55555555) + ((val & 0xaaaaaaaa) >> 1);
      val = (val & 0x33333333) + ((val & 0xcccccccc) >> 2);
      val = (val & 0x0f0f0f0f) + ((val & 0xf0f0f0f0) >> 4);
      val = (val & 0x00ff00ff) + ((val & 0xff00ff00) >> 8);
      return (val & 0x0000ffff) + (val >> 16);
      }

      It's like a poor man's vector instructions :).

      Delete
  2. This comment has been removed by a blog administrator.

    ReplyDelete