<?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: Creating Concrete Objects</title>
	<atom:link href="http://buffered.io/2007/07/14/creating-concrete-objects/feed/" rel="self" type="application/rss+xml" />
	<link>http://buffered.io/2007/07/14/creating-concrete-objects/</link>
	<description>What would OJ do?</description>
	<lastBuildDate>Wed, 08 Sep 2010 12:46:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: OJ</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-505</link>
		<dc:creator>OJ</dc:creator>
		<pubDate>Wed, 18 Jul 2007 22:19:21 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-505</guid>
		<description>Nah it&#039;s ok mate. Staying on topic can be hard, and I tend to go off on a lot of tangents myself :)</description>
		<content:encoded><![CDATA[<p>Nah it&#8217;s ok mate. Staying on topic can be hard, and I tend to go off on a lot of tangents myself <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OJ</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-2676</link>
		<dc:creator>OJ</dc:creator>
		<pubDate>Wed, 18 Jul 2007 22:19:00 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-2676</guid>
		<description>Nah it&#039;s ok mate. Staying on topic can be hard, and I tend to go off on a lot of tangents myself :)</description>
		<content:encoded><![CDATA[<p>Nah it&#8217;s ok mate. Staying on topic can be hard, and I tend to go off on a lot of tangents myself <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vault-Co</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-511</link>
		<dc:creator>Vault-Co</dc:creator>
		<pubDate>Wed, 18 Jul 2007 13:32:02 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-511</guid>
		<description>I&#039;m sorry you expected me to be on-topic. I thought you had seen some of my previous posts. :)

Actually, I agree with everything in your reply. You are right about seeing if you can strip the class down until anything else removed prevents the class from doing what it is supposed to do.

I think I was saying as much before, unfortunately it was too boring that way so I added a lot of colorful language to get cheap laughs.</description>
		<content:encoded><![CDATA[<p>I&#8217;m sorry you expected me to be on-topic. I thought you had seen some of my previous posts. <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /><br />
Actually, I agree with everything in your reply. You are right about seeing if you can strip the class down until anything else removed prevents the class from doing what it is supposed to do.</p>
<p>I think I was saying as much before, unfortunately it was too boring that way so I added a lot of colorful language to get cheap laughs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vault-Co</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-2681</link>
		<dc:creator>Vault-Co</dc:creator>
		<pubDate>Wed, 18 Jul 2007 13:32:00 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-2681</guid>
		<description>I&#039;m sorry you expected me to be on-topic. I thought you had seen some of my previous posts. :)

Actually, I agree with everything in your reply. You are right about seeing if you can strip the class down until anything else removed prevents the class from doing what it is supposed to do.

I think I was saying as much before, unfortunately it was too boring that way so I added a lot of colorful language to get cheap laughs.</description>
		<content:encoded><![CDATA[<p>I&#8217;m sorry you expected me to be on-topic. I thought you had seen some of my previous posts. <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /><br />
Actually, I agree with everything in your reply. You are right about seeing if you can strip the class down until anything else removed prevents the class from doing what it is supposed to do.</p>
<p>I think I was saying as much before, unfortunately it was too boring that way so I added a lot of colorful language to get cheap laughs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OJ</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-510</link>
		<dc:creator>OJ</dc:creator>
		<pubDate>Wed, 18 Jul 2007 05:23:06 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-510</guid>
		<description>I hear what you&#039;re saying Ryan. I love functional programming too (it&#039;s one of the things I loved to teach when I was at uni), and its power is just immense. The perfect world would be that ideal cross of basic/simple objects which are tied together with &quot;functional&quot; code.

Coupling is the spawn of Satan. It&#039;s currently the reason why my job is taking 5 to 10 times longer to perform &quot;simple&quot; maintenance tasks.</description>
		<content:encoded><![CDATA[<p>I hear what you&#8217;re saying Ryan. I love functional programming too (it&#8217;s one of the things I loved to teach when I was at uni), and its power is just immense. The perfect world would be that ideal cross of basic/simple objects which are tied together with &#8220;functional&#8221; code.</p>
<p>Coupling is the spawn of Satan. It&#8217;s currently the reason why my job is taking 5 to 10 times longer to perform &#8220;simple&#8221; maintenance tasks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OJ</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-2680</link>
		<dc:creator>OJ</dc:creator>
		<pubDate>Wed, 18 Jul 2007 05:23:00 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-2680</guid>
		<description>I hear what you&#039;re saying Ryan. I love functional programming too (it&#039;s one of the things I loved to teach when I was at uni), and its power is just immense. The perfect world would be that ideal cross of basic/simple objects which are tied together with &quot;functional&quot; code.

Coupling is the spawn of Satan. It&#039;s currently the reason why my job is taking 5 to 10 times longer to perform &quot;simple&quot; maintenance tasks.</description>
		<content:encoded><![CDATA[<p>I hear what you&#8217;re saying Ryan. I love functional programming too (it&#8217;s one of the things I loved to teach when I was at uni), and its power is just immense. The perfect world would be that ideal cross of basic/simple objects which are tied together with &#8220;functional&#8221; code.</p>
<p>Coupling is the spawn of Satan. It&#8217;s currently the reason why my job is taking 5 to 10 times longer to perform &#8220;simple&#8221; maintenance tasks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ryan</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-509</link>
		<dc:creator>ryan</dc:creator>
		<pubDate>Wed, 18 Jul 2007 02:58:06 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-509</guid>
		<description>Nice blog on OO, but to be honest, Im starting to lose some of the faith.

Especially in categories where abstract things don&#039;t map very easily to objects, writing pure OO can lead to some awkward looking code. Im my opinion that is why Java gets a reputation for having some beautiful code in some problem domains, and verbose god-awful shite in others.

For example, OO is fundamentally based on coupling state and function into one conceptual thing. But any good programmer should develop a cold uneasy fear in the pit of their stomach whenever someone says the world &quot;coupling&quot;, and what it implies.

Essentially the C++ STL is an example of using OO-based language features to do something fundamentally non-OO. The STL is fundamentally functional programming, and the more I use it, and python for my scripting needs, the more Im starting to get a crush of functional programming.

In my current code, I am creating a series of simple objects, much as you have done in your example, but Im gluing those bit together with functional programming techniques. This means the bits that actually function, are simply and compactly written without having to jigger them onto an awkward OO framework, but the data itself are plain old objects, with proper encapsulation. Practically speaking, this means I have very little FooWriter or BarLartomatic style classes, instead easier to functions that say write (Foo, File), transform (Lart, Bar), where data an action can be decoupled and swapped out when the wind changes.</description>
		<content:encoded><![CDATA[<p>Nice blog on OO, but to be honest, Im starting to lose some of the faith.</p>
<p>Especially in categories where abstract things don&#8217;t map very easily to objects, writing pure OO can lead to some awkward looking code. Im my opinion that is why Java gets a reputation for having some beautiful code in some problem domains, and verbose god-awful shite in others.</p>
<p>For example, OO is fundamentally based on coupling state and function into one conceptual thing. But any good programmer should develop a cold uneasy fear in the pit of their stomach whenever someone says the world &#8220;coupling&#8221;, and what it implies.</p>
<p>Essentially the C++ STL is an example of using OO-based language features to do something fundamentally non-OO. The STL is fundamentally functional programming, and the more I use it, and python for my scripting needs, the more Im starting to get a crush of functional programming.</p>
<p>In my current code, I am creating a series of simple objects, much as you have done in your example, but Im gluing those bit together with functional programming techniques. This means the bits that actually function, are simply and compactly written without having to jigger them onto an awkward OO framework, but the data itself are plain old objects, with proper encapsulation. Practically speaking, this means I have very little FooWriter or BarLartomatic style classes, instead easier to functions that say write (Foo, File), transform (Lart, Bar), where data an action can be decoupled and swapped out when the wind changes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ryan</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-2679</link>
		<dc:creator>ryan</dc:creator>
		<pubDate>Wed, 18 Jul 2007 02:58:00 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-2679</guid>
		<description>Nice blog on OO, but to be honest, Im starting to lose some of the faith.

Especially in categories where abstract things don&#039;t map very easily to objects, writing pure OO can lead to some awkward looking code. Im my opinion that is why Java gets a reputation for having some beautiful code in some problem domains, and verbose god-awful shite in others.

For example, OO is fundamentally based on coupling state and function into one conceptual thing. But any good programmer should develop a cold uneasy fear in the pit of their stomach whenever someone says the world &quot;coupling&quot;, and what it implies.

Essentially the C++ STL is an example of using OO-based language features to do something fundamentally non-OO. The STL is fundamentally functional programming, and the more I use it, and python for my scripting needs, the more Im starting to get a crush of functional programming.

In my current code, I am creating a series of simple objects, much as you have done in your example, but Im gluing those bit together with functional programming techniques. This means the bits that actually function, are simply and compactly written without having to jigger them onto an awkward OO framework, but the data itself are plain old objects, with proper encapsulation. Practically speaking, this means I have very little FooWriter or BarLartomatic style classes, instead easier to functions that say write (Foo, File), transform (Lart, Bar), where data an action can be decoupled and swapped out when the wind changes.</description>
		<content:encoded><![CDATA[<p>Nice blog on OO, but to be honest, Im starting to lose some of the faith.</p>
<p>Especially in categories where abstract things don&#8217;t map very easily to objects, writing pure OO can lead to some awkward looking code. Im my opinion that is why Java gets a reputation for having some beautiful code in some problem domains, and verbose god-awful shite in others.</p>
<p>For example, OO is fundamentally based on coupling state and function into one conceptual thing. But any good programmer should develop a cold uneasy fear in the pit of their stomach whenever someone says the world &#8220;coupling&#8221;, and what it implies.</p>
<p>Essentially the C++ STL is an example of using OO-based language features to do something fundamentally non-OO. The STL is fundamentally functional programming, and the more I use it, and python for my scripting needs, the more Im starting to get a crush of functional programming.</p>
<p>In my current code, I am creating a series of simple objects, much as you have done in your example, but Im gluing those bit together with functional programming techniques. This means the bits that actually function, are simply and compactly written without having to jigger them onto an awkward OO framework, but the data itself are plain old objects, with proper encapsulation. Practically speaking, this means I have very little FooWriter or BarLartomatic style classes, instead easier to functions that say write (Foo, File), transform (Lart, Bar), where data an action can be decoupled and swapped out when the wind changes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kirupaBlog - If it isn&#8217;t broken, take it apart and fix it! &#187; Blog Archive &#187; Interesting Links #2:</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-508</link>
		<dc:creator>kirupaBlog - If it isn&#8217;t broken, take it apart and fix it! &#187; Blog Archive &#187; Interesting Links #2:</dc:creator>
		<pubDate>Wed, 18 Jul 2007 02:07:34 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-508</guid>
		<description>[...] Creating Concrete ObjectsA nice article outlining how to design a class using proper coding practices.&#160; [...]</description>
		<content:encoded><![CDATA[<p>[...] Creating Concrete ObjectsA nice article outlining how to design a class using proper coding practices.&nbsp; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: OJ</title>
		<link>http://buffered.io/2007/07/14/creating-concrete-objects/comment-page-1/#comment-507</link>
		<dc:creator>OJ</dc:creator>
		<pubDate>Sun, 15 Jul 2007 11:26:55 +0000</pubDate>
		<guid isPermaLink="false">http://buffered.io/2007/07/14/creating-concrete-objects/#comment-507</guid>
		<description>Hi Cleve, thanks for your comment. I&#039;m not sure that it&#039;s entirely on-topic, but it&#039;s worth discussing at least :).

I don&#039;t know if I agree with the idea that OOP is about hammering code to fit a simple interface description. To me that implies that the interface doesn&#039;t fit the meaning/intention of the class. But perhaps I&#039;m just not getting a clear view of your point.

To me, a class isn&#039;t ready when there&#039;s nothing left to add. It&#039;s ready when there&#039;s nothing left that you can take away that doesn&#039;t stop it from working the way it needs to. Excessive function overloads are a clear candidate for removal (just because it &lt;em&gt;might&lt;/em&gt; end up being used, it doesn&#039;t mean that its presence is justified). The fewer entry points there are into the class, the fewer points there are for it to die on.

I agree with the idea of defensive coding, and I do think that checking for NULL and using ASSERT are things that should be done constantly. There have been some recent murmurs around the web that checking for NULL is a bad idea, but I don&#039;t agree. I don&#039;t care what anyone says, if your code blows up on site, you&#039;re going to look bad in front of your client. Code defensively as much as possible, it&#039;s the only way to go.

Aside from that, you need to make sure that the other coders who are writing the application alongside you are actually doing the same thing to.

As far as the general state of the industry is concerned, I guess I agree with you for the most part. There are many companies out there who are not really pushing for ideal development practices despite knowing their obvious benefits. The excuses that are used are generally &quot;lack of time&quot; of &quot;lack of budget&quot;. I&#039;ve lost count of the times I&#039;ve heard &quot;now just isn&#039;t a good time&quot;. Well, I&#039;m afraid it&#039;s &lt;strong&gt;never&lt;/strong&gt; a good time to rewrite stuff. But the best time is &lt;em&gt;now&lt;/em&gt; before the code becomes and even bigger and less maintainable beast. The original code base tends to become something it was never designed to be, generally because it wasn&#039;t actually &quot;designed&quot;. It just evolved from someone&#039;s &quot;idea&quot;. This is extremely common, and is part of the reason why there are so many developers out there who are paid so much more than they&#039;re worth purely because they got into a project at the start and have written that much dodgey code that they now have job security. Unfortunately for those people who are keen to write decent code, these guys are just happy to carry on pumping out line after line of complete gunk. The business seems happy because things appear to be getting done, but they don&#039;t realise that with every line that&#039;s written, the cost of maintenance is going up 5 times faster.

It&#039;s a sad state of affairs for our industry, and I don&#039;t think it&#039;s going to change any time soon. This is why I&#039;m putting time into building a portfolio so that I can market myself as a freelancer. Based on how things are at the moment, it seems that writing my own stuff from scratch is the only way I&#039;ll be able to avoid being The Code Cleaner.</description>
		<content:encoded><![CDATA[<p>Hi Cleve, thanks for your comment. I&#8217;m not sure that it&#8217;s entirely on-topic, but it&#8217;s worth discussing at least :).</p>
<p>I don&#8217;t know if I agree with the idea that OOP is about hammering code to fit a simple interface description. To me that implies that the interface doesn&#8217;t fit the meaning/intention of the class. But perhaps I&#8217;m just not getting a clear view of your point.</p>
<p>To me, a class isn&#8217;t ready when there&#8217;s nothing left to add. It&#8217;s ready when there&#8217;s nothing left that you can take away that doesn&#8217;t stop it from working the way it needs to. Excessive function overloads are a clear candidate for removal (just because it <em>might</em> end up being used, it doesn&#8217;t mean that its presence is justified). The fewer entry points there are into the class, the fewer points there are for it to die on.</p>
<p>I agree with the idea of defensive coding, and I do think that checking for NULL and using ASSERT are things that should be done constantly. There have been some recent murmurs around the web that checking for NULL is a bad idea, but I don&#8217;t agree. I don&#8217;t care what anyone says, if your code blows up on site, you&#8217;re going to look bad in front of your client. Code defensively as much as possible, it&#8217;s the only way to go.</p>
<p>Aside from that, you need to make sure that the other coders who are writing the application alongside you are actually doing the same thing to.</p>
<p>As far as the general state of the industry is concerned, I guess I agree with you for the most part. There are many companies out there who are not really pushing for ideal development practices despite knowing their obvious benefits. The excuses that are used are generally &#8220;lack of time&#8221; of &#8220;lack of budget&#8221;. I&#8217;ve lost count of the times I&#8217;ve heard &#8220;now just isn&#8217;t a good time&#8221;. Well, I&#8217;m afraid it&#8217;s <strong>never</strong> a good time to rewrite stuff. But the best time is <em>now</em> before the code becomes and even bigger and less maintainable beast. The original code base tends to become something it was never designed to be, generally because it wasn&#8217;t actually &#8220;designed&#8221;. It just evolved from someone&#8217;s &#8220;idea&#8221;. This is extremely common, and is part of the reason why there are so many developers out there who are paid so much more than they&#8217;re worth purely because they got into a project at the start and have written that much dodgey code that they now have job security. Unfortunately for those people who are keen to write decent code, these guys are just happy to carry on pumping out line after line of complete gunk. The business seems happy because things appear to be getting done, but they don&#8217;t realise that with every line that&#8217;s written, the cost of maintenance is going up 5 times faster.</p>
<p>It&#8217;s a sad state of affairs for our industry, and I don&#8217;t think it&#8217;s going to change any time soon. This is why I&#8217;m putting time into building a portfolio so that I can market myself as a freelancer. Based on how things are at the moment, it seems that writing my own stuff from scratch is the only way I&#8217;ll be able to avoid being The Code Cleaner.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
