Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Channels ▼

Mike Riley

Dr. Dobb's Bloggers

Pragmatic Thinking and Learning Book Review

October 20, 2008

Dobbs Codetalk readers may already know of my fascination with the brain and its relationship to the application development process.  Long-time readers also know that I have been disappointed in previous attempts by technology book companies to publish meaningful titles on the subject.  Has Andy Hunt's Pragmatic Thinking and Learning: Refactor Your Wetware alleviated that condition?  Read on to find out.

Like most developers, I recognize the critical integration of intellect on the elegance of writing code.  Considering the source of this intellect, it's no wonder that many programmers recursively think about their own thoughts.  One developer who has gained fame and credibility in sharing his pragmatic development experiences is Andy Hunt, one of the Pragmatic Programmers.  After writing on subjects of coding and the practical business aspects of creating software, he has compiled his own assessment of the brain-code connection in his latest book, Pragmatic Thinking and Learning: Refactor Your Wetware.

I must admit, I was skeptical and not all that enthusiastic about the book after having been let down by .NET programmer Matthew MacDonald's Your Brain: The Missing Manual.  Nevertheless, I gave Andy's book a spin based on his past work coupled with the fact that my own questions about the brain and its relationship to my profession have yet to be satisfactorily addressed.  I am happy to report that Andy's book finally gets close to hitting that target.  While it's not perfect (and to be fair, no book on the brain can be until human beings attain full understanding of the mind), the book did provide more insights than any other on this integrated subject.  More importantly, these ideas can be put into real-world use such that readers can begin to reap the benefits of Andy's suggested practices.

The book begins with the recognition that it is written by a programmer for other programmers in an effort to improve the understanding of the mental activity that goes into the investment of computer programming.  Metaphors using the computer abound throughout the book, even though many times Andy points out that these machine-based comparisons to the brain are wrong.  That was refreshing.  In the second chapter, Andy introduces the Dreyfus Model of skill acquisition, based on an earlier study of challenges facing the nursing profession.  Parallels between nursing and programming practices are made to strengthen the finding's relevance to the book's audience.  After this link is established, the Dreyfus results are frequently referred to throughout the book.

In the second chapter, Andy describes the distinguishing characteristics of a programming novice versus an expert.  The most obvious identifier of an expert is also the most difficult to explain, that being the level of intuition an expert exhibits in their actions and decisions.  Dr. Dobbs readers have no doubt experienced moments of visceral clarity that just "feel right" even though such reasoning can't be granularly explaied.  As I read this chapter and related to such episodes, I hoped to discover a quantitative assessment that would help me identify what measurable level I had attained.  No such assessment exists in the book.  In fact, no such intellectual measurement tools are offered.  This may be partly due to the intellectual property encumbrances of reprinting such evaluations and may also be due to the author's decision to focus on action items that readers should practice rather than assessment items that readers may unfairly rate themselves with.

Chapter 3 examines the heavily treaded territory of left/right brain thinking, though fortunately Andy doesn't fall into the tedious, over-saturated, stereotypical discussion of this topic.  Instead, his explanation is more aligned with the recognition of the interaction between each part rather than segmenting the brain in the narrow-minded prejudices of left brain/right brain activity.  Reading Andy's description reminded me of author Jill Bolte Taylor's book, My Stroke of Insight: A Brain Scientist's Personal Journey in which the author describes her own stroke and the loss of left brain functionality, allowing her right brain to overtake her thoughts and perceptions of the world.  Chapter 4 presents some ideas and exercises to help typically left-brain dominant engineers allow their right brain expressions pervade their work.

Chapter 5 has the enticing title of Debug Your Mind.  While conditional breaks and stack trace tools for the brain might make life easier for the programmer seeking to achieve this goal, Andy instead emphasizes the need to let go of preconceived notions, biases and extremes.  It was also in this chapter that I learned, according to Andy's classification research, that I am not part of the tail end of the Baby Boomer generation (which other books peg at the year 1965, not 1961 as Andy's book suggests) but rather a very early Generation X'er.  After reading the description of the six 20th/21st Century generational types, I must admit my thinking does align more closely with an X'er than a Boomer.

Chapter 6 introduces but does not administer personality assessment tools such as the Meyers-Briggs, SMART (Specific, Measurable, Achievable, Relevant, Time-boxed) goals, mind mapping and the Pragmatic Programmer's own PIP (Pragmatic Investment Plan).  I was already quite familiar with the Meyers-Briggs (I'm an INTJ) and SMART principle but not PIP.  Unfortunately, there wasn't enough detail on PIP to determine if it would be of any use beyond the other tools presented in the chapter.  

The last three chapters discuss the idea of allowing programming to be fun again by allowing playful exploration and games into the thinking process (ex: using Lego blocks to help build team interaction and non-threatening idea sharing), organizing thoughts with Wiki's, efficient note taking and capturing those 'lightning in a bottle' flashes of insight and ideas.  Andy also advocates David Allen's Getting Things Done (GTD) mantra of minimizing email distractions, bouncing icons and cluttered desktops.  The book closes with a chapter entitled "Beyond Expertise", providing next steps and encouragement for the reader to think about thought and improve their mental efficiencies as they apply toward the programming profession.

This is not a neurophysiology book for programmers but rather a review of related cognitive literature and studies that apply to our wetware's application development practice.  While no mind-blowing revelations were made in the book, it was a short and engaging enough read that made it difficult to stop; I stayed up way past my normal bedtime finishing the book as a consequence of Andy's engaging writing and approach to this fascinating topic.  The tear-out card in the back of the book that consolidates 48 of Andy's main tips provides an excellent prompt to keep the books ideas in mind well after the last page turns.  For those developers seeking a different kind of programming optimization book, Pragmatic Thinking and Learning is a healthy augmentation to the typical technical reference book diet.

Title: Pragmatic Thinking and Learning: Refactor Your "Wetware"
Author: Andy Hunt
Price: $34.95

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.