<?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: Using descriptive data types</title>
	<atom:link href="http://blog.excastle.com/2007/04/20/using-descriptive-data-types/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.excastle.com/2007/04/20/using-descriptive-data-types/</link>
	<description>Life, .NET, and Cats</description>
	<pubDate>Sun, 12 Oct 2008 07:34:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
		<item>
		<title>By: Joe White's Blog</title>
		<link>http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5646</link>
		<dc:creator>Joe White's Blog</dc:creator>
		<pubDate>Wed, 25 Apr 2007 02:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5646</guid>
		<description>&lt;strong&gt;Poor man's Find References&lt;/strong&gt;


</description>
		<content:encoded><![CDATA[<p><strong>Poor man&#8217;s Find References</strong></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe White</title>
		<link>http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5645</link>
		<dc:creator>Joe White</dc:creator>
		<pubDate>Sat, 21 Apr 2007 10:36:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5645</guid>
		<description>Hmm. You're definitely right that the big win is in *making* the custom type, and using it instead of the primitive. (As we found out when we added more operations to TRowCol.)&lt;br&gt;&lt;br&gt;But whenever I've tried to make a custom type in Ruby, and introduce it into code that was already using a primitive, I've missed places, even when I had unit tests. Generally it's because I miss some of the glue. I test classes individually, and when the interface of one changes, I forget to update the tests of all its playmates to show the new contract (and the tests don't tell me about the problem, because they're testing each class in isolation). Usually it's not until I run through a particular code path, much later, that I find that I missed something.&lt;br&gt;&lt;br&gt;I'll be the first to admit that I'm not that skilled yet at writing unit tests in a dynamic language (and feel free to blog about how to do this sort of thing effectively, or point me to some articles -- I'd love to learn how to do it). But given where I am now, I prefer having a statically-typed compiler to lean on for changes like this. Granted that the compiler gets in the way for a lot of other things, but this specific thing is the very thing statically-typed compilers are good at.
</description>
		<content:encoded><![CDATA[<p>Hmm. You&#8217;re definitely right that the big win is in *making* the custom type, and using it instead of the primitive. (As we found out when we added more operations to TRowCol.)</p>
<p>But whenever I&#8217;ve tried to make a custom type in Ruby, and introduce it into code that was already using a primitive, I&#8217;ve missed places, even when I had unit tests. Generally it&#8217;s because I miss some of the glue. I test classes individually, and when the interface of one changes, I forget to update the tests of all its playmates to show the new contract (and the tests don&#8217;t tell me about the problem, because they&#8217;re testing each class in isolation). Usually it&#8217;s not until I run through a particular code path, much later, that I find that I missed something.</p>
<p>I&#8217;ll be the first to admit that I&#8217;m not that skilled yet at writing unit tests in a dynamic language (and feel free to blog about how to do this sort of thing effectively, or point me to some articles &#8212; I&#8217;d love to learn how to do it). But given where I am now, I prefer having a statically-typed compiler to lean on for changes like this. Granted that the compiler gets in the way for a lot of other things, but this specific thing is the very thing statically-typed compilers are good at.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Samuel</title>
		<link>http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5644</link>
		<dc:creator>Samuel</dc:creator>
		<pubDate>Sat, 21 Apr 2007 02:22:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excastle.com/2007/04/20/using-descriptive-data-types/#comment-5644</guid>
		<description>Caveat: You know I'm a shameless dynamic language advocate.&lt;br&gt;&lt;br&gt;I will be the first person to say that most systems do not have enough types. Programmers today still rely too heavily on primitive types when more robust, functional objects could accomplish the task much better. To that end, I agree with the sentiment you've expressed.&lt;br&gt;&lt;br&gt;But, that said. The idea that we should do this sort of thing because then we can let the compiler catch our mistakes just rubs me the wrong way.&lt;br&gt;&lt;br&gt;There is not one kind of error that a compiler will catch that a unit test would not. Furthermore, there are entire classes of errors  that unit tests will catch that a compiler can't possibly detect.  This is why statically typed languages are at a disadvantage when it comes to speed of development.  They add cumbersome requirements to the code without adding truly discernable advantages in the long run.&lt;br&gt;&lt;br&gt;Just keep in mind how often you find yourself saying &#34;Man, I wish I had this feature from Ruby in Delphi,&#34; or &#34;Dude, the syntax for Ruby-style blocks in C# is clunky.&#34;  I know how often I say it, and how often I hear it.&lt;br&gt;&lt;br&gt;Just remember, a vast majority of &#34;new&#34; programming ideas that are coming out for statically typed languages today have been in dynamic languages like Smalltalk and Lisp for decades.  And all the rest are easily implemented.  The converse isn't always true.
</description>
		<content:encoded><![CDATA[<p>Caveat: You know I&#8217;m a shameless dynamic language advocate.</p>
<p>I will be the first person to say that most systems do not have enough types. Programmers today still rely too heavily on primitive types when more robust, functional objects could accomplish the task much better. To that end, I agree with the sentiment you&#8217;ve expressed.</p>
<p>But, that said. The idea that we should do this sort of thing because then we can let the compiler catch our mistakes just rubs me the wrong way.</p>
<p>There is not one kind of error that a compiler will catch that a unit test would not. Furthermore, there are entire classes of errors  that unit tests will catch that a compiler can&#8217;t possibly detect.  This is why statically typed languages are at a disadvantage when it comes to speed of development.  They add cumbersome requirements to the code without adding truly discernable advantages in the long run.</p>
<p>Just keep in mind how often you find yourself saying &quot;Man, I wish I had this feature from Ruby in Delphi,&quot; or &quot;Dude, the syntax for Ruby-style blocks in C# is clunky.&quot;  I know how often I say it, and how often I hear it.</p>
<p>Just remember, a vast majority of &quot;new&quot; programming ideas that are coming out for statically typed languages today have been in dynamic languages like Smalltalk and Lisp for decades.  And all the rest are easily implemented.  The converse isn&#8217;t always true.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
