I once wrote My Top 10 Non-Fiction Books of All Time. This time it is about programming!

I don’t expect people to really read this blog but it’s fun to just list them out. And also I still hope people can find it helpful in some ways. Here we go!

1. Hacking: The Art of Exploitation

Hacking: The Art of Exploitation

Not really a programming book. But I could say that all my knowledge in computer (including programming) started from this book. I don’t know what to say about my most beloved computer book. I lost words to describe it, really. So sorry about that.

It’s an old book but if you have time I really recommend reading it. Teach you everything from fundamentals of how code is executed, how OS (and your code) treat memory, how networking works, and crytography.

And yes how to exploit them all.

2. The Well Grounded Rubyist

The Well Grounded Rubyist

I believe when you learn something, whether you started from higher level or not, at some point you should learn about fundamentals. This book is my definition of starting from the first principles approach.

So even if I list it as second, I don’t really recommend you to read it. Find your language you will love and find some books or other materials that will teach you the fundamentals of it instead.

You learn fundamentals once, and learning other things will seem relatively easy.

And one day, when finally you have your own strong opinions, fundamentals will help you make it happens, whatever this “it” is.

3. Working Effectively with Legacy Code

Working Effectively with Legacy Code

Don’t let the title fool you. It actually teaches many methods on how to read, refactor, and rework other people’s code (well, my own code written months ago is counted as other people’s code, right?), effectively.

I mean, it’s super effective!

4. Computer Architecture: A Quantitative Approach

Computer Architecture

By now you may notice that I love everything fundamentals. I cannot describe this book accurately enough so I will do it justice by pointing you to the table of content instead, here.

Reading this alone might seem boring, so the next things you probably should read are those OS books if you’re so into fundamentals. I don’t have any preference aside from the System V book though, but even it I don’t really recommend you to read, maybe it’s too old.

5. Code Complete

Code Complete

I don’t really read this book much. But every time I open it, I feel like I learn something new, something really fundamentals that I should have learned years ago. Still feel like that till this day :)

It’s so fundamentals I actually think our universities should teach it. Or make it a requirement for passing programmer certification, if there is such a thing.

6. Counter Hack: Reloaded

Counter Hack: Reloaded

Again, not really a programming book. But I learned all the TCP/IP and other networking fundamentals from this book (and also how to hack theme, of course). It’s such a joy to read.

7. Domain-Driven Design

Domain-Driven Design

Really changed how I see software development, and from business perspective as well. Teach us how to see the world rather than from the coding and all that software architecture or whatever perspectives, to really re-focus onto what really matters: What are we trying to solve, now and in the future, as a team.

8. Pratical Object Oriented Design in Ruby / Eloquent Ruby

Pratical Object Oriented Design in Ruby

2 books tied for the 7th place because I just want to add more than 10 books to the top 10 list.

The first book taught me a lot about object-oriented design, more than any other books (and yes, including other design patterns books).

The second book taught me how to read and write Ruby code, elegantly. And from then even if I don’t write Ruby code I still apply how to write code elegantly every time I can.

And to know that language syntax is just an Artist’s toolbox, but I’m the Artist!

9. Designing Data-Intensive Applications

Designing Data-Intensive Applications

Well, it’s mostly fun to read and to know that these days knowing to develop applications is one thing, but choosing (and even designing your own) the right databases is another. It’s like An Algorithm Design Manual, but for databases and distributed systems.

10. Pro C# 9 with .NET 5: Foundational Principles and Practices

Pro C# 9 with .NET 5: Foundational Principles and Practices

I will confess, I don’t do C# any more, and actually I read only the .NET 3.5 Framework version (probably about 14 years ago…). But yeah it will teach you everything, … I mean … everthing. Very comprehensive book.

It should just rename itself to C# Encarta or C# Super Definitive Guide.

Honorable Mention: Land of Lisp

Land of Lisp

Well, I wrote comment 8 years ago so I will just copy and paste:

I’ve just finished reading Land of Lisp (the book) recently. http://landoflisp.com/ Here the features the book teaches and the Common Lisp gives you

  • Code Brevity
  • Functional Programming and Optimization
  • Exception Handling (and Restart technique)
  • Generic Programming
  • True Macro
  • Domain-Specific Language (via Macro)
  • Lazy Evaluation (via Macro or Libraries)
  • Some of OOP Programming (via CLOS) TL;DR The book teaches you via writing 7 games, some of them can be written and understand for hours, some of them require days. Each of them represents the features I listed above. To say, greater or lesser, the book promised that even you would not use Lisp anymore, the concepts that only Lisp can teach you will change the way you thought about programming forever. This happened to me.

It’s very crazy how just one language can teach us that much.

That’s all of it! If you have any programming books you enjoy, feel free to share to me :)