I read a lot of programming books. However, I haven’t read many that all programmers should read. Programmers do a lot of different things, and it’s pretty darn hard to write something for all of them.

In fact, I can only think of two books. If you know of another, I’d love to hear about it.

How to Write Code

All programmers write code. Furthermore, writing code is a skill that transcends language. If someone can write really good JavaScript code, then they probably understand most of the principles in writing Scheme code. The skill does not depend on language.Steve McConnell does a great job of explaining this in Code Complete. This is a classic, and everyone should read it. The first edition had examples from a lot of different languages. Between 1991 and 2004, a lot of languages died out. The second edition doesn’t try as hard to be language independent. It’s still good, and the points he makes are still language neutral.

It talks about how to write code at the very lowest level: How to name variables. How to format argument lists. When to write comments. Et cetera. McConnell found a large number of obscure studies that prove some of his points, too. It’s a great book.

User Interface Design

Sooner or later, every programmer has to write an interface of some sort. Yes, even library authors are creating an API. Even authors of tools that run only on servers have users. If it doesn’t have a user, then there’s really no point in writing it.

To write a UI design book that can apply to any of that and also apply to a web site requires a fundamentally different approach. Again, I’m going to bring up a classic.

Donald Norman wrote the Design of Everyday Things almost 20 years ago. It’s not about which widget to put in the upper left corner of your web page. It’s about human psychology and how people learn to use something they’ve never seen before. Humans are the same no matter what kind of tool they’re using. This is the important part of UI design.

American culture does change, and you’ll have to keep reading new articles to learn what users are capable of at any given point in time. Norman’s book is about the stuff that will remain true forever.

It’s also a fun book to read. After you read it, you’ll never open a door to an art gallery the same way again.

That’s it?

That’s all I could come up with. There might be some room for a book on project management since all projects need to be managed. However, project management goes through the same series of fads that programming goes through. To add a book to this list, I’d like it to be timeless. I suspect a book like that exists, but I don’t have it.