<?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: Programming considered harmful</title>
	<atom:link href="http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/</link>
	<description>Bite sized info snacks for the digital generation</description>
	<pubDate>Mon, 08 Sep 2008 08:17:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Daniel Cadenas</title>
		<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-518</link>
		<dc:creator>Daniel Cadenas</dc:creator>
		<pubDate>Mon, 03 Mar 2008 00:54:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-518</guid>
		<description>&lt;blockquote&gt;One of the pains of the statically typed method signature is that various different requirements tend to get bundled up together. A method may well require a parameter to be of type (implement interface) X, where interface X defines 10 methods, even though the method will only call one of those declared methods. Ideally you would define a new interface for each combination of methods you want to call so you can keep the contract as simple to fulfill as possible, but this in itself would be a burden as the amount of interfaces would explode.&lt;/blockquote&gt;

I agree with you. 
I expanded a bit about this some time ago &lt;a href="http://dcadenas.blogspot.com/2007/10/ruby.html" rel="nofollow"&gt;. It's interesting to note that the number of interfaces needed to respond to all posible clients of a class with n methods would be 2^n - 1. It really explodes!</description>
		<content:encoded><![CDATA[<blockquote><p>One of the pains of the statically typed method signature is that various different requirements tend to get bundled up together. A method may well require a parameter to be of type (implement interface) X, where interface X defines 10 methods, even though the method will only call one of those declared methods. Ideally you would define a new interface for each combination of methods you want to call so you can keep the contract as simple to fulfill as possible, but this in itself would be a burden as the amount of interfaces would explode.</p></blockquote>
<p>I agree with you.<br />
I expanded a bit about this some time ago <a href="http://dcadenas.blogspot.com/2007/10/ruby.html" rel="nofollow">. It&#8217;s interesting to note that the number of interfaces needed to respond to all posible clients of a class with n methods would be 2^n - 1. It really explodes!</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jonny</title>
		<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-475</link>
		<dc:creator>jonny</dc:creator>
		<pubDate>Wed, 13 Feb 2008 01:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-475</guid>
		<description>@Josh: Your language taxonomy link is useful (http://eli.thegreenplace.net/2006/11/25/a-taxonomy-of-typing-systems/) but I still prefer seeing static / dynamic / strong / weak discussions as being on a continuum rather than a yes/no decision.

Agreed that Ruby is strongly typed, but it is not statically typed and types are not specified in method declarations. This dynamic nature is the source of both the power and the risk attached to using Ruby. What has been interesting me is whether there are useful parallels to be drawn between how individuals collaborate within successful teams and how objects should act in a successful dynamic language system.</description>
		<content:encoded><![CDATA[<p>@Josh: Your language taxonomy link is useful (http://eli.thegreenplace.net/2006/11/25/a-taxonomy-of-typing-systems/) but I still prefer seeing static / dynamic / strong / weak discussions as being on a continuum rather than a yes/no decision.</p>
<p>Agreed that Ruby is strongly typed, but it is not statically typed and types are not specified in method declarations. This dynamic nature is the source of both the power and the risk attached to using Ruby. What has been interesting me is whether there are useful parallels to be drawn between how individuals collaborate within successful teams and how objects should act in a successful dynamic language system.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JoshG</title>
		<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-474</link>
		<dc:creator>JoshG</dc:creator>
		<pubDate>Tue, 12 Feb 2008 23:16:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-474</guid>
		<description>Ruby is strongly-typed too.

See http://grahamis.com/blog/2008/01/03/ruby-is-strongly-typed-until-you-want-to-weaken-it/</description>
		<content:encoded><![CDATA[<p>Ruby is strongly-typed too.</p>
<p>See <a href="http://grahamis.com/blog/2008/01/03/ruby-is-strongly-typed-until-you-want-to-weaken-it/" rel="nofollow">http://grahamis.com/blog/2008/01/03/ruby-is-strongly-typed-until-you-want-to-weaken-it/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jonny</title>
		<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-450</link>
		<dc:creator>jonny</dc:creator>
		<pubDate>Mon, 11 Feb 2008 16:45:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-450</guid>
		<description>@Konstantin: I definitely believe that static typing has many benefits - I mentioned auto-complete, refactoring, etc as examples of this. There are many arguments on both sides of the benefit / pain discussion around static / dynamic languages - and the balance changes as well when you use something other than Java (and all it's legacy baggage) as your reference point. Haskell's typing system seems to throw some interesting extra ideas into the mix.

The point of my article wasn't to say that static typing is bad or dangerous (Jay did say that though), rather I was trying to see what is the best way to act sensibly and responsibly if you choose (or have been chosen) to work on a dynamic language. I actually think that as programmers we're going to have to get used to coding in more languages as time goes on, so finding out how to be effective in a range of types of language is useful. 

When I started writing Ruby I definitely missed some of the refactoring support I was used to in Eclipse - I felt like I was back in the 90's with a text editor and javac ... however now there's not much I miss. I'm not going to make the argument that the "static type tax" of Java actually requires all the IDE support available just to make it usable, but I do find there's a value in going back through your calling code when you're refactoring to make sure you still understand how it's used. So stepping through search &#038; replace can be a useful activity.</description>
		<content:encoded><![CDATA[<p>@Konstantin: I definitely believe that static typing has many benefits - I mentioned auto-complete, refactoring, etc as examples of this. There are many arguments on both sides of the benefit / pain discussion around static / dynamic languages - and the balance changes as well when you use something other than Java (and all it&#8217;s legacy baggage) as your reference point. Haskell&#8217;s typing system seems to throw some interesting extra ideas into the mix.</p>
<p>The point of my article wasn&#8217;t to say that static typing is bad or dangerous (Jay did say that though), rather I was trying to see what is the best way to act sensibly and responsibly if you choose (or have been chosen) to work on a dynamic language. I actually think that as programmers we&#8217;re going to have to get used to coding in more languages as time goes on, so finding out how to be effective in a range of types of language is useful. </p>
<p>When I started writing Ruby I definitely missed some of the refactoring support I was used to in Eclipse - I felt like I was back in the 90&#8217;s with a text editor and javac &#8230; however now there&#8217;s not much I miss. I&#8217;m not going to make the argument that the &#8220;static type tax&#8221; of Java actually requires all the IDE support available just to make it usable, but I do find there&#8217;s a value in going back through your calling code when you&#8217;re refactoring to make sure you still understand how it&#8217;s used. So stepping through search &#038; replace can be a useful activity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Konstantin Solomatov</title>
		<link>http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-449</link>
		<dc:creator>Konstantin Solomatov</dc:creator>
		<pubDate>Mon, 11 Feb 2008 07:59:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.digitaldimsum.co.uk/2008/02/10/programming-considered-harmful/#comment-449</guid>
		<description>And what do you think about complexity of tool support? It's easier to create robust rename, move etc refactorings for languages like java than for dynamic languages. These refactorings save a lot of time for developers which can be larger than time saved by skipping static bureaucracy.

There are also thing like structural subtyping and type inference which can be statically typed. They solve problem of cryptic generic annotations and large number of interfaces. Mainstream languages don't support them yet but I think it's a matter of time.</description>
		<content:encoded><![CDATA[<p>And what do you think about complexity of tool support? It&#8217;s easier to create robust rename, move etc refactorings for languages like java than for dynamic languages. These refactorings save a lot of time for developers which can be larger than time saved by skipping static bureaucracy.</p>
<p>There are also thing like structural subtyping and type inference which can be statically typed. They solve problem of cryptic generic annotations and large number of interfaces. Mainstream languages don&#8217;t support them yet but I think it&#8217;s a matter of time.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
