<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>All Articles | implements Elegance { // Elwyn Malethan's Blog</title>
  <link rel="alternate" type="application/html" href="http://www.malethan.com/all.html" />
  <link rel="self" type="application/atom+xml" href="http://www.malethan.com/all.xml" />
  <subtitle>Mostly technical articles involving (hopefully) elegant problem solving using Java and/or Ruby</subtitle>
  <updated>2011-10-22T15:28:12Z</updated>
  <dc:creator>Elwyn Malethan</dc:creator>
  <dc:date>2011-10-22T15:28:12Z</dc:date>
  <entry>
    <title>Arduino Uno with pure C</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/arduino_uno_with_pure_c.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2011-10-22T15:28:12Z</updated>
    <published>2011-10-22T15:28:12Z</published>
    <summary type="html">&lt;p&gt;One of my primary objectives once I got my head around how to write code for my Uno using the Arduino &lt;span class="caps"&gt;IDE&lt;/span&gt; was to make this more releveant to my aim of re-learning C. Arduino &lt;span class="caps"&gt;IDE&lt;/span&gt; provides a layer of abstraction and avoids some of the boilerplate. But, unfortunately it&amp;#8216;s not real, pure C. There are a number of comprehensive guides as to how to go about programming an Arduino using pure C, &lt;span class="caps"&gt;GNU &lt;/span&gt;Make and &lt;span class="caps"&gt;AVR&lt;/span&gt; tools. I don&amp;#8216;t know much about any of the tools being used so best to follow the links and read up on them.&lt;/p&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://canthack.org/2010/12/programming-the-arduino-in-pure-c/" title=""&gt;Programming Arduino Uno in pure C&lt;/a&gt; (canthack.org)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://balau82.wordpress.com/2011/03/29/programming-arduino-uno-in-pure-c/" title=""&gt;Programming Arduino Uno in pure C&lt;/a&gt; (balau82.wordpress.com)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.quietless.com/kitchen/setting-up-xcode-to-compile-upload-to-an-arduino-atmega328-duemilanove/" title="Duemilanove"&gt;Setting up Xcode to Compile &amp;#38; Upload to an Arduino ATMega328 &lt;/a&gt; (www.quietless.com)&lt;/li&gt;

&lt;/ul&gt;
	&lt;p&gt;That last link has an XCode template linked to it, which sounded appealing to me, initially. However the Makefile did not work for me with my Uno. In fact, none of the pages linked had Makefiles that would work for me. For a good couple of hours it was very confusing while I trialled &amp;mdash; and mostly errored &amp;mdash; my way around my Makefile, trying to figure out what values and configurations were right for the Uno.&lt;/p&gt;

	&lt;p&gt;Many of the tutorials advocated downloading and installing &lt;span class="caps"&gt;AVR&lt;/span&gt; programming tools such as avr-gcc, avrdude etc. This was not as straight forward on my MacBook Pro as I had hoped (i.e. there was no &lt;a href="http://mxcl.github.com/homebrew/" title=""&gt;Homebrew&lt;/a&gt; package that contained them all). So I elected to use the &lt;span class="caps"&gt;AVR&lt;/span&gt; tools I found inside the Arduino &lt;span class="caps"&gt;IDE&lt;/span&gt; application.&lt;/p&gt;

	&lt;p&gt;Below is the Makefile that finally worked for me. Likely variables for other users are &lt;span class="caps"&gt;ARDUINO&lt;/span&gt;_HOME and &lt;span class="caps"&gt;PORT&lt;/span&gt;. The one value that had me stumped for ages was the &lt;span class="caps"&gt;BAUD&lt;/span&gt; value. When wrong, the &lt;span class="caps"&gt;RX LED&lt;/span&gt; on the Uno would light up briefly but the program would not be uploaded and the error message &lt;code&gt;avrdude: stk500_recv(): programmer is not responding&lt;/code&gt; would be displayed. Many others more familiar with this sort of thing would have spotted this earlier, I&amp;#8216;m sure.&lt;/p&gt;

	&lt;h3&gt;A working Makefile for Arduino Uno using &lt;span class="caps"&gt;AVR&lt;/span&gt; tools on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;.&lt;/h3&gt;

	&lt;p&gt;This is for the Blink example.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- xmlsnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="xml_plain"&gt;ARDUINO_HOME=/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;CC=$(ARDUINO_HOME)bin/avr-gcc&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;CFLAGS=-Wall&amp;nbsp;-Os&amp;nbsp;-DF_CPU=$(F_CPU)&amp;nbsp;-mmcu=$(MCU)&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;MCU=atmega168&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;F_CPU=16000000UL&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;OBJCOPY=$(ARDUINO_HOME)bin/avr-objcopy&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;BIN_FORMAT=ihex&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;PORT=/dev/tty.usbmodemfd131&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;BAUD=115200&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;PROTOCOL=stk500v1&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;PART=$(MCU)&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;AVRDUDE=$(ARDUINO_HOME)bin/avrdude&amp;nbsp;-C&amp;nbsp;$(ARDUINO_HOME)etc/avrdude.conf&amp;nbsp;-F&amp;nbsp;-V&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;RM=rm&amp;nbsp;-f&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;.PHONY:&amp;nbsp;all&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;all:&amp;nbsp;blink.hex&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;blink.hex:&amp;nbsp;blink.elf&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;blink.elf:&amp;nbsp;blink.s&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;blink.s:&amp;nbsp;blink.c&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;.PHONY:&amp;nbsp;clean&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;clean:&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(RM)&amp;nbsp;blink.elf&amp;nbsp;blink.hex&amp;nbsp;blink.s&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;.PHONY:&amp;nbsp;upload&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;upload:&amp;nbsp;blink.hex&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(AVRDUDE)&amp;nbsp;-c&amp;nbsp;$(PROTOCOL)&amp;nbsp;-p&amp;nbsp;$(PART)&amp;nbsp;-P&amp;nbsp;$(PORT)&amp;nbsp;-b&amp;nbsp;$(BAUD)&amp;nbsp;-U&amp;nbsp;flash:w:$&lt;/span&gt;&lt;span class="xml_tag_symbols"&gt;&amp;lt;&lt;/span&gt;&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;elf:&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;s&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;CC&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;CFLAGS&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;s&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;o&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;@&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;lt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;s:&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;c&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;CC&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;CFLAGS&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;S&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;o&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;@&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;lt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="xml_plain"&gt;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;hex:&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;%.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;elf&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;OBJCOPY&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;O&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;(&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;BIN_FORMAT&lt;/span&gt;&lt;span class="xml_plain"&gt;)&amp;nbsp;-&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;R&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;.&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;eeprom&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;&amp;lt;&amp;nbsp;&lt;/span&gt;&lt;span class="xml_attribute_name"&gt;$&lt;/span&gt;&lt;span class="xml_plain"&gt;@&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2011-10-22T15:28:12Z</dc:date>
  </entry>
  <entry>
    <title>Irrigarduino: Learning electronics and re-learning C</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/irrigarduino.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2011-10-22T14:53:56Z</updated>
    <published>2011-10-22T14:53:56Z</published>
    <summary type="html">&lt;p&gt;This page and the series of pages linked from it are intended as a personal journal to track my progress in working on a pet project of mine. The project is to automate the irrigation of my garden using a home made moisture sensor, some basic electronics, an Arduino Uno board and some C.&lt;/p&gt;

	&lt;p&gt;I initially started this project, not only because I wanted to automate the irrigation of my garden, but also as a vehicle for re-learning C. I studied C in university over 10 years ago. My university final year project &amp;mdash;  a dairy herd management application &amp;mdash; I even wrote in C++. So I was &amp;mdash; at one time &amp;mdash; familiar with the two languages.&lt;/p&gt;

	&lt;p&gt;However, since then I&amp;#8216;ve worked with comparatively benign, forgiving abstraction layers between me and the machine.&lt;/p&gt;

	&lt;p&gt;As it transpires, the learning curve of the necessary electronics is far greater for me than that of relearning C. This, despite the relative trivialness of the circuitry required for this project.&lt;/p&gt;

	&lt;p&gt;In this series of pages I&amp;#8216;ll be posting code snippets, circuit diagrams and any links I found useful. This will be mostly for my own record and use. If anybody else finds the information here of any use then that will not only be a surprise, but a pleasant one at that.&lt;/p&gt;

	&lt;h3&gt;Source code&lt;/h3&gt;

	&lt;p&gt;All the source code resulting from this project will be in a Github repository, here: &lt;a href="https://github.com/elmomalmo/irrigarduino" title=""&gt;https://github.com/elmomalmo/irrigarduino&lt;/a&gt;.&lt;/p&gt;

	&lt;h3&gt;Resources&lt;/h3&gt;

	&lt;p&gt;In preparation for this I have found a  number of resources very useful. I&amp;#8216;ll be adding to this list as time goes on.&lt;/p&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://c.learncodethehardway.org/" title=""&gt;Learn C the Hard Way&lt;/a&gt; &amp;ndash; Zed Shaw is a great and articulate programmer.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.cheapvegetablegardener.com/2009/11/how-to-make-cheap-soil-moisture-sensor-2.html" title=""&gt;HOW TO MAKE A CHEAP SOIL MOISTURE SENSOR - HEAVY DUTY VERSION&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://arduino.cc/en/" title=""&gt;Arduino&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.avrbeginners.net/" title=""&gt;AVRbeginners&lt;/a&gt;.&lt;/li&gt;

&lt;/ul&gt;
	&lt;h3&gt;Pages&lt;/h3&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://malethan.com/article/arduino_uno_with_pure_c.html" title=""&gt;Arduino Uno with Pure C&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2011-10-22T14:53:56Z</dc:date>
  </entry>
  <entry>
    <title>Don Norman: I Have Seen the Future and I Am Opposed</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/don_noman_i_have_seen_the_future_and_i_am_opposed.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2011-02-14T16:45:00Z</updated>
    <published>2011-02-14T16:45:00Z</published>
    <summary type="html">&lt;p&gt;&lt;blockquote&gt;&lt;br /&gt;
&lt;a href="http://www.core77.com/blog/columns/i_have_seen_the_future_and_i_am_opposed_18532.asp" title=""&gt;The power of my electronic computing and communication equipment is more dictated by my service provider than by the technology itself. Imagine traveling in the future and entering a new country:&lt;/a&gt;&lt;/p&gt;

	&lt;blockquote&gt;&lt;a href="http://www.core77.com/blog/columns/i_have_seen_the_future_and_i_am_opposed_18532.asp" title=""&gt;Please have your papers ready. Passport, visa, customs form, medical coverage, service provider roaming agreement.&lt;/a&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;

	&lt;p&gt;Don Norman &amp;#8211; &lt;a href="http://www.core77.com/blog/columns/i_have_seen_the_future_and_i_am_opposed_18532.asp" title=""&gt;I Have Seen the Future and I Am Opposed&lt;/a&gt;, 14 Feb 2011.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2011-02-14T16:45:00Z</dc:date>
  </entry>
  <entry>
    <title>Practical TDD: It's iterative</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/practical_tdd_its_iterative.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-12-10T17:00:00Z</updated>
    <published>2010-12-10T17:00:00Z</published>
    <summary type="html">&lt;p&gt;I employ &lt;span class="caps"&gt;TDD&lt;/span&gt;/BDD as my software development methodology. I have found over the years that it is the best way of producing good quality, well-designed code. Not only that, when employed with a customer willing to work iteratively, I have found it to be one of the most reliable ways of delivering software that fulfills the requirements the customer actually has and not what they thought the requirements were at the beginning of the project. So, as far as I&amp;#8216;m concerned, all the evidence I&amp;#8216;ve seen and experienced so far suggests to me that &lt;span class="caps"&gt;TDD&lt;/span&gt;/BDD produces the best results.&lt;/p&gt;

	&lt;p&gt;Not everyone agrees.&lt;/p&gt;

	&lt;p&gt;There are developers I respect that disagree, people who I&amp;#8216;ve spoken to, people who&amp;#8216;s writings I read and people I&amp;#8216;ve worked with who just do not see the benefits of &lt;span class="caps"&gt;TDD&lt;/span&gt;. And some that are cynical about &lt;em&gt;software craftsmanship&lt;/em&gt; in general. None have made arguments that have convinced me that they&amp;#8216;re right to doubt the benefits of &lt;span class="caps"&gt;TDD&lt;/span&gt;. However, I&amp;#8216;m not a fundamentalist, I&amp;#8216;ll listen to arguments and enjoy having my views challenged.&lt;/p&gt;

	&lt;p&gt;One thing I&amp;#8216;ve noticed about many (not all) of the people that are skeptical of &lt;span class="caps"&gt;TDD&lt;/span&gt; is that they don&amp;#8216;t really understand what it is. A common misconception is that tests are written in advance of production code; that test code for a component is completed before the implementation. It is perhaps not surprising given &lt;span class="caps"&gt;TDD&lt;/span&gt; is referred to as a &lt;em&gt;test-first&lt;/em&gt; methodology.&lt;/p&gt;

	&lt;p&gt;This is not at all how it has worked for me and not my understanding of what the literature on the matter describes. It is certainly not an approach for &lt;span class="caps"&gt;TDD I&lt;/span&gt; would advocate or advise.&lt;/p&gt;

	&lt;p&gt;As a result of the misunderstanding, some developers find a real barrier to being productive when trying to implement new code employing &lt;span class="caps"&gt;TDD&lt;/span&gt;. This article isn&amp;#8216;t written with the intention of making an argument in favour of &lt;span class="caps"&gt;TDD&lt;/span&gt; or to envangelise in anyway. Hopefully, it will go some way to address the barrier that some experience.&lt;/p&gt;

	&lt;h2&gt;&lt;span class="caps"&gt;TDD&lt;/span&gt; is iterative&lt;/h2&gt;

	&lt;p&gt;To illustrate the iterative nature of &lt;span class="caps"&gt;TDD I&lt;/span&gt;&amp;#8216;m going to write some code. The process whereby this problem will be solved will illustrate how &lt;span class="caps"&gt;TDD&lt;/span&gt; helps us understand the problem and how our solution will evolve. It will also illustrate how the resulting solution can more easily be refactored to provide a cleaner solution by relying on the tests to verify the correctness of the refactored code.&lt;/p&gt;

	&lt;p&gt;The simple problem in question is &amp;ndash; bizarrely &amp;ndash; based on an actual requirement I had to fulfil not so long ago. It is to place a sequence of integers from 1 to &lt;em&gt;n&lt;/em&gt; , where &lt;em&gt;n&lt;/em&gt; is an odd number, in a collection ordered such that 1 is placed in the middle with each successive number placed either side of 1, alternating from left to right.&lt;/p&gt;

	&lt;h3&gt;Getting started&lt;/h3&gt;

	&lt;p&gt;I know it&amp;#8216;s meant to be test&amp;ndash;first, but I usually start with a class and a method representing the implementation. I&amp;#8216;m not too worried about the name of either the class or the method at the moment, nor the signature of the method. I can always change these as I go along and further clarify the requirements, usually multiple times.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Nil&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;Oh, and by the way, this is going to be &lt;a href="http://www.scala-lang.org/" title=""&gt;Scala&lt;/a&gt;. I develop in Java for a living, Scala I develop to keep me sane. Writing software in Scala reminds me why I got into software development in the first place. The requirements are represented by &lt;a href="http://code.google.com/p/specs/" title=""&gt;Specs&lt;/a&gt; specifications.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;So, now we get to the &lt;span class="caps"&gt;TDD&lt;/span&gt; bit, the very next thing we do is create a testcase (or a specification) with stubbed tests (or examples) for the requirements we know of or can easily deduce.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_plain"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorterSpec&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Specification&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ScalaCheck&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;MiddleOutNumberSorter&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;should&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;reject&amp;nbsp;even&amp;nbsp;number&amp;nbsp;counts&amp;nbsp;and&amp;nbsp;throw&amp;nbsp;an&amp;nbsp;exception&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;return&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;length&amp;nbsp;as&amp;nbsp;the&amp;nbsp;count&amp;nbsp;specified&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;3&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;5&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;15&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;One of the things I like about Specs is the fact that empty examples (or more specifically examples without assertions) will manifest as skipped tests and not passing ones.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;One thing you will find when producing these test stubs for business requirements is that it will prompt you to think about what the requirements you have actually mean. If, in fact, you can&amp;#8216;t think of any tests to write it is probably an indication that you either don&amp;#8216;t understand the requirements or they are not well defined. Either way it means that you need to go back to the customer to clarify the requirements.&lt;/p&gt;

	&lt;h3&gt;Fail, fix, repeat&lt;/h3&gt;

	&lt;p&gt;Because they are stubs, none of these examples actually break our code. We&amp;#8216;re going to change that. So let&amp;#8216;s write a test that represents a real requirement. This will cause our (currently minimal) implementation to fail.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_plain"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorterSpec&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Specification&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ScalaCheck&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;var&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;_&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;MiddleOutNumberSorter&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;should&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doBefore&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;reject&amp;nbsp;even&amp;nbsp;number&amp;nbsp;counts&amp;nbsp;and&amp;nbsp;throw&amp;nbsp;an&amp;nbsp;exception&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;4&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;212&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;foreach&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;throwA&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;return&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;length&amp;nbsp;as&amp;nbsp;the&amp;nbsp;count&amp;nbsp;specified&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;3&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;5&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;15&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Ok,now the production code fails the test criteria so we turn our attention to the implementation to address this. We do the bare minimum possible to achieve this. So the implementation now looks like this:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sort&amp;nbsp;only&amp;nbsp;accepts&amp;nbsp;odd&amp;nbsp;numbers&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Nil&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&amp;#8220;Hang on&amp;#8220;, I hear you say &amp;#8220;that&amp;#8216;s not going to sort our numbers, not even close&amp;#8221;. You&amp;#8216;re right. All this does is satisfy the one requirement for which we have an example.&lt;/p&gt;

	&lt;p&gt;This is obviously no more correct than it was before in terms of satisfying the end requirements. This is a bit of a difficult concept to get over for non TDDers. Someone on the &lt;a href="http://javachannel.net/wiki/pmwiki.php/Main/HomePage" title=""&gt;#java IRC channel&lt;/a&gt; once sarcastically said words to the effect:&lt;/p&gt;

	&lt;blockquote&gt;&lt;span class="caps"&gt;TDD&lt;/span&gt; is wasting time writing code I know is wrong all day.&lt;/blockquote&gt;

	&lt;p&gt;What it does mean is we can quickly get back to specifying more of our requirements by filling out another stub. So, on to the next example.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_plain"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorterSpec&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Specification&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ScalaCheck&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;var&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;_&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;MiddleOutNumberSorter&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;should&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doBefore&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;reject&amp;nbsp;even&amp;nbsp;number&amp;nbsp;counts&amp;nbsp;and&amp;nbsp;throw&amp;nbsp;an&amp;nbsp;exception&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;4&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;212&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;foreach&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;throwA&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;return&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;length&amp;nbsp;as&amp;nbsp;the&amp;nbsp;count&amp;nbsp;specified&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;9&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;15&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;133&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;foreach&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;size&amp;nbsp;must_&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;i&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;3&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;5&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;15&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;And back to the implementation, again doing the bare-minimum we can to satisfy the requirement.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sort&amp;nbsp;only&amp;nbsp;accepts&amp;nbsp;odd&amp;nbsp;numbers&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;until&amp;nbsp;count&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;toList&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;And so we continue until we have an implementation&amp;#8230;&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sort&amp;nbsp;only&amp;nbsp;accepts&amp;nbsp;odd&amp;nbsp;numbers&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;numbers&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;](&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;for&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;number&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;to&amp;nbsp;count&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;number&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;number&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;number&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;-&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;number&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;numbers&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;index&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;number&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;numbers&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;toList&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;...that satisfies the entire specification:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_plain"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorterSpec&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Specification&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ScalaCheck&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;var&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;_&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;MiddleOutNumberSorter&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;should&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doBefore&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;reject&amp;nbsp;even&amp;nbsp;number&amp;nbsp;counts&amp;nbsp;and&amp;nbsp;throw&amp;nbsp;an&amp;nbsp;exception&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;4&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;212&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;foreach&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;throwA&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;return&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;length&amp;nbsp;as&amp;nbsp;the&amp;nbsp;count&amp;nbsp;specified&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Array&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;9&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;15&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;133&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;foreach&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;size&amp;nbsp;must_&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;i&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;3&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;containInOrder&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;))&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;5&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;5&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;containInOrder&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;5&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;4&lt;/span&gt;&lt;span class="java_separator"&gt;))&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;produce&amp;nbsp;15&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;order&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorter&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;15&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;must&amp;nbsp;containInOrder&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;15&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;13&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;11&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;9&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;7&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;5&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;3&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;4&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;6&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;8&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;12&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_literal"&gt;14&lt;/span&gt;&lt;span class="java_separator"&gt;))&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Now I commit this code to version control. It&amp;#8216;s complete, and I can be confident that it fulfills the requirements because they are codified in unit tests. Not only that, those tests provide an invaluable resource to other developers working on the project. They now have code that when run generates a report that tells them in plain English what it should and should not do.&lt;/p&gt;

	&lt;p&gt;Being a an aspiring &lt;em&gt;software craftsman&lt;/em&gt; I want all the code I write to be maintainable, with minimal technical debt. I want it to be sustainable in the longer term, so I'm not entirely happy with the implementation. In general, I want to reduce the number of &lt;a href="http://www.osnews.com/story/19266/WTFs_m" title=""&gt;WTFs per minute &lt;/a&gt; to a minimum.&lt;/p&gt;

	&lt;h3&gt;The benefit&lt;/h3&gt;

	&lt;p&gt;Also, I&amp;#8216;m becoming less keen on the imperative style and &lt;a href="http://rcm-uk.amazon.co.uk/e/cm?lt1=_blank&amp;#38;bc1=000000&amp;#38;IS2=1&amp;#38;bg1=FFFFFF&amp;#38;fc1=000000&amp;#38;lc1=0000FF&amp;#38;t=implemelegan-21&amp;#38;o=2&amp;#38;p=8&amp;#38;l=as1&amp;#38;m=amazon&amp;#38;f=ifr&amp;#38;md=0M5A6TN3AXP2JHJBWT02&amp;#38;asins=0981531601" title=""&gt;Programming in Scala&lt;/a&gt; promotes a more &lt;em&gt;functional&lt;/em&gt; style using immutable objects. The thing is, having been mainly a developer of imperative languages, I'm still learning to code in a functional style &amp;ndash; particularly in Scala &amp;ndash; and so it doesn't quite come naturally to me yet. Without test coverage, this would be a risky approach. In my attempt to produce more &lt;em&gt;functional&lt;/em&gt; code, I might cause it to produce incorrect results. Because I&amp;#8216;m new to FP, I might not really understand why. However, because I produced the test coverage as I wrote the production implementation I have a safety net which tells me instantly if I broke anything.&lt;/p&gt;

	&lt;p&gt;So after a bit of experimentation and copious runs of the specifications, I end up with the following, far more elegant solution. Although elegance is somewhat in the eye of the beholder, so I don&amp;#8216;t expect everyone to agree :)&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;MiddleOutNumberSorter&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;sort&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;List&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;isOddNumber&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_separator"&gt;))&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;until&amp;nbsp;count&lt;/span&gt;&lt;span class="java_separator"&gt;).&lt;/span&gt;&lt;span class="java_plain"&gt;map&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;numberAtIndex&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;count&lt;/span&gt;&lt;span class="java_separator"&gt;)).&lt;/span&gt;&lt;span class="java_plain"&gt;toList&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;sort&amp;nbsp;only&amp;nbsp;accepts&amp;nbsp;odd&amp;nbsp;numbers&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;def&amp;nbsp;isOddNumber&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Boolean&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;%&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;!=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;def&amp;nbsp;numberAtIndex&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;index&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;count&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;middleIndex&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Int&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;count&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;/&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;index&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;middleIndex&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;*&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;index&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;-&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;middleIndex&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;*&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;middleIndex&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;-&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;index&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;As I mentioned, I'm currently learning Scala and FP, so I'd love it anyone reading this could suggest alternative implementations.&lt;/em&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-12-10T17:00:00Z</dc:date>
  </entry>
  <entry>
    <title>Photo: Cwmcarn in the snow</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/photo_cwmcarn_in_the_snow.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-12-05T16:54:42Z</updated>
    <published>2010-12-05T16:54:42Z</published>
    <summary type="html">&lt;p&gt;Just been mountain biking at Cwmcarn, it was interesting riding, and beautiful.&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/40/main_P1000776.JPG" alt="P1000776.JPG" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-12-05T16:54:42Z</dc:date>
  </entry>
  <entry>
    <title>Human fallibility: A simple argument in favour of unit testing</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/human_fallibility.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-10-28T14:44:03Z</updated>
    <published>2010-10-28T14:44:03Z</published>
    <summary type="html">&lt;p&gt;I was asked about &lt;span class="caps"&gt;TDD&lt;/span&gt; recently. The discussion was in the context of the polarised views with regard &lt;span class="caps"&gt;TDD&lt;/span&gt; and even unit testing. The conversation reminded me a little of the response to a post I wrote a while back.&lt;/p&gt;

	&lt;p&gt;One argument against &lt;span class="caps"&gt;TDD&lt;/span&gt; and (possibly unit testing in general) that I had in a comment to my &lt;a href="http://malethan.com/article/why_tdd_freedom_to_refactor.html" title=""&gt;Why TDD: Freedom to refactor&lt;/a&gt; post, in particular response to the assertion that unit tests &lt;em&gt;evaluate the correctness&lt;/em&gt; of features, was the following:&lt;/p&gt;

	&lt;blockquote&gt;You can do that with your brain and your own powers of reasoning&amp;#8230;&lt;/blockquote&gt;

	&lt;p&gt;The essence of this argument, as I understand it,  was expressed to me recently. Essentially that &amp;ndash; as a &amp;#8216;good developer&amp;#8216; &amp;ndash; you can evaluate your code and your software yourself without the need for unit tests.&lt;/p&gt;

	&lt;p&gt;Obviously I don&amp;#8216;t agree.&lt;/p&gt;

	&lt;p&gt;This kind of evaluation of the correctness of your code requires constant or repeated human attention. My argument against this point of view is simple:&lt;/p&gt;

	&lt;p&gt;&lt;strong&gt;Human beings are fallible, they get tired, they get lazy, they get ill and they get run over by buses. Tests that rely on human beings to attend to those tests or require a human's expertise to verify the correctness of those tests are therefore not as reliable, reusable or portable as tests that can run unattended and verify their own success&lt;/strong&gt;.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-10-28T14:44:03Z</dc:date>
  </entry>
  <entry>
    <title>Utah Mountain Bike Trip. Day #4</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/utah_mtb_day4.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-09-23T05:29:30Z</updated>
    <published>2010-09-23T05:29:30Z</published>
    <summary type="html">&lt;h2&gt;Rest day&amp;#8230;&lt;/h2&gt;

	&lt;p&gt;... so we only did a 3 hr ride (Hurricane Rim) and an 8 mile hike up a very high mountain (Zion National Park, Observation Point).&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/35/main_P1000690.JPG" alt="George, Johanna and Pierre pinning it on Hurricane Rim" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;caption&gt;George, Johanna and Pierre pinning it on Hurricane Rim&lt;/caption&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/36/main_P1000691.JPG" alt="George, Roddy, Russ, Pierrre and Johanna on Hurricane Rim" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;caption&gt;George, Roddy, Russ, Pierrre and Johanna on Hurricane Rim&lt;/caption&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/39/main_P1000702.JPG" alt="Johanna giving a high altitude hula lesson" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;caption&gt;Johanna giving a high altitude hula lesson at Observation Point, Zion National Park&lt;/caption&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/38/main_P1000706.JPG" alt="Russ annoying a rather large spider" /&gt;&lt;/p&gt;

	&lt;p&gt;&lt;caption&gt;Russ annoying a rather large spider&lt;/caption&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-09-23T05:29:30Z</dc:date>
  </entry>
  <entry>
    <title>Utah Mountain Bike Trip. Day #3</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/utah_mtb_day3.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-09-22T12:42:44Z</updated>
    <published>2010-09-22T12:42:44Z</published>
    <summary type="html">&lt;h2&gt;Little Creek and Gould&amp;#8216;s Trail&lt;/h2&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/31/main_P1000680.JPG" alt="Traditional picture on Little Creek with Gooseberry Mesa just visible in the background" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/32/main_P1000682.JPG" alt="George on top of Little Creek with Gooseberry Mesa in the background" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/33/main_P1000684.JPG" alt="Roddy on Little Creek" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/34/main_P1000687.JPG" alt="George, Roddy and Elwyn at the bottom of Gould's Trail" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-09-22T12:42:44Z</dc:date>
  </entry>
  <entry>
    <title>Utah Mountain Bike Trip. Day #2</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/utah_mtb_day2.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-09-21T04:51:49Z</updated>
    <published>2010-09-21T04:51:49Z</published>
    <summary type="html">&lt;p&gt;Not much energy to write much. I&amp;#8216;ll let the pictures do the talking.&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/26/main_P1000659.JPG" alt="Gooseberry Mesa Trail Head" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/28/main_P1000667.JPG" alt="Elwyn on the south rim of Gooseberry Mesa" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/29/main_P1000669.JPG" alt="The Prophet on the south rim of Gooseberry Mesa" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/30/main_P1000678.JPG" alt="A quick dip in a river at the bottom of Jem Trail near Hurricane UT" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-09-21T04:51:49Z</dc:date>
  </entry>
  <entry>
    <title>My last day at Move Networks</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/my_last_day_move_networks.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-09-17T12:51:16Z</updated>
    <published>2010-09-17T12:51:16Z</published>
    <summary type="html">&lt;p&gt;Today is my last day at Move Networks. I hadn&amp;#8216;t expected to be leaving so soon. I honestly thought that Move was a company that I could put a few years into, grow into and have a significant impact. &lt;a href="http://blog.streamingmedia.com/the_business_of_online_vi/2010/06/move-networks-up-for-sale-three-parties-have-shown-interest.html" title=""&gt;That all changed recently&lt;/a&gt; when the funding ran out, the workforce in the US was decimated and the whole future of the company was suddenly much less certain. After it became apparent to me that the future was becoming no less uncertain as the weeks passed, I decided to entertain an opportunity that had been put my way.&lt;/p&gt;

	&lt;p&gt;So I decided to move on. I&amp;#8216;ll be leaving one of the most pleasant and progressive work environments I&amp;#8216;ve worked in and a very friendly group of people. It is a somewhat sad day for me.&lt;/p&gt;

	&lt;p&gt;What is certainly less sad is that, tomorrow, I start my holiday to Utah (coincidentally the home state of Move&amp;#8216;s US operation) for what I hope will be an awesome mountain bike trip with &lt;a href="http://sacredrides.com/" title=""&gt;Sacred Rides&lt;/a&gt;. I joined Sacred Rides for a similar trip in British Columbia last year. It was a fun, chilled out trip taking in some awesome, world&amp;ndash;class trails, guided by expert and knowledgable guides. A really great experience. All indications are that this trip will be at least as good.&lt;/p&gt;

	&lt;p&gt;When I get back from Utah I start what feels like will be a great new job as a Senior Java Developer at &lt;a href="http://www.netdev.co.uk" title=""&gt;NetDev&lt;/a&gt;, in Cwmbran. As exciting as this new job is (and I am very much looking forward to meeting everyone and getting stuck in), I&amp;#8216;m not thinking about that at the moment&amp;#8230; Roll on Utah!&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-09-17T12:51:16Z</dc:date>
  </entry>
</feed>







