June 20, 2012 Leave a comment
June 12, 2012 2 Comments
Well over half of the time you spend working on a project (on the order of 70 per cent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you – if it wrote 100 per cent of the code, wrote 100 per cent of the documentation, did 100 per cent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers – the best you could hope for would be a 30 per cent improvement in productivity. In order to do better than that, you have to change the way you think.
This quote is about 13 years old now. You can tell it’s old because of the CD-ROM reference. Seriously, when was the last time…? But that’s about the only thing that dates it. Other than that, it’s as true today as it was then and I suspect it applies to many areas or disciplines besides software development. It’s just particularly pertinent to software development because it’s about productivity, one of the grails of our craft.
There is no shortage of software tools today. A new one seems to appear every week. Nor is there a shortage of column inches extolling the virtues or instructing in the use of this or that tool. By comparison there seems very little guidance on the use of the one tool that (one hopes) every developer uses, all day, every day, regardless of which language or platform religion they adhere to.
There’s a tacit assumption that we must be good at thinking. That because we *are* our minds we must know all there is to know about them and be good at using them. How could we not be ?
The closing comment in Fred Brooks’ quote above has often made me wonder how you go about changing the way you think ? How many different ways of thinking are there ? We are often told to “think laterally” or “think outside the box” but what does that actually mean, technically ? I mean, how can I tell if my thoughts are lateral or whether they are inside or outside the box? And, if they’re not the right thoughts, what mental buttons do I push, what mental map or set of instructions do I follow to get them there ? Is there some special Nam-Shub of Enki I can incant to get me thinking differently ?
For me, thinking about anything in depth, means constructing a mental model. I need something that is relatively simple and coarse-grained but that covers thinking from the most whimsical fancies to life-and-death decisions. I’m also a very visual thinker so it had better look pretty too.
There it is. Can you see where I am now ? That’s right, I’m up there in the cyan corner being all Conceptual. I’ve been trying to apply this model to the way I think in the sense of understanding at any given moment where I am. If the situation requires some “different thinking” then at least I know my current position and have some bearings of where else I might want to go.
I’ve also tried to work out what my relative strengths, weaknesses and preferences are and look for patterns that might indicate imbalance or the embedded routines that might indicate mental ruts (see Cognitive Bias). There I go again, in the cyan corner.
The red, critical segment is the real-time, here and now “me”, observing the stream of reality and working in a continuous loop of evaluation in the eternal search for the answer to the question, “What should I do next?” Always evaluating, balancing and judging. Working anti-clockwise we find the forward-looking strategist and prioritiser and then the backward and inward looking collator and categoriser of information. He has a million jigsaws on the go and as many mental models that need constantly refining to take account of new information and ideas. Next the outward looking innovator who works with pure thought-stuff and finally the raw nerve of intuition.
So, what have I learned about my thinking from thinking about thinking ?
1) When consciously applying myself to a problem, i.e. deliberately thinking, I tend to go Conceptual first and then work my way round clockwise. My first question, right after “What is the problem?” is “What type of problem is this?” This generally get’s me into a position to start moving clockwise and planning a practical solution. If not, I may have to go anti-clockwise to Innovative. This is where I think we find “lateral” and “out of the box”. I go in search of ideas or inspiration.
2) You can never go to blue (Intuitive), or at least I can’t. It has to come to you. This is the stuff that seeps through in your subconscious. This is what is at work when you decide to “sleep on it”. It may also tap you on the shoulder and take you by surprise at any moment when you are somewhere else entirely. Although I *do* Innovative, Conceptual, Practical and Critical, I *am* Intuitive and I rely on it a lot.
3) I am happiest within the processes of Innovative and Conceptual. These are my playgrounds. However, I am most satisfied by the results or output of Practical and Critical. Practical and Critical are much harder work but they are the most satisfying and rewarding. They mean a job well done.
4) Look at this “thought path” :
You can probably tell what that is straightaway…almost without thinking 😉 It’s a snap decision, a knee-jerk reaction an impulse. These are risky because they can easily fall foul of the influence of our prejudices but they can also be quite valid and useful provided we don’t try to kid ourselves about what we just did. Often, the initial hop from instinct to decision is followed up by a quick visit to reasoning. This is called rationalisation or the “story-telling reflex”, whereby we either don’t acknowledge or don’t want to admit the sneaky short cut we just took to our decision so we go back and retrospectively apply reasoning to it to make it look legit. Some great examples of this (both the risky and the useful) are described in Malcolm Gladwell’s book entitled “Blink : The Power of Thinking Without Thinking”.
5) While I was looking for his “pure thought-stuff” quote, a final thing occurred to me when I re-read what Fred Brooks’ wrote about why programming is fun. The Intuitive, Innovative, Conceptual, Practical and Critical thinkers in me are all amply catered for in his marvellous description.
Intuitive : “the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.”
Innovative : “the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.”
Conceptual : “the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning.”
Practical : “the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful.”
Critical : “Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separately from the construct itself.”