<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AgileKiwi &#187; Understanding ourselves</title>
	<atom:link href="http://www.agilekiwi.com/category/peopleskills/understanding-ourselves/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilekiwi.com</link>
	<description>The neglected essentials of software development</description>
	<lastBuildDate>Wed, 15 Feb 2012 07:57:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Expertise versus Pair Programming</title>
		<link>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/</link>
		<comments>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 19:00:04 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Understanding ourselves]]></category>
		<category><![CDATA[expertise]]></category>
		<category><![CDATA[pair programming]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=688</guid>
		<description><![CDATA[<p>Let’s start this post with a thought experiment.  Not in software development, but in playing chess.</p>
<p>Imagine two novice chess players, working as a team. (We’ll assume their opponent is a computer, so it can’t overhear them talk.)  Our two novices will benefit greatly from their collaboration.  They’ll discuss all&#8230; <a href="http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>Let’s start this post with a thought experiment.  Not in software development, but in playing chess.</p>
<p>Imagine two novice chess players, working as a team. (We’ll assume their opponent is a computer, so it can’t overhear them talk.)  Our two novices will benefit greatly from their collaboration.  They’ll discuss all their thinking – everything from possible moves, to correcting each others mistakes, to “can you remind me how a knight moves?”.  Working together like this they will make fewer mistakes, and generate better moves than each would have done alone.</p>
<p>But what if we paired two chess masters?  <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">Scientific research proves</a> that the thinking of experts is different. Much of it happens as automatic pattern recognition rather than conscious reasoning.  When a chess master looks at a chess position, (good) possible moves spring to mind immediately.  As described in my previous post, these “candidate moves” are generated directly by the brain’s underlying neural network.  Neural networks can’t explain their own reasoning, so the master doesn’t consciously know <em>why</em> those moves came to mind.  Of course, the moves are indeed based on the master’s long experience, but the mapping from prior experience to current ideas is not open to inspection by the conscious mind.</p>
<p><span id="more-688"></span></p>
<p>So how will our two chess masters collaborate?  Neither can explain to the other <em>why</em> they thought of particular moves – because the conscious, effortful part of the mind doesn’t actually <em>know</em>. So what will their conversation consist of?</p>
<ul>
<li>They <strong>can’t discuss the justification</strong> for their proposed moves, because as we just saw, they don’t <em>know</em> the justification.  (Several writers, including Nobel-winner Daniel Kahneman, point out that if you ask an expert, “Why did you suggest that?”, their effortful mind will indeed come up with a justification of the idea, but the justification is produced <em>after the fact</em>. It doesn’t necessarily match the invisible reasoning that originally <em>created</em> the idea.  In fact, I’d suggest that since the invisible reasoning consisted of pattern matching in a neural network, any attempt at a logical sequential description would be incomplete at best.)</li>
<li>Instead, imagine that they pool their sets of candidate moves, and then discuss <em>which</em> of those moves to actually play.  This approach makes sense because, as we saw in the <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">previous post</a>, selecting <em>one</em> of the candidate moves requires effortful thought.  And effortful thoughts can be perceived and described by the thinker.  So let’s assume our two chess masters try to share these thoughts.  If they do, I believe they’ll run into another problem: <strong>verbalizing the thought process slows it down – a lot</strong>.  A master thinks through many possibilities: What would happen if I play this move?  How would my opponent probably respond?  How would I respond to that?  A master can process these “what ifs” relatively quickly.  Not nearly as quickly as the automatic thinking that produced the initial set of candidate moves, but much, much faster than the rate of human speech.   To share thoughts verbally, the master must slow down to speaking speed.  In summary, although it’s possible to verbalize these thoughts, there’s a high (performance) cost in doing so.</li>
</ul>
<h2>Pair Programming</h2>
<p>Now let’s consider the analogy to pair programming. Novice programmers don’t yet make significant used of automatic pattern recognition, instead they rely more heavily on effortful thought.   Therefore their thoughts are open to introspection and can be verbally shared.  Experts, on the other hand, make significant use of the “automatic” part of their mind.  So most of their thought processes are not open to conscious introspection, and the remainder are so fast that verbalization carries a huge performance cost.</p>
<p>I think this may explain the confusion and frustration that some experienced programmers, including myself, feel when we’re asked to pair.  We can’t see how to map our automatic thought processes into the driver/navigator model of pair programming.  Furthermore we probably can’t explain what the problem is – at least, I know I couldn’t, until I read <a href="http://www.amazon.com/Thinking-Fast-and-Slow-ebook/dp/B005MJFA2W/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ">Kahneman’s effortful/automatic description of the brain</a>.  His book points out that because automatic thought is, well, <em>automatic</em>, we lack awareness of its role in our thinking.  Since we lack awareness, we struggle to explain the difficulty we have with pairing. I hope that greater awareness of Kahneman’s work will give us a suitable vocabulary to describe the problem.</p>
<p>I also hope to stimulate discussion.  The thought processes of an expert, which elegantly combine the automatic with the logical, are extremely efficient. I believe pairing undermines this efficiency – by leading coders to create after-the-fact justifications of their automatic intuitions, and forcing them to unpack their conscious thoughts into spoken language.  I suspect paired experts may even find themselves forced back into novice-like patterns of thought.</p>
<p>What do you think, does pairing prevent experts from performing at their best?</p>
<p><strong>Update, 31 Jan:</strong> I should clarify what I mean by &#8220;expert&#8221;.  I use the term in the sense used by Daniel Kanheman, Anders Ericsson and other researches into expertise.  But you might have seem some pair programming studies use the term “expert” in a different way, particularly those studies where all test subjects were students.  In those studies the word “expert” simply means “good performer” – a student who gets unusually good grades.  These cannot be experts in the Kahneman/Ericsson sense of term.  Developing that kind of expertise takes many years, far longer than any university degree.  Furthermore, Kahneman/Ericsson expertise is not simply about <em>possessing</em> knowledge, in the manner of an A student; instead it is about a mode of thought in which much of the knowledge is possessed <em>and processed</em> unconsciously, through <a title="Becoming an Expert" href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">automatic pattern-recognition</a> honed by long experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Becoming an Expert</title>
		<link>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/</link>
		<comments>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 05:03:38 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Understanding ourselves]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=583</guid>
		<description><![CDATA[<p>Imagine looking at a dog.&#160; You instantly know that it is, indeed, a dog.&#160; That’s an incredible feat of pattern recognition, performed almost instantly and without any conscious effort. </p>
<p>Is it really incredible?&#160; Yes.&#160; It just seems easy because you’ve been doing it effortlessly since about age three.&#160; To&#8230; <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>Imagine looking at a dog.&#160; You instantly know that it is, indeed, a dog.&#160; That’s an incredible feat of pattern recognition, performed almost instantly and without any conscious effort. </p>
<p>Is it really incredible?&#160; Yes.&#160; It just seems easy because you’ve been doing it effortlessly since about age three.&#160; To remind yourself how difficult it actually is, imagine designing an algorithm to recognise dogs.&#160; Exactly what would be the rules for distinguishing a small small dog from a large cat?&#160; How would you define the category “dog” such that it included Chihuahuas and Great Danes,&#160; but not foxes and wolves? </p>
<p>Nobel prize winner Daniel Kahneman uses the dog example to explain the <a href="http://www.amazon.com/Thinking-Fast-and-Slow-ebook/dp/B005MJFA2W/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ">two ways humans think</a>.&#160; One way is <strong>effortful thought </strong>– what we do when consciously thinking about something.&#160; The other doesn’t even feel like thinking it all.&#160; It’s just effortless <strong>automatic perception</strong> – like seeing a dog.&#160; Much of our brain’s activity is of the automatic kind.&#160; Kahneman gives several examples to show the difference:</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="300"><strong>Automatic</strong></td>
<td valign="top" width="300"><strong>Effortful</strong></td>
</tr>
<tr>
<td valign="top" width="300">Detect that one object is more distant than another</td>
<td valign="top" width="300">Focus on the voice of a particular person in a crowded and noisy room</td>
</tr>
<tr>
<td valign="top" width="300">Detect hostility in a voice</td>
<td valign="top" width="300">Tell someone your phone number</td>
</tr>
<tr>
<td valign="top" width="300">Answer 2 + 2 = ?</td>
<td valign="top" width="300">Answer 17 x 24 = ?</td>
</tr>
<tr>
<td valign="top" width="300">Drive a car on a empty road (unless you are just learning to drive, in which case this belongs in the “effortful” column)</td>
<td valign="top" width="300">Check the validity of a logical argument</td>
</tr>
</tbody>
</table>
<h2>Expertise</h2>
<p>What does this have to do with expertise?&#160; The answer is simply this: expertise involves significant “automatic” thought.&#160; For example, you happen to be an expert in recognising dogs.&#160; You accomplish that task with no conscious effort whatsoever. </p>
<p>The same applies to activities that we normally associate with “expertise”.&#160; Chess masters are a compelling example.&#160; When a chess master looks at a board, several strong moves immediately spring to mind.&#160; Just like you effortlessly “see” that an animal is a dog, a chess master effortlessly “sees” which moves make sense.&#160; This set of “candidate moves” is generated automatically, without conscious effort.&#160; Only <em>after</em> the moves spring to mind does the master actually start consciously thinking about them – to decide <em>which</em> of the candidate moves is <em>best</em>.</p>
<p>As Kahneman writes:</p>
<blockquote><p>[Experts’] intuitive judgements come to mind with the same immediacy as [a child’s] “doggie!&quot;</p>
</blockquote>
<h2>An Analogy</h2>
<p>It may seem hard to believe, that many of our most difficult mental tasks are performed instantly and unconsciously.&#160; As Kahneman points out, their very automatic-ness leads us to overlook their importance.&#160; </p>
<p>When I was reading his book, I found it helpful to recall the university paper I took in artificial intelligence.&#160; There we learned about artificial neural networks. Neural networks implement an approach to computation which is inspired by the structure of the human brain. They are very fast and effective “pattern recognisers” but, having recognised an input as matching a particular pattern, they are completely unable to tell you <em>why</em> it matched the pattern. I.e. they can’t explain their “reasoning”. This exactly matches Kahneman’s description of our automatic thought – it gives you an impression/hunch very quickly, but is unable to tell you why. So:</p>
<ul>
<li>I imagined the brain’s underlying hardware as a neural network – quick to recognise patterns, but unable to explain its logic.&#160; It is here that our automatic thinking takes place.&#160; So it’s easy to see why our automatic thinking is so fast – neural networks are naturally fast pattern recognisers, and ours is implemented directly in “hardware”.&#160; </li>
<li>I imagined effortful thought as a simulation running on top of the underlying hardware.&#160; Rather like a <a href="http://en.wikipedia.org/wiki/Virtual_machine">virtual machine</a>.&#160; Inside the virtual machine, thinking is sequential and logical.&#160; But, because the virtual machine is just an <em>emulation</em>, it runs slowly and has limited working memory.&#160; (Question: does this imply our effortful thoughts aren’t “real”?&#160; No. Just that they have a complicated origin, but our automatic thoughts are not subject to the same performance limitations.) </li>
</ul>
<p><a href="http://www.agilekiwi.com/wp-content/uploads/2012/01/Simulated-System2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Simulated System2" border="0" alt="Simulated System2" src="http://www.agilekiwi.com/wp-content/uploads/2012/01/Simulated-System2_thumb.png" width="493" height="442" /></a></p>
<p>&#160;</p>
<p>I wouldn’t dare to suggest that this model is accurate in terms of the underlying biology, but as a software engineer I found it helpful in understanding Kahneman’s work.</p>
<h2>Developing Expertise</h2>
<p>Consider two chess players, a novice and a master.&#160; The novice relies almost entirely on effortful thought.&#160; “How does a knight move?”, “Let me think what would happen if I moved my rook to here…”.&#160; But the master makes heavy use of automatic thought.&#160; The master’s automatic mind takes care of most of the details that the novice struggles with, leaving the master’s effortful mind free to add value where it is most needed.&#160; Consequently the master can produce better decisions in less time.</p>
<p>But how does the novice <em>become</em> a master?&#160; How does someone using effortful thought slowly transition to creating (good-quality) automatic thoughts?&#160; Through practice.&#160; With enough time, and enough examples, your underlying neural network trains itself to recognise the patterns.</p>
<p>Three sources have influenced my thinking about this kind of practice:</p>
<ul>
<li>James Bach’s <a href="http://www.satisfice.com/presentations/rigor.pdf">Myths of Rigour</a> presentation (which to me, could equally well have been entitled “What is learning?”).&#160; [<a href="http://www.pnsqc.org/past-conferences/2009-conference/invited-speakers">Video here</a>]. </li>
<li>Anders Ericsson’s work on <a href="http://www.freakonomics.com/2006/05/07/freakonomics-in-the-times-magazine-a-star-is-made/">deliberate practice</a> </li>
<li>Alistair Cockburn’s concept of <a href="http://alistair.cockburn.us/Shu+Ha+Ri">Shu-Ha-Ri</a>.&#160; To join the dot’s between Shu-Ha-Ri and Kahneman’s work, I’d suggest that the Shu-Ha-Ri progression equates to the same progression described above: from a novice who uses only effortful thought, to an expert who uses a highly efficient blend of automatic and effortful thought.&#160;&#160; </li>
</ul>
<h2>A Software Example</h2>
<p>I recently noticed how various people debug the large software solution that I’ve been working on for some years.&#160; When I need to debug it myself, I don’t get “stuck”. I might not know the cause of the problem, but I always have an idea on what to do next – something that will take me one step closer to finding the problem. Just like experienced players instantly “see” good moves in a chess game; I tend to “see” good moves in the debugging process. A series of such moves, possibly with some backtracking, eventually leads to a solution.&#160; But I’ve noticed junior developers are much more likely to get stuck – when faced with a problem they sometimes have trouble generating the “next move”.&#160;&#160; I’ve also noticed that although I generate moves more successfully than juniors, I seem to expend <em>less</em> conscious effort in doing so.</p>
<p>Of course, this is no excuse for me to take an ego trip – after about 7000 hours with this code base, and a decade’s experience on other systems before it, I darn well <em>should</em> have automatic expertise by now!&#160; Junior programmers, or senior ones with less experience of the system at hand, have no choice but to generate fewer moves automatically and fill the gaps with effortful thought.&#160; Over time, their balance will gradually shift from effortful to automatic.</p>
<h2>Implications</h2>
<p>The science of expertise has many implications for how we recruit, train and deploy software engineers.&#160; In a future post, I intend to explore the implications for pair programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

