Some great books for programmers that StackOverflow cannot replace
Here is a list of very good books that you might want to read if you are a programmer, or intend to become one. They will teach you many things about general reasoning, testing, command line utilities, management and more.
I hope it will be quite clear at the end of this list that I don't think reading about one programming language is only useful if you program in this specific language. Every single programming language offers a different perspective and might influence your general programming skills.
Most opinions also show that I prefer books triggering inspiration rather than presenting a formula or a dogma.
Let's do things backward. Honorable mention first. I could have picked many books for learning Ruby, but I decided to mention the famous Poignant Guide. It is probably outdated in places, but damn this book is great! It will remind you to have fun and experiment. It is completely free and online. It is a love letter to Ruby, filled with animals and bacon and most importantly an inspiration to push programming out of its comfort zone. Somewhere closer to art.
Each time I hang out on Stack Overflow and some guy naively asks about a challenging task like creating a language or even an OS, and all he gets are pedantic comments from "professional" developers, the most encouraging being "Why would you want to do that?", then I truly miss Why The Lucky Stiff with all my heart.
HTML & CSS, Design and Build Websites, by Jon Duckett.
View on Amazon
This book is perfect for beginners who want to start learning web development because HTML and CSS are the basics. I recommended it to all the students I worked with. I cannot say it goes deep on the subject but it goes through practical cases, with nice examples and nice illustrations.
This is honestly the best book I found to start building websites. This is progressive, based pretty much on real life examples. The book teaches HTML version 5 and encourages semantic markup. Semantic markup is a nice practice of using a meaningful tags whenever possible, instead of using a generic
span. Some of these are
strong. It helps robots/scripts to make sense of your content easily by just reading the text.
This is when the magic happens. You are an experienced developer. You read a beginner's book by curiosity and then you realize that feature you so wanted to use years ago is now a widespread standard. Hence the importance of regularly going back to the basics.
Seven Languages in Seven Weeks, by Bruce Tate.
View on Amazon
If you're a programming language junkie like me, who loves to learn new programming languages even if you rarely use them, then this book is for you. The title is pretty obvious. You will learn a bit of Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby. They are all amazing languages. I would have swapped Ruby for a lesser known language, but maybe that is because I was already quite familiar with Ruby.
Of all books here, this one illustrates the best the fact that all languages have something to teach you. Functional programming, the beautiful prototype-based object model of Io, the actor model, concurrency, parallelism. Starting from scratch and trying to solve a particular problem is refreshing.
How To Create Your Own Freaking Awesome Programming Language, by Marc-André Cournoyer.
View on Amazon
The funny thing is that the title is not a bait. You will really be able to create your own programming language. And it'll be awesome because you did it from scratch and can change it whenever. Marc-André Cournoyer is an amazing teacher. Once you've digested this book, you want to check his online courses. You can tell he has a real passion for teaching. This book is fun, easy to follow and goal oriented.
Even if you don't plan to create your own language, it does not matter. You will learn so much. You will understand the small details that make a language unique, beyond the mere syntax. Memory management, concurrency, parsing, functions, classes, virtual machine, byte code, etc. It will all make sense to you chapter after chapter. The pace is comfortable and there are illustrations to help you understand structures and process flow. Here is a sample chapter to get an idea.
To be honest, it took me years to jump in the fire and purchase these 657 pages of academic knowledge. I flipped through the pages in the book store so many times. I was always attracted by the cover and the subject. But I thought it was intimidating. Nevertheless, after hearing good words from Jim Weirich (RIP) about the book, I decided to give it a try.
Truth is, this is pure gold. Even if you don't want to build an interpreter or a compiler, you will learn so much about programs in general. It is hardly possible to read it and not find something useful. You will dive in the wonderful world of programs making sense of other programs. Meta with an uppercase"M". If you are not yet convinced, let me add that the text is illustrated with hundreds of sexy lines of Lisp.
If you don't want to buy a hard copy, you can download it for free as a PDF.
Learn You a Haskell for Great Good!, by Miran Lipovača.
This is a very good book if you want to learn functional programming and don't know where to start. It is thorough, funny and colorful. Exactly the tone you need if the subject is new to you. Even if you struggle, the pace is quite slow. You will have plenty of time to let ideas sink in before going to the next step.
You can either purchase a hard copy, or read the whole thing for free online. And if you think Haskell is not your thing, then there is an equivalent for Erlang.
Learn You Some Erlang for great good!, by Fred Hebert.
It is not the exact same book because both languages have different concepts, but the tone and purpose are similar. I have read both and preferred this one only because I have found more practical uses for Erlang. The concurrency model with the OTP is just amazing.
99 Bottles of OOP by Sandi Metz and Katrina Owen.
This book is written with Ruby examples, but is about Object Oriented Programming in general. If you don't know Sandi Metz and Katrina Owen, you should check them on YouTube. It will set the tone and confirm if the book is for you or not. Sandi is an absolute beast as far as refactoring is concerned. You can watch her starting with obvious code that works and make her way up until it is all easy to maintain. And that is the method applied in the book. You'll go through examples, make it work and clean it up with a different concept on each iteration.
It is knowledge digested from great names like Robert C. Martin and his SOLID principles. But the tone is humble. Don't get me wrong, the lessons from Uncle Bob are invaluable, but there is such a certainty for him in what is supposed to be "professional" that it can be off putting at times. You should read twitter battles between him and James Coplien. It is just embarrassing when you consider they are such great minds with so many things to teach. It is just a stream of "Oh my method does not work for you. You're probably doing it the wrong way." and it sounds more sarcastic than anything else. If you are like me and you just want good clues on how to make your code more organized without the religion behind it, then you are better off with 99 Bottles of OOP.
I should mention that the approach of this book is to build your functionalities using tests. You'll write the test and make it pass. No, I am not going to mention any acronym. As soon as you start to define what you do in terms of acronyms and words ending in "ism", you will end up spending time explaining or debating definitions instead of doing actual code.
The Mythical Man-Month by Frederick P. Brooks Jr.
View on Amazon
This one is a classic and was first published in 1975. Probably one of the best book titles ever. The main subject is the management side of development projects. While not being about programming, it will definitely resonate with people working in the industry.
Spoiler alert, the title itself refers to a manager's tendency to think human resources will accelerate the outcome. It is summarized in the brilliant example: "If it takes 9 months for a woman to give birth to a baby, then let's hire 9 women and we'll get it in one month." Hence the title. I am sure if you've worked as a developer long enough, you've experienced similar situations.
Hacking, The Art of Exploitation, by Jon Erickson.
View on Amazon
It may not seem obvious at first, but books about exploitation hacking are very useful even if you don't plan to infiltrate a government website. The main reason that people overlook is that most book on hacking explain techniques that are obsolete. They are not effective anymore unless a system is very weak, or you can go back in time with a DeLorean. The thing with hacking books is that you learn how to think outside the box. And this is really valuable.
In this book, you will first learn the basics of the C programming language, and then go through all the sensitive subjects related to hacking. Networking, sniffing, encryption, cracking, brute force and so on. Every chapter has a piece of code to play with. Usually many iterations and improvements of the same code. You will learn how to protect yourself against the attacks. The part about networking especially is a good source of information, not specific to exploitation. You will learn what are layers and packets and headers and everything that makes the Internet what it is.
The book also comes with a bootable disk containing Linux and everything you need to try the examples in a sandbox so that you don't compromise your system.
Thinking Forth by Leo Brodie.
View on Amazon
Forth is one of my favorite languages. It is Lisp's evil twin. I am actually surprised this language and its creator Chuck Moore are so underrated. It even shares the same curse with Lisp. It is so easy to implement that everybody has their own version and we ended up with a family as opposed to one standard language. Some say the curse of Lisp is macros, but these are insane people.
Anyway the thing is that this book is more about how you think about a problem and translate it into code in the simplest way possible. I like it because ideas in the Forth community are very often opposite to what current trends are, or at least makes you consider the opposite direction. This is were it departs from Lisp. For example the world of interpreted languages is all about late binding, whereas Forth works on early bindings. In terms of methodology, the trend is to use what is called top down approach, but Forth encourages you to balance it with a bottom up approach. This subject is so vast that I want to write an article about it one day.
The main idea is minimalism because it is characteristic of Forth programmers. Even if you don't stick to this extreme, it feels so refreshing. You will realize the hard truth that a lot of computer problems are actually human problems. Problems we've created for ourselves. As far as parsers are concerned, infix notation is one of them, and I have to agree with this.
Rework by Jason Fried and David Heinemeier Hansson.
View on Amazon
I was introduced to this book at work. Our boss purchased it and left it for all employees to read. At first I was very skeptical because I am really not into books about entrepreneurship in general. But then I started to read a random chapter here and there during my coffee breaks and it started to resonate with me. Mainly because it highlighted problems that I was struggling with. Especially things about meetings, todo lists and planning.
Anyway the book started to make its way up until I considered it was my favorite book on the subject. Even though you find Jason's and David's ideas on many blog posts and videos, I purchased my own version of the book because I liked it so much. It is well written. Each chapter is as short as possible. It talks about one main idea, contains a real world example to illustrate the idea. And that's it.
There is a lot of criticism about this book and the fact that it only works for companies like Basecamp. Mainly because Basecamp is a website and therefore it does not require a big capital to start. To be honest, the fact that these are ideas that only work for Basecamp is a good thing more than anything else. It means the ideas in the book are based on experience and not on assumptions. And the other thing is that many people think it is a formula. But it is not true. The authors are quite clear that these are ideas that worked for them and you are free to pick those that work for you and ignore the rest. It is actually in the very heart of the book that there is no one-size-fits-all. Many chapters in the book warn against trying to run a small business as if it was a gigantic one for example. There are opportunities in being small or just different.
Now why this book would be for developers? One reason is because the authors discovered these ideas while creating a web business. Therefore a lot of ideas are relevant to this industry. Another reason is that even if you don't intend to use your development skills to build a business, some ideas are still relevant. Just like The Mythical Man-Month, it talks a lot about management, the relationship with managers, etc.
I don't know if it is just me, but I use this book almost as a motivational speech. A lot of ideas gravitates around one thing that is a worry of some sort and realizing it is only a worry because you're trying too hard instead of following a natural path.
The Laws of Simplicity, by John Maeda.
View on Amazon
I purchased this book such a long time ago. I am not even sure I was already a developer. If you don't know John Maeda, he is well known in the computing world for his work on the bridge between technology and art. He did it through books and talks, but he is also behind interesting art related softwares like Design by Numbers which inspired the Processing framework.
In this short book (around 100 pages), John Maeda goes through all the techniques used by product designers in order to make interfaces simpler, or seemingly simpler. Most of it is obviously valuable when you are building a digital interface. It was the first time I have heard about the "Gestalt" which gives a lot of insights on how we make sense of what we see and how we connect the dots.
Some of you will have noticed that I have skipped classic books on this subject like "Don't make me think" or "The Humane Interface". The reason is because I found these overrated. They are trying to sound more than they really are in my opinion. Don't get me wrong, they are interesting, but a bit too confident on their findings and usually not worth the length. Whereas "The Laws of Simplicity" is short, to the point, and most importantly leaves room for interpretation because there is no absolute answer on subjective topics like "simplicity". There is a simplicity guru in all programming language communities, and guess what, they don't always agree with one another.
UNIX and Linux System Administration Handbook, by Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley and Dan Mackin.
View on Amazon
As a developer, it is always good to have one book about the Unix system if you work on Linux or OSX. To be honest, this one is not my favorite, but my favorite is in French. This one is my next pick, only because it goes deeper which can be more intimidating. I would prefer 2 books with 2 different levels. But I am being picky here.
Anyway, it contains everything you need. You will learn the Unix commands and how to set up your system in a manual way (i.e. not using an interface like CPanel or Plesk). I don't know if it is due to the large number of authors, but saying this book is thorough is almost an understatement. You will learn so many things regarding Unix. There is even an introduction to Ruby, Python and Git. The only problem which comes from this is that it is so complete that it ends up in territories that may differ depending on your version of Unix. FreeBSD is covered, but if you're on other things like Darwin/OSX, then you might want to complete your book shelf with one specific to your OS.
The Minix Book, Operating Systems, by Andrew S Tanenbaum and Albert S Woodhull.
View on Amazon
Last but not least for the most ambitious amongst you, a book that teaches you how to build an operating system. Just because you need to do something in your spare time.
I have a previous edition, but I assume this new one has similar content. It is basically the bible of operating system building. The author is a computer science teacher and created an operating system called Minix in order to teach his students how it works. Linux did not exist at the time and for a very good reason: This is Minix which inspired Linus Torvalds to create Linux.
Tanenbaum then wrote this book in order to explain how Minix works. Everything is in there. System calls, processes, IPC, scheduling, I/O, deadlocks, memory management, threads, file systems, security, and more. It is all explained with the source code.
1088 pages that teaches you how to build an OS which does not prompts you to install Norton antivirus each time you boot.