This post is part three of a series on Coding by the Book. Don’t miss its companion posts: How to Choose a Programming Book and 5 Tips for Learning How to Program From a Book.

Just like programming trends and languages, programming books come and go. But these seven classics have stood the test of time. Some are newer than others, but all of them offer essential insight for new and experienced programmers:

1. The Mythical Man-Month: Essays on Software Engineering (Anniversary 2nd Edition) by Frederick Brooks, Jr.

This is an older tome (the original appeared in 1975!), yet I still have a copy of it on my bookshelf because the information it provides still holds true. Managing complex projects remains a challenge and this particular book is now used not just by software engineers but also those in other technical areas, such as microprocessor design. The fact that this book remains high on many programming bestseller lists and is still used in college courses says a lot.

2. The Art of Computer Programming by Donald Knuth

Understanding why modern computer programs are written the way they are is something every computer scientist should study. This huge set of books (one volume couldn’t contain all the information) is an encyclopedic coverage of the topic. You’ll find Knuth mentioned in many computer science courses because he was an essential force in determining the way things work today. More important, Knuth has touched just about every area of modern technology because he helped to develop many of the algorithms used for other areas of study, including data science.

3. Introduction to Algorithms (3rd Edition) by Thomas Cormen, Charles Leiserson, Ronald Rivest, and Clifford Stein

Many books written by teams lack focus and can contain conflicting opinions—but not this one. Instead, it contains a clear and comprehensive view of the use of algorithms in computer science and other math-based technologies. The explanation of algorithms is rigorous so that you can understand precisely why an algorithm works in a certain manner.

4. Code: The Hidden Language of Computer Hardware and Software by Charles Petzold

Many modern programmers don’t fully understand the link between the code they write and the underlying hardware. That’s because IDEs, libraries, and other tools tend to hide this connection to the point where it becomes invisible. However, the people who design languages, IDEs, libraries, and other tools usually have a good understanding of how this connection works because they’ve taken the next step in understanding code. This book is designed to demystify the connection.

5. Working Effectively with Legacy Code by Michael Feathers

In the real world, many developers spend far more time updating someone else’s code than writing code from scratch. Unfortunately, the approach of most schools and books is that the developer will work on new code all the time. This book helps developers interact with older code to produce better applications. It goes even further than that by helping developers gain important insights while working on legacy code—lessons that can help developers create truly amazing applications when it is time to work on new code.

6. Peopleware: Productive Projects and Teams (3rd Edition) by Tom DeMarco and Timothy Lister

Something I try to get across in my own books is that applications are about people, not hardware or software. When a development team becomes too involved in the technology, the application often fails. This book is about people—managing teams and creating applications that use the skills of the people who create them to delight users.

7. The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas

What makes one programmer an artist who can seemingly turn code into magic and another a simple coder who does acceptable but uninspired work? This book helps explain the difference. More important, it provides a wealth of useful tips for improving your coding practice to help you move from being simply a coder to becoming a software master. The fresh and entertaining writing helps make it a great read.