If the author wasn't Gerald Weinberg (GW) I may have passed on this book based on the title, thinking it was about how non-programmers can understand programmers. But the book is really about how to be a successful programmer.
I enjoyed the book. This is true for almost all of the books I've read by GW - seems I either enjoy them or don't understand them.
This book I definitely understood. A lot of the material hit home and caused introspection. Although the book was published in 1988 its concepts are timeless. In fact, as I read the book I recognized themes that I've seen explored in contemporary books, such as code quality, productivity measurement and constant learning.
The book presents the following definitions and examines them in the context of steadily improving performance:
Professional - Having great skill or experience in a particular field of activity
Programmer - A person who solves problems for other people
I was able to relate to many of the book's insights - for instance:
- Not all programmers qualify as professional, but few can tell the difference
- Without professional programmers installations tend to drift into mediocrity
- Writing code is not always recognized as a separate skill, talent or profession
- In ill-defined situations programmers will define the problem they'd like to solve
- Non change is the rule, and change is the exception
- The inability to change eventually leads to dramatic or catastrophic change
- An average programmer's needs are: belonging, esteem and self-actualization
- Some programmers are too eager to code and too reluctant to think
- A programmer may prove that a program does what he thinks it should do, but he cannot prove that what he thinks it should do is what the user wants it to do
I especially liked the book's fables. My favorite is The Butterfly and the Buttercup which ends with the following moral:
It's well nigh impossible for those who are motivated by productivity to understand those who are motivated by quality - and vice versa.
There are many amusing sections. For example, Weinberg's Precious Programming Principles. Some that made me chuckle:
- Standards aren't standard
- An ounce of prevention is worth a pound of cure, but management won't pay a penny for it
- Specifications, design and coding can be done at any speed - only debugging takes time
The takeaway for me was the Professional Expiration Test: When learning's finished, you're finished. To that end, I'll continue to read GW's books.