<?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"
	>
<channel>
	<title>Comments on: Monolithic vs. Modular Software Reuse Libraries (Part II)</title>
	<atom:link href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/</link>
	<description>an unfiltered stream of data flow consciousness</description>
	<pubDate>Thu,  4 Dec 2008 17:27:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11726</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Wed, 11 Jun 2008 16:27:40 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11726</guid>
		<description>Manoj: crelf is right.  OOP facilitates reusing code -- similar to how VI's facilitate reusing code.  In fact, OOP opens up reusing high-level components, such as user interfaces, coordinators, etc., which is not possible with VI's alone.  Doing configuration management of classes (and instances of classes) is a slightly different and more complex problem, which is typically solved by using a &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection" rel="nofollow"&gt;dependency injection&lt;/a&gt; framework that can dynamically resolve and bind run-time dependencies together to create systems of objects.  This is very interesting stuff and something I'll probably blog about in the future.</description>
		<content:encoded><![CDATA[<p>Manoj: crelf is right.  OOP facilitates reusing code &#8212; similar to how VI&#8217;s facilitate reusing code.  In fact, OOP opens up reusing high-level components, such as user interfaces, coordinators, etc., which is not possible with VI&#8217;s alone.  Doing configuration management of classes (and instances of classes) is a slightly different and more complex problem, which is typically solved by using a <a href="http://en.wikipedia.org/wiki/Dependency_injection" rel="nofollow">dependency injection</a> framework that can dynamically resolve and bind run-time dependencies together to create systems of objects.  This is very interesting stuff and something I&#8217;ll probably blog about in the future.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: crelf</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11725</link>
		<dc:creator>crelf</dc:creator>
		<pubDate>Wed, 11 Jun 2008 13:28:48 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11725</guid>
		<description>Manoj C wrote: "Is not OOP designed for code reuse. Why not use LVOOP?"

OOP is a programming pattern that indeed facilitates better reuse in your applications, but it's not a method of actively managing reuse.</description>
		<content:encoded><![CDATA[<p>Manoj C wrote: &#8220;Is not OOP designed for code reuse. Why not use LVOOP?&#8221;</p>
<p>OOP is a programming pattern that indeed facilitates better reuse in your applications, but it&#8217;s not a method of actively managing reuse.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: crelf</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11724</link>
		<dc:creator>crelf</dc:creator>
		<pubDate>Wed, 11 Jun 2008 13:27:28 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11724</guid>
		<description>Jim Kring wrote: "I agree with you about the issues associated with treating individual VIs as atomic components. However, as the cost of revising, distributing, and testing a package goes to zero, I think that the decision factors about how to group VIs into packages are based on VI (inter)dependencies."

I couldn't agree more.  I don't expect the cost of all those things to go to zero anytime soon, but the management of interdependancies is absolutely key in managing a medium to large sized reuse library, or any library that has more than just a couple of users.</description>
		<content:encoded><![CDATA[<p>Jim Kring wrote: &#8220;I agree with you about the issues associated with treating individual VIs as atomic components. However, as the cost of revising, distributing, and testing a package goes to zero, I think that the decision factors about how to group VIs into packages are based on VI (inter)dependencies.&#8221;</p>
<p>I couldn&#8217;t agree more.  I don&#8217;t expect the cost of all those things to go to zero anytime soon, but the management of interdependancies is absolutely key in managing a medium to large sized reuse library, or any library that has more than just a couple of users.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Manoj C</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11723</link>
		<dc:creator>Manoj C</dc:creator>
		<pubDate>Wed, 11 Jun 2008 11:23:29 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11723</guid>
		<description>Is not OOP designed for code reuse. Why not use LVOOP?</description>
		<content:encoded><![CDATA[<p>Is not OOP designed for code reuse. Why not use LVOOP?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11720</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Wed, 11 Jun 2008 03:24:15 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11720</guid>
		<description>crelf,

Thanks for the feedback and for adding your own perspective on some of the article's points.  I agree with you about the issues associated with treating individual VIs as atomic components.  However, as the cost of revising, distributing, and testing a package goes to zero, I think that the decision factors about how to group VIs into packages are based on VI (inter)dependencies.  But, that's a topic for another article ;)

PS - I'm excited that you're psyched.  Code reuse is an area of software that I really enjoy.  I'll try to keep the articles and tools coming.</description>
		<content:encoded><![CDATA[<p>crelf,</p>
<p>Thanks for the feedback and for adding your own perspective on some of the article&#8217;s points.  I agree with you about the issues associated with treating individual VIs as atomic components.  However, as the cost of revising, distributing, and testing a package goes to zero, I think that the decision factors about how to group VIs into packages are based on VI (inter)dependencies.  But, that&#8217;s a topic for another article <img src='http://thinkinging.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS - I&#8217;m excited that you&#8217;re psyched.  Code reuse is an area of software that I really enjoy.  I&#8217;ll try to keep the articles and tools coming.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: crelf</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11718</link>
		<dc:creator>crelf</dc:creator>
		<pubDate>Wed, 11 Jun 2008 02:34:10 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comment-11718</guid>
		<description>Another great post Jim (especially the Stone Henge reference :)

I think you hit the issue on the head with two points in particular:

&lt;strong&gt;Users fork the reuse library&lt;/strong&gt; - not only do they make a copy of the library locally in their project and modify it, that often becomes their own personal reuse library in parallel with the main group monolithic library, and the individual beings  to make improvements that aren't rolled back into the shared library - this is damaging for two reasons: the component isn't widely distributed so it's not of benefit for the whole team, and the individual's version doesn't have the benefit of other's experience for improvement.

&lt;strong&gt;User stop upgrading to newer versions of the reuse library&lt;/strong&gt; - like the previous issue, not only does the individual miss out on the love, he/she also checks out of the reuse world and the team can't benefit from their experience.

That's why monolithic libraries simply don't work.  Packaging individual as their own components can have exactly the same issues - releasing every little component every time it's updated can also lead to forking and users ignoring upgrades - that's why packages of components that share common functionality or apply to a common programming paradigm are the way to go.

Another benefit of grouping common components is to better manage the release process, as well as being able to disseminate ownership of different packages through your team.

As you can tell, reuse is something I'm pretty psyched about :D

cheers,
crelf</description>
		<content:encoded><![CDATA[<p>Another great post Jim (especially the Stone Henge reference <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I think you hit the issue on the head with two points in particular:</p>
<p><strong>Users fork the reuse library</strong> - not only do they make a copy of the library locally in their project and modify it, that often becomes their own personal reuse library in parallel with the main group monolithic library, and the individual beings  to make improvements that aren&#8217;t rolled back into the shared library - this is damaging for two reasons: the component isn&#8217;t widely distributed so it&#8217;s not of benefit for the whole team, and the individual&#8217;s version doesn&#8217;t have the benefit of other&#8217;s experience for improvement.</p>
<p><strong>User stop upgrading to newer versions of the reuse library</strong> - like the previous issue, not only does the individual miss out on the love, he/she also checks out of the reuse world and the team can&#8217;t benefit from their experience.</p>
<p>That&#8217;s why monolithic libraries simply don&#8217;t work.  Packaging individual as their own components can have exactly the same issues - releasing every little component every time it&#8217;s updated can also lead to forking and users ignoring upgrades - that&#8217;s why packages of components that share common functionality or apply to a common programming paradigm are the way to go.</p>
<p>Another benefit of grouping common components is to better manage the release process, as well as being able to disseminate ownership of different packages through your team.</p>
<p>As you can tell, reuse is something I&#8217;m pretty psyched about <img src='http://thinkinging.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>cheers,<br />
crelf</p>
]]></content:encoded>
	</item>
</channel>
</rss>
