<?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 on: Matt&#8217;s first law of software complexity</title>
	<atom:link href="http://madbean.com/2003/mb2003-43/feed/" rel="self" type="application/rss+xml" />
	<link>http://madbean.com/2003/mb2003-43/</link>
	<description>The other kind of micro blog</description>
	<lastBuildDate>Sun, 19 May 2013 22:20:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>By: David G. Miller</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-416</link>
		<dc:creator>David G. Miller</dc:creator>
		<pubDate>Fri, 11 Nov 2005 05:01:49 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-416</guid>
		<description>&lt;p&gt;I&#039;ve always referred to this phenomenon as &quot;the law of conservation of difficulty.&quot;  You might also look at RFC 1925 (which really isn&#039;t a joke even if it was posted on 1 April 1996).  In particular:&lt;/p&gt;

&lt;p&gt;(6)  It is easier to move a problem around (for example, by moving
        the problem to a different part of the overall network
        architecture) than it is to solve it.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    (6a) (corollary). It is always possible to add another level of
         indirection.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cheers,
Dave&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I&#8217;ve always referred to this phenomenon as &#8220;the law of conservation of difficulty.&#8221;  You might also look at RFC 1925 (which really isn&#8217;t a joke even if it was posted on 1 April 1996).  In particular:</p>
<p> <img src='http://madbean.com/wp-content/plugins/smilies-themer/adiumicons/devil.png' alt='(6)' class='wp-smiley' />  It is easier to move a problem around (for example, by moving<br />
        the problem to a different part of the overall network<br />
        architecture) than it is to solve it.</p>
<pre><code>    (6a) (corollary). It is always possible to add another level of
         indirection.
</code></pre>
<p>Cheers,<br />
Dave</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rajesh Vasa</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-123</link>
		<dc:creator>Rajesh Vasa</dc:creator>
		<pubDate>Wed, 18 Feb 2004 05:25:25 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-123</guid>
		<description>&lt;p&gt;A very interesting observation. I am a researcher in the field of Software Evolution, and I have collected a large amout of data from a very many number of systems (All Java, Open Source). The most interesting find is that my data supports your First Law. Complexity does not change at all once a Software system has stabilised. And the even more interesting thing is that this near constant complexity distribution holds at all levels, i.e Method/Class/Package/System.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>A very interesting observation. I am a researcher in the field of Software Evolution, and I have collected a large amout of data from a very many number of systems (All Java, Open Source). The most interesting find is that my data supports your First Law. Complexity does not change at all once a Software system has stabilised. And the even more interesting thing is that this near constant complexity distribution holds at all levels, i.e Method/Class/Package/System.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank Nestel</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-122</link>
		<dc:creator>Frank Nestel</dc:creator>
		<pubDate>Mon, 28 Jul 2003 12:10:38 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-122</guid>
		<description>&lt;p&gt;Well, interesting thoughs, I just wonder how this well known facet fills in:
&quot;Every piece software will be maintained so long until its complexity is beyond scope for everyone maintaining it.&quot;
Concerning real world settings. The question is whether the main purpose of abstractions is to help the gurus to prepare building bricks the mortals can handle. Every now and then the abstraction leaks and you have to call for the guru cause you do not understand what is going on, but in generall you have a nice simple black box labeled &quot;miracle&quot;. For a simple example, I&#039;ve found das many young programmers do not know the hashing algorithm. While an efficient assoziative storage is beyond their own design expertise they can use Perl assosciative arrays or Java Hashtables/Maps without harm. Most of the time they have no problem.&lt;/p&gt;

&lt;p&gt;As a trained mathematician I know mankind can build abstractions on which the next generation can move very safely. Software of course is all very young. No much time to mature...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Well, interesting thoughs, I just wonder how this well known facet fills in:<br />
&quot;Every piece software will be maintained so long until its complexity is beyond scope for everyone maintaining it.&quot;<br />
Concerning real world settings. The question is whether the main purpose of abstractions is to help the gurus to prepare building bricks the mortals can handle. Every now and then the abstraction leaks and you have to call for the guru cause you do not understand what is going on, but in generall you have a nice simple black box labeled &quot;miracle&quot;. For a simple example, I&#8217;ve found das many young programmers do not know the hashing algorithm. While an efficient assoziative storage is beyond their own design expertise they can use Perl assosciative arrays or Java Hashtables/Maps without harm. Most of the time they have no problem.</p>
<p>As a trained mathematician I know mankind can build abstractions on which the next generation can move very safely. Software of course is all very young. No much time to mature&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pete</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-121</link>
		<dc:creator>Pete</dc:creator>
		<pubDate>Mon, 28 Jul 2003 00:28:50 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-121</guid>
		<description>&lt;p&gt;Good post, Matt.&lt;/p&gt;

&lt;p&gt;It highlights one of the classis issues in software development - Are we providing a solution to the right problem? Solving the wrong question, as you show, always adds unnecessary complexity.&lt;/p&gt;

&lt;p&gt;The other issue that clouds things pretty well is to recognise the complexity in a solution (as opposed to the constant complexity in a problem). Any given solution&#039;s complexity can be far in excess of that mandated by the problem. In this case abstractions can assist greatly in reducing complexity. Often in the process of pulling out useful abstractions the developer can come to the realisation that much of what they are doing is superfluous and doesn&#039;t actually assist in solving the problem. This kind of activity can remove the extraneous parts and lead to the replacement of core pieces of the system that were mis-designed (if that&#039;s a word).&lt;/p&gt;

&lt;p&gt;Cheers,
Pete.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Good post, Matt.</p>
<p>It highlights one of the classis issues in software development &#8211; Are we providing a solution to the right problem? Solving the wrong question, as you show, always adds unnecessary complexity.</p>
<p>The other issue that clouds things pretty well is to recognise the complexity in a solution (as opposed to the constant complexity in a problem). Any given solution&#8217;s complexity can be far in excess of that mandated by the problem. In this case abstractions can assist greatly in reducing complexity. Often in the process of pulling out useful abstractions the developer can come to the realisation that much of what they are doing is superfluous and doesn&#8217;t actually assist in solving the problem. This kind of activity can remove the extraneous parts and lead to the replacement of core pieces of the system that were mis-designed (if that&#8217;s a word).</p>
<p>Cheers,<br />
Pete.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Quail</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-120</link>
		<dc:creator>Matt Quail</dc:creator>
		<pubDate>Fri, 25 Jul 2003 12:03:54 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-120</guid>
		<description>&lt;p&gt;Carlos,
I agree that the 2nd law is a whole other bag if fish! I have some thoughts on a &quot;2nd law of software complexity&quot; but I&#039;m not sure how far I can stretch the analogy.&lt;/p&gt;

&lt;p&gt;I like the idea that to avoid entropy you have to keep on refactoring :D&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Carlos,<br />
I agree that the 2nd law is a whole other bag if fish! I have some thoughts on a &quot;2nd law of software complexity&quot; but I&#8217;m not sure how far I can stretch the analogy.</p>
<p>I like the idea that to avoid entropy you have to keep on refactoring <img src='http://madbean.com/wp-content/plugins/smilies-themer/adiumicons/biggrin.png' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos E. Perez</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-119</link>
		<dc:creator>Carlos E. Perez</dc:creator>
		<pubDate>Fri, 25 Jul 2003 11:58:04 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-119</guid>
		<description>&lt;p&gt;Sorry, a bit to quick.&lt;/p&gt;

&lt;p&gt;Good insight on the first law.  &lt;/p&gt;

&lt;p&gt;That is if you don&#039;t make any radical changes in abstractions, a complex system remains equally complex.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Sorry, a bit to quick.</p>
<p>Good insight on the first law.  </p>
<p>That is if you don&#8217;t make any radical changes in abstractions, a complex system remains equally complex.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos E. Perez</title>
		<link>http://madbean.com/2003/mb2003-43/comment-page-1/#comment-118</link>
		<dc:creator>Carlos E. Perez</dc:creator>
		<pubDate>Fri, 25 Jul 2003 11:54:19 +0000</pubDate>
		<guid isPermaLink="false">http://madbean.com/blog/2003-43#comment-118</guid>
		<description>&lt;p&gt;Wait a minute here. You started out quoting law of energy conservation however not mentioning the equally important 2nd law of thermodynamics.&lt;/p&gt;

&lt;p&gt;2nd law of course as applied to information is that a closed system tends towards entropy, that is maximum disorder.  If disorder implies complexity, then maximum complexity.  &lt;/p&gt;

&lt;p&gt;So, to avoid this you&#039;ve got to be constantly adding energy, and in information terms organized knowledge.  So you keep on refactoring, reducing disorganization into organization.&lt;/p&gt;

&lt;p&gt;Of course the big law you&#039;ve got to quote is &quot;the only thing unavoidable in software is change&quot;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Wait a minute here. You started out quoting law of energy conservation however not mentioning the equally important 2nd law of thermodynamics.</p>
<p>2nd law of course as applied to information is that a closed system tends towards entropy, that is maximum disorder.  If disorder implies complexity, then maximum complexity.  </p>
<p>So, to avoid this you&#8217;ve got to be constantly adding energy, and in information terms organized knowledge.  So you keep on refactoring, reducing disorganization into organization.</p>
<p>Of course the big law you&#8217;ve got to quote is &quot;the only thing unavoidable in software is change&quot;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
