Skip to main content

Books That Have Influenced Me and Why

A mantra that I often repeat to myself is, "Don't abandon the behaviors and habits that made you successful." I believe this trap is actually much easier to fall into than most people realize.

You can sometimes observe it in the context of a professional sporting event such as American football. One team might dominate the game, playing exceptionally well for the first three quarters. Then, as they sit with a comfortable lead, you see a shift in their strategy. They start to play more conservatively, running the ball more often than they had. Their defense shifts to a "prevent" formation, designed to emphasize stopping any big plays by the other team while putting less pressure on the short game.

The leading team often looks awkward in this mode. They have switched their perspective from that of pursuing victory to that of avoiding defeat. They have stopped executing in the way that gained them the lead in the first place. I have seen more than one game ultimately lost by a team that most likely could have won had they not abandoned the tactics that made them successful earlier in the game.

Thus, I tell myself to stick with what has worked for me even as my situation changes. One of the behaviors that I believe has greatly helped me achieve what success I have in my career is reading books. I have learned a tremendous amount from reading, much of which would have taken me far longer to have learned by other means, much more of which I would probably never have learned otherwise. I want to share some of the books that I think have been most seminal in my career development.

Charlie "Tremendous" Jones has said, "You will be the same person in five years as you are today, except for the people you meet and the books you read." Stagnating to such a degree is a fate to be avoided. To that end, here are some books that might help you be a better person in the future than you are right now.

Clean Code by Robert C. Martin, a.k.a. Uncle Bob

Bob Martin does not mince words. If you want a book that will challenge everything you believe about what constitutes good code and good coding practices, this is it. Martin's views are extreme, and he doesn't justify all of them. However, enough of his ideas are explained well such that you can get a very good idea of the goals he has in mind.

The bottom line is that a given line of code is almost always read many more times that it is written, so it makes a lot of sense to emphasize convenience for the reader over convenience for the author of the code. Thus, we should strive to take the time and expend the effort to make our code highly readable. By doing so, we will reap the rewards of having much more understandable and maintainable code. How do you create highly readable code? This book will teach you in great detail.

The Clean Coder by Robert C. Martin, a.k.a. Uncle Bob

While the title almost implies it is a sequel to Clean Code, this book tackles a distinct subject. At its core, it's about professional conduct. The Clean Coder answers such questions as what is a professional? and what constitutes professional behavior for a software developer? It has many good examples that illustrate how a professional should behave in various circumstances. It's also takes a board perspective, covering topics from how and when to say "No" to suggestions on how much caffeine one should consume when working.

The Pragmatic Programmer by Andy Hunt and Dave Thomas

This book covers the basic skill set that every software developer should have. It's an industry version of Software Development 101 rather than the academic version that many of us are first exposed to. That means, as the title implies, it is short on theory and long on practices and paradigms that have been executed successfully by many software developers for decades. It is an excellent book of best principles and practices.

Code Complete by Steve McConnell

I feel compelled to insert the caveat here that I have not yet finished reading this book. It is a tome in excess of 800 pages. However, I have read more than half, and what I have read has convinced me that every software developer should have this book in his or her library and refer to it regularly. McConnell's simultaneous breadth and depth is remarkable. He covers everything from reviewing requirements and architectural specifications to developer testing and everything you could think of in between. There are pages dedicated to the topic of creating if statements. More pages dedicated to teaching effective techniques for positioning variable declarations and uses within a routine.

In addition to the exceptional level of detail, one thing that really makes McConnell's book stand out is the amount of data he presents to justify the techniques he recommends. It is clear he performed extensive research in creating this handbook for developers, and he provides many interesting, sometimes surprising, statistics to explain why certain practices are superior to others.

Given how detailed this book is, one might naturally expect it to be somewhat dry. While perhaps it can be at times, McConnell demonstrates his writing talent by injecting a bit of humor here or there when you least expect it. The language and tone he employs make the book very approachable; I have found myself much more engrossed by his writing than I would have expected from reading what is essentially a handbook.

Soft Skills by John Sonmez

Unlike the titles mentioned above, Soft Skills isn't really about techniques for performing one's work as a software developer. Instead, it covers nearly every other topic a software developer might need to know something about in order to live a happy, productive life. The book discusses everything from searching for jobs and negotiating salaries to getting and remaining physically fit and managing your finances. It even delves into topics concerning your love life.

Prior to reading this book, I hardly would have given much thought to negotiating a job offer. I have since found out from personal experience how surprisingly easy it can be to get a better offer thanks to the advice in this book. I have enjoyed significant benefit from employing some of Sonmez's productivity techniques as well. His discourse on fitness helped me get into much better shape.

It's true that much of this advice could be gained from other sources, perhaps from those more expert in each of the respective subjects. However, the beauty of Soft Skills is that Sonmez employs his talent of breaking everything down into simple terms and laying out techniques that anyone can follow. He also writes from the perspective of a professional software developer, so it should strike close to home for many reading the book.

The Total Money Makeover by Dave Ramsey

This title veers so sharply away from the other books recommended here that I almost didn't include it. However, I strongly believe The Total Money Makeover could be of significant benefit to many software developers. Software developers tend to have incomes that are much higher than average. However, I have seen and heard of far too many cases of software developers making very good money and managing it very poorly. With the amount of money we make, we should generally be able to live very comfortably; there's no reason to have financial problems.

This book will give you the techniques that will lead you into a financially prosperous life and guard you from common pitfalls and the eventual curveballs that life will throw at you.

Nothing Like a Good Book

Well, there you have it: a list of some of the books that I have found to be most helpful in my career. I hope they enrich your work and your life as much as they have mine.

Comments

Popular posts from this blog

Code Maintenance Requires More Than Testing

Writing and running automated tests can go a long way to help maintain the quality and reliability of a code base. Tests help ensure the code you've written executes the way you expect it to. However, even though automated tests are a great tool for helping to ensure quality over the years in which people will contribute to the code, they are not sufficient in and of themselves. It may be inevitable that all software products will reach a point of obsolescence no matter how much work is done to keep them current. The inherent problem is that if we view tests as constraints upon what the software system under test can be, then as we add more and more tests over the years, we will have more and more constraints on the shape our software is allowed to take. It then seems we must reach an inevitable point where we can no longer change our software system without violating a constraint, i.e. causing a test to fail. In more practical terms, we'll more likely first reach a situat

Notions of Debugging

Bugs can be really evasive and produce some surprising, even "impossible" behaviors. Part of a software developer's job is to relentlessly hunt them down and destroy them. However, often at least half the battle is finding them to begin with. The best debuggers I have seen rely a lot on experience, both experience with the application and experience with debugging in general. The former is situation-specific, and there many not be any good ways to advance in that regard other than practice. However, we can extract some information pertaining to good debugging practices in general. Dig for Clues Using All Available Resources The first step in debugging an issue is ideally to reproduce the problem. This isn't always possible, but if you want any significant level of confidence that you have fixed a bug, you need to observe the broken behavior and understand how to trigger it from a user's perspective. Sometimes we're lucky, and a tester has taken the time to