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