Today a reader named Ryan asked me if I had ever posted a list of my top ten programming books. I haven’t, but I appreciated the suggestion and decided to write such a post today. Let me be clear: these are not my top ten books about programming. These are the top ten books I recommend to programmers, which is why you will see some non-programming books on this list.
Now then, in no particular order….
1. ‘Assembly Language Step-by-Step’ by Jeff Duntemann
I previously wrote about this book, so you may want to read that review. All I wish to add here is that the book is, in my opinion, the best book I’ve ever read on the subject of x86 architecture, which is such a common architecture in the field of programming that I recommend this book more for understanding x86 itself than for learning assembly language programming. That said, it’s also the best book on assembly language I’ve ever read.
2. ‘Lua: The Programming Language’ by Roberto Ierusalimschy
I also wrote about this book before. It is an impressively concise yet comprehensive treatment of a programming language which I consider to be one of the best introductory languages for new programmers—Python being the other language I hold in the highest regard for teaching budding developers.
3. ‘Racing the Beam’ by Ian Bogost and Nick Montfort
This one is for game developers, who need to read this book so as to truly understand how high we stand on the shoulders of others in the modern industry. If you think game development is difficult today—and it is—imagine creating a game with only one-hundred twenty eight bytes of RAM to spare. I couldn’t even describe a game to you in that many bytes of text.
4. ‘C Programming: A Modern Approach’ by K. N. King
C is a corner-stone language of the industry, and I think everyone should learn it eventually. And I recommend this book for doing so. Many people suggest ‘The C Programming Language’ by Kernighan and Ritchie, the famous ‘K&R C’. I take issue with that suggestion; the K&R book hasn’t changed since 1988, the publication year of the second edition. The C language, however, has absolutely changed since then. ‘C Programming: A Modern Approach’ covers the C99 (i.e. 1999) standard and looks ahead (at the time) to C11, finalized in 2011.
In the year 2015 I frankly think it’s irresponsible to recommend a C programming book that does not at least discuss C99. This is the only suggestion on this list which I believe some people may consider controversial. But seriously—we need to stop promoting a book that’s twenty-seven years old when the language it discusses has gone through serious changes since that time.
5. ‘Structure and Interpretation of Computer Programs’ by Abelson, Sussman, and Sussman
Yes, two Sussman’s.
Colloquially known as ‘SICP’, this book is one of the best introductory texts on computer science. It uses the Scheme programming language, and actually is a decent book for learning Scheme in my opinion, but SICP’s true value lies within its concise and clear discussion of fundamental concepts of computer science. What you can learn from this book will improve your programming abilities regardless of the languages you use.
6. ‘The Manga Guide to Databases’ by Mana Takahashi and Shoko Azuma
Seriously. Despite seeming like a joke, this is hands-down the best introductory book I’ve ever read on the subjects of relational databases, SQL, and sets (in the mathematical sense). While its style of entertainment may not be your cup of tea, the clarity with which it teaches the basics of relational databases is staggeringly surprising, given the presentation and all.
7. ‘The Everyday Writer’ by Andrea A. Lunsford
This book is seemingly one of the least programming-related books in this list. However, being a good computer programmer involves more than writing code and knowing programming languages. Writing comments and documentation and such is also a large part of our job, and to do so effectively we need to understand how to write well. I think good writing is one of the most overlooked skills in the programming field. Yet if we step back and think about how much non-code we deal with, it should become clear how valuable it is to have strong writing composition skills. And for that reason I recommend ‘The Everyday Writer’ to all programmers, because most of us write English while programming just as much, if not moreso, than we write code.
8. ‘The Calculus Tutoring Book’ by Carol Ash and Robert Ash
This is best calculus book I have ever read, without question. But what makes it valuable to programmers? Firstly, it gives the reader great insight and understanding of the functional programming paradigm. Secondly, the book is both a terrific textbook and reference for a branch of mathematics that is more commonly encountered in programming than some people would expect. For example, do you want to be a game developer? Then I promise you that knowing calculus will be an important skill. And for learning calculus you can do no better than this book, which gave me a solid understanding of differential and integral calculus at the mere age of sixteen, which is a testament to the book’s quality and not any form of boasting on my part.
9. ‘Modern Algebra’ by Seth Warner
Algebra is the other branch of mathematics I see most frequently in computer programming, and this book is a comprehensive treatment of the subject. If you’ve ever looked at languages like Haskell and thrown up your hands at all the talk over monads and isomorphisms and functors—‘Modern Algebra’ gives you a strong foundation for all of those concepts and much more. For example, I feel like its lessons on groups helped improve my object-oriented programming and my approach to create data structures and operations on them.
10. ‘Course in General Linguistics’ by Ferdinand de Saussure
This book is probably the most unexpected on this list. How does a book on linguistics help anyone be a better programmer? In some ways it’s for the same reasons as ‘The Everyday Writer’. However, if you’re the kind of programmer who strives to learn as many programming languages as possible then I genuinely believe an understanding in synchronic and diachronic linguistics assuages the challenges involved. Granted, the information on phonology is not all that useful for programming in my opinion. But understanding the evolution of morphology and syntax in natural languages carries over in large quantities when it comes to understanding the evolution of programming languages and how to compare and criticise the expressiveness of one language to another. ‘Course in General Linguistics’ is not a book I would recommend everyone rush out to purchase immediately. But reading it eventually will sharpen your insight and analyzation of programming languages, and as you start to learn more paradigms a knowledge of basic linguistics becomes a more useful tool to have in your arsenal.