A few years back, I got suck into a conversation of my colleagues on book reading and it surprised me. And not in a good way. In a conversation of six, four of them didn’t read books (apparently due to lack of time) and one read only popular Sci-fi and fantasy books. The remaining one was me. I am far from being well read, but I still try to read a few books a year on tech and non-tech topics.

If not for books, techies definitely follow blogs. Don’t they? Not really. One person didn’t read blogs. Two followed blogs, but not tech ones. The remaining three had a daily routine to browse most popular blogs and find others, if work took them that way. Looking at results one can conclude that three developers out of six participating in the conversationĀ (a stunning 50%) didn’t have a clue of what is going on in their field of expertise.

You know, people tend to think that when they master a certain technology, they can relax and stop learning. I cannot explain how wrong that line of thinking is. Technology changes all the time. And rapidly at that. I have started programming as a kid nearly 30 years ago. In those 30 years, I have written code in: BASIC, Commodore 64 assembly language, Pascal, Delphi, C, C++, Java, C#, Visual Basic, Perl and PHP. I have used SQL, HTML, CSS, Javascript, Python, Shell programming, you name it. So, when asked a couple a months ago by a student at our company what programming language he should learn, my response was (and this goes for all of you asking the same question): “Stop trying to learn programming language. Learn and understand programming principles first. When you have done that, you will have no problems learning most programming languages.”

Technology changes. What is hot today, will be archaic tomorrow. Nobody develops applications in pure BASIC anymore. And a day will come when no one will develop applications in C# or Ruby. So, spending time on learning specific technology is basically a waste of time.

Back to original topic. I love books, I read them because I am curious. Curious of how it is going to end. Curious, if plot is any good. With tech books, I am curious, how an author codes. How did he solve a specific problem? How would I solve it? Is it something I can improve myself on? Can I use this in any useful matter? Will that make me a better developer? All sorts of questions. And the best thing. Even if the book is utter crap, you still learned something. Maybe it was what not to do. Maybe you got the idea how to do things better than author. Possibilities are endless.

So, without further ado, I present you with 5 books I think every developer should have read at some point:

  1. Coder to developer. A great book where title says it all really. It shows you what it takes to morph from being a coder into a full-fledged developer. It elaborates in details on things like source-control, bug tracking, automated documentation etc. Sure, tools presented may be archaic and not used by your company. However the point is not in tools, but principles presented.
  2. Don’t make me think is a book about creating great user experience (UX). UI is difficult for us developers and this books presents you with interesting studies, techniques and ideas for improving design of your application.
  3. Head first design patterns. Some people prefer original Gang of Four book, but for a novice developer, I recommend this one. This book offers a nice and easy introduction into world of design patterns. It will show you object oriented approach to solving a problem. Also, perhaps, make you stop and think prior plunging directly into code.
  4. Being Geek is a career reference handbook. It is there to help you in times when your career is developing or stalling. I simply love this book.
  5. Peopleware. If you ever make it to tech lead, this is the book to read. If not, I advise you to skip it, as it will only upset you.

Have I missed anything out?