Monday 15 September 2014

Books that have most influenced my software development career

I have read numerous books on software development and have learned valuable things from most of them,
but a small subset of these books has significantly influenced me and how I develop software.

FEATURED RESOURCE

Presented by Citrix Systems
10 essential elements for a secure enterprise mobility strategy
Best practices for protecting sensitive business information while 
making people productive from
LEARN MORE
Effective C++ and More Effective C++

Although I had written a lot of lines of code in BASIC, Pascal, C, and C++ before starting my career, 
it was C++ that was my first professional programming language. As such, it was the first programming 
language in which I started to get past the basic syntax and and learn about more advanced issues and 
nuances of the programming languages. For the first time, I started considering performance issues,
 maintainability, readability, and issues other than just whether the code worked or not. Effective 
 C++ and More Effective C++helped me to see that there was more to programming than basic syntax and
 getting functionality to work. These books helped me to realize that there are general programming
 concepts that are wise to follow but that there are also language-specific concepts and tips one should 
 learn and apply in the programming language of choice. General software development principles apply 
 across many languages, but sometimes it is necessary to know language-specific features as well.

Effective Java, Editions 1 and 2

After such good experiences with Effective C++ and More Effective C++, I was excited to learn about
 the book called Effective Java as I was transitioning from C++ to Java, a transition several years
 in the making. Effective Java did not disappoint. I started reading Effective Java sooner in my Java 
 experience than I had started reading the Scott Meyer's C++ books in my C++ experience and it helped 
 me tremendously. It helped me to see from the beginning that there were more considerations when 
 developing with Java than just writing syntax and making things work.

Java Cookbook

Although I have purchased and read seemingly countless Java-themed books over the years, I've never had a 
book focused on the Java language basics. Instead, I've always had specialized books focusing on aspects
 of Java or Java EE. The way that I learned the basics of the Java programming language was via the Java 
 Cookbook. It helped me realize that I like this recipe-based approach to reading about, learning, and 
 applying a new programming language. I've liked recipe-oriented books ever since, especially for quickly 
 learning and apply a new programming language or framework.

Groovy Recipes: Greasing the Wheels of Java

Groovy Recipes: Greasing the Wheels of Java was my introduction to Groovy. This excellent book provides a 
nice introduction to Groovy that not only quickly introduces its syntax and features but also introduces 
practical ways that Groovy can be applied in regular everyday situations. I was able to quickly see the value 
of learning Groovy and to realize that Groovy was more than just a trendy language fad. This book reaffirmed
 my realization that I learn programming languages best from recipe-oriented books that demonstrate the
 language used in practical situations. Groovy Recipes: Greasing the Wheels of Java and the Groovy language 
 itself have dramatically influenced my overall approach to software development by giving me the tools and
 confidence to do significantly more scripting than I used to do. Being able to script and develop software 
 in similar languages (Groovy and Java) and use the same Java libraries and frameworks has made scripting 
 easier. Easier scripting has meant that I've done more of it and spent less time doing it.

Holub on Patterns: Learning Design Patterns by Looking at Code

I purchased Holub on Patterns after seeing Allen Holub speak at SD West 2005 (I wasn't the only one).
 Holub, the author of Why Extends is Evil and Why Getters and Setters Are Evil, challenged my way of 
 thinking (traditional and commonly accepted way of thinking at the time) about object-oriented programming.
 I definitely look at objects now more from a behavioral perspective than data perspective. Also, although 
 willing to write get/set methods when necessary, my reluctance to write them until needed has been of 
 great benefit as the era of multicores has helped us realize the dangers of mutable state.

Although Holub on Patterns does provide in-depth coverage of some common design patterns implemented in 
Java, the far bigger influence it had on me was in how I think about object-oriented design.

Expert One-on-One J2EE Design and Development

At a time when developers of enterprise Java applications were being told to use heavyweight 
EJBs and like it, many of us were wondering what we were missing when it seemed overly complex
 to us. Rod Johnson's J2EE Design and Development stuck a chord with me; it was relieving to
 see that I wasn't the only one who thought EJB 1.x was too difficult and cumbersome. More 
 importantly, Johnson's book provided examples and discussion text that helped to see what
 parts of J2EE were worth using and which parts needed improvement. The Spring Framework was
 born out of the examples covered in this book and Spring's success inspired changes in Java
 EEthat make it much more productive and useful. J2EE Design and Development influenced me 
 personally and influenced an entire community. It also helped me to realize that one can be
 correct in thinking something isn't all it's said to be even if the so-called experts insist 
 it is. This has helped me weather numerous fads (and their blindly adherent evangelists) 
 in software development since then. The book also articulated better than I could my own
 thoughts and feelings on enterprise Java development.

Agile Web Development with Rails

During my brief infatuation with Ruby on Rails, I found Agile Web Development with Rails to 
be a great introduction to Ruby on Rails. Although I enjoyed my foray into Rails, I have never
 worked with it to the same degree as I have with Java. Agile Web Development with Rails introduced 
 me to Ruby on Rails, but more importantly it influenced my career, which has mostly not been 
 in Rails, by demonstrating in a practical way how agile development can be done if a client
 is readily available to provide feedback. Agile Web Development with Rails and the Ruby on
 Rails framework itself helped change my way of thinking to see the value ofconvention over 
 configuration. Shortly thereafter, the Java-sphere began to see changes inspired by Ruby on 
 Rails's success. These included Java Persistence API (JPA) adopting "configuration by exception"
 approach and the Grails framework. Ruby on Rails influenced much of the web development 
 community and Agile Web Development with Rails was the tool that allowed me to most easily
 experience this influence personally.

POPULAR ON JAVAWORLD

Java programming with lambda expressions
Hello, OSGi, Part 1: Bundles for beginners
javascript
Review: 10 JavaScript editors and IDEs put to the test
The Practice of Programming

The Practice of Programming does not waste time with extraneous pages. The 250 page book 
covers the most fundamental issues in programming such as debugging, testing, performance, 
and portability. I read this early in my software development career and find myself reading 
portions of it again from time to time. Many great books have come along since that deal 
with these subjects, but The Practice of Programming was the first to cover most of these for me.

Software Craftsmanship: The New Imperative

Software Craftsmanship: The New Imperative was published at almost the perfect time for me
 in my career. The book helped me articulate my own observations about what made a "software
 engineer" more complete. In addition, this relatively short and to-the-point book helped me 
 discover other approaches that I would later use in efforts to make my code more than just functional.

201 Principles of Software Development

201 Principles of Software Development features 201 short (typically one or two paragraphs) 
descriptions of 201 software development principles with a reference to a generally well-recognized 
expert source with further details on that principle. The text is comprehensive enough to understand
 the principle and the references to proven sources give the reader the ability to learn in more detail 
 how to apply the covered principle. This book not only helped me to solidify these principles in my
 own mind, but helped me to understand the breadth of materials available to the software developer.

During my software development career, I've repeatedly seen trends come and go. Sometimes I'll hear 
a relatively new developer talking about some "new" thing that is really just a reincarnation of the
 same idea in different form that its previous incarnations. 201 Principles of Software Development 
 helped me realize at a relatively early stage in my career that many concepts and principles 
 that were "new" to me, were really not new to the greater software development industry. Most 
 "innovative" concepts in our industry typically share common themes or are even grounded in 
 one or more of the principles covered in this book.

No comments:

Post a Comment