Recommended books for software developers

Recommended books for software developers feature image
Photo Credit: Freepik

Some books can last for a lifetime

People sometimes argue that since technology advances so rapidly, technical books become obsolete the moment they hit the shelves. Such argument simply doesn’t stand, as long as books are chosen wisely.

There are two distinct categories of knowledge: information and fundamentals. The former includes specific knowledge that helps people deal with certain problems and usually have a short lifespan, such as how to program in C# 5 using Entity Framework 6, whereas the latter includes broadly applicable knowledge which isn’t constrained to a specific implementation and can last a lifetime, such as soft skills for software developers.

Having a solid skillset based on fundamentals can help professionals learn new technologies on demand, rapidly adapt to new requirements and ultimately live a more fulfilled life. Skills based on information have to be built on top of that.

The hierarchy of knowledge

Don’t judge a book by its cover programming language

Some books that target fundamental knowledge utilize specific programming languages to illustrate their examples. You shouldn’t get discouraged or intimidated if you haven’t worked with that language before, even if you don’t intend to use it in the future. As mentioned above, fundamental knowledge is widely applicable, and that fact also extends to other programming languages and paradigms.

My book collection (Updated 11 Aug 2016)

This is a hand-picked collection of the books that have greatly helped me improve my life, both in a professional and a personal level. I’ve read most of them more than once. Every single time I get to learn something new by seeing those books in a different light, mostly due to the additional experiences I have acquired between reads. I strongly believe that these books are totally worth your time.

In this book, legendary software expert Robert C. Martin (Uncle Bob) offers a comprehensive code of conduct for professional programmers, which includes disciplines, techniques, tools and practices of true software craftsmanship. It’s not about code, but rather about a proper state of mind.

The wisdom contained within those pages has emerged through decades of real-world work experience, not in some vacuum. Of course you don’t have to agree with everything in the book, but I guarantee that this will be one of the greatest reads you will ever come across.

John Sonmez, a successful engineer with vast experience on the field, does a great job in providing quality advice and unique insights on numerous topics such as career development, personal branding, learning, productivity, finance, even fitness and psychology. It is broken down into many small chapters, which make it easier to read and digest.

I was totally amazed by Soft Skills. It gave me a fresh perspective on life and encouraged me to become a better me.

Joel Spolsky, father of Stack Overflow and author of the legendary “Joel on Software” blog, lays out his secrets on how to find and hire the best programmers.

We all know how terrible the recruiting process of most companies is. Even professional recruiting agencies are more often than not unable to evaluate talent; they mostly base their process on matching keywords or look for X years of experience on technologies that don’t even exist for that long. Joel shows us how the recruting process is meant to be, and what recruiters and hiring managers need to do to fix it.

But you’re a developer. Why would this be any of your concern? Knowing what the recruitment process is meant to be, can help you identify companies that do it right. Chances are that these companies will be great to work at. Not just because they will know their stuff, but also because your colleagues will have been hired through the same, reliable process.

On the other hand, you will also learn how to ask the right questions during the interview, and identify red flags that will help you avoid wasting time at a company that’s not aligned with what you are looking for.

This book made me realize, among other things, that quality assurance in software is not just a standard procedure that takes place towards the end of the development cycle, but rather a continuous effort which starts from the very beginning, at the stage of defining the problem and gathering requirements.

Its various concepts are described using colorful metaphors so that they’re easier to comprehend and simpler to explain to a non-technical audience, such as stakeholders or project managers.

Code Complete 2 is the #1 technical book I’m recommending to every software developer who truly cares about his/her craft.

This is the bible of agile software development. Robert C. Martin (aka Uncle Bob) presents a variety of case studies explaining the fundamentals of agile development and extreme programming. Every single technique is proven in real-world scenarios, and it is accompanied by numerous code examples.

Apart from agile fundamentals, the book also discusses various other topics, such as planning iterations & releases, TDD, refactoring, unit testing, acceptance testing, pair programming, and design smells.

Agile Principles, Patterns, and Practices in C# is highly recommended for every software developer, manager or business analyst, regardless of whether they work in C# or some other OOP language.

What is the difference between good and bad code? How bad code can be transformed to good code? What are the best practices for formatting code, naming things, writing tests, or implementing error handling without clouding the business logic?

This book is another must by Robert C. Martin (aka Uncle Bob). It is highly recommended for every developer, project manager, team leader, or system analyst who is interested in producing better code.

This was the first technical book I ever read, back in the early 2000’s. I wasn’t quite ready for it then, but some of its concepts stuck in my head and helped me become who I am today.

Instead on focusing on code, the authors present a number of practical approaches they have found to work in real world scenarios, accompanied with solid advice and outstanding analogies.

As Ward Cunningham, the father of wiki, said:

If I’m putting together a project, it’s the authors of this book that I want… And failing that I’d settle for people who’ve read their book.”

What is legacy code? According to Michael Feathers, it’s code without tests. Even if it was written yesterday! If you write legacy code for a living, this book is for you.

The Art of Unit Testing will get you started from zero, and teach you enough to be dangerous. You will learn about a number of different testing approaches, their pros and cons, and how to choose which one you need on a case by case basis. The examples might be in C#, but writing good tests goes beyond the programming language.

Martin Fowler introduces a series of refactoring techniques that focus on improving the internal design of existing code without changing its external behavior. Each refactoring type is given a name and it’s described in small, easy to comprehend steps.

My favorite quote from the book is:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

The book’s code examples are presented in Java, but the concepts illustrated are 100% applicable to any object-oriented language.

Design patterns is one of the most essential concepts of software engineering. Essentially, some of our every-day problems in software design have already been solved by others. Instead of reinventing the wheel, we can tap into the experience tank of those people and find solutions that we probably wouldn’t think by ourselves.

For people who work in large corporations, their boss or client may not want to see this book on their desk, mostly because it’s playful and funny, it uses an informal style of communication, and overall it doesn’t look very professional, but it is! I strongly believe that it’s the best choice one has to get introduced to the mindset of designing software based on well-defined patterns.

The book’s examples are written in Java, but the designs are applicable to every OOP language, especially to the strongly-typed ones.

For the more experienced engineers, I recommend the all-time-classic Design patterns : elements of reusable object-oriented software, written by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, a group of authors also known as The Gang of Four.

I made several attempts to read this book over the last few years, just to find out that I wasn’t ready yet. Only after reading Head First Design Patterns and getting some more experience in the field I was finally able to read and understand the GoF book. I believe that noone should get discouraged if their initial attempts fail.

The book’s examples are written in C++, but the designs are applicable to every OOP language, especially to the strongly-typed ones.

Russ Olsen has done a great job at adapting fourteen commonly-used GoF design patterns to the Ruby language. He doesn’t just list the patterns one by one, rather he presents a real-world problem, builds an initial solution for it, outlines its shortcomings, and then refactors it using design patterns.

It is a must-read for anyone who programs either in Ruby or in any other dynamically-typed language, such as Javascript. Also, the first two chapters provide a comprehensive introduction to Ruby, so the reader doesn’t need any prior Ruby experience in order to start reading the book.

This is a great collection of tips from a wide range of industry professionals, including Michael Feathers, Pete Goodliffe and Diomidis Spinellis. It provides practical knowledge and principles that can be applied to all types of software projects.

A great advantage of this book is that each chapter is autonomous and relatively short (1-2 pages long), so it’s convenient to read between pomodoro sessions during the day.

This is THE book to read about C#. It describes all of the core features of the language in great detail, from every-day-use to more advanced ones. It also provides some historical information about each of them.

I wouldn’t recommend it as an introductory book on C#, as it is addressed towards more intermediate developers. Beginning C# Object-Oriented Programming by Dan Clark would be a more suitable choice for that cause.

Jon Skeet always makes my brain melt. His deep knowledge about C# is reflected both in this book, as well as in his Stack Overflow profile.

ASP.NET MVC is an opesource web framework that promotes high-productivity and clean code architecture, and it is supported by both Microsoft and a large community of professionals. It can be directly compared to Ruby on Rails as a programming paradigm, and having developed software on both frameworks I can say with confidence that ASP.NET MVC is more fun to work with. Also, the next version of ASP.NET MVC is going to be natively supported on Linux and Mac OSX.

This is an excellent book to get your started with the MVC design pattern and how that’s applied to the ASP.NET MVC framework. It is a must-read for anyone that works or intends to work with ASP.NET MVC or Web API. Adam Freeman, is an excellent author who never ceases to amaze me. He has a uniqe way of transmitting his knowledge and making it stick to the reader’s mind.

For those who just can’t get enough, there is also another book called Pro ASP.NET MVC 5 Platform which is essentially the second part of Pro ASP.NET MVC 5. It is focused on the underlying platform features, and how these can be used to build applications more effectively. It covers a plethora of important features such as user authentication, extensible request handling and state management.

Every language has good and bad parts, and JavaScript has its fair share of the bad. I’ve even heard someone referring to it as a monster that escaped from Dr. Frankenstein’s lab. The truth is that if we focus on the good parts and thoroughly avoid its bad ones, JavaScript can be an excellent OOP language to work with.

In JavaScript: The Good Parts, Douglas Crockford outlines a great number of good ideas that make JavaScript a beautiful language, and also points out which parts should be avoided at all costs. It’s a small but dense book, not necessarily easy to read, but it’s definitely a must.

For those who would like to get even deeper into JavaScript, there’s also JavaScript: The Definitive Guide by David Flanagan.

There is incredible failure that precedes every entrepreneurial success. Even the most promising idea can be doomed from day one if the entrepreneur is not familiar with a suitable process needed to turn that idea into a successful company.

In The Lean Startup, Eric Ries lays out a scientific method for building a sustainable business and minimizing the time needed for a desired product to reach the customer’s hands. This method provides a solid foundation for driving a startup, understanding when to change course (pivot), when to persevere and ultimately learning how to achieve growth in the fastest pace possible, along with avoiding the waste of development talent, energy, and effort.

It’s a marvellous book that have totally transformed my way of thinking in terms of designing a new product or adding features to an existing one. I’ve also written an extensive review on the Lean Startup.

OK, this book is not actually about stealing but rather finding inspiration and fuel creativity. I’ve read Steal like an artist more than three times so far, each of them in one hit. It’s short and perfect.

Software development is a highly creative process. Sometimes that creativity is greatly impaired by stress, lack of self-confidence, deadlines or extremely demanding bosses/clients. The truth is that nobody is able to force creativity, but they can certainly invite it, and that’s the whole essence of this book.

Austin Kleon never disappoints. His first book, Steal like an artist, is one of the biggest sources of inspiration I’ve ever come across. It was only natural that his next book would also a blast, and this time is about sharing the results of your inspiration with the world.

We love our work, we’re passionate about it, but it’s often the case that people arounds us don’t know or understand exactly what that is. This book will help you tell your story, get your message across and get discoverd. Don’t wait any longer, show your work!

This is the definite guide for Human-Computer Interaction (HCI). It outlines all the principles involved in designing minimal, effective, appealing and delightful interfaces for interactive services and devices. It’s also an ideal resource for learning about the skills required for interaction design, human computer interaction, information design, web design, and ubiquitous computing.

Anyone who is involved in the process of designing new user experiences or transforming existing ones should definitely read Interaction Design, beyond human-computer interaction, and most software developers are constantly involved in such activities.

Next on my list