<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>cfis : Languages That Get out of Your Way</title>
    <link>http://cfis.savagexi.com</link>
    <atom:link rel="self" type="application/rss+xml" href="http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way?format=rss"/>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Charlie Savage's Blog</description>
    <item>
      <title>Trackback from cfis: Selenium and XHTML on Languages That Get out of Your Way</title>
      <description>Last month I blogged about Selenium, which is an open source project that let's you test web applications running in a variety of browser. Unfortunately, Selenium doesn't work out of the box with XHTML - any XPath expressions you use stop working....</description>
      <pubDate>Wed, 02 Aug 2006 00:10:22 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:cf5a2d86-4f3b-44b8-a184-7fed9ae3c8d9</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#trackback-17</link>
    </item>
    <item>
      <title>Comment on Languages That Get out of Your Way by Ryan</title>
      <description>&lt;p&gt;First, the whole &amp;#8220;sharp knife vs. dull knife&amp;#8221; analogy is beyond tired at this point, not to mention that it never actually meant anything to begin with (e.g. Java is a far &amp;#8220;sharper knife&amp;#8221; than Ruby because you can create a far wider range of applications with it that will run well on any major platform).&lt;/p&gt;

&lt;p&gt;Second, you say &amp;#8220;Trusting my experience, I don&amp;#8217;t believe programs written in Java (or C++, etc.) are on average more robust than programs written in Python, Ruby, Smalltalk, Perl, etc.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Well, trusting my own experience, programs written in Java are far more robust, maintainable and suitable for team development than programs written in dynamic languages. That&amp;#8217;s why many large-scale and mission critical applications continue to be written in Java while next to none are written in, for instance, Ruby. Ruby doesn&amp;#8217;t seem to be making any inroads into traditional Java territory any more than PHP has - and there&amp;#8217;s no reason that it should because it&amp;#8217;s only advantages come at an unacceptable cost (primarily long-term maintainability).&lt;/p&gt;

&lt;p&gt;Third, you mention a &amp;#8220;brittle edifice of complexity&amp;#8221; and I guess you are implying that Java applications fit that description(?). In fact, the statically typed nature of Java is what allows you to make massive, sweeping changes to an application with total confidence. Many of the refactoring capabilities that I use every day in Eclipse are simply not possible with a dynamic language. So I would argue that a typical Java application is more flexible than a typical application written in a dynamic language. If you do end up with a &amp;#8220;brittle edifice of complexity&amp;#8221;, it is most likely your design that&amp;#8217;s at fault rather than the language.&lt;/p&gt;

&lt;p&gt;I guess my main point here is that, while it&amp;#8217;s nice for you to share your opinion, you didn&amp;#8217;t actually bring up any points to support it. You attempt to turn the world on its head by suggesting that Java is no more robust than dynamic languages because you haven&amp;#8217;t seen an exhaustive study to prove it. The obvious problem with this line of thinking is that Java has already been proven to be an extremely robust and highly maintainable programming language. This is borne out by the numerous, large scale applications written in Java that are running and depended upon every day by countless businesses. Ruby has few, if any, such success stories. So it is obviously up to the Ruby advocates to prove that their pet language can scale, in terms of complexity and team development, to the same point that Java has for many years now &amp;#8211; not the other way around.&lt;/p&gt;

&lt;p&gt;Another point I always feel compelled to bring up in these discussions is that the Java world has already adopted many of the supposed advantages of dynamic languages via higher-level, lighter weight frameworks and tools. For example, I have yet to see a Rails enthusiast who is also familiar with the Cayenne and Wicket frameworks, which will give you about the same overall level of productivity as rails but with much cleaner and more maintainable code.&lt;/p&gt;

&lt;p&gt;I think dynamic languages are certainly more well suited to certain tasks than static languages like Java. I just don&amp;#8217;t think that large-scale, robust applications are their sweet spot.&lt;/p&gt;</description>
      <pubDate>Sun, 22 Jul 2007 19:31:48 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:69b45d20-f7cc-4188-90e5-de64eebd441c</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#comment-2076</link>
    </item>
    <item>
      <title>Comment on Languages That Get out of Your Way by Brian</title>
      <description>&lt;p&gt;Wow Ryan. Such verbosity in your arguments. It reminds me why I don&amp;#8217;t really like Java.&lt;/p&gt;

&lt;p&gt;Regarding your comment on refactoring tools, I only need to quote Steve Yegge.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html" rel="nofollow"&gt;http://steve-yegge.blogspot.com/2007/02/next-big-language.html&lt;/a&gt;
&amp;#8220;I can&amp;#8217;t tell you how many times I&amp;#8217;ve heard people say they wouldn&amp;#8217;t use Ruby because it lacks automated refactoring tools. Ruby doesn&amp;#8217;t actually need them in the way Java does; it&amp;#8217;s like refusing to switch to an electric car because there&amp;#8217;s no place to put the gasoline. But programmers are a stubborn bunch, and to win them over you have to give them what they think they want.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Ooh, and btw, in my experience, its not the language, but the quality of developers that make programs better. Ruby just allows people to be much more productive.&lt;/p&gt;</description>
      <pubDate>Sun, 22 Jul 2007 21:21:41 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:0114ad99-1e5d-4362-9dcc-a426a5f8fe36</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#comment-2087</link>
    </item>
    <item>
      <title>Comment on Languages That Get out of Your Way by Charlie</title>
      <description>&lt;p&gt;Hi Ryan,&lt;/p&gt;

&lt;p&gt;Wow - that was quite a reply.  Sorry you didn&amp;#8217;t like the analogy, but ok.&lt;/p&gt;

&lt;p&gt;Anyway, like I wrote, Magik was the first dynamic language I learned.  Its the basis for Smallworld, which is a GIS software package used by almost every large utility in Europe, and many in North America, plus a number of telecoms, to manage their networks.  So the argument that dynamic languages aren&amp;#8217;t used in mission critical applications is incorrect.&lt;/p&gt;

&lt;p&gt;As far as a &amp;#8220;brittle edifice&amp;#8221; - I think every program ever written is a brittle edifice, regardless of the language used.  But of course many applications, particularly enterprise applications, have to evolve over time.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Which brings us to your point of refactoring.  An often cited advantage of static languages is that they make these types of changes easier.  But I think its an illusion - making sure your types are correct certainly does not imply that your program is correct.&lt;/p&gt;

&lt;p&gt;The only effective way I&amp;#8217;ve seen of making change less painful is a full test suite - unit tests, functional tests, etc - and even then you never know if you&amp;#8217;ve done something wrong.  Neither static languages nor dynamic languages have any advantages here.&lt;/p&gt;

&lt;p&gt;Where dynamic languages do have advantage is that you have more flexibility to change existing programs.  If a method takes a Foo, you can give it a Bar, and it works via duck typing.  And I cited a few other examples in the article.&lt;/p&gt;

&lt;p&gt;But many of these techniques are controversial - in fact, I thought they were nuts when I first learned them.  But over time, and with needing them enough times, I&amp;#8217;ve come around to see their value.  And at this point I  think they offer more value than static typing does, and thus, the reason to write the article.&lt;/p&gt;

&lt;p&gt;But that is just my opinion.  One of the frustrations of these discussions is that there are no rigorous studies that I know of that show some language to be better suited for some task than others.  Of course, maybe there never will be, since I haven&amp;#8217;t got a clue as how you would perform such a study.&lt;/p&gt;

&lt;p&gt;Anyway, Java obviously works for Enterprise applications because, like you say, you can point out many of them. But does that make it better for them?  Who knows.  I could make the same argument for C++.  Or Fortran.  Or Cobol.  Or Smalltalk.  Or&amp;#8230;well you get the point.&lt;/p&gt;

&lt;p&gt;Anyway, thanks for taking the time to write such a lengthy comment.&lt;/p&gt;</description>
      <pubDate>Sun, 22 Jul 2007 21:50:46 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:29aec811-96d6-429c-a457-17a634dffd76</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#comment-2088</link>
    </item>
    <item>
      <title>Comment on Languages That Get out of Your Way by Static</title>
      <description>&lt;p&gt;Look at the average PHP codebase (MediaWiki for example) to see some atrocious examples of happens to a large program co-written by many authors in a dynamic language.&lt;/p&gt;

&lt;p&gt;No one would argue that Google is devoid of highly skilled hacker types, yet Google&amp;#8217;s is dominated by static languages (C++, Java) Google&amp;#8217;s Java codebase easily dwarfs the entire Ruby repository, and there is less fear that a small change in one module will end up breaking all of their web properties, due not only to unit tests, but also to compile time type checks &amp;#8211; which can be viewed as nothing more than a form of elegantly expressed declarative unit test constraints in that regard.&lt;/p&gt;

&lt;p&gt;Finally, the typical fanboys who discover dynamic languages and become new evangelists for them, writing blog pieces like this, commit the either-or fallacy and focus way too heavily on attacking Java or C++.  The fact is, metaprogramming, closures,  et al, are not mutally exclusive with static type systems.&lt;/p&gt;

&lt;p&gt;I can achieve almost everything Ruby addicts blab on about using Haskell or ML derivatives, etc. Type inferencing saves most of the effort required to declare types while maintaining strict typing but leaving methods generic. Thus, I can declare a typesafe method &amp;#8220;add(x,y)&amp;#8221; that will take a Foo or Bar, but I avoid the pitfalls of duck typing (and believe me, there are plenty of them)&lt;/p&gt;

&lt;p&gt;Haskell&amp;#8217;s type system, ability to define arbitrary prefix/infix/postfix operators, pass functions as first class, allows efficient creation of DSLs, in fact, Haskell is better at DSLs than Ruby is. And if you need more power, you can try Template Haskell.&lt;/p&gt;

&lt;p&gt;Of course, Haskell isn&amp;#8217;t mainstream, but the point is, this static vs dynamic debate is too polarized by fanboys on both sides.&lt;/p&gt;</description>
      <pubDate>Mon, 23 Jul 2007 16:48:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c3239780-5b42-4463-8744-07d0b0003d51</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#comment-2277</link>
    </item>
    <item>
      <title>Comment on Languages That Get out of Your Way by Charlie</title>
      <description>&lt;p&gt;Hi Static (and others)&lt;/p&gt;

&lt;p&gt;Obviously I didn&amp;#8217;t do a very good job of writing this article because I think its main point has has been misunderstood.  So let me try again.&lt;/p&gt;

&lt;p&gt;The post isn&amp;#8217;t meant as a static versus dynamic language argument.  Instead, its about languages that limit a programmer&amp;#8217;s freedom in the belief that such limitations lead to safer programs.&lt;/p&gt;

&lt;p&gt;Static versus dynamic typing is just one piece of that puzzle - I also listed a number of other pieces in the article.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;I find that languages that have such restrictions are limiting.  I used Java as an example because it has all of these limitations, not because it is statically typed.&lt;/p&gt;

&lt;p&gt;Static mentioned Haskell as a language the proves my post incorrect.  I don&amp;#8217;t think so. I&amp;#8217;ve only programmed in Haskell for fun, to learn it, but from my little bit of expierence it doesn&amp;#8217;t suffer from any of the problem I mentioned.  So it qualifies as a language that &amp;#8220;gets out of your way.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And I find Haskell&amp;#8217;s inferred static typing to be fascinating (just as I find C++ templates to be fascinating). Perhaps it does offer the best of both worlds - but until I write a full program in Haskell, I don&amp;#8217;t understand it well enough to know.&lt;/p&gt;

&lt;p&gt;Anyway, I hope this makes my thinking a bit more clear.&lt;/p&gt;</description>
      <pubDate>Mon, 23 Jul 2007 22:19:41 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b4ff0401-3931-45f5-9c80-7a1e54a40609</guid>
      <link>http://cfis.savagexi.com/2006/07/20/languages-that-get-out-of-your-way#comment-2332</link>
    </item>
  </channel>
</rss>
