<?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/"
	>

<channel>
	<title>Programmer&#039;s Paradox &#187; Software Engineering</title>
	<atom:link href="http://www.programmersparadox.com/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programmersparadox.com</link>
	<description>Is anything I write real?</description>
	<lastBuildDate>Wed, 28 Jul 2010 21:50:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>No</title>
		<link>http://www.programmersparadox.com/2009/07/19/no/</link>
		<comments>http://www.programmersparadox.com/2009/07/19/no/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 20:12:57 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[no]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=891</guid>
		<description><![CDATA[The idea for this post was originally going to be about business strategy.  It was going to revolve around this quote, that I found on the Contrast blog: The essence of strategy is choosing what not to do. - Michael E. Porter It&#8217;s a good quote, but there&#8217;s a better one that cuts more to [...]<p><br/><br/><a href="http://www.programmersparadox.com/2009/07/19/no/">No</a></p>
]]></description>
			<content:encoded><![CDATA[<p>The idea for this post was originally going to be about business strategy.  It was going to revolve around this quote, that I found on the <a href="http://www.contrast.ie/blog/">Contrast blog</a>:</p>
<blockquote><p>The essence of strategy is choosing what not to do.</p>
<p>- <a href="http://www.contrast.ie/blog/what-not-to-do/">Michael E. Porter</a></p></blockquote>
<p>It&#8217;s a good quote, but there&#8217;s a better one that cuts more to the heart of the matter:</p>
<blockquote><p>No.</p></blockquote>
<p>Attempting to say no and actually saying no are what many of us spend our lives doing.  When you often get in trouble, it&#8217;s because you said yes.</p>
<p>You said yes to a feature that turned out more complicated than you thought.  Now you&#8217;re working overtime to complete it.  What if you had said no?  How much would users care?</p>
<p>You said yes that you&#8217;d attend the meeting because someone asked you, but you learned nothing.  What work could you have done if you had said no?</p>
<p>The scenarios are endless.</p>
<p>No is the best response in many places, although sometimes the word no isn&#8217;t said at all.</p>
<blockquote><p>I didn&#8217;t have time to write you a short letter, so I wrote you a long one instead.</p>
<p>- <a href="http://thinkexist.com/quotation/i_didn-t_have_time_to_write_a_short_letter-so_i/338386.html">Attributed to Mark Twain</a>, but there is <a href="http://answers.google.com/answers/threadview?id=177502">debate about that</a>.</p></blockquote>
<p>What if you had said no to something else, so you had time to write that short letter?</p>
<blockquote><p>Omit needless words.</p>
<p>- <a href="http://en.wikipedia.org/wiki/The_Elements_of_Style">Strunk and White</a></p></blockquote>
<blockquote><p>Omit needless code.</p>
<p>- <a href="http://www.two-sdg.demon.co.uk/curbralan/papers/minimalism/OmitNeedlessCode.html">Kevlin Henney</a></p></blockquote>
<blockquote><p>Omit needless features</p>
<p>- Paraphrase of Steve Jobs.</p></blockquote>
<p>The actually quote from Steve Jobs:</p>
<blockquote><p>I know you have a thousand ideas for all the cool features iTunes could have.  So do we.  But we don&#8217;t want a thousand features. That would be ugly.  Innovation is not about saying yes to everything.  It&#8217;s about saying NO to all but the most crucial features.</p>
<p>- <a href="http://www.oreillynet.com/onlamp/blog/2004/08/say_no_by_default.html">Steve Jobs</a></p></blockquote>
<p>You hear this advice all the time.  If saying no is the way to go, then why  are we all so bad at it?</p>
<p>We&#8217;re like cats: the shiny new object always holds allure over the old and dull.  I can interest my cat with balls and bells, until the moment the laser pointer comes out.  The balls and bells are forgotten because the shiny non-catchable dot has appeared.</p>
<p>We&#8217;re all chasing laser pointers instead of balls and bells.  The ephemeral laser pointer promises a better future, whereas the balls and bells represent the solid here and now.</p>
<p>I recently tweeted this:</p>
<blockquote><p><a href="http://twitter.com/mzyk83/status/2525730741"><span><span>Let&#8217;s get something straight: no feature is ever &#8220;must have&#8221;.</span></span></a></p></blockquote>
<p>Here are some of the replies:</p>
<blockquote><p><a href="http://twitter.com/raleighing/status/2525997116">Disagree.  Just need to understand context.</a></p></blockquote>
<blockquote><p><a href="http://twitter.com/rickcecil/status/2525789610"><span><span>There are some features that are must-have, though not nearly as many as we think. I&#8217;m certainly guilty of this.</span></span></a></p></blockquote>
<p>Both are a failure to say no.  We all fail to say no at times.  Think about this: what if we didn&#8217;t have that feature?  What&#8217;s the worst that happens?  Things stay as they are.  The world doesn&#8217;t end.</p>
<p>If you can&#8217;t say no, you end up thinking <a href="http://blog.objectmentor.com/articles/2007/12/13/business-software-is-messy-and-mgly">business software is messy and ugly</a>.  Features accumulate and code spaghetties.  Technical debt piles on.  It&#8217;s a world of trouble, all of which results from not saying no.</p>
<p>Switching from business software to the personal, there&#8217;s a piece of advice oft repeated: follow your passion.</p>
<p>It&#8217;s clear by now where I&#8217;m going with this.  Follow your passion is another way of telling us to say no.  How do you follow your passion without saying no to everything else that might interfere?  If you don&#8217;t say no, you&#8217;ll find there&#8217;s little time left to say yes to what you want to do.</p>
<p>No is one of the simplest words in the English language.  It&#8217;s one of the first words that native English speakers learn to say.  Yet no is the hardest word in the English language to say to someone.</p>
<p>Knowing this, I challenge you: say no to someone and see what results.  Maybe saying no will become a habit for you.  As a result, the world will become a better place.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2009/07/19/no/">No</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2009/07/19/no/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Best Solutions Are Non-technical</title>
		<link>http://www.programmersparadox.com/2009/03/29/the-best-solutions-are-non-technical/</link>
		<comments>http://www.programmersparadox.com/2009/03/29/the-best-solutions-are-non-technical/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 21:05:28 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[non-technical solution]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=697</guid>
		<description><![CDATA[I recently had an issue where I was working on how some text was displayed on a site.  Part of the text was user supplied and part of the text was not.  As an example, it would be something like this: Book: Title The title would be supplied by the user, but the product type [...]<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/29/the-best-solutions-are-non-technical/">The Best Solutions Are Non-technical</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I recently had an issue where I was working on how some text was displayed on a site.  Part of the text was user supplied and part of the text was not.  As an example, it would be something like this:</p>
<p>Book: Title</p>
<p>The title would be supplied by the user, but the product type would not be, it would simply be selected from a list.  This information would then be available to other users in various languages.  Since the title was user supplied, it was clear that nothing would be done to translate it.  Initially it was decided that the product type (book, in this case) would not be translated, but would be left in English.</p>
<p>At a low level this code interfaced with <a href="http://en.wikipedia.org/wiki/Gettext">gettext</a>.  There was some entanglement between the code that displayed the product type and gettext, which meant if a user where to view the page in a non-English language, then the product type would be translated.  But the decision had been to not translate it.</p>
<p>I was left with three options:</p>
<ol>
<li>Do nothing &#8211; let the product type translate.</li>
<li>Copy the code to display the product type so that it wasn’t using gettext.</li>
<li>Rewrite how the application used gettext so that the product type code and the gettext code weren’t so wedded to other.</li>
</ol>
<p>There were problems with each option:</p>
<ol>
<li>This wasn’t the decision that was wanted.</li>
<li>This was easy, but now it meant the product type code existed in two places, and any updates would have to be applied in both places.  I could easily see it happening that an update made to one place wouldn’t be applied to the other.  This solution bothered me because it violated <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a>.</li>
<li>This involved a massive rewrite that would solve the problem, but would take the most time and touch a lot of the application.</li>
</ol>
<p>I went with option one:  do nothing &#8211; let the product type translate.  This meant I had to change no code, so it was the quickest and easiest to implement, while also not violating DRY.  This did go against the decision to not translate the product type, but after bringing up the issue with all concerned parties, it became clear that having the product type translate wasn’t a big issue.</p>
<p>The issue was resolved in the best possible way not because clever code was written, but because a non-technical solution was found.  Often, the first impulse for any developer (myself included) is to start typing and to stubbornly plough through any technological issues that arise.  However, sometimes the best way forward is to take the time to stop and ask people to consider their decision, because going a different direction might be easier and better for everyone.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/29/the-best-solutions-are-non-technical/">The Best Solutions Are Non-technical</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2009/03/29/the-best-solutions-are-non-technical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>For Innovation, Treat Me Like A Child</title>
		<link>http://www.programmersparadox.com/2009/03/16/for-innovation-treat-me-like-a-child/</link>
		<comments>http://www.programmersparadox.com/2009/03/16/for-innovation-treat-me-like-a-child/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 04:12:40 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[myths of innovation]]></category>
		<category><![CDATA[scott berkun]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=646</guid>
		<description><![CDATA[Here are several quotes from Scott Berkun&#8217;s The Myths of Innovation: Teams with healthy idea life cycles are easy to spot: ideas flow between people easily and in large volumes. Teams that innovate are great places for ideas to live &#8211; like happy pets, they&#8217;re treated well, get lots of attention, and are shared among [...]<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/16/for-innovation-treat-me-like-a-child/">For Innovation, Treat Me Like A Child</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Here are several quotes from Scott Berkun&#8217;s <em>The Myths of Innovation</em>:</p>
<blockquote><p>Teams with healthy idea life cycles are easy to spot: ideas flow between people easily and in large volumes.</p>
<p>Teams that innovate are great places for ideas to live &#8211; like happy pets, they&#8217;re treated well, get lots of attention, and are shared among people who care deeply about them.</p>
<p>The life of ideas is the responsibility of whoever is in charge.  He defines it by his responses and behavior, especially when he&#8217;s challenged by someone else&#8217;s ideas.</p>
<p>Teams with scorched deserts where creative jungles should be usually have the manager to blame.</p>
<p>&#8211; Selected quotes from pages 101-102, <em>The Myths of Innovation</em>: Chapter 7; Your boss knows more about innovation than you</p></blockquote>
<p>Here&#8217;s another quote, that I&#8217;m sure you&#8217;ve heard: <strong>If you don&#8217;t have time to do it right, when will you have time to do it over?</strong></p>
<p>Companies these days claim they want innovation.  IBM jumps to mind because of their commercials.  I&#8217;m reminded of the one of the guy in the super hero suit who runs around talking about ideation.  Unfortunately, this often doesn&#8217;t seem to be far from the truth.  Innovation is expected to happen at the snap of a finger, or during an hour long brainstorming meeting.</p>
<p>If innovation happens this way, how come our best ideas often come to us after we&#8217;ve slept on it or when we&#8217;re in the shower?</p>
<p>Companies don&#8217;t want to put in the time to do it right, so they&#8217;re often failing and hoping they have the time to do it over.</p>
<p>Innovation takes cultivation.  It doesn&#8217;t come overnight, it comes from a sustained culture that welcomes ideas.  It is that simple.  The more ideas, the more likely someone is going to find the magical combination that leads to the next great thing.</p>
<p>A corollary is that you can&#8217;t have innovation without experimentation.  I may offer you all the great ideas in the world, but if you never let me act on them, why am I going to keep offering up ideas?  You don&#8217;t have to indulge every idea I have.  I just need the occasional chance to explore further.  It doesn&#8217;t have to result in a final product or even a prototype.  It just needs to be enough exploration to see if the idea is viable.  That little show of confidence, that you have faith in me to let me pursue an idea for a bit, is enough to keep my intrinsic motivation charged, so I&#8217;ll keep suggesting ideas.</p>
<p><strong>If you want innovation from me, treat me like a child. </strong>Let me play. It doesn&#8217;t have to be every day, or every week.  However, if you let me play, I&#8217;ll invent things you didn&#8217;t imagine, and we&#8217;ll be the richer for it.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/16/for-innovation-treat-me-like-a-child/">For Innovation, Treat Me Like A Child</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2009/03/16/for-innovation-treat-me-like-a-child/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Iterating Innovation</title>
		<link>http://www.programmersparadox.com/2009/03/08/iterating-innovation/</link>
		<comments>http://www.programmersparadox.com/2009/03/08/iterating-innovation/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 23:29:23 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[myths of innovation]]></category>
		<category><![CDATA[scotter berkun]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=623</guid>
		<description><![CDATA[The dirty little secret &#8211; the fact often denied &#8211; is that unlike the mythical epiphany, real creation is sloppy.  Discovery is messy; exploration is dangerous.  No one knows what he’s going to get when he’s being creative.  Filmmakers, painters, inventors, and entrepreneurs describe their work as a search: they explore the unknown hoping to [...]<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/08/iterating-innovation/">Iterating Innovation</a></p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>The dirty little secret &#8211; the fact often denied &#8211; is that unlike the mythical epiphany, real creation is sloppy.  Discovery is messy; exploration is dangerous.  No one knows what he’s going to get when he’s being creative.  Filmmakers, painters, inventors, and entrepreneurs describe their work as a search: they explore the unknown hoping to find new things worth bringing to the world.  And just like other kinds of explorers, the search for ideas demands risk: much of what’s found won’t be satisfactory.</p>
<p>- <a href="http://www.scottberkun.com/blog/">Scott Berkun</a>, from <a href="http://www.amazon.com/Myths-Innovation-Scott-Berkun/dp/0596527055/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1236553088&amp;sr=8-1"><em>The Myths of Innovation</em></a>: Chapter 6; Good ideas are hard to find, p. 86</p></blockquote>
<p>The quote above is why I advocate agile practices.  For me, it’s the number one reason to use agile: you can be messy.  You can explore and see what you discover, because you know that if it’s good, you’ll come back to it and refine it, and if it isn’t, you can throw it away with little time lost.</p>
<p>You can work with the knowledge that if you build up some technical debt, it’s okay; you’ll pay it off in the next iteration, before it becomes so large it bankrupts you.</p>
<p>Being agile enables risk, because the time blocks are small enough that there is time to recover.  And by extension, enabling risk helps to enable innovation.</p>
<p>Simply being agile isn’t going to cause you to suddenly be an innovation machine.  There’s a lot more to it than that, as Scott’s book points out, but being agile is a good start down the right path.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2009/03/08/iterating-innovation/">Iterating Innovation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2009/03/08/iterating-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Culture of Trust</title>
		<link>http://www.programmersparadox.com/2009/01/16/a-culture-of-trust/</link>
		<comments>http://www.programmersparadox.com/2009/01/16/a-culture-of-trust/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 06:00:51 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[managment]]></category>
		<category><![CDATA[scott berkun]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=535</guid>
		<description><![CDATA[A culture of trust would be the ultimate corporate environment.  Just uttering the phrase brings to mind visions of the ideal work environment.  Fill in the blanks however you see fit, but for me it would be having a say in the projects I work on and being left to my own devices to determine [...]<p><br/><br/><a href="http://www.programmersparadox.com/2009/01/16/a-culture-of-trust/">A Culture of Trust</a></p>
]]></description>
			<content:encoded><![CDATA[<p>A culture of trust would be the ultimate corporate environment.  Just uttering the phrase brings to mind visions of the ideal work environment.  Fill in the blanks however you see fit, but for me it would be having a say in the projects I work on and being left to my own devices to determine how my projects are implemented.  In short, having the freedom to explore and work as I see fit, while achieving results.</p>
<p>What are the implications of a culture like this?  For one, it means everything has to be open.  All communication.  The fiefdoms that frequently come up in corporations couldn’t be allowed to exist, because as soon as they did, the culture would be destroyed.</p>
<p>More interesting though is that in such a culture everyone would have to be accountable.  No one could hide behind empty words or blame someone else.  Each person would be responsible for their failures as well as any team failures.  It brings to mind the motto of the Three Musketeers: “One for all, and all for one”.</p>
<p>Taken to it’s logical conclusion, what does accountability in a culture of trust mean?  It means that at any time if someone betrays the collective trust or avoids accountability they should be fired.</p>
<p><em>They should be fired.</em></p>
<p>Think about that.  I think everyone of us is used to feeling that we have job security.  Even if we slack off and perform poorly, it usually takes an act of God to get fired.  In a corporation that had a true culture of trust, this wouldn’t be the case.  There would be a revolving door as new people who failed to grasp the culture where let go.</p>
<p>However, those who embrace trust and accountability would have great job security.  They’re an asset to the corporation, so there’s no need to let them go.</p>
<p>Do any cultures like this exist today?  I suspect<a href="http://www.programmersparadox.com/2008/03/13/the-myth-that-you-can-be-google/"> Google might be close</a>, but I’m sure even they have their problems.  I agree with <a href="http://www.scottberkun.com/blog/2008/do-we-suck-at-the-basics/">Scott Berkun that we suck at holding people accountable</a>.  No one wants to be left as the person blamed for a failure.  In a culture of trust, having a failure on your resume wouldn’t be seen as an evil, so long as you accepted the failure and understood why it occurred.</p>
<p>Are we ready for this kind of culture?  Everyone’s knee jerk reaction is to say yes, but reconsider for a minute.  To be placed in such a culture would be stressful.  I’m not sure if people are ready to give up the stability of today’s general management structure for the more volatile one of a culture of trust.</p>
<p>A culture of trust would lead to more innovation and greater creativity; the rewards would be great.  It would rock if corporations made the switch.</p>
<p>Does any one know of a company that already has such a culture?  What other implications are there to a culture of trust?</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2009/01/16/a-culture-of-trust/">A Culture of Trust</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2009/01/16/a-culture-of-trust/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Message Oriented Architecture</title>
		<link>http://www.programmersparadox.com/2008/10/05/message-oriented-architecture/</link>
		<comments>http://www.programmersparadox.com/2008/10/05/message-oriented-architecture/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 01:22:41 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[message oriented architecture]]></category>
		<category><![CDATA[moa]]></category>
		<category><![CDATA[neal ford]]></category>
		<category><![CDATA[service oriented architecture]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=365</guid>
		<description><![CDATA[Neal Ford has a recent post called Sidekick Oriented Architecture.  I recommend reading it for the stories he tells, but the point he makes is a good one: Service Oriented Architecture is only achievable through message passing. It’s a simple concept that makes sense when it is articulated, but unless you consciously think about it [...]<p><br/><br/><a href="http://www.programmersparadox.com/2008/10/05/message-oriented-architecture/">Message Oriented Architecture</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Neal Ford has a recent post called <a href="http://memeagora.blogspot.com/2008/09/soa-sidekick-oriented-architecture.html">Sidekick Oriented Architecture</a>.  I recommend reading it for the stories he tells, but the point he makes is a good one:</p>
<p><strong>Service Oriented Architecture is only achievable through message passing.</strong></p>
<p>It’s a simple concept that makes sense when it is articulated, but unless you consciously think about it is easy to miss.</p>
<p>Often, when different services are built for an application, they end up sharing the same database.  While this might seem like a good initial idea, ultimately it becomes a single point of failure as well as a bottle neck for the entire system.  The only way to avoid this is to split the application into two entire different systems that communicate through message passing, not through the database layer.</p>
<p>There are other benefits to this approach.  When each service is entirely separate from any other, then no service is bound by the technological decisions made for the others.  The development team is free to explore different technologies and options for each service.  The only requirement is that each service be able to talk to the the others, and protocols like HTTP make this easy, if not entirely trivial.</p>
<p>There is also the benefit that by decoupling services to the point that all that is needed is message passing, more creative ways to leverage the entire system might be found.  Each time a new service is incorporated, the only technical hurdle preventing it from talking to any other service is enabling it to pass the right messages.  This makes for a modular and reusable design at the service level, a further abstraction up from the code and library levels.</p>
<p>The proof that message passing works can been seen in languages such as Erlang.  Erlang nodes only communicate through message passing, not through shared memory, enabling Erlang’s exceptional concurrency handling.  Message passing at the service layer also provides the same benefits that Erlang enjoys at the language layer; redundancy, concurrency, and stability are all made easier by message passing.</p>
<p>The end lesson is this: Service Oriented Architecture is Message Oriented Architecture.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2008/10/05/message-oriented-architecture/">Message Oriented Architecture</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2008/10/05/message-oriented-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A RESTful Interface</title>
		<link>http://www.programmersparadox.com/2008/09/28/a-restful-interface/</link>
		<comments>http://www.programmersparadox.com/2008/09/28/a-restful-interface/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 02:22:36 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[tim bray]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=357</guid>
		<description><![CDATA[Recently I finished reading Tim Bray&#8217;s On Search series to enhance my own personal knowledge of search, since I frequently work on search applications. I&#8217;ve also been following the various discussions and arguments on REST that seem to frequently flair up, although I&#8217;m lurking more for knowledge than contributing anything to what is being said. [...]<p><br/><br/><a href="http://www.programmersparadox.com/2008/09/28/a-restful-interface/">A RESTful Interface</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Recently I finished reading Tim Bray&#8217;s <a href="http://www.tbray.org/ongoing/When/200x/2003/07/30/OnSearchTOC">On Search</a> series to enhance my own personal knowledge of search, since I frequently work on search applications.</p>
<p>I&#8217;ve also been following the various discussions and arguments on <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> that seem to frequently flair up, although I&#8217;m lurking more for knowledge than contributing anything to what is being said.</p>
<p>It seems to me, based on my limited knowledge of REST, that Tim Bray describes a perfectly RESTful Interface when <a href="http://www.tbray.org/ongoing/When/200x/2003/11/16/SearchAPIs">he talks about how he envisions a search API being designed</a>, although he never mentions REST.</p>
<p>Very worth the read, as it provides a concrete example of what a RESTful interface can look like, which I find helpful so that I don&#8217;t drown in abstract details and descriptions.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2008/09/28/a-restful-interface/">A RESTful Interface</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2008/09/28/a-restful-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Why</title>
		<link>http://www.programmersparadox.com/2008/09/06/understanding-why/</link>
		<comments>http://www.programmersparadox.com/2008/09/06/understanding-why/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 20:44:07 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[jay fields]]></category>
		<category><![CDATA[why]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=288</guid>
		<description><![CDATA[The title of this post is taken verbatim from a post of the same name by Jay Fields. Jay&#8217;s point is that it isn&#8217;t enough to go through the motions of being a developer. Part of being a developer is understanding the point of the motions you&#8217;re going through.  If you don&#8217;t understand why, you [...]<p><br/><br/><a href="http://www.programmersparadox.com/2008/09/06/understanding-why/">Understanding Why</a></p>
]]></description>
			<content:encoded><![CDATA[<p>The title of this post is taken verbatim from <a href="http://blog.jayfields.com/2008/04/understanding-why.html">a post of the same name by Jay Fields</a>.</p>
<p>Jay&#8217;s point is that it isn&#8217;t enough to go through the motions of being a developer.  Part of being a developer is understanding the point of the motions you&#8217;re going through.  If you don&#8217;t understand why, you can&#8217;t understand the good or the harm you&#8217;re causing.</p>
<p>Recently on a project, I checked in some Python code that used several try except finally blocks, looking similar to this stub code:</p>
<p><code> </code></p>
<pre>try:
    session.open()
    do stuff
except:
     handleException()
finally:
    session.close()</pre>
<p>The code acquired a database connection and I used the finally block to ensure the connection was closed, preventing any leaks.</p>
<p>When working on the code I had inserted some tabs instead of spaces.  When another developer opened the same code in his editor, it complained about the tabs vs. spaces, but didn&#8217;t offer an explanation for the error it was reporting, only reporting an error.  The developer failed to ask why the error was being reported and also failed to ask why I had written the code as I had.</p>
<p>The result was that the code was rewritten as this:</p>
<p><code> </code></p>
<pre>try:
    session.open()
    do stuff
    session.close()
except:
    session.close()
    handleException()</pre>
<p>There is now duplicate code in the form of the session.close() call and the finally block has been removed.  The code is less explicit and more repetitive (although it happens to end up being the same number of lines).</p>
<p>Muddling of code and an unneeded rewrite occurred all because of a failure to ask why.  Listen to Jay.  Ask yourself why before you code and before you start changing code others have written.  It will lead to better code.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2008/09/06/understanding-why/">Understanding Why</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2008/09/06/understanding-why/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OO Side Effect Free Programming</title>
		<link>http://www.programmersparadox.com/2008/08/27/oo-side-effect-free-programming/</link>
		<comments>http://www.programmersparadox.com/2008/08/27/oo-side-effect-free-programming/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 04:18:33 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[bob martin]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[Fitnesse]]></category>
		<category><![CDATA[functional programming]]></category>
		<category><![CDATA[object oriented]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[side effect free programming]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=246</guid>
		<description><![CDATA[Last year Bob Martin gave my coworkers and me some training on how to implement Test Driven Development.  Bob advocated for very small methods &#8211; even suggesting that methods often only have one or two lines of code.  If they started approaching five to ten, they could probably be broken down into separate methods. Yesterday, [...]<p><br/><br/><a href="http://www.programmersparadox.com/2008/08/27/oo-side-effect-free-programming/">OO Side Effect Free Programming</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Last year <a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin">Bob Martin</a> gave my coworkers and me some training on how to implement Test Driven Development.  Bob advocated for very small methods &#8211; even suggesting that methods often only have one or two lines of code.  If they started approaching five to ten, they could probably be broken down into separate methods.</p>
<p>Yesterday, while performing the activity of brushing my teeth, I started thinking about some Erlang code I was writing in my spare time.  Also, previously at work, some of my coworkers had been looking at <a href="http://fitnesse.org/">Fitnesse</a>, which is contributed to by Bob Martin, and commented on how short the methods were.</p>
<p>With both of these thoughts fresh in mind, it hit me:</p>
<p><strong>Small methods are the object oriented equivalent of side effect free programming in functional programming.</strong></p>
<p>A small method is in effect an immutable variable that gets passed around.  At the very least, it minimizes and isolates side effects, while enabling easy refactoring and testing.  It&#8217;s the closest to side effect free programming you can get in OO.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2008/08/27/oo-side-effect-free-programming/">OO Side Effect Free Programming</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2008/08/27/oo-side-effect-free-programming/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tesler&#8217;s Law</title>
		<link>http://www.programmersparadox.com/2008/08/17/teslers-law/</link>
		<comments>http://www.programmersparadox.com/2008/08/17/teslers-law/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 03:02:56 +0000</pubDate>
		<dc:creator>Mark Mzyk</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Bill de hOra]]></category>
		<category><![CDATA[interface desgin]]></category>
		<category><![CDATA[Larry Tesler]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.programmersparadox.com/?p=210</guid>
		<description><![CDATA[I was reading Bill de hOra the other day, and he mentions Tesler&#8217;s Law. I&#8217;d never heard of Tesler or his law, so I followed the link. Turns out Larry Tesler is a pretty big name in the user interface field, as far as I can gather, although his law is lacking a Wikipedia page [...]<p><br/><br/><a href="http://www.programmersparadox.com/2008/08/17/teslers-law/">Tesler&#8217;s Law</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I was reading <a href="http://www.dehora.net/journal/2008/08/15/rest-as-an-engineering-discipline/">Bill de hOra</a> the other day, and he mentions Tesler&#8217;s Law.  I&#8217;d never heard of Tesler or his law, so I followed the <a href="http://www.designingforinteraction.com/tesler.html">link</a>.  Turns out <a href="http://en.wikipedia.org/wiki/Larry_Tesler">Larry Tesler</a> is a pretty big name in the user interface field, as far as I can gather, although his law is lacking a Wikipedia page (perhaps I should fix that).</p>
<p>Tesler&#8217;s Law is this:</p>
<blockquote><p>The Law of Conservation of Complexity: Every application must have an inherent amount of irreducible complexity. The only question is who will have to deal with it.</p></blockquote>
<p>In the <a href="http://www.designingforinteraction.com/tesler.html">interview Bill de hOra links to</a>, Tesler further enumerates on his law:</p>
<blockquote><p>If a million users each waste a minute a day dealing with complexity that an engineer could have eliminated in a week by making the software a little more complex, you are penalizing the user to make the engineer&#8217;s job easier.</p>
<p>Whose time is more important to the success of your business? For mass market software, unless you have a sustainable monopoly position, the customer&#8217;s time has to be more important to you than your own.</p></blockquote>
<p>I agree.  I think if we look at some of the most successful applications in history, we&#8217;ll find Tesler&#8217;s law at work behind their success.</p>
<p><br/><br/><a href="http://www.programmersparadox.com/2008/08/17/teslers-law/">Tesler&#8217;s Law</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmersparadox.com/2008/08/17/teslers-law/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
