<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for The random utterances of David Arno</title>
	<atom:link href="http://www.davidarno.org/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.davidarno.org</link>
	<description></description>
	<lastBuildDate>Tue, 21 May 2013 07:19:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by Mikhail Subach</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-11070</link>
		<dc:creator>Mikhail Subach</dc:creator>
		<pubDate>Tue, 21 May 2013 07:19:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-11070</guid>
		<description><![CDATA[Good article, and I see the nearest step to bring this future: use IDE to generate the code after the tests. It&#039;s still your privilege to make smarter solution, but in most cases it should do the work. Let&#039;s focus on expressing clear ideas in tests!]]></description>
		<content:encoded><![CDATA[<p>Good article, and I see the nearest step to bring this future: use IDE to generate the code after the tests. It&#8217;s still your privilege to make smarter solution, but in most cases it should do the work. Let&#8217;s focus on expressing clear ideas in tests!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Why we absolutely should never build software like we build houses by Riddley Simpleton</title>
		<link>http://www.davidarno.org/2013/01/28/why-we-absolutely-should-never-build-software-like-we-build-houses/comment-page-1/#comment-11031</link>
		<dc:creator>Riddley Simpleton</dc:creator>
		<pubDate>Mon, 13 May 2013 16:34:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2302#comment-11031</guid>
		<description><![CDATA[As usual, taking things literally in absolute terms causes misunderstanding. “If houses were built like software projects, a single woodpecker could destroy civilization” isn&#039;t meant to mean we should design software like we design houses. It&#039;s meant to point out that most software is like a science experiment for the end consumer, with complex dependencies, and unforeseen causes for failure, and usually a very cavalier attitude towards problems. 

The statement merely promotes a logical basis for software that can ensure robustness based on some  compatibility with the (virtual, artificial, imaginary) world in which it must live. Software could be more like an appliance, you turn the key and it works. Things like cars handle continuous improvement and upgrades, without creating an environment the end user doesn&#039;t understand or incompatibilities within the environment. 

The amount of flexibility and complexity within the software &quot;problem space&quot; allows for more rapid development, but it comes with it&#039;s own problems, and could remedied with more environmental regulation. It&#039;s often a matter of the economics of infinite multi versioning.]]></description>
		<content:encoded><![CDATA[<p>As usual, taking things literally in absolute terms causes misunderstanding. “If houses were built like software projects, a single woodpecker could destroy civilization” isn&#8217;t meant to mean we should design software like we design houses. It&#8217;s meant to point out that most software is like a science experiment for the end consumer, with complex dependencies, and unforeseen causes for failure, and usually a very cavalier attitude towards problems. </p>
<p>The statement merely promotes a logical basis for software that can ensure robustness based on some  compatibility with the (virtual, artificial, imaginary) world in which it must live. Software could be more like an appliance, you turn the key and it works. Things like cars handle continuous improvement and upgrades, without creating an environment the end user doesn&#8217;t understand or incompatibilities within the environment. </p>
<p>The amount of flexibility and complexity within the software &#8220;problem space&#8221; allows for more rapid development, but it comes with it&#8217;s own problems, and could remedied with more environmental regulation. It&#8217;s often a matter of the economics of infinite multi versioning.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by David Arno</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10981</link>
		<dc:creator>David Arno</dc:creator>
		<pubDate>Sat, 27 Apr 2013 10:46:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10981</guid>
		<description><![CDATA[@mnem,

Biological evolution is arguably inefficient. The shark and dolphin both evolved the same energy efficient body pattern through independent random chance. We have lost the &quot;code&quot; to provide us with gills, so we can&#039;t just turn that feature back on for our summer holidays. We aren&#039;t constrained like this when designing (evolving even) application evolution systems. We could for example - use libraries of previously evolved building blocks that can be plugged together to speed up the application creation process.]]></description>
		<content:encoded><![CDATA[<p>@mnem,</p>
<p>Biological evolution is arguably inefficient. The shark and dolphin both evolved the same energy efficient body pattern through independent random chance. We have lost the &#8220;code&#8221; to provide us with gills, so we can&#8217;t just turn that feature back on for our summer holidays. We aren&#8217;t constrained like this when designing (evolving even) application evolution systems. We could for example &#8211; use libraries of previously evolved building blocks that can be plugged together to speed up the application creation process.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by David Arno</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10980</link>
		<dc:creator>David Arno</dc:creator>
		<pubDate>Sat, 27 Apr 2013 10:39:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10980</guid>
		<description><![CDATA[@ &quot;Douglas Adams&quot;, you are right. Evolutionary algorithms have been around for a long time. In the 50s, computers were too slow to use this method to evolve an application and the same still applies today. One day though, computers might be powerful enough for this idea to become viable.]]></description>
		<content:encoded><![CDATA[<p>@ &#8220;Douglas Adams&#8221;, you are right. Evolutionary algorithms have been around for a long time. In the 50s, computers were too slow to use this method to evolve an application and the same still applies today. One day though, computers might be powerful enough for this idea to become viable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by David Arno</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10979</link>
		<dc:creator>David Arno</dc:creator>
		<pubDate>Sat, 27 Apr 2013 10:34:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10979</guid>
		<description><![CDATA[@Nicholas,

Are you not making the mistake of thinking in terms of basic unit testing &amp; how that would be used to express requirements? Writing a test, then another test with slightly different values is like using Intel 4004 assembler rather than a modern programming language. 

For example, taking your add example, we know that if x is 10, add(34,1) is the same as add(add(3x, 0x), add(4, 1)). In other words, to prove add(a, b) works:

1. We need to test it handles adding the small 2D array of values of a in -9 .. 9 and b in -9 .. 9. 
2. Then for any two numbers, we can split them in to two sets of digits, use the proven add() to add the digits, handle the overflows and compute the expected result.
3. Provide the test method with a set of data and have it repeatedly apply rule 2 to the numbers to determine the expected result and compare it with the actual results.

Using this, we can prove add() for every single number combination with just two tests. And all I&#039;m doing is using features in NUnit already. I&#039;d be very surprised if testing frameworks in 50, 100 or even more years time will be substantially more advanced than NUnit!]]></description>
		<content:encoded><![CDATA[<p>@Nicholas,</p>
<p>Are you not making the mistake of thinking in terms of basic unit testing &#038; how that would be used to express requirements? Writing a test, then another test with slightly different values is like using Intel 4004 assembler rather than a modern programming language. </p>
<p>For example, taking your add example, we know that if x is 10, add(34,1) is the same as add(add(3x, 0x), add(4, 1)). In other words, to prove add(a, b) works:</p>
<p>1. We need to test it handles adding the small 2D array of values of a in -9 .. 9 and b in -9 .. 9.<br />
2. Then for any two numbers, we can split them in to two sets of digits, use the proven add() to add the digits, handle the overflows and compute the expected result.<br />
3. Provide the test method with a set of data and have it repeatedly apply rule 2 to the numbers to determine the expected result and compare it with the actual results.</p>
<p>Using this, we can prove add() for every single number combination with just two tests. And all I&#8217;m doing is using features in NUnit already. I&#8217;d be very surprised if testing frameworks in 50, 100 or even more years time will be substantially more advanced than NUnit!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by Nicholas Blumhardt</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10971</link>
		<dc:creator>Nicholas Blumhardt</dc:creator>
		<pubDate>Thu, 25 Apr 2013 20:33:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10971</guid>
		<description><![CDATA[I share your enthusiasm for tests, but this version of the future would be a bit of a disappointment for me.

Let&#039;s evolve an implementation of Add(a: int, b: int): int ... first some tests:

&gt; test: Add(1, 2) = 3
&gt; test: Add(34,-2) = 32
...
Done!

Okay, thanks computer, Add() is ready to go!

&gt; Add(34,1)
6786998

Hmm, I see we needed to add another test case...

(And so on :))

Managing the Byzantine set of test cases even for something as simple as Add() would be pretty onerous. Even if the computer could infer the full set of tests from our examples, there are an infinite number of functions that can fit a given set of points.

We might find some improvement in forming the tests from logical predicates:

&gt; For all a, where a: int
&gt; For all b, where b: int
&gt; Add(a, b) = a + b

But, this isn&#039;t a test any more (we&#039;ve ditched the empirical measurement) - it is a theorem about Add(), and the role of the computer has turned around to start assisting with proofs.

And, the computer isn&#039;t writing the code any more, we are...

(Someone with more background and familiarity with this approach might pick holes in this observation, of course.)

I&#039;d love it if the future &#039;feels&#039; like TDD, but at least as a naive observer, it seems like proof systems are laying the groundwork for that today, rather than the test-driven approach that you and I are using.

On the other hand, I&#039;m quite happy writing code, and adding another indirection between what I express and what the computer executes seems like a leap I&#039;m unprepared to make with the currently-available tools. Wrapping hand-written code with tests a-la TDD is something of a sweet spot, don&#039;t you think?

Thanks for the thought-provoking article.]]></description>
		<content:encoded><![CDATA[<p>I share your enthusiasm for tests, but this version of the future would be a bit of a disappointment for me.</p>
<p>Let&#8217;s evolve an implementation of Add(a: int, b: int): int &#8230; first some tests:</p>
<p>&gt; test: Add(1, 2) = 3<br />
&gt; test: Add(34,-2) = 32<br />
&#8230;<br />
Done!</p>
<p>Okay, thanks computer, Add() is ready to go!</p>
<p>&gt; Add(34,1)<br />
6786998</p>
<p>Hmm, I see we needed to add another test case&#8230;</p>
<p>(And so on <img src='http://www.davidarno.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>Managing the Byzantine set of test cases even for something as simple as Add() would be pretty onerous. Even if the computer could infer the full set of tests from our examples, there are an infinite number of functions that can fit a given set of points.</p>
<p>We might find some improvement in forming the tests from logical predicates:</p>
<p>&gt; For all a, where a: int<br />
&gt; For all b, where b: int<br />
&gt; Add(a, b) = a + b</p>
<p>But, this isn&#8217;t a test any more (we&#8217;ve ditched the empirical measurement) &#8211; it is a theorem about Add(), and the role of the computer has turned around to start assisting with proofs.</p>
<p>And, the computer isn&#8217;t writing the code any more, we are&#8230;</p>
<p>(Someone with more background and familiarity with this approach might pick holes in this observation, of course.)</p>
<p>I&#8217;d love it if the future &#8216;feels&#8217; like TDD, but at least as a naive observer, it seems like proof systems are laying the groundwork for that today, rather than the test-driven approach that you and I are using.</p>
<p>On the other hand, I&#8217;m quite happy writing code, and adding another indirection between what I express and what the computer executes seems like a leap I&#8217;m unprepared to make with the currently-available tools. Wrapping hand-written code with tests a-la TDD is something of a sweet spot, don&#8217;t you think?</p>
<p>Thanks for the thought-provoking article.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by Douglas Adams</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10966</link>
		<dc:creator>Douglas Adams</dc:creator>
		<pubDate>Wed, 24 Apr 2013 20:47:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10966</guid>
		<description><![CDATA[Essentially GP is a set of instructions and a fitness function to measure how well a computer has performed a task [cited: http://en.wikipedia.org/wiki/Genetic_programming]

this sounds like GP all over again, i.e. an idea from 1954, the generations are faster but the principles remain the same]]></description>
		<content:encoded><![CDATA[<div style="padding: 1em; border: 1px solid #606060; margin-top: 1em;"><p><p>Essentially GP is a set of instructions and a fitness function to measure how well a computer has performed a task [cited: <a href="http://en.wikipedia.org/wiki/Genetic_programming" rel="nofollow">http://en.wikipedia.org/wiki/Genetic_programming</a></p>
<p>this sounds like GP all over again, i.e. an idea from 1954, the generations are faster but the principles remain the same</p>
</div>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Is Test Driven Development the only future for software development? by mnem</title>
		<link>http://www.davidarno.org/2013/04/15/is-test-driven-development-the-only-future-for-software-development/comment-page-1/#comment-10963</link>
		<dc:creator>mnem</dc:creator>
		<pubDate>Mon, 22 Apr 2013 13:13:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2413#comment-10963</guid>
		<description><![CDATA[Evolution isn&#039;t very efficient though.]]></description>
		<content:encoded><![CDATA[<p>Evolution isn&#8217;t very efficient though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Why we absolutely should never build software like we build houses by Anonymouse</title>
		<link>http://www.davidarno.org/2013/01/28/why-we-absolutely-should-never-build-software-like-we-build-houses/comment-page-1/#comment-10941</link>
		<dc:creator>Anonymouse</dc:creator>
		<pubDate>Wed, 10 Apr 2013 10:33:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2302#comment-10941</guid>
		<description><![CDATA[Reminds me of that quote &quot;If houses were built like software projects, a single woodpecker could destroy civilization&quot;

But as you say - that is why nowadays the growing trend is to apply TDD to ensure the software is robust, and use BDD and rapidly prototype applications so you don&#039;t spend months creating something the client did not actually want. 

It seems to me this dude probably mainly works for public sector projects where there is not the push nor even the need to be agile and competitive. I have often wondered whether agile applies as effectively to non-commercial type projects.]]></description>
		<content:encoded><![CDATA[<div style="padding: 1em; border: 1px solid #606060; margin-top: 1em;"><p><p>Reminds me of that quote &#8220;If houses were built like software projects, a single woodpecker could destroy civilization&#8221;</p>
<p>But as you say &#8211; that is why nowadays the growing trend is to apply TDD to ensure the software is robust, and use BDD and rapidly prototype applications so you don&#8217;t spend months creating something the client did not actually want. </p>
<p>It seems to me this dude probably mainly works for public sector projects where there is not the push nor even the need to be agile and competitive. I have often wondered whether agile applies as effectively to non-commercial type projects.</p>
</div>]]></content:encoded>
	</item>
	<item>
		<title>Comment on NCrunch: or how to ruin a product with greedy pricing by Giedrius</title>
		<link>http://www.davidarno.org/2012/10/15/ncrunch-or-how-to-ruin-a-product-with-greedy-pricing/comment-page-1/#comment-10900</link>
		<dc:creator>Giedrius</dc:creator>
		<pubDate>Thu, 04 Apr 2013 14:34:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.davidarno.org/?p=2199#comment-10900</guid>
		<description><![CDATA[Remco - I would suggest to make single day - or even several hours promo, like JetBrains made in December - when named licences were 75% off - just to see, that market is not so niche of the niche. Let&#039;s say it will be less than 75% off - let&#039;s say price would be 39$ for a named license for very limited time, I&#039;m pretty sure, that it would go viral on twitter/facebook and you would sell some licences to those, who never did TDD before.]]></description>
		<content:encoded><![CDATA[<p>Remco &#8211; I would suggest to make single day &#8211; or even several hours promo, like JetBrains made in December &#8211; when named licences were 75% off &#8211; just to see, that market is not so niche of the niche. Let&#8217;s say it will be less than 75% off &#8211; let&#8217;s say price would be 39$ for a named license for very limited time, I&#8217;m pretty sure, that it would go viral on twitter/facebook and you would sell some licences to those, who never did TDD before.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
