<?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: Abstraction Does Not Reduce Complexity</title>
	<atom:link href="http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/feed/" rel="self" type="application/rss+xml" />
	<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/</link>
	<description>Thoughts on software development and related, by Abhijit Nadgouda</description>
	<lastBuildDate>Wed, 17 Mar 2010 22:27:34 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Abhijit Nadgouda</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-54013</link>
		<dc:creator>Abhijit Nadgouda</dc:creator>
		<pubDate>Mon, 21 May 2007 14:21:14 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-54013</guid>
		<description>Thanks for your input Prashant.</description>
		<content:encoded><![CDATA[<p>Thanks for your input Prashant.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Prashant Hegde</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-50369</link>
		<dc:creator>Prashant Hegde</dc:creator>
		<pubDate>Wed, 09 May 2007 08:57:32 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-50369</guid>
		<description>Abstraction is a mechanism available for human beings to tackle the complex problem. It is hardwired into our brain!

Our brain can effectively process few chunks of information effectively at a time. So, we tend to break the complex problem into many simpler ones and then solve those simpler ones and then &#039;synthesize&#039; these solutions and come up with the solution for the original complex problem. 

So, please note that as some of the authors recognized, coming up with a solution for a  complex problem involves both - breaking down and synthesis. 

So, what does abstraction achieve?
It hides details from other components. So, details need to depend on 
abstraction than the other way round. So, when you can change details without fearing about the effects these changes going to have on others. So, essentially what have achieved is - you have localized some of the complexity 
behind a very simple, innocent looking facade. But, the effect is very profound. In software engg. parlance, you have made your design more &#039;modular&#039;.

Now about, complexity of the solution itself - 
Complexity arises because of interrelationships between various modules of a system. If you can reduce the number of interrelationships ( called &#039;coupling&#039; in software engg parlance ) you have essentially reduced the complexity of the system at the same time you have improved the characteristics of your architecture like - modifiability, fragility etc. 

However, it is very important to distinguish between essential and accidental complexities. We should try to avoid accidental complexity at all costs.</description>
		<content:encoded><![CDATA[<p>Abstraction is a mechanism available for human beings to tackle the complex problem. It is hardwired into our brain!</p>
<p>Our brain can effectively process few chunks of information effectively at a time. So, we tend to break the complex problem into many simpler ones and then solve those simpler ones and then &#8217;synthesize&#8217; these solutions and come up with the solution for the original complex problem. </p>
<p>So, please note that as some of the authors recognized, coming up with a solution for a  complex problem involves both &#8211; breaking down and synthesis. </p>
<p>So, what does abstraction achieve?<br />
It hides details from other components. So, details need to depend on<br />
abstraction than the other way round. So, when you can change details without fearing about the effects these changes going to have on others. So, essentially what have achieved is &#8211; you have localized some of the complexity<br />
behind a very simple, innocent looking facade. But, the effect is very profound. In software engg. parlance, you have made your design more &#8216;modular&#8217;.</p>
<p>Now about, complexity of the solution itself &#8211;<br />
Complexity arises because of interrelationships between various modules of a system. If you can reduce the number of interrelationships ( called &#8216;coupling&#8217; in software engg parlance ) you have essentially reduced the complexity of the system at the same time you have improved the characteristics of your architecture like &#8211; modifiability, fragility etc. </p>
<p>However, it is very important to distinguish between essential and accidental complexities. We should try to avoid accidental complexity at all costs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kuldeep</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-49763</link>
		<dc:creator>kuldeep</dc:creator>
		<pubDate>Mon, 07 May 2007 14:13:15 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-49763</guid>
		<description>this discussion really is eye opening.</description>
		<content:encoded><![CDATA[<p>this discussion really is eye opening.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Labnotes &#187; Rounded Corners - 114</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17669</link>
		<dc:creator>Labnotes &#187; Rounded Corners - 114</dc:creator>
		<pubDate>Fri, 16 Mar 2007 20:54:55 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17669</guid>
		<description>[...] HR units? Abstracting doesn&#8217;t solve problems either, just moves them off to someone else. As Abhijit Nadgouda observes: A lot of times, especially in discussions, it has been implicitly considered that abstraction [...]</description>
		<content:encoded><![CDATA[<p>[...] HR units? Abstracting doesn&#8217;t solve problems either, just moves them off to someone else. As Abhijit Nadgouda observes: A lot of times, especially in discussions, it has been implicitly considered that abstraction [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Spawners 16thMarch07 at Madhur Kapoor&#8217;s Blog</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17381</link>
		<dc:creator>Spawners 16thMarch07 at Madhur Kapoor&#8217;s Blog</dc:creator>
		<pubDate>Fri, 16 Mar 2007 06:30:00 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17381</guid>
		<description>[...] Abstraction does not reduce complexity by Abhijit [...]</description>
		<content:encoded><![CDATA[<p>[...] Abstraction does not reduce complexity by Abhijit [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Abhijit Nadgouda</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17324</link>
		<dc:creator>Abhijit Nadgouda</dc:creator>
		<pubDate>Thu, 15 Mar 2007 05:45:55 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17324</guid>
		<description>Wow, Rahul, you have put it in much better words than I would have. I think this discussion is better than the post itself ;-)</description>
		<content:encoded><![CDATA[<p>Wow, Rahul, you have put it in much better words than I would have. I think this discussion is better than the post itself <img src='http://ifacethoughts.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rahul Baji</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17318</link>
		<dc:creator>Rahul Baji</dc:creator>
		<pubDate>Thu, 15 Mar 2007 04:16:16 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17318</guid>
		<description>An interesting discussion this.
I like the way WeaveJester puts forth the idea of the log vs trebuchet solution for crossing a stream. 
I would say that the reason we are able to discuss a log vs trebuchet solution is because we have abstracted the problem from crossing a stream to traveling from one point to another.

Once we leave the abstraction, and get into details- the log may be washed away by the current, there may be no logs available, there may be no equipment to reach the log across the two points etc. So the solution of a log is an solution of an abstracted problem, which will still need to be verified as a solution of the real problem of crossing the stream.

As we go up the abstraction, the realm of possible solutions widens. However we would need to go back down the abstraction to reach a tangible solution. 

So an solution to an abstracted problem would exactly be that- an abstract solution. In that sense, there is no running away from the complexity of a solution. 

So I would say, problem abstraction does reduce complexity, thus opening up an array of abstract solutions, but then the abstract solution would need to be ratified against the real problem which re-introduces complexity.</description>
		<content:encoded><![CDATA[<p>An interesting discussion this.<br />
I like the way WeaveJester puts forth the idea of the log vs trebuchet solution for crossing a stream.<br />
I would say that the reason we are able to discuss a log vs trebuchet solution is because we have abstracted the problem from crossing a stream to traveling from one point to another.</p>
<p>Once we leave the abstraction, and get into details- the log may be washed away by the current, there may be no logs available, there may be no equipment to reach the log across the two points etc. So the solution of a log is an solution of an abstracted problem, which will still need to be verified as a solution of the real problem of crossing the stream.</p>
<p>As we go up the abstraction, the realm of possible solutions widens. However we would need to go back down the abstraction to reach a tangible solution. </p>
<p>So an solution to an abstracted problem would exactly be that- an abstract solution. In that sense, there is no running away from the complexity of a solution. </p>
<p>So I would say, problem abstraction does reduce complexity, thus opening up an array of abstract solutions, but then the abstract solution would need to be ratified against the real problem which re-introduces complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Abhijit Nadgouda</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17284</link>
		<dc:creator>Abhijit Nadgouda</dc:creator>
		<pubDate>Wed, 14 Mar 2007 11:20:15 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17284</guid>
		<description>Weavejester, I agree with you that there can be simpler solutions. However, within a solution, the complexity is still constant. Abstraction enables us to present the solution in a way that it is simple to others. Without abstraction, it could have been more difficult. But the complexity is still there.

Rune, I agree with you when you say that it lets the manufacturer have less information. However, it does not mean that the complexity involved in building a car has reduced. Complexity in building a car for the manufacturer has reduced, maybe because it can now be outsourced, it has become simpler for the user to use because he/she understands what he sees. For the user, the manufacturer, who assembles the different components to build a car is a user of those components, the complexity sure decreases. However, not for the builder. Where I am coming from is that the software engineer who is trying to solve the domain problem cannot ignore its complexity on the basis of abstraction. Abstraction is for the user, with whom the piece of software will communicate with. Abstraction sure helps in designing good interfaces.

Abstraction is useful for the builder too, to analyze and hence simplify. The complexity is as it is, but abstraction helps the builder in consuming it piece by piece. The complexity will still have to be acknowledged and enough care taken while building the software.

I realised in some of my conversations that the decisions were simply taken on the basis of abstractions, without acknowledging the complexity involved. To use your example, it is easy to create forms in .Net, but the one who created the framework which lets you do that had to still consider all the complexity.

</description>
		<content:encoded><![CDATA[<p>Weavejester, I agree with you that there can be simpler solutions. However, within a solution, the complexity is still constant. Abstraction enables us to present the solution in a way that it is simple to others. Without abstraction, it could have been more difficult. But the complexity is still there.</p>
<p>Rune, I agree with you when you say that it lets the manufacturer have less information. However, it does not mean that the complexity involved in building a car has reduced. Complexity in building a car for the manufacturer has reduced, maybe because it can now be outsourced, it has become simpler for the user to use because he/she understands what he sees. For the user, the manufacturer, who assembles the different components to build a car is a user of those components, the complexity sure decreases. However, not for the builder. Where I am coming from is that the software engineer who is trying to solve the domain problem cannot ignore its complexity on the basis of abstraction. Abstraction is for the user, with whom the piece of software will communicate with. Abstraction sure helps in designing good interfaces.</p>
<p>Abstraction is useful for the builder too, to analyze and hence simplify. The complexity is as it is, but abstraction helps the builder in consuming it piece by piece. The complexity will still have to be acknowledged and enough care taken while building the software.</p>
<p>I realised in some of my conversations that the decisions were simply taken on the basis of abstractions, without acknowledging the complexity involved. To use your example, it is easy to create forms in .Net, but the one who created the framework which lets you do that had to still consider all the complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rune Juhl-Petersen</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17283</link>
		<dc:creator>Rune Juhl-Petersen</dc:creator>
		<pubDate>Wed, 14 Mar 2007 11:09:10 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17283</guid>
		<description>I disagree with you on this one Abhijit. Abstraction does make it less complex to make a car. Concepts like engine, brakes, exhaust, seats, chassis, gearbox, headlights etc. are all abstracts and lets the manufacturer outsource, reuse or buy parts from elsewhere. The car manufacturer actually doesn&#039;t need to know the details of how each part works or is implemented. He just needs to know they can be used.

Abstraction lets you break a complex problem into several simpler ones. You don&#039;t have to keep everything in you head all the time...  It lets you build upon what has already been done and focus on what extra functionality you want..  much simpler than starting from scratch. I can make a form in .net in a few lines of code, I don&#039;t need to know anything about hardware, drivers and operating system. I find this less complex.

When it comes to user requirements I find that a lot of clients have very specific demands. Once I have helped then make the requirements more abstract, the requirements are much simpler to implement. 

As abstraction lets us solve problems that are otherwise too complex, I think abstractions provide less complexity.</description>
		<content:encoded><![CDATA[<p>I disagree with you on this one Abhijit. Abstraction does make it less complex to make a car. Concepts like engine, brakes, exhaust, seats, chassis, gearbox, headlights etc. are all abstracts and lets the manufacturer outsource, reuse or buy parts from elsewhere. The car manufacturer actually doesn&#8217;t need to know the details of how each part works or is implemented. He just needs to know they can be used.</p>
<p>Abstraction lets you break a complex problem into several simpler ones. You don&#8217;t have to keep everything in you head all the time&#8230;  It lets you build upon what has already been done and focus on what extra functionality you want..  much simpler than starting from scratch. I can make a form in .net in a few lines of code, I don&#8217;t need to know anything about hardware, drivers and operating system. I find this less complex.</p>
<p>When it comes to user requirements I find that a lot of clients have very specific demands. Once I have helped then make the requirements more abstract, the requirements are much simpler to implement. </p>
<p>As abstraction lets us solve problems that are otherwise too complex, I think abstractions provide less complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: WeaveJester</title>
		<link>http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/comment-page-1/#comment-17247</link>
		<dc:creator>WeaveJester</dc:creator>
		<pubDate>Tue, 13 Mar 2007 21:30:29 +0000</pubDate>
		<guid isPermaLink="false">http://ifacethoughts.net/2007/03/14/abstraction-does-not-reduce-complexity/#comment-17247</guid>
		<description>The complexity of the &lt;em&gt;problem&lt;/em&gt; clearly remains constant, but I wonder about the complexity of the &lt;em&gt;solution&lt;/em&gt;. If you want to get across a stream, there are solutions more complex than others; a log placed to bridge the gap would be one of the simpler, whilst a trebuchet combined with an improved parachute one of the more complex.

Thus, it seems perfectly possible that the amount of complexity in a program could be reduced (as the program represents the solution, rather than the problem), and it also seems possible that, in some cases, abstraction could achieve this. Of course, this does nothing to reduce the complexity of the problem, but at least in theory, the problem is a fixed constant anyway.</description>
		<content:encoded><![CDATA[<p>The complexity of the <em>problem</em> clearly remains constant, but I wonder about the complexity of the <em>solution</em>. If you want to get across a stream, there are solutions more complex than others; a log placed to bridge the gap would be one of the simpler, whilst a trebuchet combined with an improved parachute one of the more complex.</p>
<p>Thus, it seems perfectly possible that the amount of complexity in a program could be reduced (as the program represents the solution, rather than the problem), and it also seems possible that, in some cases, abstraction could achieve this. Of course, this does nothing to reduce the complexity of the problem, but at least in theory, the problem is a fixed constant anyway.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
