<?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>Phil Leggetter - Software Consultant &#187; problem solving</title>
	<atom:link href="http://www.leggetter.co.uk/tag/problem-solving/feed" rel="self" type="application/rss+xml" />
	<link>http://www.leggetter.co.uk</link>
	<description>Real-time web and social media software consultant</description>
	<lastBuildDate>Thu, 09 Sep 2010 14:17:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>How I approach problem solving in code?</title>
		<link>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html</link>
		<comments>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:44:57 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[problem solving]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=382</guid>
		<description><![CDATA[Recently I was posed the following question:
Write a p [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html' rel='bookmark' title='Permanent Link: Problem solving lessons relearnt'>Problem solving lessons relearnt</a></li>
<li><a href='http://www.leggetter.co.uk/2010/07/04/basic-authentication-against-the-superfeedr-http-pubsubhubbub-api-using-a-net-httpwebrequest.html' rel='bookmark' title='Permanent Link: Basic Authentication against the Superfeedr HTTP PubSubHubbub API using a .NET HttpWebRequest'>Basic Authentication against the Superfeedr HTTP PubSubHubbub API using a .NET HttpWebRequest</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Recently I was posed the following question:</p>
<blockquote><p>Write a piece of code that prints all odd integer numbers between 1 and 99</p></blockquote>
<p>This really isn&#8217;t a difficult question but it still requires some thought. When I&#8217;m posed with any question I like to break things down into their constituent parts.</p>
<p>Here&#8217;s the process I went through:</p>
<p>Okay, so I&#8217;ll define two variables for a start and end value and there&#8217;s going to have to be a loop.</p>
<pre class="brush: csharp;">int startValue = 1;
int endValue = 99;
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   // work out if &quot;i&quot; is an odd number
}</pre>
<p>Now, for the odd number detection. And&#8230; after a few umms and errrs &#8230; I&#8217;m going to have to mod 2 (<code>%2</code>) the current value of <code>i</code> to work out if the value is odd. More &#8230; umms and errs. Okay, I&#8217;ve finally worked out that if something mod 2 is not equal to 0 it&#8217;s clearly an odd number. This took me longer than it should have but never mind. Once I&#8217;ve detected if <code>i</code> is an odd number I&#8217;ll then put the odd number into a list for use later.</p>
<pre class="brush: csharp;">
int startValue = 1;
int endValue = 99;
IList&lt;int&gt; oddValues = new List&amp;lt;int&amp;gt;();
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   if(i%2 != 0)
   {
      oddValues.Add(i);
   }
}
</pre>
<p>Those of you that are good at these little puzzles, or just think this is way too easy, might already be screaming at me about one of the following:</p>
<ul>
<li>Why are you using a <code>IList<int></code>, why don&#8217;t you just print the value?</li>
<li>Odd numbers are always 2 apart so why aren&#8217;t you just increment <code>i</code> by 2 using <code>i+=2</code>?</li>
</ul>
<p><span id="more-382"></span><br />
I admit it,  I missed the second point and that is a bit silly of me. However, what I have starting doing is <a  title="separation of concerns" href="http://en.wikipedia.org/wiki/Separation_of_concerns">separating the concerns</a> of the piece of code. The code does two things; it detects the odd number and it prints the odd numbers. Those are two very distinct things. So, my code now looks like this:</p>
<pre class="brush: csharp;">
int startValue = 1;
int endValue = 99;
IList&lt;int&gt; oddNumbers = new List&amp;lt;int&amp;gt;();
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   if(i%2 != 0)
   {
      oddNumbers.Add(i);
   }
}

string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
Console.WriteLine(oddNumbersList );
</pre>
<p>I&#8217;m now going to refactor this further so I&#8217;ll put the two different pieces of functionality into different methods. I&#8217;ll rename the <code>i</code>, <code>startValue</code> and <code>endValue</code> variables to be something a bit more useful; say <code>numberToCheck</code>, <code>startNumber</code> and <code>endNumber</code>. I&#8217;ll also create another helper for the odd number checking named <code>IsOddNumber</code>:</p>
<pre class="brush: csharp;">
IList&lt;int&gt; GetOddNumbersBetween(int startNumber, int endNumber)
{
   IList oddValues = new List&amp;lt;int&amp;gt;();
   for(int numberToCheck = startNumber;
        numberToCheck &amp;lt;= endNumber;
        numberToCheck++)
   {
      if(IsOddNumber(numberToCheck) == true)
      {
         oddValues.Add(numberToChecki);
      }
   }
   return oddValues;
}

bool IsOddNumber(int number)
{
   return (number % 2 == 1);
}

void PrintOddNumbersBetween(int startNumber, int endNumber)
{
   IList&lt;int&gt; oddNumbers = GetOddNumbersBetween(startNumber, endNumber);
   string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
   Console.WriteLine(oddNumbersList);
}
</pre>
<p>Let&#8217;s say I then notice the second point you&#8217;ve been screaming at me about (Odd numbers are always 2 apart so why aren&#8217;t you just increment i by 2 using i+=2) that I mentioned above? In practice I should notice this sort of thing either when I give the code a complete review, or one of my peers spots it. When I see this problem I decide to update the <code>for</code> loop, as noted, and I then see that I possibly don&#8217;t need the <code>if(IsOddNumber(i) == true)</code> statement. Although it would pain me to do this, since it&#8217;s a lovely little method, I would need to consider deleting it. But then it strikes me, I&#8217;m no longer just solving the &#8220;odd numbers between 1 and 99 problem&#8221; so I can&#8217;t just assume that the <code>startNumber</code> is going to be an odd number. I need to make sure that it&#8217;s an odd number so I&#8217;ll create another small utility method for that called <code>EnsureOddNumber</code> which will check if the value passed is an odd number, and if not return the next odd number (I&#8217;d like to rethink the name of this method).</p>
<pre class="brush: csharp;">
IList&lt;int&gt; GetOddNumbersBetween(int startNumber, int endNumber)
{
   startNumber = EnsureOddNumber(startNumber);

   IList&lt;int&gt; oddValues = new List&amp;lt;int&amp;gt;();
   for(int numberToCheck = startNumber;
        numberToCheck &amp;lt;= endNumber;
        numberToCheck+=2)
   {
      oddValues.Add(numberToCheck);
   }
   return oddValues;
}

int EnsureOddNumber(int number)
{
   if( IsOddNumber(startNumber) == false )
   {
      startNumber++;
   }
   return startNumber;
}

bool IsOddNumber(int number)
{
   return (number % 2 == 1);
}

void PrintOddNumbersBetween(int startNumber, int endNumber)
{
   IList&lt;int&gt; oddNumbers = GetOddNumbersBetween(startNumber, endNumber);
   string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
   Console.WriteLine(oddNumbersList);
}
</pre>
<p>Now, when I look at this code I get a warm feeling because I feel that it solves the problem, it&#8217;s well engineered, the concerns are separated and the code is completely <a  href="http://en.wikipedia.org/wiki/Self-documenting">self documenting</a>.</p>
<p>There are a few comments that people may have here:</p>
<blockquote><p>The question asked specifically to print odd values between 1 and 99 and you&#8217;ve done more than was required.</p></blockquote>
<p>Although my answer does satisfy the original question have I over engineered things? The question does specifically ask us to print odd values between 1 and 99 so maybe I should have created a function that just satisfied that requirement.</p>
<pre class="brush: csharp;">
void PrintOddNumbersBetween1And99()
{
   for(int i = 1;
        i &amp;lt;= 99;
        i+=2)
   {
      Console.WriteLine(i + &quot; &quot;);
   }
}
</pre>
<p>And I&#8217;d have to admit that this very short piece of code exactly answers the question. But I&#8217;d also argue that there is very little chance of this code being reused. Don&#8217;t get me wrong, you definitely shouldn&#8217;t over engineer things but there should be some scope for <a  href="http://en.wikipedia.org/wiki/Code_reuse">code reuse</a>.</p>
<blockquote><p>For such a simple problem you&#8217;ve over engineered this.</p></blockquote>
<p>or</p>
<blockquote><p>There&#8217;s a better solutions that that&#8230; it&#8217;s not efficient</p></blockquote>
<p>Is creating four methods over engieering? Does my code require any comments to provide documentation? There may well be a more performant solution to this, but that&#8217;s not my point. My point is the way of approaching a question: the thought processes involved in understanding the problem and breaking it down to <a  href="http://en.wikipedia.org/wiki/Separation_of_concerns">separate concerns</a>, making it easy to read, <a  href="http://en.wikipedia.org/wiki/Code_reuse">reusable</a> and <a  href="http://en.wikipedia.org/wiki/Self-documenting">self documenting</a>. If the code that worked out the odd numbers is not efficient it could easily be changed in one place without impacting the interface, the other methods within the class, or the overall functionality.</p>
<p>Some people may jump to the simplest solution but I think the way i&#8217;ve described approaching and solving the problem demonstrates good practice. If I&#8217;m completely honest I would normally approach the development of something such as this by writing a test case first since I practice <a  href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> but that can wait for another blog post.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+How+I+approach+problem+solving+in+code%3F+@+http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F10%2F23%2Fhow-i-approach-problem-solving-in-code.html&amp;t=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html' rel='bookmark' title='Permanent Link: Problem solving lessons relearnt'>Problem solving lessons relearnt</a></li>
<li><a href='http://www.leggetter.co.uk/2010/07/04/basic-authentication-against-the-superfeedr-http-pubsubhubbub-api-using-a-net-httpwebrequest.html' rel='bookmark' title='Permanent Link: Basic Authentication against the Superfeedr HTTP PubSubHubbub API using a .NET HttpWebRequest'>Basic Authentication against the Superfeedr HTTP PubSubHubbub API using a .NET HttpWebRequest</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Problem solving lessons relearnt</title>
		<link>http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html</link>
		<comments>http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html#comments</comments>
		<pubDate>Wed, 10 Dec 2008 22:06:16 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[common sense]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Whinge]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=74</guid>
		<description><![CDATA[I've had one of those days. I set out early this mornin [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html' rel='bookmark' title='Permanent Link: How I approach problem solving in code?'>How I approach problem solving in code?</a></li>
<li><a href='http://www.leggetter.co.uk/2008/11/30/live-mesh-my-experience.html' rel='bookmark' title='Permanent Link: Live Mesh &#8211; my experience'>Live Mesh &#8211; my experience</a></li>
<li><a href='http://www.leggetter.co.uk/2005/06/30/a-career-using-javascript.html' rel='bookmark' title='Permanent Link: A Career Using JavaScript'>A Career Using JavaScript</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had one of those days. I set out early this morning aware that I had a tough task ahead of me at work. By the end of the day I&#8217;ve made very little progress.</p>
<p style="text-align: center;"><img class="size-medium wp-image-75 alignnone" title="Thinking..." src="http://www.leggetter.co.uk/wp-content/uploads/2008/12/chimpanzee_thinking_poster-234x300.jpg" alt="" width="234" height="300" /></p>
<p> </p>
<p> The silly thing is that I know exactly what mistakes I&#8217;ve made today that have hindered my progress and what&#8217;s worse, I&#8217;ve made the same mistakes before.</p>
<h2><span id="more-74"></span>Don&#8217;t spend too long in front of the computer</h2>
<p>This might sound a bit daft since you are supposed to be programming and you can&#8217;t do that unless you are in front of you computer. However, sometimes walking away from the computer for five minutes, and potentially taking your mind off your problem, can really help. Constantly thinking about the same thing can make you mind go stale. You need to freshen up, take some air, have a cup of tea or have a chat with somebody to take your mind off the problem just for a while. All of a sudden an alternative solution might pop into your head. This is just common sense.</p>
<p>My problem was one of threading, which can be tricky domain, and the mistake I made was that I thought the solution was so simple that I threw myself straight into code. After a couple of hours, and little progress, I took a step back and drew a simple diagram to make sure I understood the problem properly. Whilst the act of drawing the diagram didn&#8217;t shed any light on this occasion it took my eyes off the screen for a moment and changed the way I was thinking about things. In addition, the diagram will be handy when I speak to others about the problem&#8230;</p>
<h2>Do ask for help</h2>
<p>You can do this in a number of ways but the best way is to ask those around you. I&#8217;m lucky in that I work at a software house so there are loads of people that I can mosey on up to and chat with about a technical problem and even discuss some ins and outs of the technical detail. If you work on your own or don&#8217;t work with others that have a similar technical mindset you can see out help and advice from forums, Twitter, email and instant messenger to name but a few. Don&#8217;t wollow in the same problem for too long without looking for a fresh take on a problem. For me, this is one scenario where pair programming is really useful. By pairing on a problem you are less likely to run out of ideas because you will be constantly talking about the decisions you are making.</p>
<h2>Don&#8217;t decide it needs a complete re-write at 6pm</h2>
<p>This is exactly what I did today and I got myself into a right mood. What I generally mean is don&#8217;t make big decisions or changes right at the end of the day. I didn&#8217;t get out of work until around 8pm having only partially re-written the code I wanted to. Then, whilst sitting on the train having aired my brain a bit, I decided I didn&#8217;t actually need to re-write everything. There are still alternative solutions that I&#8217;ve not tried out yet. There are still other reasons why tests might be failing. I&#8217;ve not discussed the problem with others who may come up with a better solution.</p>
<h2>Do learn from you mistakes</h2>
<p>Today has been an example where it appears that I&#8217;ve not learnt from making similar mistakes in the past. But in actual fact I&#8217;ve probably corrected the mistakes a little quicker than I have previously so I have learnt, I just need to remind myself of these best practices more often. It&#8217;s not like putting your finger on the tail of a wasp &#8211; you may do it once, but never again. The problems I&#8217;ve described here sneak up on you and before you know it you have spent three hours staring at the same area of code without making any progress. Maybe if I then went out and harrassed a wasp I would learn faster?</p>
<p>One of the great things about working in software engineering is that you have the opportunity to be learning nearly all the time. You don&#8217;t just learn software engineering best practices but also common sense, problem solving best practices. Hopefully next time I&#8217;ll only waste a fraction of a day before I realise the error of my ways.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;title=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Problem+solving+lessons+relearnt+@+http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.leggetter.co.uk%2F2008%2F12%2F10%2Fproblem-solving-lessons-relearnt.html&amp;t=Problem+solving+lessons+relearnt" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html' rel='bookmark' title='Permanent Link: How I approach problem solving in code?'>How I approach problem solving in code?</a></li>
<li><a href='http://www.leggetter.co.uk/2008/11/30/live-mesh-my-experience.html' rel='bookmark' title='Permanent Link: Live Mesh &#8211; my experience'>Live Mesh &#8211; my experience</a></li>
<li><a href='http://www.leggetter.co.uk/2005/06/30/a-career-using-javascript.html' rel='bookmark' title='Permanent Link: A Career Using JavaScript'>A Career Using JavaScript</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
