Books that shaped my career
Three books that shaped my career as a software developer
Inspired by an article that I read recently, I want to create a list of books that shaped my software developer career. These books had such an impact on me that it will last until I write my last line of code. And that line will hopefully be very nice and efficient, following all the principles I learned through the years. To be clear, there is nothing bad in me writing the last line of code. I will not die doing that, it's just an expression to emphasize the fact that someday I will go to a better place, as a developer, doing something else. As you can already guess, most of these books are technical. But there are some related to business and leaderships. Because we are all people around here, and lines of code is not everything that matters. No inefficient team achieved great success by only writing great quality code, but by becoming a more efficient team first. I will start with the technical ones:
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
This is one of the first books on the subject that I read. As a young developer, the boy-scouts rules of leaving the code cleaner resonated with me. It correlates with some OCD behavior to frustrate my colleagues sometimes. "Q: Why did you change the parameters order for this method anyway? A: To match the parameters order for the method I was working on. Q: Why do you have 5 refactoring commits in review? A: Such that I can understand the code before trying to change it". The book is divided into three main parts. The first one describes some principles and patterns of writing clean code, starting with the most difficult part of software development: naming things. It then goes deeper into describing some case studies. The third part consist of a list of a list of 'smells' gathered while creating the case studies.
- The Pragmatic Programmer: From Journeyman to Master by Andy Hunt and Dave Thomas
The book teaches you that the journey from novice to master is realized through many small improvements. It presents the basic philosophy of approaching problems and their solutions. Then it goes into more details about the pragmatic approach and the tools that any programmer needs. However no tool will solve all your problems, as opposed to the way they are advertised. You just need to have a broad enough view to allow you to choose best solutions in any particular situation. This is where the understanding of basic principles and your experience meet. Many of the pragmatic programmers share some of the following characteristics: they are early adopters, but they exercise their critical thinking in questioning any alternative approach; they are familiar with a broad range of technologies and environments, while understand their limitations and being realistic about their capacities to solve problems. The book contains several self-contained sections that can be read in any order, although they are cross-referenced. You can pick up the book at any time and remind yourself about the core principles. It is always refreshing.
- Code Complete by Steve McConnell
This is one of the most complete technical books I read. I goes down into a lot of details, from naming variable to system design. The purpose of the book is to narrow the gap between academic research and common programming techniques. The knowledge shared by the author should allow any programmer, regardless of experience level, to improve the software development craftsmanship. Software construction is one of the most important activity in the software development life-cycle, the one that can guarantee the success of the project in the long term. The main activities in construction is detailed design, coding, debugging, integration and developer testing. The book gets into a lot of details about all of these activities, giving also a larger perspective on software development. It is quite accessible for programmers of all levels, since it can be read in any order and used as a reference. There are a lot of checklist that you can use to asses the quality of your design, control structures, layout and variable names. Even though I was overwhelmed at first by the amount of technical information, it is a fun and easy read. The insight you get is useful every time you revising a specific section, since your perspective have changed with the practical experience.
This is just the first in a series of articles on this theme. Next time I will talk about some non-technical books, since software development is first about people, and then about computers.