<?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: Embedded Software Crisis or Embedded Software Glut?</title>
	<atom:link href="http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/feed/" rel="self" type="application/rss+xml" />
	<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/</link>
	<description>A Blog by Miro Samek</description>
	<lastBuildDate>Wed, 30 Nov 2011 07:55:32 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Patrick Perdu</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-1011</link>
		<dc:creator>Patrick Perdu</dc:creator>
		<pubDate>Tue, 05 Oct 2010 23:25:44 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-1011</guid>
		<description>Very good post, and very good follow-up comments.
   I have been skimming the web for details of what Miro calls physical design but unfortnately to no avail.
   Any insightfull contribution brewing on the subject, Miro?</description>
		<content:encoded><![CDATA[<p>Very good post, and very good follow-up comments.<br />
   I have been skimming the web for details of what Miro calls physical design but unfortnately to no avail.<br />
   Any insightfull contribution brewing on the subject, Miro?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arindam</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-17</link>
		<dc:creator>Arindam</dc:creator>
		<pubDate>Tue, 08 Jul 2008 06:59:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-17</guid>
		<description>*In the future installments of this blog, I plan to provide a few concrete design strategies to allow easy (or at least easier) removing of obsolete code. Stay tuned.*I am waiting Miro ....</description>
		<content:encoded><![CDATA[<p>*In the future installments of this blog, I plan to provide a few concrete design strategies to allow easy (or at least easier) removing of obsolete code. Stay tuned.*I am waiting Miro &#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Miro Samek</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-16</link>
		<dc:creator>Miro Samek</dc:creator>
		<pubDate>Thu, 26 Jun 2008 16:37:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-16</guid>
		<description>James,Thank you for your thoughtful comments. I think that we are in violent agreement. Actually, I have devoted a separate post to the test-driven approach (see &lt;a HREF=&quot;http://www.embeddedgurus.net/state-space/2006/09/agile-embedded-development_23.html&quot; rel=&quot;nofollow&quot;&gt;Agile Embedded Development&lt;/a&gt;).However, the key point of this post (&quot;Embedded Software Crisis or Embedded Software Glut?&quot;) is that the main problem we face is too much code, not too little, as everybody asserts. Engineers and managers need to realize that adding new code is very easy compared to removing code. Yet, removing dead code is far more productive. Once this realization sinks in, we can start paying more attention to structuring the code (both logical and physical design) to allow us to perform cleanup more effectively.</description>
		<content:encoded><![CDATA[<p>James,Thank you for your thoughtful comments. I think that we are in violent agreement. Actually, I have devoted a separate post to the test-driven approach (see <a HREF="http://www.embeddedgurus.net/state-space/2006/09/agile-embedded-development_23.html" rel="nofollow">Agile Embedded Development</a>).However, the key point of this post (&#8220;Embedded Software Crisis or Embedded Software Glut?&#8221;) is that the main problem we face is too much code, not too little, as everybody asserts. Engineers and managers need to realize that adding new code is very easy compared to removing code. Yet, removing dead code is far more productive. Once this realization sinks in, we can start paying more attention to structuring the code (both logical and physical design) to allow us to perform cleanup more effectively.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Grenning</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-15</link>
		<dc:creator>James Grenning</dc:creator>
		<pubDate>Thu, 26 Jun 2008 14:33:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-15</guid>
		<description>Hi MiroMaybe you just have not gotten to reviewing my post, but...I meant no disrespect to you in my reply to your reply.  If you send it back to me, I&#039;ll make sure that is evident.I&#039;d like to have a dialog about things we both care about.thanks, James</description>
		<content:encoded><![CDATA[<p>Hi MiroMaybe you just have not gotten to reviewing my post, but&#8230;I meant no disrespect to you in my reply to your reply.  If you send it back to me, I&#8217;ll make sure that is evident.I&#8217;d like to have a dialog about things we both care about.thanks, James</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Grenning</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-14</link>
		<dc:creator>James Grenning</dc:creator>
		<pubDate>Wed, 25 Jun 2008 04:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-14</guid>
		<description>The big problem with many systems I see is that the design has deteriorated and lost all its conceptual integrity.  There is a big free for all going on in the code. Functions grow to thousands of lines.  Functions with parameter list of double digit length.  If statements with compound-compound conditionals.How did these problems happen?  How does a 1000 line function get to be1000 lines long.  One line at a time.  Programmers make code incrementally worse.  We need to reverse the trend.  Developers need pride in workmanship.  They need professional practices that make what you are suggesting possible, practical and safe.Well designed (a.k.a modular, loosely coupled) code can be pruned like you say, but there is not much of that kind of code out there.  But even if there were, you would not be allowed to delete it because there is no way to be sure that the code is not needed unless there is a comprehensive set of automated tests and a team that knows the code.Developers are afraid to delete code because they don&#039;t know for sure if it will break something. They won&#039;t extract complex conditionals into understandable and testable helper functions because of some misguided notion of performance or lack of precedent.One way to achieve your goal of being able to delete unneeded code is to use Test Driven Development and Refactoring.  Things change over time, design is never done.  We need evolutionary design techniques. TDD is the best technique for achieving what you are looking for that I have seen.Code and tests are written concurrently, so the code has to be testable.  As it turns out, testable designs are good designs;  modular and loosely coupled.  Discover some untestable code; it&#039;s an early warning of a design problem.  Applying TDD/Refactoring throughout the life if a product will result in a good design.  Changes, including deleting oxbow code, can be made with confidence.As far as the John Lakos&#039; book not being targeted to embedded, that&#039;s part of our industry&#039;s problem as well.  Too many embedded developers seem to think that good advice like he and others offer does not apply to embedded.The &quot;we do embedded, we&#039;re different&quot; attitude needs to change.  There are a lot of advances going on in software development.  Sure there are different challenges.  But many are common challenges that have decent solutions that the embedded community is not learning from.</description>
		<content:encoded><![CDATA[<p>The big problem with many systems I see is that the design has deteriorated and lost all its conceptual integrity.  There is a big free for all going on in the code. Functions grow to thousands of lines.  Functions with parameter list of double digit length.  If statements with compound-compound conditionals.How did these problems happen?  How does a 1000 line function get to be1000 lines long.  One line at a time.  Programmers make code incrementally worse.  We need to reverse the trend.  Developers need pride in workmanship.  They need professional practices that make what you are suggesting possible, practical and safe.Well designed (a.k.a modular, loosely coupled) code can be pruned like you say, but there is not much of that kind of code out there.  But even if there were, you would not be allowed to delete it because there is no way to be sure that the code is not needed unless there is a comprehensive set of automated tests and a team that knows the code.Developers are afraid to delete code because they don&#8217;t know for sure if it will break something. They won&#8217;t extract complex conditionals into understandable and testable helper functions because of some misguided notion of performance or lack of precedent.One way to achieve your goal of being able to delete unneeded code is to use Test Driven Development and Refactoring.  Things change over time, design is never done.  We need evolutionary design techniques. TDD is the best technique for achieving what you are looking for that I have seen.Code and tests are written concurrently, so the code has to be testable.  As it turns out, testable designs are good designs;  modular and loosely coupled.  Discover some untestable code; it&#8217;s an early warning of a design problem.  Applying TDD/Refactoring throughout the life if a product will result in a good design.  Changes, including deleting oxbow code, can be made with confidence.As far as the John Lakos&#8217; book not being targeted to embedded, that&#8217;s part of our industry&#8217;s problem as well.  Too many embedded developers seem to think that good advice like he and others offer does not apply to embedded.The &#8220;we do embedded, we&#8217;re different&#8221; attitude needs to change.  There are a lot of advances going on in software development.  Sure there are different challenges.  But many are common challenges that have decent solutions that the embedded community is not learning from.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Miro Samek</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-13</link>
		<dc:creator>Miro Samek</dc:creator>
		<pubDate>Wed, 25 Jun 2008 03:13:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-13</guid>
		<description>I absolutely agree about the value of refactoring to keep the code lean and clean.However, the main point of my original post goes beyond refactoring and bringing the old code &quot;up to date&quot;. The central point is to &lt;b&gt;get rid&lt;/b&gt; of old, no longer used code, such as obsolete features, no longer supported product versions, etc. I don&#039;t want them refactored--I want them out of the active code base.The key question is: How do you design and implement systems so that you can relatively easily get rid of obsolete code? I&#039;m not talking of deleting parts of the code here and there. I&#039;m talking of very careful &lt;b&gt;physical design&lt;/b&gt;, that is, the art of partitioning the code into directories and files. If you do this correctly, you can simply stop maintaining obsolete files.Physical design is one of the most unappreciated areas of our business. Countless books and article teach logical design, such as procedural design or object-oriented design, but hardly any book teaches good physical design. One notable exception is &quot;Large-Scale C++ Software Design&quot; by John Lakos. This book is very good, but is not specific to embedded systems. I don&#039;t know of any other book tackling the issue of physical software design specifically for embedded software. Miro</description>
		<content:encoded><![CDATA[<p>I absolutely agree about the value of refactoring to keep the code lean and clean.However, the main point of my original post goes beyond refactoring and bringing the old code &#8220;up to date&#8221;. The central point is to <b>get rid</b> of old, no longer used code, such as obsolete features, no longer supported product versions, etc. I don&#8217;t want them refactored&#8211;I want them out of the active code base.The key question is: How do you design and implement systems so that you can relatively easily get rid of obsolete code? I&#8217;m not talking of deleting parts of the code here and there. I&#8217;m talking of very careful <b>physical design</b>, that is, the art of partitioning the code into directories and files. If you do this correctly, you can simply stop maintaining obsolete files.Physical design is one of the most unappreciated areas of our business. Countless books and article teach logical design, such as procedural design or object-oriented design, but hardly any book teaches good physical design. One notable exception is &#8220;Large-Scale C++ Software Design&#8221; by John Lakos. This book is very good, but is not specific to embedded systems. I don&#8217;t know of any other book tackling the issue of physical software design specifically for embedded software. Miro</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Grenning</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-12</link>
		<dc:creator>James Grenning</dc:creator>
		<pubDate>Wed, 25 Jun 2008 02:31:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-12</guid>
		<description>In Agile Development we call this refactoring.  It is part of everyday work.  Code is kept resume quality.  Bad code is incrementally improved with the support of a suite of automated tests.Most developers are petrified of changing/deleting code for good cause. They can&#039;t be certain of the code&#039;s behavior. Test Driven Development results in a large suite of automated tests.  So if you find some code that you think is no longer needed, delete it and run the test suite.  You will know soon enough. (Yeah, I know I am simplifying and living in an idealist world) But often it just works the way I say.Nigel, I salute you for a job well done, wiping out some bad code!</description>
		<content:encoded><![CDATA[<p>In Agile Development we call this refactoring.  It is part of everyday work.  Code is kept resume quality.  Bad code is incrementally improved with the support of a suite of automated tests.Most developers are petrified of changing/deleting code for good cause. They can&#8217;t be certain of the code&#8217;s behavior. Test Driven Development results in a large suite of automated tests.  So if you find some code that you think is no longer needed, delete it and run the test suite.  You will know soon enough. (Yeah, I know I am simplifying and living in an idealist world) But often it just works the way I say.Nigel, I salute you for a job well done, wiping out some bad code!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nigel Jones</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-3</link>
		<dc:creator>Nigel Jones</dc:creator>
		<pubDate>Fri, 13 Jul 2007 22:17:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-3</guid>
		<description>I think this is an excellent point. I&#039;d also be interested in your thoughts on what it takes to bring old code &quot;up to date&quot;. In my experience one also gets more credit for writing new code than for making old code usable.</description>
		<content:encoded><![CDATA[<p>I think this is an excellent point. I&#8217;d also be interested in your thoughts on what it takes to bring old code &#8220;up to date&#8221;. In my experience one also gets more credit for writing new code than for making old code usable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Barr</title>
		<link>http://embeddedgurus.com/state-space/2007/06/embedded-software-crisis-or-embedded-software-glut/comment-page-1/#comment-2</link>
		<dc:creator>Michael Barr</dc:creator>
		<pubDate>Fri, 13 Jul 2007 15:12:00 +0000</pubDate>
		<guid isPermaLink="false">http://embeddedgurus.com/state-space/2007/06/23/embedded-software-crisis-or-embedded-software-glut/#comment-2</guid>
		<description>This is a great point, Miro.  I&#039;d love to see more talk in the engineering community about how to recognize no-longer-needed code.  If dead code may have future value, it should be possible to store it in the version control vault for later use.</description>
		<content:encoded><![CDATA[<p>This is a great point, Miro.  I&#8217;d love to see more talk in the engineering community about how to recognize no-longer-needed code.  If dead code may have future value, it should be possible to store it in the version control vault for later use.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

