<?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: Software erosion and package tangles</title>
	<atom:link href="http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/</link>
	<description></description>
	<lastBuildDate>Fri, 23 Dec 2011 12:59:15 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Ian Sutton</title>
		<link>http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/comment-page-1/#comment-165</link>
		<dc:creator>Ian Sutton</dc:creator>
		<pubDate>Fri, 06 Mar 2009 13:11:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.headwaysoftware.com/blog/?p=158#comment-165</guid>
		<description>&lt;a href=&quot;#comment-102&quot; rel=&quot;nofollow&quot;&gt;@Itay Maman&lt;/a&gt; 
I do appreciate your more measured tone here ;-)

I just added a &lt;a href=&quot;http://www.headwaysoftware.com/blog/2009/03/travelin-lite/&quot; rel=&quot;nofollow&quot;&gt;new post&lt;/a&gt; which has some overlaps with this one, hence this retrospective comment/response.

-Ian</description>
		<content:encoded><![CDATA[<p><a href="#comment-102" rel="nofollow">@Itay Maman</a><br />
I do appreciate your more measured tone here <img src='http://www.headwaysoftware.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>I just added a <a href="http://www.headwaysoftware.com/blog/2009/03/travelin-lite/" rel="nofollow">new post</a> which has some overlaps with this one, hence this retrospective comment/response.</p>
<p>-Ian</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Itay Maman</title>
		<link>http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/comment-page-1/#comment-102</link>
		<dc:creator>Itay Maman</dc:creator>
		<pubDate>Thu, 04 Dec 2008 17:04:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.headwaysoftware.com/blog/?p=158#comment-102</guid>
		<description>Hi Ian, One more thought. 

Suppose you rewrite a program with tangles using a language that is similar to Java but supports structural subtyping. With such a language eradication of tangles is really easy. 

So, the new version of the program will have no tangles. Using tangle-count as a quality indicator, we improved the design by an infinite factor (from some n to zero).

Do you really think that the architecture of the new version of the program will never-erode? Do you think it will be much easier to maintain it?</description>
		<content:encoded><![CDATA[<p>Hi Ian, One more thought. </p>
<p>Suppose you rewrite a program with tangles using a language that is similar to Java but supports structural subtyping. With such a language eradication of tangles is really easy. </p>
<p>So, the new version of the program will have no tangles. Using tangle-count as a quality indicator, we improved the design by an infinite factor (from some n to zero).</p>
<p>Do you really think that the architecture of the new version of the program will never-erode? Do you think it will be much easier to maintain it?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Itay Maman</title>
		<link>http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/comment-page-1/#comment-101</link>
		<dc:creator>Itay Maman</dc:creator>
		<pubDate>Thu, 04 Dec 2008 14:15:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.headwaysoftware.com/blog/?p=158#comment-101</guid>
		<description>Hi Ian,

Thanks for making this post. Although I don&#039;t agree with some of the points, they are very well argued. 

I didn&#039;t mean to bash neither you nor S101. If it came out that way it was unintentional and I apologize for that. My problem is with the static analysis approach as a whole. I am not saying that the approach is always wrong. However, it is definitely sometimes wrong (see formal proof in link-1, below). 

I think the software development community does not yet know where exactly the boundaries of the approach lie. I am trying to help us draw these boundaries by highlighting examples where the approach does not work.

Anyway, in order to keep this debate manageable, I will only put my main comments here, starting from the most important one. 

&quot;in order for design items to be first class citizens in the code-base, we need to be able to see them and, especially, the interactions between them.&quot;

First, some programs enjoyed great benefits from design items that are not first class citizens in the code-base. Any external DSL (and to some extent, internal DSL) is not a first class citizen of the code base. Other examples: the property pattern, adaptive object models, table-driven programming.

Second, the introduction of interfaces to solve dependency issues makes it more difficult to see the static interaction between the collaborating classes. The statement in this quote is quite similar to the one made by Fowler&#039;s &quot;To Be Explicit&quot; article (see link-2). One of the examples there argues that the observer pattern makes relationship less explicit which is bad. However, this is at odds with the &quot;tangles are bad&quot; approach. Again, a small conundrum. 

I am not saying programmers cannot solve this conundrum by relying on their wits, experience and skills. I am just saying that indiscriminate application of what I call &quot;formulas&quot; is likely to get them into troubles.


&quot;As I said in the opening paragraph of the original post, the key for me is levels of abstraction above the raw code: architectural components within a code-base if you like.&quot;

Abstraction means losing (inessential) details. Could you rationalize why the details that are *not* shown by S101&#039;s views (in particular, runtime behavior) have a lesser impact on quality than the details that *are* shown? I assume this would be hard due to (again) the lack of this &quot;magic-quality-metric&quot;


&quot;In the case of findbugs, there are several instances where you can see that an architectural decision was made, only for this to become blurred and ultimately lost over time.&quot;

How do you know that the lost of the initial intention was not deliberate nor fruitful? 


&quot;but it is essentially up to you (the user, team, …) whether or not you choose to care about this&quot;

I couldn&#039;t agree more. The information exposed by static analysis needs to pass through a project-specific-filter. Without an &quot;external intervention&quot; it could be interpreted in many different, probably wrong, ways. 


Link-1: http://javadots.blogspot.com/2008/12/formalizing-paradox.html

Link-2: http://martinfowler.com/ieeeSoftware/explicit.pdf</description>
		<content:encoded><![CDATA[<p>Hi Ian,</p>
<p>Thanks for making this post. Although I don&#8217;t agree with some of the points, they are very well argued. </p>
<p>I didn&#8217;t mean to bash neither you nor S101. If it came out that way it was unintentional and I apologize for that. My problem is with the static analysis approach as a whole. I am not saying that the approach is always wrong. However, it is definitely sometimes wrong (see formal proof in link-1, below). </p>
<p>I think the software development community does not yet know where exactly the boundaries of the approach lie. I am trying to help us draw these boundaries by highlighting examples where the approach does not work.</p>
<p>Anyway, in order to keep this debate manageable, I will only put my main comments here, starting from the most important one. </p>
<p>&#8220;in order for design items to be first class citizens in the code-base, we need to be able to see them and, especially, the interactions between them.&#8221;</p>
<p>First, some programs enjoyed great benefits from design items that are not first class citizens in the code-base. Any external DSL (and to some extent, internal DSL) is not a first class citizen of the code base. Other examples: the property pattern, adaptive object models, table-driven programming.</p>
<p>Second, the introduction of interfaces to solve dependency issues makes it more difficult to see the static interaction between the collaborating classes. The statement in this quote is quite similar to the one made by Fowler&#8217;s &#8220;To Be Explicit&#8221; article (see link-2). One of the examples there argues that the observer pattern makes relationship less explicit which is bad. However, this is at odds with the &#8220;tangles are bad&#8221; approach. Again, a small conundrum. </p>
<p>I am not saying programmers cannot solve this conundrum by relying on their wits, experience and skills. I am just saying that indiscriminate application of what I call &#8220;formulas&#8221; is likely to get them into troubles.</p>
<p>&#8220;As I said in the opening paragraph of the original post, the key for me is levels of abstraction above the raw code: architectural components within a code-base if you like.&#8221;</p>
<p>Abstraction means losing (inessential) details. Could you rationalize why the details that are *not* shown by S101&#8242;s views (in particular, runtime behavior) have a lesser impact on quality than the details that *are* shown? I assume this would be hard due to (again) the lack of this &#8220;magic-quality-metric&#8221;</p>
<p>&#8220;In the case of findbugs, there are several instances where you can see that an architectural decision was made, only for this to become blurred and ultimately lost over time.&#8221;</p>
<p>How do you know that the lost of the initial intention was not deliberate nor fruitful? </p>
<p>&#8220;but it is essentially up to you (the user, team, …) whether or not you choose to care about this&#8221;</p>
<p>I couldn&#8217;t agree more. The information exposed by static analysis needs to pass through a project-specific-filter. Without an &#8220;external intervention&#8221; it could be interpreted in many different, probably wrong, ways. </p>
<p>Link-1: <a href="http://javadots.blogspot.com/2008/12/formalizing-paradox.html" rel="nofollow">http://javadots.blogspot.com/2008/12/formalizing-paradox.html</a></p>
<p>Link-2: <a href="http://martinfowler.com/ieeeSoftware/explicit.pdf" rel="nofollow">http://martinfowler.com/ieeeSoftware/explicit.pdf</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick Smacchia</title>
		<link>http://www.headwaysoftware.com/blog/2008/12/software-erosion-and-package-tangles/comment-page-1/#comment-99</link>
		<dc:creator>Patrick Smacchia</dc:creator>
		<pubDate>Wed, 03 Dec 2008 16:11:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.headwaysoftware.com/blog/?p=158#comment-99</guid>
		<description>Same problematic in the .NET world:
http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies</description>
		<content:encoded><![CDATA[<p>Same problematic in the .NET world:<br />
<a href="http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies" rel="nofollow">http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>

