<?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: Tiresome, Tedious Bullshit (on Rails)</title>
	<atom:link href="http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/</link>
	<description>Schrade.Blog</description>
	<lastBuildDate>Fri, 09 Jul 2010 06:07:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Stephan Schmidt</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-96</link>
		<dc:creator>Stephan Schmidt</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-96</guid>
		<description>&quot;Maintenance is 40 to 80% of software costs.&quot; Robert L. Glass, Facts and Fallacies of Software Engineering.

You used a framework because the 60% to 20% initial development was fast? Non-static typed languages are quite hard to maintain (some types can&#039;t be guessed, especially with lots of meta-programming-magic involved). So the 40 to 80% maintenance will be hard and expensive. As a project manager I had to drop some massive Perl and Python programs in the 90s due to maintenance problems.

&quot;So the big question now is, have we [...] finally hit the point where the cost of maintaining our code in Ruby is higher than the savings by writing it in Ruby in the first place?&quot;

Yes.

&quot;... (and perhaps we&#039;re the first team to do this, as I haven&#039;t heard much about it from others) ...&quot;

People talk about this all the time, especially people with experience in large legacy apps. The RoR and Ruby community has shut it&#039;s ears and has scorched everyone who suggested high maintenance costs for massive Ruby/RoR systems.

Peace
-stephan
--
Stephan Schmidt :: stephan@reposita.org
Reposita Open Source - Monitor your software development
http://www.reposita.org
Blog at http://stephan.reposita.org - No signal. No noise.</description>
		<content:encoded><![CDATA[<p>&#8220;Maintenance is 40 to 80% of software costs.&#8221; Robert L. Glass, Facts and Fallacies of Software Engineering.</p>
<p>You used a framework because the 60% to 20% initial development was fast? Non-static typed languages are quite hard to maintain (some types can&#8217;t be guessed, especially with lots of meta-programming-magic involved). So the 40 to 80% maintenance will be hard and expensive. As a project manager I had to drop some massive Perl and Python programs in the 90s due to maintenance problems.</p>
<p>&#8220;So the big question now is, have we [...] finally hit the point where the cost of maintaining our code in Ruby is higher than the savings by writing it in Ruby in the first place?&#8221;</p>
<p>Yes.</p>
<p>&#8220;&#8230; (and perhaps we&#8217;re the first team to do this, as I haven&#8217;t heard much about it from others) &#8230;&#8221;</p>
<p>People talk about this all the time, especially people with experience in large legacy apps. The RoR and Ruby community has shut it&#8217;s ears and has scorched everyone who suggested high maintenance costs for massive Ruby/RoR systems.</p>
<p>Peace<br />
-stephan<br />
&#8211;<br />
Stephan Schmidt :: <a href="mailto:stephan@reposita.org">stephan@reposita.org</a><br />
Reposita Open Source &#8211; Monitor your software development<br />
<a href="http://www.reposita.org" rel="nofollow">http://www.reposita.org</a><br />
Blog at <a href="http://stephan.reposita.org" rel="nofollow">http://stephan.reposita.org</a> &#8211; No signal. No noise.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stephan Schmidt</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-97</link>
		<dc:creator>Stephan Schmidt</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-97</guid>
		<description>&quot;People talk about this all the time,...&quot; [1}

[1] I talked to some CTOs and project leads about this, and they all shared RoR maintenance problems with big deployments.</description>
		<content:encoded><![CDATA[<p>&#8220;People talk about this all the time,&#8230;&#8221; [1}</p>
<p>[1] I talked to some CTOs and project leads about this, and they all shared RoR maintenance problems with big deployments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Cox</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-98</link>
		<dc:creator>Matt Cox</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-98</guid>
		<description>As long as there are people writing code then you&#039;ll always have this problem. Be it political or technical people will find ways to make things painful.

In the technical space it&#039;s usually the different level of expertise (or lack thereof), personal preferences, prejudices and basically anything that can be described as trendy that will surely overtime make you application look like a big pile of poo.

The best defense against this is to keep things separate and truly orthogonal. Bolting onto the same system just makes code rot that more egregious.</description>
		<content:encoded><![CDATA[<p>As long as there are people writing code then you&#8217;ll always have this problem. Be it political or technical people will find ways to make things painful.</p>
<p>In the technical space it&#8217;s usually the different level of expertise (or lack thereof), personal preferences, prejudices and basically anything that can be described as trendy that will surely overtime make you application look like a big pile of poo.</p>
<p>The best defense against this is to keep things separate and truly orthogonal. Bolting onto the same system just makes code rot that more egregious.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shadowfiend</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-99</link>
		<dc:creator>Shadowfiend</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-99</guid>
		<description>I don&#039;t know that the Rails community has shut its ears in any way, shape, or form. You&#039;re more likely to hear `use the right tool for the right job&#039; out of them than you are out of most people (from my experience), and I think (for now, at least) Rails isn&#039;t the right tool for very large applications (not necessarily to be confused with very *active* applications, argument which has been fought over more than once).

Refactoring tools and such are getting better, though, as most Java IDEs (including, as it happens, IDEA) are gaining Ruby support. NetBeans, for example, already has some rudimentary refactoring support. I daresay things will only get better.

It&#039;d be interesting to see Rubinius going in the direction of the StrongTalk VM that seems to have added type inferencing (whether it was limited or not, I don&#039;t know) to Smalltalk.

Regardless, it amuses me greatly when people seem to imply that dynamic languages are hard to add refactoring to (and perhaps that&#039;s not what Stephan was implying when he made the comment about dynamic languages -- that&#039;s how I understood it) when refactoring practically came out of the Smalltalk community, Smalltalk being a dynamic language in exactly the same vein as Ruby.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t know that the Rails community has shut its ears in any way, shape, or form. You&#8217;re more likely to hear `use the right tool for the right job&#8217; out of them than you are out of most people (from my experience), and I think (for now, at least) Rails isn&#8217;t the right tool for very large applications (not necessarily to be confused with very *active* applications, argument which has been fought over more than once).</p>
<p>Refactoring tools and such are getting better, though, as most Java IDEs (including, as it happens, IDEA) are gaining Ruby support. NetBeans, for example, already has some rudimentary refactoring support. I daresay things will only get better.</p>
<p>It&#8217;d be interesting to see Rubinius going in the direction of the StrongTalk VM that seems to have added type inferencing (whether it was limited or not, I don&#8217;t know) to Smalltalk.</p>
<p>Regardless, it amuses me greatly when people seem to imply that dynamic languages are hard to add refactoring to (and perhaps that&#8217;s not what Stephan was implying when he made the comment about dynamic languages &#8212; that&#8217;s how I understood it) when refactoring practically came out of the Smalltalk community, Smalltalk being a dynamic language in exactly the same vein as Ruby.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pius</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-100</link>
		<dc:creator>Pius</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-100</guid>
		<description>Ahh, I remember the good old days when people actually had to refactor their code by hand with only their test coverage and intellect to see them through.  If you&#039;re that unhappy with the extant refactoring tools, why not write one?</description>
		<content:encoded><![CDATA[<p>Ahh, I remember the good old days when people actually had to refactor their code by hand with only their test coverage and intellect to see them through.  If you&#8217;re that unhappy with the extant refactoring tools, why not write one?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-101</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-101</guid>
		<description>Sounds like a great idea for your next project - a refactoring tool!</description>
		<content:encoded><![CDATA[<p>Sounds like a great idea for your next project &#8211; a refactoring tool!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stephan Schmidt</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-102</link>
		<dc:creator>Stephan Schmidt</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-102</guid>
		<description>@Shadowfiend:

I know the community to shut it&#039;s ears to maintenance problems, the argument usually is: Ruby is less noisy, leaner, smaller, more powerful and therefore more orthogonal, so there is no maintenance problem. This attitude might change, but at least from 1998 to around 2006 when I was active with Ruby/RoR projects that was the answer to maintenance problems with Ruby.

Type inference will not help you with all refactoring problems, not all types can be inferenced with DSL frameworks like RoR.

&quot;... though, as most Java IDEs (including, as it happens, IDEA) are gaining Ruby support&quot;

Working on a bigger Grails project, IDE support is great but doesn&#039;t help you with refactorings and maintenance. Most of the time, especially as said with meta frameworks as Grails, the IDE has no clue about the type.

For example:

def person = request.map.person

person.smile()

What type is person? The IDE can guess, that person is Person.groovy - or not - and can narrow the type to all types with a smile method - not when I have dynamically added the smile method - or could try to simulate and trace the application (as JTest and others do) and see what one puts into person. Smalltalk has some advantage here, because it not only has compile time information, but runtime information and therefor can deduce what person is, at least at the time when Smalltalk checked the runtime type.
This information might be incorporated from a Ruby VM to a Ruby IDE, but we&#039;re years from there and even then, not all types can be guessed correctly.

&quot;Regardless, it amuses me greatly when people seem to imply that dynamic languages are hard to add refactoring to [...] when refactoring practically came out of the Smalltalk community, Smalltalk being a dynamic language in exactly the same vein as Ruby.&quot;

First, Smalltalk refactoring is about refactoring Smalltalk applications, not about meta-programmed framework DSLs like RoR. I know of no Smalltalk refactoring paper which talks about meta-programmed DSLs.

Second, under the umbrella of refactoring, there are hundreds of concrete refactorings. Some are easy for every kind of language, like &quot;Extract method&quot;. Some are harder to do like &quot;Extract superclass and use super class instead&quot;. And some IDEs guarantee that your refactorings work, with some refactoring tools you need tests and a lot of manual clean up if something goes wrong. So refactorings are always possible, but some languages do not support secure refactorings (which people call &quot;no-refactorings&quot;).

Third, &quot;Smalltalk being a dynamic language in exactly the same vein as Ruby&quot;, there is a difference between Smalltalk and Ruby. Smalltalk is dynamic reference/static object language, while Ruby is a dynamic reference/ dynamic object language, at least more than Smalltalk is. So what applies to Smalltalk does not automatically apply to Ruby.

Last not least, Smalltalk uses runtime information to do refactorings, an IDE for Ruby doesn&#039;t do that.

Peace
-stephan

--
Stephan Schmidt :: stephan@reposita.org
Reposita Open Source - Monitor your software development
http://www.reposita.org
Blog at http://stephan.reposita.org - No signal. No noise.</description>
		<content:encoded><![CDATA[<p>@Shadowfiend:</p>
<p>I know the community to shut it&#8217;s ears to maintenance problems, the argument usually is: Ruby is less noisy, leaner, smaller, more powerful and therefore more orthogonal, so there is no maintenance problem. This attitude might change, but at least from 1998 to around 2006 when I was active with Ruby/RoR projects that was the answer to maintenance problems with Ruby.</p>
<p>Type inference will not help you with all refactoring problems, not all types can be inferenced with DSL frameworks like RoR.</p>
<p>&#8220;&#8230; though, as most Java IDEs (including, as it happens, IDEA) are gaining Ruby support&#8221;</p>
<p>Working on a bigger Grails project, IDE support is great but doesn&#8217;t help you with refactorings and maintenance. Most of the time, especially as said with meta frameworks as Grails, the IDE has no clue about the type.</p>
<p>For example:</p>
<p>def person = request.map.person</p>
<p>person.smile()</p>
<p>What type is person? The IDE can guess, that person is Person.groovy &#8211; or not &#8211; and can narrow the type to all types with a smile method &#8211; not when I have dynamically added the smile method &#8211; or could try to simulate and trace the application (as JTest and others do) and see what one puts into person. Smalltalk has some advantage here, because it not only has compile time information, but runtime information and therefor can deduce what person is, at least at the time when Smalltalk checked the runtime type.<br />
This information might be incorporated from a Ruby VM to a Ruby IDE, but we&#8217;re years from there and even then, not all types can be guessed correctly.</p>
<p>&#8220;Regardless, it amuses me greatly when people seem to imply that dynamic languages are hard to add refactoring to [...] when refactoring practically came out of the Smalltalk community, Smalltalk being a dynamic language in exactly the same vein as Ruby.&#8221;</p>
<p>First, Smalltalk refactoring is about refactoring Smalltalk applications, not about meta-programmed framework DSLs like RoR. I know of no Smalltalk refactoring paper which talks about meta-programmed DSLs.</p>
<p>Second, under the umbrella of refactoring, there are hundreds of concrete refactorings. Some are easy for every kind of language, like &#8220;Extract method&#8221;. Some are harder to do like &#8220;Extract superclass and use super class instead&#8221;. And some IDEs guarantee that your refactorings work, with some refactoring tools you need tests and a lot of manual clean up if something goes wrong. So refactorings are always possible, but some languages do not support secure refactorings (which people call &#8220;no-refactorings&#8221;).</p>
<p>Third, &#8220;Smalltalk being a dynamic language in exactly the same vein as Ruby&#8221;, there is a difference between Smalltalk and Ruby. Smalltalk is dynamic reference/static object language, while Ruby is a dynamic reference/ dynamic object language, at least more than Smalltalk is. So what applies to Smalltalk does not automatically apply to Ruby.</p>
<p>Last not least, Smalltalk uses runtime information to do refactorings, an IDE for Ruby doesn&#8217;t do that.</p>
<p>Peace<br />
-stephan</p>
<p>&#8211;<br />
Stephan Schmidt :: <a href="mailto:stephan@reposita.org">stephan@reposita.org</a><br />
Reposita Open Source &#8211; Monitor your software development<br />
<a href="http://www.reposita.org" rel="nofollow">http://www.reposita.org</a><br />
Blog at <a href="http://stephan.reposita.org" rel="nofollow">http://stephan.reposita.org</a> &#8211; No signal. No noise.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Berger</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-103</link>
		<dc:creator>Daniel Berger</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-103</guid>
		<description>Don&#039;t NetBeans, Eclipse (Aptana) or Komodo all have Rails refactoring tools that you could use?</description>
		<content:encoded><![CDATA[<p>Don&#8217;t NetBeans, Eclipse (Aptana) or Komodo all have Rails refactoring tools that you could use?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stephan Schmidt</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-104</link>
		<dc:creator>Stephan Schmidt</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-104</guid>
		<description>I know the Ruby community - or the new Ruby community after the RoR influx - shuts its ears, at least from 1998 to 2005
when I was activly using Ruby and RoR from time to time. The usual argument is: Ruby is less noisy, small, lean, has better
readability, is more powerful and more orthogonal and therefor there is no maintenance problem.
As a project manager I had to drop some massive Perl and Python projects in the 90s,
due to maintenance problems, so I have seen dynamic languages fail with bigger code bases. So the Ruby argument
was not very convincing to me.

&quot;Regardless, it amuses me greatly when people seem to imply that dynamic languages are
hard to add refactoring to [...] when refactoring practically came out of the Smalltalk community,
Smalltalk being a dynamic language in exactly the same vein as Ruby.&quot;

First under the umrella of refactoring, there are lots of concrete refactorings. Some are easy
in every language, like &quot;Extract method&quot;. Some are easier in dynamic languages, because
you do not have to change every type declaration. Others are harder to do, like &quot;Extract superclass and use superclass instead.&quot;.
Others are harder still like &quot;Move method&quot; or &quot;Rename method&quot;. Some IDEs and tools guarantee
secure refactorings, for some tools and languages you need tight tests and a lot of manual clean up after the refactoring should
something go wrong or not as intended. Every language supports
manual(!) refactorings. You could argue that unsafe refactorings with manual
rework are not the same as safe refactorings or are no refactorings at all. But I hope for the best in IDEA with Groovy.

Second there should be some success in the future with tools but not now.

&quot;Refactoring tools and such are getting better,
though, as most Java IDEs (including, as it happens, IDEA)
are gaining Ruby support.&quot;

Support in IDEA - the best IDE :-) will not help much.
Working on a bigger Grails project, IDE support is great to have in IDEA. But
most of the types in my Grails application cannot be guessed by the IDE, because
Grails is a meta-programming DSL not a conventional framework.

Sometimes guessing the type is easy, as in

def person = new Person()

But assuming the Groovy code

def person = request.person

person.smile()

the IDE has problems guessing the type of person. It could guess the type as
Person.groovy based on the name - but the programmer could just have been
thinking of something else. It could narrow the guess to all types with a
smile method, at least when noone has added one during runtime. It could
simulate and trace the application (as JTest does to find null pointers)
to see what has been put into request.person. Smalltalk has some
advantage here because it not only uses compile time but also runtime
information. But still it can&#039;t guess the type correctly all the time
and we&#039;re years away from a Ruby VM which supplies runtime type information
to an IDE.

Compare that to (legal Groovy code):

Person person = request.person

person.smile()

In that case, the IDE has much fewer problems to &quot;guess&quot; the type of person.

Third, &quot;Smalltalk being a dynamic language in exactly the same vein as Ruby&quot;.
Ruby is a dynamic reference/ dynamic object language while Smalltalk is a dynamic reference/static object language, at least
more static than Ruby. So not everything said about Smalltalk applies to Ruby.

You can write and maintain code with dynamic languages. But it is harder, it needs more discipline and planning. Both of those are seldom available with average programmers and the usual corporate enviroment.

Peace, -stephan

--
Stephan Schmidt :: stephan@reposita.org
Reposita Open Source - Monitor your software development
http://www.reposita.org
Blog at http://stephan.reposita.org - No signal. No noise.</description>
		<content:encoded><![CDATA[<p>I know the Ruby community &#8211; or the new Ruby community after the RoR influx &#8211; shuts its ears, at least from 1998 to 2005<br />
when I was activly using Ruby and RoR from time to time. The usual argument is: Ruby is less noisy, small, lean, has better<br />
readability, is more powerful and more orthogonal and therefor there is no maintenance problem.<br />
As a project manager I had to drop some massive Perl and Python projects in the 90s,<br />
due to maintenance problems, so I have seen dynamic languages fail with bigger code bases. So the Ruby argument<br />
was not very convincing to me.</p>
<p>&#8220;Regardless, it amuses me greatly when people seem to imply that dynamic languages are<br />
hard to add refactoring to [...] when refactoring practically came out of the Smalltalk community,<br />
Smalltalk being a dynamic language in exactly the same vein as Ruby.&#8221;</p>
<p>First under the umrella of refactoring, there are lots of concrete refactorings. Some are easy<br />
in every language, like &#8220;Extract method&#8221;. Some are easier in dynamic languages, because<br />
you do not have to change every type declaration. Others are harder to do, like &#8220;Extract superclass and use superclass instead.&#8221;.<br />
Others are harder still like &#8220;Move method&#8221; or &#8220;Rename method&#8221;. Some IDEs and tools guarantee<br />
secure refactorings, for some tools and languages you need tight tests and a lot of manual clean up after the refactoring should<br />
something go wrong or not as intended. Every language supports<br />
manual(!) refactorings. You could argue that unsafe refactorings with manual<br />
rework are not the same as safe refactorings or are no refactorings at all. But I hope for the best in IDEA with Groovy.</p>
<p>Second there should be some success in the future with tools but not now.</p>
<p>&#8220;Refactoring tools and such are getting better,<br />
though, as most Java IDEs (including, as it happens, IDEA)<br />
are gaining Ruby support.&#8221;</p>
<p>Support in IDEA &#8211; the best IDE <img src='http://kurt.karmalab.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  will not help much.<br />
Working on a bigger Grails project, IDE support is great to have in IDEA. But<br />
most of the types in my Grails application cannot be guessed by the IDE, because<br />
Grails is a meta-programming DSL not a conventional framework.</p>
<p>Sometimes guessing the type is easy, as in</p>
<p>def person = new Person()</p>
<p>But assuming the Groovy code</p>
<p>def person = request.person</p>
<p>person.smile()</p>
<p>the IDE has problems guessing the type of person. It could guess the type as<br />
Person.groovy based on the name &#8211; but the programmer could just have been<br />
thinking of something else. It could narrow the guess to all types with a<br />
smile method, at least when noone has added one during runtime. It could<br />
simulate and trace the application (as JTest does to find null pointers)<br />
to see what has been put into request.person. Smalltalk has some<br />
advantage here because it not only uses compile time but also runtime<br />
information. But still it can&#8217;t guess the type correctly all the time<br />
and we&#8217;re years away from a Ruby VM which supplies runtime type information<br />
to an IDE.</p>
<p>Compare that to (legal Groovy code):</p>
<p>Person person = request.person</p>
<p>person.smile()</p>
<p>In that case, the IDE has much fewer problems to &#8220;guess&#8221; the type of person.</p>
<p>Third, &#8220;Smalltalk being a dynamic language in exactly the same vein as Ruby&#8221;.<br />
Ruby is a dynamic reference/ dynamic object language while Smalltalk is a dynamic reference/static object language, at least<br />
more static than Ruby. So not everything said about Smalltalk applies to Ruby.</p>
<p>You can write and maintain code with dynamic languages. But it is harder, it needs more discipline and planning. Both of those are seldom available with average programmers and the usual corporate enviroment.</p>
<p>Peace, -stephan</p>
<p>&#8211;<br />
Stephan Schmidt :: <a href="mailto:stephan@reposita.org">stephan@reposita.org</a><br />
Reposita Open Source &#8211; Monitor your software development<br />
<a href="http://www.reposita.org" rel="nofollow">http://www.reposita.org</a><br />
Blog at <a href="http://stephan.reposita.org" rel="nofollow">http://stephan.reposita.org</a> &#8211; No signal. No noise.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shadowfiend</title>
		<link>http://kurt.karmalab.org/2007/07/25/tiresome-tedious-bullshit-on-rails/comment-page-1/#comment-105</link>
		<dc:creator>Shadowfiend</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">urn:uuid:{a.guid}#comment-105</guid>
		<description>&lt;p&gt;Stephan --&lt;/p&gt;

&lt;p&gt;
With respect to unsafe refactorings+tests, you may save some work with so-called `safe&#039; refactorings, but they&#039;re not really safe at the end of the day. They&#039;re type-safe. The difference is large, because maybe the refactoring broke something that didn&#039;t directly have to do with the type. So you have to run tests anyway; the only thing that changes is that you have a few problems that you don&#039;t have to deal with immediately.&lt;/p&gt;

&lt;p&gt;
Nonetheless, I don&#039;t deny that static types make certain refactoring tasks easier than they are in dynamic languages; the issue is that by doing that, you also sacrifice some flexibility. It&#039;s a trade-off, as with many things, and different people prefer different sides of that trade-off.&lt;/p&gt;

&lt;p&gt;
Now, with respect to type inferencing and guessing -- you&#039;re right, of course, correct guessing is often near impossible. But when I was talking about type inferencing, I was talking about the SML/Haskell kind. The one that introduces static types without type annotations. I think it would be interesting to see a Ruby VM (or even an IDE) that could go into a statically typed, type-inferenced mode. You&#039;d lose a lot of the value of duck typing, but it&#039;d be interesting to see what kind of advantages that would give you.&lt;/p&gt;

&lt;p&gt;
As for Smalltalk being somehow more static than Ruby, it really isn&#039;t. What&#039;s different is the approach of Smalltalk programmers, who aren&#039;t quite as keen to use metaprogramming as Rubyists (who tend to consider the programming-metaprogramming distinction semantic at best). Smalltalk itself is just as dynamic, what with support for doesNotUnderstand: and runtime compiler access. Certain things may not be quite as straightforward, and Smalltalkers seem to be a little more reticent in using some of the metaprogramming features in Smalltalk, but they&#039;re there. In fact, occasionally Smalltalk is *more* metaprogramming friendly. For example, the VisualWorks implementation of namespaces allows you access to the list of classes in that namespace, something which isn&#039;t quite so simple in Ruby. (/me munches his words; never mind, I&#039;d missed Module#constants :))&lt;/p&gt;

&lt;p&gt;
Another interesting addition to Ruby would be optional type annotations like Groovy has.&lt;/p&gt;


&lt;p&gt;All this aside, I think your final comment is fantastic:&lt;/p&gt;


&lt;p&gt;``Both [discipline and planning] are seldom available with average programmers and the usual corporate environment.&#039;&#039;&lt;/p&gt;


&lt;p&gt;Yes. I&#039;ve been saying for a time that Java is what you use when you can&#039;t rely on all of your programmers being great at what they do. When you can rely on that, your options are far more open, because you can go with more dynamic languages that require more discipline, because you trust that your programmers will have that discipline.&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Stephan &#8211;</p>
<p>
With respect to unsafe refactorings+tests, you may save some work with so-called `safe&#8217; refactorings, but they&#8217;re not really safe at the end of the day. They&#8217;re type-safe. The difference is large, because maybe the refactoring broke something that didn&#8217;t directly have to do with the type. So you have to run tests anyway; the only thing that changes is that you have a few problems that you don&#8217;t have to deal with immediately.</p>
<p>
Nonetheless, I don&#8217;t deny that static types make certain refactoring tasks easier than they are in dynamic languages; the issue is that by doing that, you also sacrifice some flexibility. It&#8217;s a trade-off, as with many things, and different people prefer different sides of that trade-off.</p>
<p>
Now, with respect to type inferencing and guessing &#8212; you&#8217;re right, of course, correct guessing is often near impossible. But when I was talking about type inferencing, I was talking about the SML/Haskell kind. The one that introduces static types without type annotations. I think it would be interesting to see a Ruby VM (or even an IDE) that could go into a statically typed, type-inferenced mode. You&#8217;d lose a lot of the value of duck typing, but it&#8217;d be interesting to see what kind of advantages that would give you.</p>
<p>
As for Smalltalk being somehow more static than Ruby, it really isn&#8217;t. What&#8217;s different is the approach of Smalltalk programmers, who aren&#8217;t quite as keen to use metaprogramming as Rubyists (who tend to consider the programming-metaprogramming distinction semantic at best). Smalltalk itself is just as dynamic, what with support for doesNotUnderstand: and runtime compiler access. Certain things may not be quite as straightforward, and Smalltalkers seem to be a little more reticent in using some of the metaprogramming features in Smalltalk, but they&#8217;re there. In fact, occasionally Smalltalk is *more* metaprogramming friendly. For example, the VisualWorks implementation of namespaces allows you access to the list of classes in that namespace, something which isn&#8217;t quite so simple in Ruby. (/me munches his words; never mind, I&#8217;d missed Module#constants <img src='http://kurt.karmalab.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>
Another interesting addition to Ruby would be optional type annotations like Groovy has.</p>
<p>All this aside, I think your final comment is fantastic:</p>
<p>&#8220;Both [discipline and planning] are seldom available with average programmers and the usual corporate environment.&#8221;</p>
<p>Yes. I&#8217;ve been saying for a time that Java is what you use when you can&#8217;t rely on all of your programmers being great at what they do. When you can rely on that, your options are far more open, because you can go with more dynamic languages that require more discipline, because you trust that your programmers will have that discipline.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
