Over the years, my family has given me a lot of grief for
reading technical books on the beach, during the holidays, or pretty
much anytime. I read a lot of these books, and find them to be helpful in my
everyday job as a developer or manager.
The most important characteristics of a good technical book include:
·
Well
Written. I’ll freely admit that I’m not the world’s best writer. However,
there are some books that need a good editor. There are typos and sentences where
after the fourth or fifth reading I still don’t understand. My mother was an
editor and writer for technical manuals, I just wish more authors would team up
with a good writer more frequently. One example of a really well written book
is The Well-Grounded Rubyist. It is a
bit out of date now (pretty much any Ruby book is out of date by the time it’s
printed), but the way David Black is able to express what he’s teaching should
be duplicated in other books.
·
Concise. I felt that the message, and lessons, in Domain Driven Design: Tackling Complexity in
the Heart of Software by Eric Evans, are extremely important, but the
verboseness of the book made it difficult to find those lessons. I find that
the books, which give examples of their points in a clean and concise manner to
demonstrate their points, tend to resonate with me.
·
Reusable.
Don’t get me wrong, I like reading about a specific technology and doing a deep
dive with it (I have version 2 and 3 of Spring
in Action by Craig Walls and like them a lot), but a truly transformative
book should be able to be used regardless of the specific technology.
Of all of the books that I’ve read, I would place the
following three atop of the list:
1.
Refactoring:
Improving the Design of Existing Code by Martin Fowler. This was the first
technical book that was not about a specific technology, but rather about a
mindset. This book is the one that made me start reading more technology books,
not so much for the specific technology, but rather for the patterns I can use
to go across different technologies. Even to this day, I have this book on my
desk at work and will often open it, or refer to it. It is by far the most dog-eared
book in my collection.
2.
Practices
of an Agile Developer by Venkat Subramaniam and Andy Hunt. This is a very
easy read, but probably has more lessons and topics covered per page than any
book I’ve ever read. It is not a deep dive on any one topic, but covers many
topics in an easy to follow and easily reference able manner. I liked this book
as a kick off for other topics like TDD, pair programming and many other topics
that interest me. While I was a manager, I gave this book to each of my new
employees during their first week as homework. Each person learned something
new and helped frame our discussions about how we work. On a side note, I often
got the comment, “hey we’re doing a lot of the things in this book”, to which I
just replied, “yup”.
3.
Clean Code:
A Handbook of Agile Software Craftsmanship by Rob Martin. I only just
recently read this book, but I wish I had read it sooner (like my first job out
of college sooner). This book covers a wide range of topics, but the number one
I came away with is, take pride of your work. Write your code in a way that
when you look back at it in six months later, you still understand what’s going
on because your code speaks to you. I have a suspicion that this book will soon
be as dog-eared as Refactoring. If you’re a developer (in any technology), pick
up this book and read through it, become a craftsman of your technology, and
make the lives easier on those who must maintain your code after you’ve moved
on.
Some other of my favorite books: Succeeding with Agile: Software Development Using Scrum by Mike
Cohn, Dreaming in Code by Scott
Rosenberg, Continuous Delivery by Jez
Humble and David Farley, Driving
Technical Change by Terrence Ryan, The
Paradox of Choice: Why More is Less by Barry Schwartz, Domain Driven Design: Tackling Complexity in the Heart of Software
by Eric Evans, Art of Agile Development
by James Shore and Chromatic, Agile
Retrospectives: Making Good Teams Great by Esther Derby and Diana Larsen, Design Patterns by the Gang of Four, and
Career 2.0: Take Control of Your Life
by Jared Richardson.
If you have some favorites, I would love to know what they
are as I’m always looking for more to read. I just started Working Effectively with Legacy Code by Michael Feathers, and have
Growing Object Oriented Software, Guided by Tests by Nat Pryce in my queue.