<?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: Did OOP do this to us?</title>
	<atom:link href="http://sob.apotheon.org/?feed=rss2&#038;p=935" rel="self" type="application/rss+xml" />
	<link>http://sob.apotheon.org/?p=935</link>
	<description>[ scion of backronymics ]</description>
	<lastBuildDate>Thu, 09 Sep 2010 19:01:18 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: robertfo</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-404810</link>
		<dc:creator>robertfo</dc:creator>
		<pubDate>Tue, 02 Mar 2010 00:04:05 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-404810</guid>
		<description>Years ago a developer would spend the bulk of their time solving a problem and then coding the solution. Now a developer solves the problem and spends the bulk of their time coding the solution. Then some poor bastard has to maintain the mess left behind. OOP sucks beyound belief.  

Genius is taking something complex and making it simple; stupidity is taking something simple and making it complex; Enter OOP languages such as c# and Java. 

Exposing a method; consuming a class; delegates, events, virtual methods, encapsalation, operator overloading, derived classes, base classes, constructors, destructors; How about kiss my ass with the terminolgy from demented digital geeks and speaking plain English to start with. I guess that would make this all too easy and boring.</description>
		<content:encoded><![CDATA[<p>Years ago a developer would spend the bulk of their time solving a problem and then coding the solution. Now a developer solves the problem and spends the bulk of their time coding the solution. Then some poor bastard has to maintain the mess left behind. OOP sucks beyound belief.  </p>
<p>Genius is taking something complex and making it simple; stupidity is taking something simple and making it complex; Enter OOP languages such as c# and Java. </p>
<p>Exposing a method; consuming a class; delegates, events, virtual methods, encapsalation, operator overloading, derived classes, base classes, constructors, destructors; How about kiss my ass with the terminolgy from demented digital geeks and speaking plain English to start with. I guess that would make this all too easy and boring.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: roberto</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-404695</link>
		<dc:creator>roberto</dc:creator>
		<pubDate>Fri, 05 Feb 2010 19:41:48 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-404695</guid>
		<description>The key to a software systems development is to use a programming language that is 1. easy to write, 2. easy to read, 3. easy to maintain. 

OOP fails on all 3 points. OOP doesn&#039;t fail a little, it fails a lot. 

Code reuse is way down on the list as being important; speed should not even be a consideration because this is more than ever processor/hardware dependent.  

Within 10 years OOP will be phased out by the next big IT hype job. It will likely be all drag and drop. The best developers will be those who got their first set of Lego&#039;s at 6 months old.</description>
		<content:encoded><![CDATA[<p>The key to a software systems development is to use a programming language that is 1. easy to write, 2. easy to read, 3. easy to maintain. </p>
<p>OOP fails on all 3 points. OOP doesn't fail a little, it fails a lot. </p>
<p>Code reuse is way down on the list as being important; speed should not even be a consideration because this is more than ever processor/hardware dependent.  </p>
<p>Within 10 years OOP will be phased out by the next big IT hype job. It will likely be all drag and drop. The best developers will be those who got their first set of Lego's at 6 months old.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Twitter Trackbacks for Chad Perrin: SOB » Did OOP do this to us? [apotheon.org] on Topsy.com</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-400738</link>
		<dc:creator>Twitter Trackbacks for Chad Perrin: SOB » Did OOP do this to us? [apotheon.org] on Topsy.com</dc:creator>
		<pubDate>Sat, 29 Aug 2009 05:37:24 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-400738</guid>
		<description>[...] First Tweet Feb 21, 2009       addos addos    Why OOP sucks..   view retweet [...]</description>
		<content:encoded><![CDATA[<p>[...] First Tweet Feb 21, 2009       addos addos    Why OOP sucks..   view retweet [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vukoje</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394933</link>
		<dc:creator>Vukoje</dc:creator>
		<pubDate>Tue, 03 Mar 2009 23:07:49 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394933</guid>
		<description>Excellent point. I will just quote Spiderman: &quot;With great power comes great responsibility.&quot; Funny but it&#039;s true.</description>
		<content:encoded><![CDATA[<p>Excellent point. I will just quote Spiderman: "With great power comes great responsibility." Funny but it's true.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Programming news: Code Contracts for .NET, Appcelerator's latest Titanium release, the dangers of OOP &#124; Programming and Development &#124; TechRepublic.com</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394911</link>
		<dc:creator>Programming news: Code Contracts for .NET, Appcelerator's latest Titanium release, the dangers of OOP &#124; Programming and Development &#124; TechRepublic.com</dc:creator>
		<pubDate>Mon, 02 Mar 2009 12:48:17 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394911</guid>
		<description>[...] blogger Chad Perrin wrote on his personal blog some well thought out, not-so-kind words to say about object-oriented programming (OOP). I feel roughly the same way, and I know a lot of the readers here do [...]</description>
		<content:encoded><![CDATA[<p>[...] blogger Chad Perrin wrote on his personal blog some well thought out, not-so-kind words to say about object-oriented programming (OOP). I feel roughly the same way, and I know a lot of the readers here do [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Labnotes &#187; Rounded Corners 226 – OOP didn&#8217;t do this &#8230; OOP just held our hats</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394861</link>
		<dc:creator>Labnotes &#187; Rounded Corners 226 – OOP didn&#8217;t do this &#8230; OOP just held our hats</dc:creator>
		<pubDate>Sat, 28 Feb 2009 05:42:15 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394861</guid>
		<description>[...] holder. I love the concluding remark. Spot on, Chad: OOP didn&#8217;t do this to us; we did it to ourselves. OOP just held our [...]</description>
		<content:encoded><![CDATA[<p>[...] holder. I love the concluding remark. Spot on, Chad: OOP didn&#8217;t do this to us; we did it to ourselves. OOP just held our [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: apotheon</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394770</link>
		<dc:creator>apotheon</dc:creator>
		<pubDate>Mon, 23 Feb 2009 01:57:09 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394770</guid>
		<description>Ah aimz ta pleeze.</description>
		<content:encoded><![CDATA[<p>Ah aimz ta pleeze.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Linda</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394765</link>
		<dc:creator>Linda</dc:creator>
		<pubDate>Mon, 23 Feb 2009 01:02:23 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394765</guid>
		<description>Thanks ed :)</description>
		<content:encoded><![CDATA[<p>Thanks ed :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chad Perrin: SOB &#187; Software design is not architecture.</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394762</link>
		<dc:creator>Chad Perrin: SOB &#187; Software design is not architecture.</dc:creator>
		<pubDate>Sun, 22 Feb 2009 23:00:15 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394762</guid>
		<description>[...] seems that, when one discusses software architecture at all, someone inevitably brings up building architecture. The two are compared, and conclusions [...]</description>
		<content:encoded><![CDATA[<p>[...] seems that, when one discusses software architecture at all, someone inevitably brings up building architecture. The two are compared, and conclusions [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Linda</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394757</link>
		<dc:creator>Linda</dc:creator>
		<pubDate>Sun, 22 Feb 2009 21:11:35 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394757</guid>
		<description>Rod:  &lt;i&gt;The Case Tool Makers of Old&lt;/i&gt; I was referring to were the people who made tools like Excelerator in the late 80&#039;s and early 90&#039;s.  Here is a &lt;a href=&quot;http://books.google.co.nz/books?id=aJn5TnDT_Q0C&amp;dq=excelerator+case+tool&amp;source=gbs_summary_s&amp;cad=0&quot; title=&quot;link to a book on CASE tools&quot;&gt;link&lt;/a&gt;.

&lt;strong style=&quot;color: #aa0000&quot;&gt;editor&#039;s note: I&#039;m not sure what you initially intended to do with that link, but as posted it ended up kind of broken.  I hope my edit is suitable.

In the late 80&#039;s and early 90&#039;s, we were all very serious about being Software &lt;b&gt;Engineers&lt;/b&gt;, and along with that came our single-minded focus on standards, rigor, process, replicability and metrification.  As the Software Development Manager of a very large government enterprise, my aim was to dramatically reduce the costs of development.  These costs included not just the original investment in development, but all costs associated with it over its entire working life.

With this aim in mind, we become very very efficient as developers, despite the fact that we still had a lot to learn about the science.  The quality of the software we produced was very high, as demonstrated by the fact that much of it is still in use.  This is especially interesting given the fact that we did not have any of the things we now regard as essential to software development, ie the Internet, or the vast array of fundamental libraries like Apache Commons or any of &lt;i&gt;The Great Frameworks&lt;/i&gt; we have been talking about.  We were still inventing all of that stuff.

So, what happened?  What happened was Windows.  Suddenly, our users didn&#039;t care about high speed data entry optimizations, or even reliability and usability - if it didn&#039;t look like Windows, they didn&#039;t want it.  Having Windows on your PC was a status symbol - you were important.  In a flash, Windows was everywhere throughout the whole organization, and you couldn&#039;t get budget approval on an industrial strength DOS/CUI application to save your soul.  The market for CASE Tools and CUI 4GLs vanished, because no one cared about the costs of development any more, so long as it worked with Windows.

Of course that&#039;s an oversimplification, but all of us had to learn how to program with Windows as fast as possible, and an entire world of basic knowledge and professional best practice got left behind in the mass exodus.  Still, human beings have not changed, and once again we are dealing with the problem of complexity.  Back then, we solved the problem of complexity using standards, tools and methodologies specifically designed to dampen down and resolve that complexity.  Today, by contrast, we are compounding complexity through unrestrained promotion of diversity, by multiplying tools, languages and frameworks, and dare I say it, by being completely uncritical of amateurism.

Diversity and choice are very good things in their place, but diversity can easily collapse into chaos, and too many choices can lead to intractable confusion and dissatisfaction.  As we are now discovering.</description>
		<content:encoded><![CDATA[<p>Rod:  <i>The Case Tool Makers of Old</i> I was referring to were the people who made tools like Excelerator in the late 80's and early 90's.  Here is a <a href="http://books.google.co.nz/books?id=aJn5TnDT_Q0C&amp;dq=excelerator+case+tool&amp;source=gbs_summary_s&amp;cad=0" title="link to a book on CASE tools">link</a>.</p>
<p><strong style="color: #aa0000">editor's note: I'm not sure what you initially intended to do with that link, but as posted it ended up kind of broken.  I hope my edit is suitable.</strong></p>
<p>In the late 80's and early 90's, we were all very serious about being Software <b>Engineers</b>, and along with that came our single-minded focus on standards, rigor, process, replicability and metrification.  As the Software Development Manager of a very large government enterprise, my aim was to dramatically reduce the costs of development.  These costs included not just the original investment in development, but all costs associated with it over its entire working life.</p>
<p>With this aim in mind, we become very very efficient as developers, despite the fact that we still had a lot to learn about the science.  The quality of the software we produced was very high, as demonstrated by the fact that much of it is still in use.  This is especially interesting given the fact that we did not have any of the things we now regard as essential to software development, ie the Internet, or the vast array of fundamental libraries like Apache Commons or any of <i>The Great Frameworks</i> we have been talking about.  We were still inventing all of that stuff.</p>
<p>So, what happened?  What happened was Windows.  Suddenly, our users didn't care about high speed data entry optimizations, or even reliability and usability &#8211; if it didn't look like Windows, they didn't want it.  Having Windows on your PC was a status symbol &#8211; you were important.  In a flash, Windows was everywhere throughout the whole organization, and you couldn't get budget approval on an industrial strength DOS/CUI application to save your soul.  The market for CASE Tools and CUI 4GLs vanished, because no one cared about the costs of development any more, so long as it worked with Windows.</p>
<p>Of course that's an oversimplification, but all of us had to learn how to program with Windows as fast as possible, and an entire world of basic knowledge and professional best practice got left behind in the mass exodus.  Still, human beings have not changed, and once again we are dealing with the problem of complexity.  Back then, we solved the problem of complexity using standards, tools and methodologies specifically designed to dampen down and resolve that complexity.  Today, by contrast, we are compounding complexity through unrestrained promotion of diversity, by multiplying tools, languages and frameworks, and dare I say it, by being completely uncritical of amateurism.</p>
<p>Diversity and choice are very good things in their place, but diversity can easily collapse into chaos, and too many choices can lead to intractable confusion and dissatisfaction.  As we are now discovering.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: apotheon</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394755</link>
		<dc:creator>apotheon</dc:creator>
		<pubDate>Sun, 22 Feb 2009 20:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394755</guid>
		<description>###### cmon now:

&gt; you really need to find a more positive and constructive way to react to criticism; get over yourself.

To whom, exactly, was that directed?


###### Rod:

&gt; &quot;Why does it seem like everyone thinks (s)he knows this stuff, when it&#039;s pretty clear that they all fail to grasp it?&quot; — Because whoever does not project the appearance of knowing this stuff, gets shoved out of the company.

Good point.

&gt; How about this for snarkiness:
&gt;
&gt; f(a,b,c) is not object-oriented. However, a.f(b,c) is object-oriented.

That sounds about right, if snark is where you&#039;re going.

I&#039;d say that, in practical terms, &quot;object oriented programming&quot; is the inevitable perversion of what what the inventor of the term intended -- perversion, because what he really intended was more like &quot;message oriented programming&quot;, and inevitable, because this is really what we should have expected as a result of having called it object oriented rather than message oriented.


###### development:

&gt; Also see *Why Object Oriented Programming (OOP) is not always good*

Thanks.  I&#039;ll give that a look.


###### Ed Kirwan:

&gt; Travis is, presumably, bemoaning unneccessary complexity, rather than an architecture&#039;s necssary complexity; an architecture must, afterall, entail some complexity in specifying how a program is to be structured, how quickly external events must be serviced, how data are to be persisted, how load-modules are to be deployed, etc.

Yes, I very clearly got the sense he bemoaned unnecessary complexity.  It is always possible for a building to be over-architected just as a program can be over-architected.  With software, though, we have far greater practical potential for that, in part because there is much more focus in the software programming world on inventing fantastic new development methodologies that actually enable this kind of sprawling complexity.

The result of all this is that we often see unnecessary complexity in software design to a degree that we *don&#039;t* see in building design -- and that&#039;s what he was talking about.

&gt; Are you saying that architectures cause a worse separation of concerns than would be the case if they did not exist?

What I&#039;m saying is that bad software design (i.e., software &quot;architecture&quot;) via misapplied object oriented programming principles is making things worse.

&gt; If we side-step the possible misplaced modifier, Travis appears to be working with applications that don&#039;t do anything. I&#039;ve never seen an application that doesn&#039;t do anything, that does perfectly nothing.

I took his statement to mean &quot;Without doing anything *new*&quot;.

&gt; Or perhaps they were both exaggerating.

I get the impression you&#039;re either engaging in satire or over-thinking what was said in a manner similar to the way a lot of software is over-architected.

&gt; Correct me if I&#039;m wrong, but you seem to be dividing agency into human factors and non-human factors, and particularly that human factors contribute most to software&#039;s balooning complexity.

I skipped over the step where I might have made it excruciatingly clear that the problem -- as well as the solution -- is in how design principles are applied, given two sets of design principles that aren&#039;t just completely wrong-headed, rather than in the design principles themselves.  Furthermore, you seem to have overlooked the obvious question of whether more modularity and less complexity is *always* good.  While it is *usually* good, from a starting point of the way things are typically done, there are limits beyond which one reaches at point of diminishing returns, if not actual counterproductive overapplication of what was previously a good thing.

. . . but as much as you&#039;re apparently overthinking all this, I rather suspect you&#039;re capable of realizing that yourself, and are being intentionally obtuse to try to undermine what others (myself included) have said.

&gt; Given that structured programming mitigates spaghetti code, can we infer from your statement that OOP makes structured programming less attractive than some non-OOP programming technique?

You can infer that if you want to -- but I don&#039;t think that&#039;s really a reasonable inference.

Object oriented design is, in some ways, basically a form of &quot;structured&quot; programming.  It allows one to implement separation of concerns more &quot;easily&quot; (for some definition of &quot;easy&quot;) than straightforward imperative, weakly procedural design.  That gives your program a greater appearance of order at first glance, though if misapplied it won&#039;t help things as much as one might think because:

1. Each of those implementations of separated concerns may contain a smaller discrete mess of spaghetti.
2. The whole collection of implementations of separated concerns may be tied together in a manner that is reminiscent of spaghetti.
3. If the concerns are separated in a manner that does not fit into a consistent, conceptual theme for the design of the system, tighter coupling and more complex inter-object relationships are unavoidable.

The spaghetti code becomes more &quot;attractive&quot; because one can recognize that there was a lot of effort put into designing class hierarchies and there is a rigidly specified structure to the program, but that doesn&#039;t mean it&#039;s actually conceptually clear.  If it&#039;s not conceptually clear, you basically have spaghetti code again -- just a different recipe for spaghetti.

I guess maybe it&#039;s actually linguine code.

&gt; I&#039;m curious to understand whether you&#039;re implying that a causal thread runs through these three points.

I might call it more of a causal *chain*, if I was inclined to go this metaphorical route -- but I think such a metaphor breaks down if examined too closely.

&gt; are you saying that software is getting bigger and more complicated because concerns are not separated in as meaningful a way as they could? I will presume you are suggesting causality here, that insufficient separation of concerns causes unneccessary complexity.

It is one causal factor, within the context of object oriented design, at least.

&gt; The logical link between the first and second point raises the question: are you suggesting that encapsulation itself leads to a less meaningful separation of concerns than some other programming technique?

No.  I&#039;m suggesting that *people* who employ encapsulating programming techniques *poorly* produce less meaningful separation of concerns than those who do so *well* -- and that, as a style of encapsulating programming technique that everybody thinks (s)he understands well, the object oriented approach to programming is often abused toward that end.</description>
		<content:encoded><![CDATA[<h6>cmon now:</h6>
<blockquote>
<p>you really need to find a more positive and constructive way to react to criticism; get over yourself.</p>
</blockquote>
<p>To whom, exactly, was that directed?</p>
<h6>Rod:</h6>
<blockquote>
<p>"Why does it seem like everyone thinks (s)he knows this stuff, when it's pretty clear that they all fail to grasp it?" — Because whoever does not project the appearance of knowing this stuff, gets shoved out of the company.</p>
</blockquote>
<p>Good point.</p>
<blockquote>
<p>How about this for snarkiness:</p>
<p>f(a,b,c) is not object-oriented. However, a.f(b,c) is object-oriented.</p>
</blockquote>
<p>That sounds about right, if snark is where you're going.</p>
<p>I'd say that, in practical terms, "object oriented programming" is the inevitable perversion of what what the inventor of the term intended &#8212; perversion, because what he really intended was more like "message oriented programming", and inevitable, because this is really what we should have expected as a result of having called it object oriented rather than message oriented.</p>
<h6>development:</h6>
<blockquote>
<p>Also see <em>Why Object Oriented Programming (OOP) is not always good</em></p>
</blockquote>
<p>Thanks.  I'll give that a look.</p>
<h6>Ed Kirwan:</h6>
<blockquote>
<p>Travis is, presumably, bemoaning unneccessary complexity, rather than an architecture's necssary complexity; an architecture must, afterall, entail some complexity in specifying how a program is to be structured, how quickly external events must be serviced, how data are to be persisted, how load-modules are to be deployed, etc.</p>
</blockquote>
<p>Yes, I very clearly got the sense he bemoaned unnecessary complexity.  It is always possible for a building to be over-architected just as a program can be over-architected.  With software, though, we have far greater practical potential for that, in part because there is much more focus in the software programming world on inventing fantastic new development methodologies that actually enable this kind of sprawling complexity.</p>
<p>The result of all this is that we often see unnecessary complexity in software design to a degree that we <em>don't</em> see in building design &#8212; and that's what he was talking about.</p>
<blockquote>
<p>Are you saying that architectures cause a worse separation of concerns than would be the case if they did not exist?</p>
</blockquote>
<p>What I'm saying is that bad software design (i.e., software "architecture") via misapplied object oriented programming principles is making things worse.</p>
<blockquote>
<p>If we side-step the possible misplaced modifier, Travis appears to be working with applications that don't do anything. I've never seen an application that doesn't do anything, that does perfectly nothing.</p>
</blockquote>
<p>I took his statement to mean "Without doing anything <em>new</em>".</p>
<blockquote>
<p>Or perhaps they were both exaggerating.</p>
</blockquote>
<p>I get the impression you're either engaging in satire or over-thinking what was said in a manner similar to the way a lot of software is over-architected.</p>
<blockquote>
<p>Correct me if I'm wrong, but you seem to be dividing agency into human factors and non-human factors, and particularly that human factors contribute most to software's balooning complexity.</p>
</blockquote>
<p>I skipped over the step where I might have made it excruciatingly clear that the problem &#8212; as well as the solution &#8212; is in how design principles are applied, given two sets of design principles that aren't just completely wrong-headed, rather than in the design principles themselves.  Furthermore, you seem to have overlooked the obvious question of whether more modularity and less complexity is <em>always</em> good.  While it is <em>usually</em> good, from a starting point of the way things are typically done, there are limits beyond which one reaches at point of diminishing returns, if not actual counterproductive overapplication of what was previously a good thing.</p>
<p>. . . but as much as you're apparently overthinking all this, I rather suspect you're capable of realizing that yourself, and are being intentionally obtuse to try to undermine what others (myself included) have said.</p>
<blockquote>
<p>Given that structured programming mitigates spaghetti code, can we infer from your statement that OOP makes structured programming less attractive than some non-OOP programming technique?</p>
</blockquote>
<p>You can infer that if you want to &#8212; but I don't think that's really a reasonable inference.</p>
<p>Object oriented design is, in some ways, basically a form of "structured" programming.  It allows one to implement separation of concerns more "easily" (for some definition of "easy") than straightforward imperative, weakly procedural design.  That gives your program a greater appearance of order at first glance, though if misapplied it won't help things as much as one might think because:</p>
<ol>
<li>Each of those implementations of separated concerns may contain a smaller discrete mess of spaghetti.</li>
<li>The whole collection of implementations of separated concerns may be tied together in a manner that is reminiscent of spaghetti.</li>
<li>If the concerns are separated in a manner that does not fit into a consistent, conceptual theme for the design of the system, tighter coupling and more complex inter-object relationships are unavoidable.</li>
</ol>
<p>The spaghetti code becomes more "attractive" because one can recognize that there was a lot of effort put into designing class hierarchies and there is a rigidly specified structure to the program, but that doesn't mean it's actually conceptually clear.  If it's not conceptually clear, you basically have spaghetti code again &#8212; just a different recipe for spaghetti.</p>
<p>I guess maybe it's actually linguine code.</p>
<blockquote>
<p>I'm curious to understand whether you're implying that a causal thread runs through these three points.</p>
</blockquote>
<p>I might call it more of a causal <em>chain</em>, if I was inclined to go this metaphorical route &#8212; but I think such a metaphor breaks down if examined too closely.</p>
<blockquote>
<p>are you saying that software is getting bigger and more complicated because concerns are not separated in as meaningful a way as they could? I will presume you are suggesting causality here, that insufficient separation of concerns causes unneccessary complexity.</p>
</blockquote>
<p>It is one causal factor, within the context of object oriented design, at least.</p>
<blockquote>
<p>The logical link between the first and second point raises the question: are you suggesting that encapsulation itself leads to a less meaningful separation of concerns than some other programming technique?</p>
</blockquote>
<p>No.  I'm suggesting that <em>people</em> who employ encapsulating programming techniques <em>poorly</em> produce less meaningful separation of concerns than those who do so <em>well</em> &#8212; and that, as a style of encapsulating programming technique that everybody thinks (s)he understands well, the object oriented approach to programming is often abused toward that end.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ed Kirwan</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394753</link>
		<dc:creator>Ed Kirwan</dc:creator>
		<pubDate>Sun, 22 Feb 2009 11:11:29 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394753</guid>
		<description>Hej, Chad.

Congratulations on having written an interesting article and thank you for it.

I hope you have a moment for some comment.

To begin with, you quote Travis&#039;s writing, &#039;My point is that the architectural complexity of these applications inhibit a person&#039;s understanding of the code.&#039; This sounds a little like saying that the complexity of the blueprint of a building inhibits a builder&#039;s understanding of that building.

Travis is, presumably, bemoaning unneccessary complexity, rather than an architecture&#039;s necssary complexity; an architecture must, afterall, entail some complexity in specifying how a program is to be structured, how quickly external events must be serviced, how data are to be persisted, how load-modules are to be deployed, etc. If this is his point (I did not read his article), then it is a fair one, but I&#039;m a little uncertain as to how this melds with your thrust, &#039; … that software is getting bigger and more complicated without actually separating concerns in as meaningful a way as it could.&#039; Are you saying that architectures cause a worse separation of concerns than would be the case if they did not exist?

To the next line of the quote, &#039;Without actually doing anything, applications are becoming too complex to understand, build, and maintain.&#039; If true, this is surely a shocker. If we side-step the possible misplaced modifier, Travis appears to be working with applications that don&#039;t do anything. I&#039;ve never seen an application that doesn&#039;t do anything, that does perfectly nothing.

What might that look like? I presume it wouldn&#039;t look like anything, as if I can see it, it arguably does something: it presents itself to my senses. Applications that do nothing must be completely invisible. They don&#039;t appear in GUIs. They reveal themselves not even to task manager snapshots of our running systems. They just sit there, buisily doing nothing. Who is writing these applications?

And whoever is writing them, they seem to be doing a poor job, for these applications that do nothing are becoming too complex to understand (building and maintaining them is perhaps a lesser issue). This is an extraordinary indictment of our IT industry. We note that they are not yet too complicated to understand, they&#039;re just on their way to becoming too complicated to understand. This conjures images of genuinely concerned individiuals, fretting, sweating, somehow fully aware of the furious juggernaut of incomprehensibility thundering towards them as they produce more and more perfectly useless code, yet powerless to leap out of its way.

Assaf continues this IT-scandal exposé by revealing that research in the field of software uselessness has advanced to a point of some sophistication: some of these void-technologists are even building layers that, &#039; Clearly … cancel each other out.&#039;

Or perhaps they were both exaggerating.

And this was exaggeration, then his point must be taken somewhat lightly, which is a shame as then we&#039;re not quite sure what the point was.

Chad, while not guilty of the above, you yourself perhaps have some points to defend.

You say that, &#039; … people are the proximate cause - people who don&#039;t know what the hell they&#039;re doing. These people accept all the marketing for OOP, which states that it&#039;ll make your code more modular and more stable and just generally better. It won&#039;t.&#039; Correct me if I&#039;m wrong, but you seem to be dividing agency into human factors and non-human factors, and particularly that human factors contribute most to software&#039;s balooning complexity. Yet in just the paragraph before you claim, &#039; … certain older development philosophies (like &quot;the Unix philosophy&quot;) that provided significantly better modularity and significantly reduced complexity.&#039; Doesn&#039;t this credit non-human factors (the philosophy) with success rather than the very human factor of the Unix programmers themselves?

You then proceed to assert that OOP, &#039; … sure does make spaghetti code a lot more attractive.&#039;

I&#039;m afraid I don&#039;t have a definition of what spaghetti code is, so let&#039;s take Wiki&#039;s:


Spaghetti code is a pejorative term for source code which has a complex and tangled control structure, especially one using many GOTOs, exceptions, threads, or other &quot;unstructured&quot; branching constructs. It is named such because program flow tends to look like a bowl of spaghetti, i.e. twisted and tangled. Spaghetti code can be caused by several factors, including inexperienced programmers and a complex program which has been continuously modified over a long life cycle. Structured programming greatly decreased the incidence of spaghetti code, and is widely regarded as one of the most important advances in programming history.


Given that structured programming mitigates spaghetti code, can we infer from your statement that OOP makes  structured programming less attractive than some non-OOP programming technique? Could you explain how?

Also, and again correct me if I&#039;m wrong, allow me to tease out the overall flow of your article. You suggest that OOP&#039;s encapsulation enables large software development but this development can create such large products that the individual pieces themselves are of poor quality. You then suggest that software is getting bigger and more complicated without actually separating concerns in as meaningful a way as it could, and finally that people who don&#039;t know what the hell they&#039;re doing are the cause of this. I&#039;m curious to understand whether you&#039;re implying that a causal thread runs through these three points.

You make your third point admirably clearly: people are the cause of software&#039;s becoming bigger and more complicated without sufficiently meaningful separation of concerns. If we could examine with the second point, are you saying that software is getting bigger and more complicated because concerns are not separated in as meaningful a way as they could? I will presume you are suggesting causality here, that insufficient separation of concerns causes unneccessary complexity.

The logical link between the first and second point raises the question: are you suggesting that encapsulation itself leads to a less meaningful separation of concerns than some other programming technique? If so, can you recommend a superior approach?

Ed Kirwan</description>
		<content:encoded><![CDATA[<p>Hej, Chad.</p>
<p>Congratulations on having written an interesting article and thank you for it.</p>
<p>I hope you have a moment for some comment.</p>
<p>To begin with, you quote Travis's writing, 'My point is that the architectural complexity of these applications inhibit a person's understanding of the code.' This sounds a little like saying that the complexity of the blueprint of a building inhibits a builder's understanding of that building.</p>
<p>Travis is, presumably, bemoaning unneccessary complexity, rather than an architecture's necssary complexity; an architecture must, afterall, entail some complexity in specifying how a program is to be structured, how quickly external events must be serviced, how data are to be persisted, how load-modules are to be deployed, etc. If this is his point (I did not read his article), then it is a fair one, but I'm a little uncertain as to how this melds with your thrust, ' … that software is getting bigger and more complicated without actually separating concerns in as meaningful a way as it could.' Are you saying that architectures cause a worse separation of concerns than would be the case if they did not exist?</p>
<p>To the next line of the quote, 'Without actually doing anything, applications are becoming too complex to understand, build, and maintain.' If true, this is surely a shocker. If we side-step the possible misplaced modifier, Travis appears to be working with applications that don't do anything. I've never seen an application that doesn't do anything, that does perfectly nothing.</p>
<p>What might that look like? I presume it wouldn't look like anything, as if I can see it, it arguably does something: it presents itself to my senses. Applications that do nothing must be completely invisible. They don't appear in GUIs. They reveal themselves not even to task manager snapshots of our running systems. They just sit there, buisily doing nothing. Who is writing these applications?</p>
<p>And whoever is writing them, they seem to be doing a poor job, for these applications that do nothing are becoming too complex to understand (building and maintaining them is perhaps a lesser issue). This is an extraordinary indictment of our IT industry. We note that they are not yet too complicated to understand, they're just on their way to becoming too complicated to understand. This conjures images of genuinely concerned individiuals, fretting, sweating, somehow fully aware of the furious juggernaut of incomprehensibility thundering towards them as they produce more and more perfectly useless code, yet powerless to leap out of its way.</p>
<p>Assaf continues this IT-scandal exposé by revealing that research in the field of software uselessness has advanced to a point of some sophistication: some of these void-technologists are even building layers that, ' Clearly … cancel each other out.'</p>
<p>Or perhaps they were both exaggerating.</p>
<p>And this was exaggeration, then his point must be taken somewhat lightly, which is a shame as then we're not quite sure what the point was.</p>
<p>Chad, while not guilty of the above, you yourself perhaps have some points to defend.</p>
<p>You say that, ' … people are the proximate cause &#8211; people who don't know what the hell they're doing. These people accept all the marketing for OOP, which states that it'll make your code more modular and more stable and just generally better. It won't.' Correct me if I'm wrong, but you seem to be dividing agency into human factors and non-human factors, and particularly that human factors contribute most to software's balooning complexity. Yet in just the paragraph before you claim, ' … certain older development philosophies (like "the Unix philosophy") that provided significantly better modularity and significantly reduced complexity.' Doesn't this credit non-human factors (the philosophy) with success rather than the very human factor of the Unix programmers themselves?</p>
<p>You then proceed to assert that OOP, ' … sure does make spaghetti code a lot more attractive.'</p>
<p>I'm afraid I don't have a definition of what spaghetti code is, so let's take Wiki's:</p>
<p>Spaghetti code is a pejorative term for source code which has a complex and tangled control structure, especially one using many GOTOs, exceptions, threads, or other "unstructured" branching constructs. It is named such because program flow tends to look like a bowl of spaghetti, i.e. twisted and tangled. Spaghetti code can be caused by several factors, including inexperienced programmers and a complex program which has been continuously modified over a long life cycle. Structured programming greatly decreased the incidence of spaghetti code, and is widely regarded as one of the most important advances in programming history.</p>
<p>Given that structured programming mitigates spaghetti code, can we infer from your statement that OOP makes  structured programming less attractive than some non-OOP programming technique? Could you explain how?</p>
<p>Also, and again correct me if I'm wrong, allow me to tease out the overall flow of your article. You suggest that OOP's encapsulation enables large software development but this development can create such large products that the individual pieces themselves are of poor quality. You then suggest that software is getting bigger and more complicated without actually separating concerns in as meaningful a way as it could, and finally that people who don't know what the hell they're doing are the cause of this. I'm curious to understand whether you're implying that a causal thread runs through these three points.</p>
<p>You make your third point admirably clearly: people are the cause of software's becoming bigger and more complicated without sufficiently meaningful separation of concerns. If we could examine with the second point, are you saying that software is getting bigger and more complicated because concerns are not separated in as meaningful a way as they could? I will presume you are suggesting causality here, that insufficient separation of concerns causes unneccessary complexity.</p>
<p>The logical link between the first and second point raises the question: are you suggesting that encapsulation itself leads to a less meaningful separation of concerns than some other programming technique? If so, can you recommend a superior approach?</p>
<p>Ed Kirwan</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rod</title>
		<link>http://sob.apotheon.org/?p=935&#038;cpage=1#comment-394751</link>
		<dc:creator>Rod</dc:creator>
		<pubDate>Sun, 22 Feb 2009 10:36:16 +0000</pubDate>
		<guid isPermaLink="false">http://sob.apotheon.org/?p=935#comment-394751</guid>
		<description>The procedural f(a,b,c) could become the object-oriented a.f(b,c) or it could become b.f(a,c)

it all depends on which class you want to put f in.

There is an idea based on table inversion (row-major vs. column-major) that I would like to convey.

The procedural switch(i){case 0:f0();break; case 1:f1();break; case 2:f2();break;}

could become the object-oriented i-&gt;f()

and somehow I don&#039;t remember, this is a table inversion. Multiple switch statements would be the other table dimension. The functions are the table members. So really

switch(i0){case 0:f00();break; case 1:f01();break; case 2:f02();break;}
switch(i1){case 0:f10();break; case 1:f11();break; case 2:f12();break;}
switch(i2){case 0:f20();break; case 1:f21();break; case 2:f22();break;}

becomes

i[I]-&gt;f[I][J]()

except that f[I] are all polymorphed together so they all inherit from the same parent function.</description>
		<content:encoded><![CDATA[<p>The procedural f(a,b,c) could become the object-oriented a.f(b,c) or it could become b.f(a,c)</p>
<p>it all depends on which class you want to put f in.</p>
<p>There is an idea based on table inversion (row-major vs. column-major) that I would like to convey.</p>
<p>The procedural switch(i){case 0:f0();break; case 1:f1();break; case 2:f2();break;}</p>
<p>could become the object-oriented i-&gt;f()</p>
<p>and somehow I don't remember, this is a table inversion. Multiple switch statements would be the other table dimension. The functions are the table members. So really</p>
<p>switch(i0){case 0:f00();break; case 1:f01();break; case 2:f02();break;}<br />
switch(i1){case 0:f10();break; case 1:f11();break; case 2:f12();break;}<br />
switch(i2){case 0:f20();break; case 1:f21();break; case 2:f22();break;}</p>
<p>becomes</p>
<p>i[I]-&gt;f[I]<a href="">J</a></p>
<p>except that f[I] are all polymorphed together so they all inherit from the same parent function.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
