<?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: Take 2: Why we use SOLID in static languages and how we get the same functionality for cheap in dynamic languages</title>
	<atom:link href="http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/</link>
	<description>The small minded meanderings of the confused</description>
	<lastBuildDate>Mon, 15 Apr 2013 15:10:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Gil Zilberfeld</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-132</link>
		<dc:creator>Gil Zilberfeld</dc:creator>
		<pubDate>Fri, 04 Dec 2009 08:44:01 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-132</guid>
		<description>Hi, 

My name is Gil Zilberfld. We’ve discussed your post on our webcast &lt;a href=&quot;http://learn.typemock.com/this-week-in-test/2009/12/4/episode-6-analyze-this.html&quot;&gt;“This week in testing”&lt;/a&gt;. We’ll be happy if you can comment, and if you like the discussion and content, let us know. And everyone else. 

Thanks, 

Gil Zilberfeld Typemock 
</description>
		<content:encoded><![CDATA[<p>Hi, </p>
<p>My name is Gil Zilberfld. We’ve discussed your post on our webcast <a href="http://learn.typemock.com/this-week-in-test/2009/12/4/episode-6-analyze-this.html">“This week in testing”</a>. We’ll be happy if you can comment, and if you like the discussion and content, let us know. And everyone else. </p>
<p>Thanks, </p>
<p>Gil Zilberfeld Typemock </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Julian Birch</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-131</link>
		<dc:creator>Julian Birch</dc:creator>
		<pubDate>Fri, 20 Nov 2009 18:21:43 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-131</guid>
		<description>Hi Ryan, good article (even if I disagree).  I&#039;m afraid my response was rather longer than the average comment.
http://www.colourcoding.net/Blog/archive/2009/11/20/dynamic-languages-and-solid-principles.aspx

Julian.</description>
		<content:encoded><![CDATA[<p>Hi Ryan, good article (even if I disagree).  I&#8217;m afraid my response was rather longer than the average comment.<br />
<a href="http://www.colourcoding.net/Blog/archive/2009/11/20/dynamic-languages-and-solid-principles.aspx" rel="nofollow">http://www.colourcoding.net/Blog/archive/2009/11/20/dynamic-languages-and-solid-principles.aspx</a></p>
<p>Julian.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan Svihla</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-130</link>
		<dc:creator>Ryan Svihla</dc:creator>
		<pubDate>Fri, 20 Nov 2009 18:15:08 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-130</guid>
		<description>@alberto you are correct and had neglected to even think about PHP (it also has explicit interface support).

</description>
		<content:encoded><![CDATA[<p>@alberto you are correct and had neglected to even think about PHP (it also has explicit interface support).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alberto</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-129</link>
		<dc:creator>alberto</dc:creator>
		<pubDate>Fri, 20 Nov 2009 17:46:26 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-129</guid>
		<description>Not all dynamic languages support that (i.e. PHP)</description>
		<content:encoded><![CDATA[<p>Not all dynamic languages support that (i.e. PHP)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan Svihla</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-128</link>
		<dc:creator>Ryan Svihla</dc:creator>
		<pubDate>Fri, 20 Nov 2009 16:21:20 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-128</guid>
		<description>Also something I should add to that.

I don&#039;t mean to rid the entire SOLID acronym.

I think SL still apply and are the primary sins I see committed in most ruby or python code I&#039;ve looked at, however toss out &quot;O&quot; and &quot;I&quot; because I don&#039;t think either make sense now, and for D we need to rethink what that means for these types of languages.</description>
		<content:encoded><![CDATA[<p>Also something I should add to that.</p>
<p>I don&#8217;t mean to rid the entire SOLID acronym.</p>
<p>I think SL still apply and are the primary sins I see committed in most ruby or python code I&#8217;ve looked at, however toss out &#8220;O&#8221; and &#8220;I&#8221; because I don&#8217;t think either make sense now, and for D we need to rethink what that means for these types of languages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan Svihla</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-127</link>
		<dc:creator>Ryan Svihla</dc:creator>
		<pubDate>Fri, 20 Nov 2009 15:22:25 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-127</guid>
		<description>@derick

some good points but we&#039;re in your examples disagreeing on definition issues mostly.  Ruby may be different but in Python I&#039;ve seen the term monkey patching used for class replacement.

So score card:

SRP: agree

OCP: disagree ( still a bit confused here since by definition everything is open for extension AND modification even at runtime no matter what you do or how you code)

LSP: we both agree still applies even moreso

ISP: we both agree

DIP: disagree

So I&#039;ll just touch on where we disagree OCP I covered, IoC what I&#039;m trying to point out here is that fundamentally ALL client code can modify all code and even globally replace calls to that other code.  Are there times when you want to force (I should say encourage) clients to make a choice of implementation? absolutely and I think that still applies , but the benefits of flexibility and testability provided by IoC still apply whether the client calls new or not.  

I do advocate another concept here as applies to dynamic languages only because I think there is something to be said for encouraging integration points explicit and how to go about doing that in a perscriptive fashion is needed.

End of the day the benefits of O and the D of SOLID I&#039;d argue we get even if we try to prevent them.</description>
		<content:encoded><![CDATA[<p>@derick</p>
<p>some good points but we&#8217;re in your examples disagreeing on definition issues mostly.  Ruby may be different but in Python I&#8217;ve seen the term monkey patching used for class replacement.</p>
<p>So score card:</p>
<p>SRP: agree</p>
<p>OCP: disagree ( still a bit confused here since by definition everything is open for extension AND modification even at runtime no matter what you do or how you code)</p>
<p>LSP: we both agree still applies even moreso</p>
<p>ISP: we both agree</p>
<p>DIP: disagree</p>
<p>So I&#8217;ll just touch on where we disagree OCP I covered, IoC what I&#8217;m trying to point out here is that fundamentally ALL client code can modify all code and even globally replace calls to that other code.  Are there times when you want to force (I should say encourage) clients to make a choice of implementation? absolutely and I think that still applies , but the benefits of flexibility and testability provided by IoC still apply whether the client calls new or not.  </p>
<p>I do advocate another concept here as applies to dynamic languages only because I think there is something to be said for encouraging integration points explicit and how to go about doing that in a perscriptive fashion is needed.</p>
<p>End of the day the benefits of O and the D of SOLID I&#8217;d argue we get even if we try to prevent them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: derick.bailey</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-126</link>
		<dc:creator>derick.bailey</dc:creator>
		<pubDate>Fri, 20 Nov 2009 14:19:10 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-126</guid>
		<description>Hey Ryan,

great examples, overall. however, i don&#039;t agree with your premise that we don&#039;t need SOLID in dynamic languages.

i&#039;m not sure i agree w/ your table of how dynamic languages do things where a static language would use SOLID. all of the SOLID principles still apply in object oriented, dynamic languages. they are just implemented in different ways. ... my comments here are specific to Ruby, as it&#039;s my only real exposure to dynamic/duck typing (other than javascript, but i never did any of this with js).

SRP is still SRP. you&#039;re right that there&#039;s no change, here.

OCP i still important. monkey patching can be a violation of OCP if it&#039;s done poorly or for the wrong reasons. i&#039;ve used OCP in my Albacore framework in a number of places and it has saved me hours of headaches, prevented ugly / leaky abstractions, and made the task in question easier to understand.

LSP is a major concern when monkey patching. LSP is not a &quot;technical&quot; principle, to begin with. it&#039;s all about semantics and meaning. changing the meaning of an object or method through monkey patching is still an LSP violation. 

ISP is still ISP, for sure. but technically everything is an object -  all objects have an implicit interface.

DIP is still valid, as well. the difference is we&#039;re not dealing with explicit interfaces like c# or java. the client object is still expecting to find a specific method signature on the server object. the difference is that the server object does not have an explicit interface to implement. the implicit interface must still conform to the expectations of the client code, though. in this way, the client code should still own the abstraction / interface that is being called. the client code should be the one that determines when the interface definition changes, still.

... also I don&#039;t think your outputlib example is monkey patching. that&#039;s more a case of a factory pattern and polymorphism, facilitating OCP/LSP. monkey patching is used to open the type (or class or instance or ...) of an object and modify code in that object, at run time. you&#039;re really just providing a different implementation of the same interface, in that example.

  -derick</description>
		<content:encoded><![CDATA[<p>Hey Ryan,</p>
<p>great examples, overall. however, i don&#8217;t agree with your premise that we don&#8217;t need SOLID in dynamic languages.</p>
<p>i&#8217;m not sure i agree w/ your table of how dynamic languages do things where a static language would use SOLID. all of the SOLID principles still apply in object oriented, dynamic languages. they are just implemented in different ways. &#8230; my comments here are specific to Ruby, as it&#8217;s my only real exposure to dynamic/duck typing (other than javascript, but i never did any of this with js).</p>
<p>SRP is still SRP. you&#8217;re right that there&#8217;s no change, here.</p>
<p>OCP i still important. monkey patching can be a violation of OCP if it&#8217;s done poorly or for the wrong reasons. i&#8217;ve used OCP in my Albacore framework in a number of places and it has saved me hours of headaches, prevented ugly / leaky abstractions, and made the task in question easier to understand.</p>
<p>LSP is a major concern when monkey patching. LSP is not a &#8220;technical&#8221; principle, to begin with. it&#8217;s all about semantics and meaning. changing the meaning of an object or method through monkey patching is still an LSP violation. </p>
<p>ISP is still ISP, for sure. but technically everything is an object &#8211;  all objects have an implicit interface.</p>
<p>DIP is still valid, as well. the difference is we&#8217;re not dealing with explicit interfaces like c# or java. the client object is still expecting to find a specific method signature on the server object. the difference is that the server object does not have an explicit interface to implement. the implicit interface must still conform to the expectations of the client code, though. in this way, the client code should still own the abstraction / interface that is being called. the client code should be the one that determines when the interface definition changes, still.</p>
<p>&#8230; also I don&#8217;t think your outputlib example is monkey patching. that&#8217;s more a case of a factory pattern and polymorphism, facilitating OCP/LSP. monkey patching is used to open the type (or class or instance or &#8230;) of an object and modify code in that object, at run time. you&#8217;re really just providing a different implementation of the same interface, in that example.</p>
<p>  -derick</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Darren</title>
		<link>http://lostechies.com/ryansvihla/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages/#comment-125</link>
		<dc:creator>Darren</dc:creator>
		<pubDate>Thu, 19 Nov 2009 23:11:54 +0000</pubDate>
		<guid isPermaLink="false">/blogs/rssvihla/archive/2009/11/19/take-2-why-we-use-solid-in-static-languages-and-how-we-get-the-same-functionality-for-cheap-in-dynamic-languages.aspx#comment-125</guid>
		<description>I know that dynamic languages like Ruby and Python give you things that you can&#039;t get  with languages like C#, and as a SOLID advocate those things seem important, but... why do I go cross-eyed when I read Python and Ruby examples?  </description>
		<content:encoded><![CDATA[<p>I know that dynamic languages like Ruby and Python give you things that you can&#8217;t get  with languages like C#, and as a SOLID advocate those things seem important, but&#8230; why do I go cross-eyed when I read Python and Ruby examples?  </p>
]]></content:encoded>
	</item>
</channel>
</rss>
