<?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: Rails 10x more productive, Scala 2x. Really?</title>
	<atom:link href="http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/feed/" rel="self" type="application/rss+xml" />
	<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/</link>
	<description>Technology, mountain biking, politics &#38; music.</description>
	<pubDate>Fri, 30 Jul 2010 06:20:27 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Guy Murphy</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-157</link>
		<dc:creator>Guy Murphy</dc:creator>
		<pubDate>Wed, 09 Jul 2008 14:02:57 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-157</guid>
		<description>The idea that the extra code involved with static typing increases bugs because more lines of code means more bugs is logically spurious and doesnÃ‚Â´t pass muster for anybody doing production work with both dynamic and statically typed languages.

What previous posters are trying to explain is that static typing is a whole raft of unit tests provided to the developer by the compiler for very little cost... This is a good thing... The majority of bugs occuring are the stupid ones that the moment they are pointed out to the developer have them blushing... Inappropriate type usage falls into this bracket.

Also mentioned, knowing (or discovering) what an object can do is essential for any platform catering to an OO paradigm. ItÃ‚Â´s not optional. Either that knowledge is implicit in what the developer knows, or explicit in either documentaion or declaration... Checking that you can do what youÃ‚Â´re trying to do to an object at compile time is a good thing. Again, it eliminates a lot of common errors that even the most gifted programmer can make.

Now people could come in with valid arguments from a variety of language camps as to why outside an OO paradigm different approaches may be safer or more productive... Ruby isnÃ‚Â´t one of those camp. ItÃ‚Â´s a relatively staright forward, multi-purpose, multi-paradigm but largely OO mainstream langauge. It really isnÃ‚Â´t that funky or special, and certainly is not special enough to be offering enough to dodge the benefits of static typing.

If youÃ‚Â´re a loan hacker coding your dream for the next dot-com giant web service, then use whatever you want however you want. If you plan on participating in projects that span years, with many people you have to consider the maintainance of a large codebase by lots of people... Static typing starts to look really compelling then... Yes you can do it, and do it very well in Ruby, but you canÃ‚Â´t brush aside the cost of not having static typing as being of no consequence.

If IÃ‚Â´m breaking an interface that another developer is relying on in a completely different part of the codebase that IÃ‚Â´ve never even been in, IÃ‚Â´d prefer it if the compiler told me... Yes I shouldnÃ‚Â´t be modifying an interface in a breaking way, but maybe IÃ‚Â´m only mediocre, maybe IÃ‚Â´m tired after a tough week, maybe I have a hangover.

I know how many stupid mistakes I make day-to-day, hour by hour. I know how many stupid mistakes I make, because the compiler warns me.</description>
		<content:encoded><![CDATA[<p>The idea that the extra code involved with static typing increases bugs because more lines of code means more bugs is logically spurious and doesnÃ‚Â´t pass muster for anybody doing production work with both dynamic and statically typed languages.</p>
<p>What previous posters are trying to explain is that static typing is a whole raft of unit tests provided to the developer by the compiler for very little cost&#8230; This is a good thing&#8230; The majority of bugs occuring are the stupid ones that the moment they are pointed out to the developer have them blushing&#8230; Inappropriate type usage falls into this bracket.</p>
<p>Also mentioned, knowing (or discovering) what an object can do is essential for any platform catering to an OO paradigm. ItÃ‚Â´s not optional. Either that knowledge is implicit in what the developer knows, or explicit in either documentaion or declaration&#8230; Checking that you can do what youÃ‚Â´re trying to do to an object at compile time is a good thing. Again, it eliminates a lot of common errors that even the most gifted programmer can make.</p>
<p>Now people could come in with valid arguments from a variety of language camps as to why outside an OO paradigm different approaches may be safer or more productive&#8230; Ruby isnÃ‚Â´t one of those camp. ItÃ‚Â´s a relatively staright forward, multi-purpose, multi-paradigm but largely OO mainstream langauge. It really isnÃ‚Â´t that funky or special, and certainly is not special enough to be offering enough to dodge the benefits of static typing.</p>
<p>If youÃ‚Â´re a loan hacker coding your dream for the next dot-com giant web service, then use whatever you want however you want. If you plan on participating in projects that span years, with many people you have to consider the maintainance of a large codebase by lots of people&#8230; Static typing starts to look really compelling then&#8230; Yes you can do it, and do it very well in Ruby, but you canÃ‚Â´t brush aside the cost of not having static typing as being of no consequence.</p>
<p>If IÃ‚Â´m breaking an interface that another developer is relying on in a completely different part of the codebase that IÃ‚Â´ve never even been in, IÃ‚Â´d prefer it if the compiler told me&#8230; Yes I shouldnÃ‚Â´t be modifying an interface in a breaking way, but maybe IÃ‚Â´m only mediocre, maybe IÃ‚Â´m tired after a tough week, maybe I have a hangover.</p>
<p>I know how many stupid mistakes I make day-to-day, hour by hour. I know how many stupid mistakes I make, because the compiler warns me.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Partridge</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-156</link>
		<dc:creator>Nick Partridge</dc:creator>
		<pubDate>Sun, 29 Jun 2008 23:00:31 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-156</guid>
		<description>"Of course there are tradeoffs here, and learning function techniques is mind-bending (in a good way), youÃ¢â‚¬â„¢ll also realise how little you actually know."

100% agree. The last 6 months (which is about when I started seriously investigating functional programming languages and concepts) have made me feel like I've wasted 5 years "doing it wrong".

But, as you've found - applying functional techniques to ruby and java has made me much more productive, and produce much more succinct and readable code.

If only there was a hoogle for java/scala...</description>
		<content:encoded><![CDATA[<p>&#8220;Of course there are tradeoffs here, and learning function techniques is mind-bending (in a good way), youÃ¢â‚¬â„¢ll also realise how little you actually know.&#8221;</p>
<p>100% agree. The last 6 months (which is about when I started seriously investigating functional programming languages and concepts) have made me feel like I&#8217;ve wasted 5 years &#8220;doing it wrong&#8221;.</p>
<p>But, as you&#8217;ve found - applying functional techniques to ruby and java has made me much more productive, and produce much more succinct and readable code.</p>
<p>If only there was a hoogle for java/scala&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom Adams</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-155</link>
		<dc:creator>Tom Adams</dc:creator>
		<pubDate>Sun, 29 Jun 2008 09:48:04 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-155</guid>
		<description>@markus I'm sorry if my tone caused contention, it was written haphazardly across the course of the day and the static types argument was not one I wished to pursue in this post.

"What is the specific, exact problem therein? Which are your data nodes (or Ã¢â‚¬Å“typesÃ¢â‚¬Â) you have a problem with?"

I will answer briefly here, and will also try to post about it soon.

My problem basically boils down to it's hard to understand what a piece of code is doing without knowing the types. In Ruby, before you can reason about what some code is doing, you need to reverse engineer the types, often by looking at calling code, and trying to deduce parameters, etc.

Take for example, a parameter to a function called &lt;code&gt;tags&lt;/code&gt;. What type is it? Who knows? Well calling code might, but throw in a few Rails plugins and try and work it out.

Sometimes "tags" are instances of the &lt;code&gt;Tag&lt;/code&gt; class and sometimes they're strings. Which is it in this case? I could obviously whack some debugging code in there to find out, but that's a massive waste of time and completely inefficient. Now if this code was well isolated and tested it may be easier to deduce.

I've heard it said that dynamic typing gives you extra freedom, which static typing prevents. However I've been writing Ruby professionally now for about 8 months (longer on a non-full time basis) and I've only really experienced this benefit once. While this was a nice thing, it didn't buy me more than about 30 seconds of time over what a static language would offer. And the downsides are significant.</description>
		<content:encoded><![CDATA[<p>@markus I&#8217;m sorry if my tone caused contention, it was written haphazardly across the course of the day and the static types argument was not one I wished to pursue in this post.</p>
<p>&#8220;What is the specific, exact problem therein? Which are your data nodes (or Ã¢â‚¬Å“typesÃ¢â‚¬Â) you have a problem with?&#8221;</p>
<p>I will answer briefly here, and will also try to post about it soon.</p>
<p>My problem basically boils down to it&#8217;s hard to understand what a piece of code is doing without knowing the types. In Ruby, before you can reason about what some code is doing, you need to reverse engineer the types, often by looking at calling code, and trying to deduce parameters, etc.</p>
<p>Take for example, a parameter to a function called <code>tags</code>. What type is it? Who knows? Well calling code might, but throw in a few Rails plugins and try and work it out.</p>
<p>Sometimes &#8220;tags&#8221; are instances of the <code>Tag</code> class and sometimes they&#8217;re strings. Which is it in this case? I could obviously whack some debugging code in there to find out, but that&#8217;s a massive waste of time and completely inefficient. Now if this code was well isolated and tested it may be easier to deduce.</p>
<p>I&#8217;ve heard it said that dynamic typing gives you extra freedom, which static typing prevents. However I&#8217;ve been writing Ruby professionally now for about 8 months (longer on a non-full time basis) and I&#8217;ve only really experienced this benefit once. While this was a nice thing, it didn&#8217;t buy me more than about 30 seconds of time over what a static language would offer. And the downsides are significant.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: aqua waves</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-154</link>
		<dc:creator>aqua waves</dc:creator>
		<pubDate>Sun, 29 Jun 2008 03:39:27 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-154</guid>
		<description>@sunny beach. I think both are officially ok but you need more exclamation marks!!!!!!!!!!!!!!</description>
		<content:encoded><![CDATA[<p>@sunny beach. I think both are officially ok but you need more exclamation marks!!!!!!!!!!!!!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sunny beach</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-153</link>
		<dc:creator>sunny beach</dc:creator>
		<pubDate>Sun, 29 Jun 2008 02:39:59 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-153</guid>
		<description>You forgot "Rails is fun!!!" or was that "Ruby is fun!!!!", ugh I gotta go read the hype again.</description>
		<content:encoded><![CDATA[<p>You forgot &#8220;Rails is fun!!!&#8221; or was that &#8220;Ruby is fun!!!!&#8221;, ugh I gotta go read the hype again.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-152</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Sat, 28 Jun 2008 05:52:37 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-152</guid>
		<description>Sandro is right; it's a shame you kids have such an impoverished view of the purpose of type systems.</description>
		<content:encoded><![CDATA[<p>Sandro is right; it&#8217;s a shame you kids have such an impoverished view of the purpose of type systems.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ricky Clarkson</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-151</link>
		<dc:creator>Ricky Clarkson</dc:creator>
		<pubDate>Sat, 28 Jun 2008 05:49:38 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-151</guid>
		<description>"One problem with type-checking is in most languages it requires more code"

That's a problem of those languages, not of type checking.  Read about type inference, use Scala, Haskell, Ocaml, hell even C# has a bit of inference if you want to start gently.  You can't write off all type checking as useless if you won't look further than Java.  Well you can, but you won't look sane.</description>
		<content:encoded><![CDATA[<p>&#8220;One problem with type-checking is in most languages it requires more code&#8221;</p>
<p>That&#8217;s a problem of those languages, not of type checking.  Read about type inference, use Scala, Haskell, Ocaml, hell even C# has a bit of inference if you want to start gently.  You can&#8217;t write off all type checking as useless if you won&#8217;t look further than Java.  Well you can, but you won&#8217;t look sane.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ted Henry</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-150</link>
		<dc:creator>Ted Henry</dc:creator>
		<pubDate>Sat, 28 Jun 2008 00:49:29 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-150</guid>
		<description>Sandro,

It appears you don't understand the type-checking or no type-checking issue very well and sound like a type-checking fanboy mouthing off.

One problem with type-checking is in most languages it requires more code. As code size increases so can the bug count. That is, type-checking can actually increase bugs.

Another problem is type-checking catches a relatively small class of errors (in most languages usually doesn't even catch all type-related errors) that are really quite trivial. Serious bugs would be the ones the type checking doesn't catch.

Unit tests need to be written either way.</description>
		<content:encoded><![CDATA[<p>Sandro,</p>
<p>It appears you don&#8217;t understand the type-checking or no type-checking issue very well and sound like a type-checking fanboy mouthing off.</p>
<p>One problem with type-checking is in most languages it requires more code. As code size increases so can the bug count. That is, type-checking can actually increase bugs.</p>
<p>Another problem is type-checking catches a relatively small class of errors (in most languages usually doesn&#8217;t even catch all type-related errors) that are really quite trivial. Serious bugs would be the ones the type checking doesn&#8217;t catch.</p>
<p>Unit tests need to be written either way.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Muhammad Haggag</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-149</link>
		<dc:creator>Muhammad Haggag</dc:creator>
		<pubDate>Sat, 28 Jun 2008 00:45:45 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-149</guid>
		<description>Gabe da Silveira,

Regarding #3: Unless you have 100% code coverage, which nobody does, your unit tests won't necessarily catch all simple syntax errors. I do a lot of python coding, and one of most annoying things is silly failures due to typos that could've been easily caught by a compiler.

I suggest giving statically-typed type-inferring languages a try--they don't force you to make up anything baroque. OCaml and Scala are both good examples.</description>
		<content:encoded><![CDATA[<p>Gabe da Silveira,</p>
<p>Regarding #3: Unless you have 100% code coverage, which nobody does, your unit tests won&#8217;t necessarily catch all simple syntax errors. I do a lot of python coding, and one of most annoying things is silly failures due to typos that could&#8217;ve been easily caught by a compiler.</p>
<p>I suggest giving statically-typed type-inferring languages a try&#8211;they don&#8217;t force you to make up anything baroque. OCaml and Scala are both good examples.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gabe da Silveira</title>
		<link>http://adams.id.au/blog/2008/06/rails-10x-more-productive-scala-2x-really/comment-page-1/#comment-148</link>
		<dc:creator>Gabe da Silveira</dc:creator>
		<pubDate>Fri, 27 Jun 2008 23:01:53 +0000</pubDate>
		<guid isPermaLink="false">http://adams.id.au/blog/?p=135#comment-148</guid>
		<description>Sandro,

The reason people don't grasp that is because #3 is something you just made up out of thin air.  Dynamic language programmers don't write unit tests to solve the same problems compilers catch.  Tests are written to verify the intended functionality.  The type of errors that are typically caught by the compiler in, say, Java show up just as quickly at runtime in the vast majority of cases.

The fact is that when people write software, they don't just pass parameters around willy nilly.  It's usually very simple to infer the type of any variable at any time.  So why should we have to declare the type of everything if it's intuitively obvious?  And more importantly why should we build baroque structures to allow us some sort of multiple-type flexibility when what we want to do is conceptually simple?

Now it should be clear that what I'm talking about here is Java.  I don't have anything against static typing in general because I'm not familiar with enough languages.  I know that static typing per se doesn't need to preclude doing many of the simple and useful things we do in Ruby that are painful and obtuse in Java.</description>
		<content:encoded><![CDATA[<p>Sandro,</p>
<p>The reason people don&#8217;t grasp that is because #3 is something you just made up out of thin air.  Dynamic language programmers don&#8217;t write unit tests to solve the same problems compilers catch.  Tests are written to verify the intended functionality.  The type of errors that are typically caught by the compiler in, say, Java show up just as quickly at runtime in the vast majority of cases.</p>
<p>The fact is that when people write software, they don&#8217;t just pass parameters around willy nilly.  It&#8217;s usually very simple to infer the type of any variable at any time.  So why should we have to declare the type of everything if it&#8217;s intuitively obvious?  And more importantly why should we build baroque structures to allow us some sort of multiple-type flexibility when what we want to do is conceptually simple?</p>
<p>Now it should be clear that what I&#8217;m talking about here is Java.  I don&#8217;t have anything against static typing in general because I&#8217;m not familiar with enough languages.  I know that static typing per se doesn&#8217;t need to preclude doing many of the simple and useful things we do in Ruby that are painful and obtuse in Java.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
