<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Picture Perfect Software Engineering</title>
	<atom:link href="http://cogiton.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cogiton.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Fri, 02 Mar 2007 19:59:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cogiton.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Picture Perfect Software Engineering</title>
		<link>http://cogiton.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cogiton.wordpress.com/osd.xml" title="Picture Perfect Software Engineering" />
	<atom:link rel='hub' href='http://cogiton.wordpress.com/?pushpress=hub'/>
		<item>
		<title>So, just what is normal anyway?</title>
		<link>http://cogiton.wordpress.com/2007/01/07/so-just-what-is-normal-anyway/</link>
		<comments>http://cogiton.wordpress.com/2007/01/07/so-just-what-is-normal-anyway/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 16:49:44 +0000</pubDate>
		<dc:creator>cogiton</dc:creator>
				<category><![CDATA[The Big Idea]]></category>

		<guid isPermaLink="false">http://cogiton.wordpress.com/2007/01/07/so-just-what-is-normal-anyway/</guid>
		<description><![CDATA[In my last entry I intimated that software, at the object level, had no real structure, and that this was the root of most of the problem in programming today. I&#8217;m sure this is a rather puzzling statement, as other than adding data members to a class, what kind of structure could you have for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cogiton.wordpress.com&amp;blog=660600&amp;post=4&amp;subd=cogiton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In my last entry I intimated that software, at the object level, had no real structure, and that this was the root of most of the problem in programming today.  I&#8217;m sure this is a rather puzzling statement, as other than adding data members to a class, what kind of structure could you have for a class?</p>
<p>Before I go there, I want to detour slightly into some light theory. The most fundamental principle of the science in computer science could probably be stated this way:  Don&#8217;t repeat yourself.</p>
<p>Its the <a href="http://en.wikipedia.org/wiki/Parsimony" target="_blank">principle of parsimony</a> and  <a href="http://en.wikipedia.org/wiki/Occam%27s_razor" target="_blank">Occam&#8217;s razor</a>. Programmers quickly gain the skill of slapping repeated code chunks into one place and making it a subroutine &#8211; otherwise you don&#8217;t get out of Coding 101.  In Computer Softese, this activity is known as <strong>factoring, </strong>or in the case of data, <strong>normalization</strong>.  It all comes down to the same basic concept.</p>
<p>However, the kinds of stuff that typically gets factored is the <em>behavior </em>code &#8211; the code that does stuff &#8211; actions, operations etc. So what other kind of code is there?  To quote our President, there is the &#8220;decider&#8221; code.</p>
<p>Strung throughout the <strong>&#8220;Actions&#8221; </strong>in the software are the conditional statements that evaluate the state of the nation and choose a codepath for the instruction pointer to travel.  This decider code is the true <strong>nervous system</strong> for software &#8211; it continually tests its environment and activates appropriate activity in response to what it discovers.  To put it another way, this conditional logic is the &#8220;brains&#8221; of software &#8211; the rest, the activity code &#8211; is the &#8220;brawn&#8221;.</p>
<p>Underlying the actual code is the logical &#8220;idea&#8221; of what the software should be doing &#8211; the experience it is really trying to deliver.  This abstract ideal is, in fact, the <strong>most</strong> critical part because it is the actual point of the whole endeavour.  But this fact remains obscure due to its format &#8211; a bunch of Boolean tests strung throughout the code each heading up a lot of code branches.  So despite its primary importance as the most critical part of our software, it remains the portion that no one actually tries to normalize &#8211; that is apply computer science to!</p>
<p>We can describe this logical idea of the software as its <strong>set of &#8220;modes&#8221;.</strong>  The Boolean conditionals are actually testing the raw data of the system to discover what mode the software is in, and then doing some activity based on that discovery.  This is all fine.  The problem emerges, the denormalization that is, when these same tests are done over and over again throughout the codebase.  How can this happen? By being the typical and simplest (but not best) way to build out an API.  And it is almost mandated in a complex, multilevel object-oriented class.</p>
<p>I&#8217;ll pick up on that next time.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cogiton.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cogiton.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cogiton.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cogiton.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cogiton.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cogiton.wordpress.com&amp;blog=660600&amp;post=4&amp;subd=cogiton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cogiton.wordpress.com/2007/01/07/so-just-what-is-normal-anyway/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/489bbcea543eabe5cb0d999d8c1386bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cogitater</media:title>
		</media:content>
	</item>
		<item>
		<title>Why is good software so hard to write?</title>
		<link>http://cogiton.wordpress.com/2007/01/06/why-is-good-software-so-hard-to-write/</link>
		<comments>http://cogiton.wordpress.com/2007/01/06/why-is-good-software-so-hard-to-write/#comments</comments>
		<pubDate>Sat, 06 Jan 2007 18:09:18 +0000</pubDate>
		<dc:creator>cogiton</dc:creator>
				<category><![CDATA[The Big Idea]]></category>

		<guid isPermaLink="false">http://cogiton.wordpress.com/2007/01/06/why-is-good-software-so-hard-to-write/</guid>
		<description><![CDATA[Hello all! As you can tell, this is my first entry in my brand spanking new blog. Very exciting! I hope to make this thing look nice eventually, so pardon the appearance till I get my chops with this interface. This blog is dedicated to an ongoing discussion regarding a new approach to creating software [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cogiton.wordpress.com&amp;blog=660600&amp;post=3&amp;subd=cogiton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hello all!</p>
<p>As you can tell, this is my first entry in my brand spanking new blog.  Very exciting!  I hope to make this thing look nice eventually, so pardon the appearance till I get my chops with this interface.</p>
<p>This blog is dedicated to an ongoing discussion regarding a new approach to creating software that I have been working on for the better part of a decade.  I had no idea that I would be out promoting it one day &#8211; I simply was emersed in a professional crisis and had to get some clarity on a problem set fast.  The solution I found to my problem has defined my professional thinking over the past eight years, and especially the last six months as I have worked through some remaining challenges to arrive at what I feel is an equally elegant and powerful approach to crafting software.</p>
<p>I will soon be launching my website which will be the hub of activity in the known universe for Cogiton (caa-ji-taan, that is) related resources.  Until my designer gets back to me with where the furniture is supposed to go, I&#8217;m getting started here as a direct outlet for these ideas.</p>
<p>First I want to delve into what I consider one of the most perplexing issues of my industry &#8211; is software programming  really software engineering?  I thought the <a href="http://en.wikipedia.org/wiki/Software_engineering">wikipedia.org article</a> on the topic had some interesting insight.  I especially liked the section on &#8220;who is a software engineer?&#8221;  Pete McBreen seems to argue that engineering is not descriptive of what programmers really do, and I tend to agree.  His article on <a href="http://en.wikipedia.org/wiki/Software_Craftsmanship" target="_blank">software craftsmanship</a>  I think gets it right &#8211; our industry is like a Medieval guild full of artists rather than modern engineers.</p>
<p>The reason for this, in my opinion, is not endemic to the profession, but the approach.  In other engineering disciplines, practitioners use math and models to design systems that have parts and pieces that are somehow quantifiable and manipulable.  In contrast, the fundamental organizational unit of software today, the object-oriented class, has all the organizational integrity and mathematical rigor of a big plate of spaghetti.  You never know what kind of tangle is in one.</p>
<p>Despite most good efforts, developers typically start with a method on a class and just start hacking in some behavior.  As long as it stays simple, things are usually reasonably clear.  As more and more &#8220;modes&#8221; are added to the class, each method becomes increasingly contorted by conditional branches &#8211; basically exceptions to the general behavior of the class.  With object-oriented inheritance, additional complexity is introduced as each class in the inheritance chain can have its own &#8220;modes&#8221;, and these need to be made to work together.  Rarely do you see classes extended over three deep.  Why? Because this mechanism for behavioral inheritance is actually pretty bad. Don&#8217;t get me wrong &#8211; inheritance of behavior is a good thing. Just using chained classes has proved be be a very problematic way to achieve this goal.  And there is another way.</p>
<p>In my next entry, I&#8217;ll start to go into some more detail.  And by the way, all of this initial discussion, until somebody starts writing back (nudge, nudge) , will basically follow the lines of the on-line book I&#8217;ll be putting out soon.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cogiton.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cogiton.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cogiton.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cogiton.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cogiton.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cogiton.wordpress.com&amp;blog=660600&amp;post=3&amp;subd=cogiton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cogiton.wordpress.com/2007/01/06/why-is-good-software-so-hard-to-write/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/489bbcea543eabe5cb0d999d8c1386bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cogitater</media:title>
		</media:content>
	</item>
	</channel>
</rss>
