<?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: Runaway Train</title>
	<atom:link href="http://www.evilsoft.org/2009/07/13/106/feed" rel="self" type="application/rss+xml" />
	<link>http://www.evilsoft.org/2009/07/13/106</link>
	<description>We're everywhere....</description>
	<lastBuildDate>Tue, 06 Jul 2010 15:50:53 -0400</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Rodney</title>
		<link>http://www.evilsoft.org/2009/07/13/106/comment-page-1#comment-17705</link>
		<dc:creator>Rodney</dc:creator>
		<pubDate>Thu, 16 Jul 2009 02:32:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.evilsoft.org/?p=106#comment-17705</guid>
		<description>1. Community
The old school Unix hacker ethos brims with egotism. When the system has always been a meritocracy based on how much you know and what cool stuff you&#039;ve coded based on what you&#039;ve managed to figure out on your own, why would it be any other way? 

There&#039;s also a level of irony involved, see &quot;haha, only serious&quot;: http://www.azundris.com/about/hhos.xml

Also, when you&#039;ve worked with the web stack long enough, you painfully understand the layers of crufty hacks-upon-hacks that-is-the-web. It doesn&#039;t help that monolithic &quot;enterprisey&quot; mega-corps such as Microsoft and IBM have done as much as possible to make it even worse(intentionally or not). Web development is miserable. So along comes an extremely well thought out framework that actually makes web development fun again. No wonder Rails devs would have an ego--if you get hit by the zen master&#039;s cane and receive enlightenment I&#039;d say you&#039;re entitled to at least some ego.

As for Zed, his online persona is a freakish outlier, so you can&#039;t use him as the face of Rails egotism. Besides, his ego was too large for Rails and he&#039;s since moved on to Python.

2. Documentation.
I suppose you prefer monolithic Java-style documentation? To say Rails and its ecosystem of gems and plugins changes rapidly is an understatement, and it doesn&#039;t look like it&#039;s slowing down any time soon.
It&#039;s impossible to fully document a constantly moving target and is silly to expect it. Why is this a great thing? Because it shows the style of development isn&#039;t set in its ways, but is instead evolving and throwing multiple attempts at solving numerous problems until the right one sticks. RTFM has become LMGTFY. Perhaps this change reflects a generational shift, as documentation itself no longer matters as much as discovering how other coders are using the software. I rarely need to venture beyond a few Google SERPs to get exactly what I need. Rails is very social software.

3. Excessive Reliance on ORM.
You say &quot;sql is much easier than coding.&quot; Have you ever worked on a super-massive non-ORM app code base comprising ~35k lines of code just for several hundred models, managing nearly 500 db tables spread across 10 separate databases(Oracle, Mysql, and MSSQL), all containing about 3k unique SQL queries hard coded *throughout* the code? Oh and did I mentioned the .01% unit test coverage? No?
I have, and let me tell you, it was a total nightmare and I would have traded my own body parts for a drop-in ORM solution. Sure, there are corner cases where a raw SQL query doing a join across 6 tables is orders of magnitude faster than AR at its best, however 90% of the time ORM is &quot;good enough.&quot; Developer and maintenance time is worth far more than run time speed(Moore&#039;s Law etc).
Also, there are major design decisions to account for if you find yourself dropping down to SQL just to make that big join query fast enough, such as: you&#039;re probably doing something complex enough that you won&#039;t be able to easily test it. Is that the kind of code you want to maintain down the road? Probably not.

4. Excessive reliance on pure Ruby.
I agree with you on this one, having a fine appreciation for dropping down to C when appropriate. Parsing of any kind is better suited for C. You use XML as the main example, but XML sucks, and everybody is coming to realize it. JSON and other micro-formats will soon supplant XML.

5. Fragile ecosystem.
I also agree. Ever changing dependencies and wack-a-mole gem breakage is a nightmare to fight. On the bright side, it&#039;s the rapidly changing aspect of Rails--eventually as the ecosystem matures it will converge on stable APIs.
I don&#039;t agree with you at all that Rails is not enterprise ready. &quot;Enterprise&quot; is a meaningless, undefinable buzzword used to spread FUD, and the word itself is a sort of shibboleth--if you use it in serious conversation, you&#039;ve outed yourself as &quot;not really getting software.&quot; Recall, you could go back just 7 years or so and there were many large &quot;enterprises&quot; claiming that Linux was &quot;not enterprise ready.&quot; And look how right they were. All the so-called &quot;enterprise&quot; software I&#039;ve worked on sucked. NIH and getting stuck doing things the wrong way ends up being worse than using better open-source alternatives. Case in point: M$ being crippled by their own support of backwards compatibility. They will never ship a successful OS again until they completely ditch the &quot;enterprise&quot; mindset. No wonder Google is successfully cutting off their air supply. Being pro-enterprise is essentially being anti-open-source. Again, it&#039;s the hacker ethos: screw the system, it&#039;s the bazaar that will win the war, not the cathedral. If haggling for the proverbial perfect black egg in the crowds of the bazaar is seen as a problem and not an advantage, then you&#039;re missing a huge piece of the picture.

As for Apache, I&#039;ll repeat the words of the lead yellowpages dev from his 2008 RailsConf presentation &quot;The Big Re-Write&quot;: &quot;Apache is unsuitable for web serving in any production environment and only Nginx is the right way.&quot;
Have you ever worked with an Apache conf that was literally 10k lines lines, contained 50 virtualhosts, a thousand rewrite rules, custom C modules, on top of all the other obscure crap Apache throws in which you&#039;ll never use? I have.
By comparison, Nginx is a fresh spring breeze. Sure, it took a few years for Rails to ditch the nightmare complexity of Mongrel and the 31 flavors of web servers to settle on the right solution, but again, that&#039;s an advantage. Java, Perl, PHP, ASP, etc, they are still essentially stuck doing things the same way they were in 2002. Dealing with change is easier in the long run than dealing with stagnation. Kind of like how emphasizing testing is better in the long run than not doing it at all.

6. Generates bad, bad habits in devs.
Convention over configuration is better. Richard Feynman  humorously describes the essence of the problem in his &quot;Surely you&#039;re Joking...&quot; book. He recalls his time managing the team running one of the first computers at Los Alamos. He describes &quot;the computer disease&quot;: the propensity for techies to get pulled into an infinite process of tweaking and customizing computers to do anything *because they can*. Basically it&#039;s &quot;architecture astronauts.&quot; If the convention serves 80% of the needs, how is that worse than needing to endlessly configure software to meet the most common needs? As a dev, who wants to be a factory worker, repeating the same actions over and over each day? You want DWIM, so you can spend your valuable time on intellectual problems.

Clever *is* good, but only when coupled with good design. Clever is what allows you to define implicit conventions so you can avoid the monkey-work and spend your time coding the fun stuff. Let me tell you, after working in large &quot;enterprise&quot; Perl code bases for many years, I can say there is no doubt that Ruby implicitly encourages much better design. It&#039;s much harder to write obfuscated, unmaintainable code in Ruby than many other languages. As for bad habits, what other  language community is so hyper-obsessed with testing?
If anything, that the single most important trait to have, and Rails is massively encouraging it amongst devs who would probably never test their code. I&#039;d say the good habit of testing balances out any so-called &quot;bad habits.&quot;

7. Magic
Not knowing exactly what the code is doing *is* the point. The code gets out of the way so you can focus on real work and even creative endeavors. Do you complain that you don&#039;t know what your compiler is doing to your high level code? No. Because you could care less about instruction optimization and low-level memory managment. The same goes for higher layers in the web stack--abstract out the most common actions so we don&#039;t need to know the implementation details, which will be specific to every platform, environment, etc.
Also, don&#039;t fear magic--there&#039;s something to be said about being a smart developer and knowing what the framework abstraction is actually doing, knowing how to configure, debug and test it. Everyone else can just go program PHP and Flash. Given the major trends to offshore our dev jobs, and for management to further trivialize and commoditize development, anything that requires smarter people with highly specialized skill sets is a *good thing*: it&#039;s job protection. Hard to be against that in our current quasi-depressed economy, right?

8. Rails hype will kill ruby.
The entire computer industry is just one leap from a hyped product to the next hyped product. It&#039;s been this way for decades. And guess which products end up on top? Yeah, the hyped ones.
Your claim that there&#039;s a tide of companies falling over dead because they used Rails is anecdotal at best. Look at the top programming books by sales this year. Look at the number of Rails conferences going on this year. Look at the sheer number of Rails startups. Look at the number of projects on github where people are sharing code. Look at all the other web languages and frameworks openly copying features of Rails for themselves. There&#039;s a point when a thing is no longer mere hype, and instead is a mass movement. I&#039;ll invoke the &quot;wisdom of the crowd.&quot; Recall that this pattern mirrors the same ascendence of Linux a decade ago, and now, Linux is the mainstream. Ten years from now, Rails will be the dominant web framework because it is so much more useful to people than the alternatives.

In conclusion, thanks for writing such a detailed breakdown of issues with Rails that you&#039;ve encountered and thought deeply about. I&#039;ve seen very few which have warranted a response, but you hit some good points for which I couldn&#039;t help but to toss in my own .02¢.</description>
		<content:encoded><![CDATA[<p>1. Community<br />
The old school Unix hacker ethos brims with egotism. When the system has always been a meritocracy based on how much you know and what cool stuff you&#8217;ve coded based on what you&#8217;ve managed to figure out on your own, why would it be any other way? </p>
<p>There&#8217;s also a level of irony involved, see &#8220;haha, only serious&#8221;: <a href="http://www.azundris.com/about/hhos.xml" rel="nofollow">http://www.azundris.com/about/hhos.xml</a></p>
<p>Also, when you&#8217;ve worked with the web stack long enough, you painfully understand the layers of crufty hacks-upon-hacks that-is-the-web. It doesn&#8217;t help that monolithic &#8220;enterprisey&#8221; mega-corps such as Microsoft and IBM have done as much as possible to make it even worse(intentionally or not). Web development is miserable. So along comes an extremely well thought out framework that actually makes web development fun again. No wonder Rails devs would have an ego&#8211;if you get hit by the zen master&#8217;s cane and receive enlightenment I&#8217;d say you&#8217;re entitled to at least some ego.</p>
<p>As for Zed, his online persona is a freakish outlier, so you can&#8217;t use him as the face of Rails egotism. Besides, his ego was too large for Rails and he&#8217;s since moved on to Python.</p>
<p>2. Documentation.<br />
I suppose you prefer monolithic Java-style documentation? To say Rails and its ecosystem of gems and plugins changes rapidly is an understatement, and it doesn&#8217;t look like it&#8217;s slowing down any time soon.<br />
It&#8217;s impossible to fully document a constantly moving target and is silly to expect it. Why is this a great thing? Because it shows the style of development isn&#8217;t set in its ways, but is instead evolving and throwing multiple attempts at solving numerous problems until the right one sticks. RTFM has become LMGTFY. Perhaps this change reflects a generational shift, as documentation itself no longer matters as much as discovering how other coders are using the software. I rarely need to venture beyond a few Google SERPs to get exactly what I need. Rails is very social software.</p>
<p>3. Excessive Reliance on ORM.<br />
You say &#8220;sql is much easier than coding.&#8221; Have you ever worked on a super-massive non-ORM app code base comprising ~35k lines of code just for several hundred models, managing nearly 500 db tables spread across 10 separate databases(Oracle, Mysql, and MSSQL), all containing about 3k unique SQL queries hard coded *throughout* the code? Oh and did I mentioned the .01% unit test coverage? No?<br />
I have, and let me tell you, it was a total nightmare and I would have traded my own body parts for a drop-in ORM solution. Sure, there are corner cases where a raw SQL query doing a join across 6 tables is orders of magnitude faster than AR at its best, however 90% of the time ORM is &#8220;good enough.&#8221; Developer and maintenance time is worth far more than run time speed(Moore&#8217;s Law etc).<br />
Also, there are major design decisions to account for if you find yourself dropping down to SQL just to make that big join query fast enough, such as: you&#8217;re probably doing something complex enough that you won&#8217;t be able to easily test it. Is that the kind of code you want to maintain down the road? Probably not.</p>
<p>4. Excessive reliance on pure Ruby.<br />
I agree with you on this one, having a fine appreciation for dropping down to C when appropriate. Parsing of any kind is better suited for C. You use XML as the main example, but XML sucks, and everybody is coming to realize it. JSON and other micro-formats will soon supplant XML.</p>
<p>5. Fragile ecosystem.<br />
I also agree. Ever changing dependencies and wack-a-mole gem breakage is a nightmare to fight. On the bright side, it&#8217;s the rapidly changing aspect of Rails&#8211;eventually as the ecosystem matures it will converge on stable APIs.<br />
I don&#8217;t agree with you at all that Rails is not enterprise ready. &#8220;Enterprise&#8221; is a meaningless, undefinable buzzword used to spread FUD, and the word itself is a sort of shibboleth&#8211;if you use it in serious conversation, you&#8217;ve outed yourself as &#8220;not really getting software.&#8221; Recall, you could go back just 7 years or so and there were many large &#8220;enterprises&#8221; claiming that Linux was &#8220;not enterprise ready.&#8221; And look how right they were. All the so-called &#8220;enterprise&#8221; software I&#8217;ve worked on sucked. NIH and getting stuck doing things the wrong way ends up being worse than using better open-source alternatives. Case in point: M$ being crippled by their own support of backwards compatibility. They will never ship a successful OS again until they completely ditch the &#8220;enterprise&#8221; mindset. No wonder Google is successfully cutting off their air supply. Being pro-enterprise is essentially being anti-open-source. Again, it&#8217;s the hacker ethos: screw the system, it&#8217;s the bazaar that will win the war, not the cathedral. If haggling for the proverbial perfect black egg in the crowds of the bazaar is seen as a problem and not an advantage, then you&#8217;re missing a huge piece of the picture.</p>
<p>As for Apache, I&#8217;ll repeat the words of the lead yellowpages dev from his 2008 RailsConf presentation &#8220;The Big Re-Write&#8221;: &#8220;Apache is unsuitable for web serving in any production environment and only Nginx is the right way.&#8221;<br />
Have you ever worked with an Apache conf that was literally 10k lines lines, contained 50 virtualhosts, a thousand rewrite rules, custom C modules, on top of all the other obscure crap Apache throws in which you&#8217;ll never use? I have.<br />
By comparison, Nginx is a fresh spring breeze. Sure, it took a few years for Rails to ditch the nightmare complexity of Mongrel and the 31 flavors of web servers to settle on the right solution, but again, that&#8217;s an advantage. Java, Perl, PHP, ASP, etc, they are still essentially stuck doing things the same way they were in 2002. Dealing with change is easier in the long run than dealing with stagnation. Kind of like how emphasizing testing is better in the long run than not doing it at all.</p>
<p>6. Generates bad, bad habits in devs.<br />
Convention over configuration is better. Richard Feynman  humorously describes the essence of the problem in his &#8220;Surely you&#8217;re Joking&#8230;&#8221; book. He recalls his time managing the team running one of the first computers at Los Alamos. He describes &#8220;the computer disease&#8221;: the propensity for techies to get pulled into an infinite process of tweaking and customizing computers to do anything *because they can*. Basically it&#8217;s &#8220;architecture astronauts.&#8221; If the convention serves 80% of the needs, how is that worse than needing to endlessly configure software to meet the most common needs? As a dev, who wants to be a factory worker, repeating the same actions over and over each day? You want DWIM, so you can spend your valuable time on intellectual problems.</p>
<p>Clever *is* good, but only when coupled with good design. Clever is what allows you to define implicit conventions so you can avoid the monkey-work and spend your time coding the fun stuff. Let me tell you, after working in large &#8220;enterprise&#8221; Perl code bases for many years, I can say there is no doubt that Ruby implicitly encourages much better design. It&#8217;s much harder to write obfuscated, unmaintainable code in Ruby than many other languages. As for bad habits, what other  language community is so hyper-obsessed with testing?<br />
If anything, that the single most important trait to have, and Rails is massively encouraging it amongst devs who would probably never test their code. I&#8217;d say the good habit of testing balances out any so-called &#8220;bad habits.&#8221;</p>
<p>7. Magic<br />
Not knowing exactly what the code is doing *is* the point. The code gets out of the way so you can focus on real work and even creative endeavors. Do you complain that you don&#8217;t know what your compiler is doing to your high level code? No. Because you could care less about instruction optimization and low-level memory managment. The same goes for higher layers in the web stack&#8211;abstract out the most common actions so we don&#8217;t need to know the implementation details, which will be specific to every platform, environment, etc.<br />
Also, don&#8217;t fear magic&#8211;there&#8217;s something to be said about being a smart developer and knowing what the framework abstraction is actually doing, knowing how to configure, debug and test it. Everyone else can just go program PHP and Flash. Given the major trends to offshore our dev jobs, and for management to further trivialize and commoditize development, anything that requires smarter people with highly specialized skill sets is a *good thing*: it&#8217;s job protection. Hard to be against that in our current quasi-depressed economy, right?</p>
<p>8. Rails hype will kill ruby.<br />
The entire computer industry is just one leap from a hyped product to the next hyped product. It&#8217;s been this way for decades. And guess which products end up on top? Yeah, the hyped ones.<br />
Your claim that there&#8217;s a tide of companies falling over dead because they used Rails is anecdotal at best. Look at the top programming books by sales this year. Look at the number of Rails conferences going on this year. Look at the sheer number of Rails startups. Look at the number of projects on github where people are sharing code. Look at all the other web languages and frameworks openly copying features of Rails for themselves. There&#8217;s a point when a thing is no longer mere hype, and instead is a mass movement. I&#8217;ll invoke the &#8220;wisdom of the crowd.&#8221; Recall that this pattern mirrors the same ascendence of Linux a decade ago, and now, Linux is the mainstream. Ten years from now, Rails will be the dominant web framework because it is so much more useful to people than the alternatives.</p>
<p>In conclusion, thanks for writing such a detailed breakdown of issues with Rails that you&#8217;ve encountered and thought deeply about. I&#8217;ve seen very few which have warranted a response, but you hit some good points for which I couldn&#8217;t help but to toss in my own .02¢.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carl</title>
		<link>http://www.evilsoft.org/2009/07/13/106/comment-page-1#comment-17686</link>
		<dc:creator>Carl</dc:creator>
		<pubDate>Wed, 15 Jul 2009 06:56:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.evilsoft.org/?p=106#comment-17686</guid>
		<description>Dude, Hampton friggin&#039; *invented* ASCII. A little respect is in order.</description>
		<content:encoded><![CDATA[<p>Dude, Hampton friggin&#8217; *invented* ASCII. A little respect is in order.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Devon Jones</title>
		<link>http://www.evilsoft.org/2009/07/13/106/comment-page-1#comment-17666</link>
		<dc:creator>Devon Jones</dc:creator>
		<pubDate>Tue, 14 Jul 2009 00:17:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.evilsoft.org/?p=106#comment-17666</guid>
		<description>Yedhuda, that&#039;s quite the response, and I appreciate it.
1. Not much to say here.  I agree, I just think that there are some fairly high profile obnoxious examples.  I get that this stuff is partially humor, but it is also hubris, and it definitely rubs more then just me the wrong way.

2. One can hope.  Given that there are plenty of blogs sitting on rails, it seems a relatively easy mashup to build such a system with an existing doco app, and the comment threading from one of those blogs.  Given the plethora of projects the occam&#039;s razor answer that I settled on was that such a system would limit the amount of self promotion that much of the community is doing, and thus has never been a high priority.

As a note, having worked directly with one of the biggest rails consultancies, I can tell you for a fact that this was the explicit reason why many of their members blogged their coding observations, to the point of taking our internal code and posting it on their personal blogs in an effort to drive traffic.  The phrase personal brand was uttered over the course of that project regularly.

3. I did try to be relatively clear that some of the code based issues may have gone away.  I still fully believe that there are any number of workarounds in the rails community for a &#039;slow database&#039; that get solved with things like memcache, but could be easily and with less fragility (due to lower complexity in the system) be solved with some relativly simple SQL.

4. So this gets into yet another problem that I&#039;ve noted.  My stated position coming initially from the java camp many moons ago is that an abundance of implementations of a public spec in a language is a sign that something is wrong.  Java has this in spades with XML implementations.  Ruby appears to have this as an issue with XML as well.  My observation from the projects I&#039;ve dealt with is that it&#039;s less that all the implementations are flawed and more that writing your own is a better way to sell your personal brand, instead of patching the leading public implementation.  Perhaps this is my bias, but the constant self promotion as the (my perception) default state in the community is almost certainly what started to initially push me away.

As a note, unless I&#039;m crazy, hpricot is pure (or mostly pure) ruby, and nokogiri and libxml are the c based ones.  It&#039;s not a perfect measure, but it looks to me that if one can use searches as a proxy for usage, google trends shows that the ruby implementations are still in far more use then the other two (though rexml is starting to get below nokogiri: http://www.google.com/trends?q=libxml+ruby%2C+hpricot%2C+nokogiri%2C+rexml&amp;ctab=0&amp;geo=all&amp;date=all&amp;sort=1

I&#039;m not saying that their aren&#039;t C implementations that get used, but that there is a strong community bias towards pure implementations.

5. Of course the gem issues are solvable.  The problem is that rails is being sold into organizations as an enterprise ready solution, and it&#039;s not.  As I said in the article, the rails maintainers do *not* tout rails as enterprise ready, big community members like the above hinted at large rails consultancy on the other hand does.

Nginx + mongrel may work fine for you.  The problem here is that the community always seems to take some outside piece of software for reasons that appear to mostly be so that they can be different.  Why rails didn&#039;t initially target apache, bar none the most stable and supported webserver out there (that everything else &#039;cept java targets as a top tier environment) I&#039;ll never know.  Instead we are stuck with a web server with half it&#039;s docs in russian because it&#039;s seen as lighter weight (which is a fallicy, but most people don&#039;t bother to actually configure out most of the apache modules they don&#039;t use.  Without any modules, apache has a tiny footprint).  There are strong reasons to follow conventional wisdom from time to time.

6. So I will admit that I have moved most of my personal development to python, but the ideas proceeded the move, not the other way around. The convention problem is that there are tons of undocumented conventions that you can run afoul of, or the documentation would be where you don&#039;t expect it.  Example: type as a column name.  Sure, it&#039;s documented that type is used for sti, but you have to know to look at the sti docs to find out why you get errors because ruby can&#039;t instantiate a class with the name of the data in the column.  This implicit behavior makes it very hard to bring people up on code because you need to know what *other* developers see as sensible defaults, which is always opaque.  I&#039;ll accept that&#039;s it&#039;s a philosophy difference, but it&#039;s one that regularly costs developer time and money.

8. perhaps this is also a philosophy issue, but it sure as hell cost one of our guys a day while he tried to figure out where the config was the first time he used passenger.  it picks up the config.ru from a directory that is *not* the configured web directory with magic.  I get the idea behind sensible defaults, but to look for ../config.ru from the actual path configured is *not* obvious or sensible.

I think there is more to the java/ruby difference then just being overly explicit.  The language itself (java) encourages really hard to follow patterns because it is missing a number of reasonable things (such as passing a method/procedure as a variable).  Anyone who has ever worked with a class whose name ended in FactoryFactory knows just how broken Java is in this regard.

As a note, the ball of mud antipattern that is the large J2EE default is just as easy to implement in rails (and django and on and on).  It probably has less actual code in it, but rails is no closer to meeting the unix philosophy of small programs that do as little as possible and chained via textual interfaces that java fails to blatantly meet.  Yes, I do believe the Unix philosophy is a successful, maintainable and coherent philosophy (The Art of Unix Programming: http://catb.org/esr/writings/taoup/html/).  I am of course open to other ideas but I think the large object oriented system inherently builds towards a ball of mud.

9. You are right, there are a ton of successful projects out there.  There are also a ton of high profile projects (say like twitter) that basically need to gut rails out of their app to be able to handle real loads.  I will fully admit that most apps do not need serious uptime to push a ton of data.  But rails has pitched itself as a replacement for big applications, *not* for visual basic.  If visual basic/ASP/PHP was what this stuff was marketed against, we wouldn&#039;t be having this discussion, but it&#039;s not.

Java is indeed a broken development platform in a number of ways, but that doesn&#039;t mean responses to it are inherently capable of replacing it wholesale.

Thanks for your response, it was well thought out, and brought forward a number of points.  Personally I think most development environments should be diverse, and use the right language for each job.  I do think rails does the ajax thing quite well, and as templating goes, so long as you follow rules, it&#039;s no where near the nightmare that jsp is.  Rails has it&#039;s place, but it&#039;s not the top solution to every problem that it&#039;s pitched as.</description>
		<content:encoded><![CDATA[<p>Yedhuda, that&#8217;s quite the response, and I appreciate it.<br />
1. Not much to say here.  I agree, I just think that there are some fairly high profile obnoxious examples.  I get that this stuff is partially humor, but it is also hubris, and it definitely rubs more then just me the wrong way.</p>
<p>2. One can hope.  Given that there are plenty of blogs sitting on rails, it seems a relatively easy mashup to build such a system with an existing doco app, and the comment threading from one of those blogs.  Given the plethora of projects the occam&#8217;s razor answer that I settled on was that such a system would limit the amount of self promotion that much of the community is doing, and thus has never been a high priority.</p>
<p>As a note, having worked directly with one of the biggest rails consultancies, I can tell you for a fact that this was the explicit reason why many of their members blogged their coding observations, to the point of taking our internal code and posting it on their personal blogs in an effort to drive traffic.  The phrase personal brand was uttered over the course of that project regularly.</p>
<p>3. I did try to be relatively clear that some of the code based issues may have gone away.  I still fully believe that there are any number of workarounds in the rails community for a &#8217;slow database&#8217; that get solved with things like memcache, but could be easily and with less fragility (due to lower complexity in the system) be solved with some relativly simple SQL.</p>
<p>4. So this gets into yet another problem that I&#8217;ve noted.  My stated position coming initially from the java camp many moons ago is that an abundance of implementations of a public spec in a language is a sign that something is wrong.  Java has this in spades with XML implementations.  Ruby appears to have this as an issue with XML as well.  My observation from the projects I&#8217;ve dealt with is that it&#8217;s less that all the implementations are flawed and more that writing your own is a better way to sell your personal brand, instead of patching the leading public implementation.  Perhaps this is my bias, but the constant self promotion as the (my perception) default state in the community is almost certainly what started to initially push me away.</p>
<p>As a note, unless I&#8217;m crazy, hpricot is pure (or mostly pure) ruby, and nokogiri and libxml are the c based ones.  It&#8217;s not a perfect measure, but it looks to me that if one can use searches as a proxy for usage, google trends shows that the ruby implementations are still in far more use then the other two (though rexml is starting to get below nokogiri: <a href="http://www.google.com/trends?q=libxml+ruby%2C+hpricot%2C+nokogiri%2C+rexml&amp;ctab=0&amp;geo=all&amp;date=all&amp;sort=1" rel="nofollow">http://www.google.com/trends?q=libxml+ruby%2C+hpricot%2C+nokogiri%2C+rexml&amp;ctab=0&amp;geo=all&amp;date=all&amp;sort=1</a></p>
<p>I&#8217;m not saying that their aren&#8217;t C implementations that get used, but that there is a strong community bias towards pure implementations.</p>
<p>5. Of course the gem issues are solvable.  The problem is that rails is being sold into organizations as an enterprise ready solution, and it&#8217;s not.  As I said in the article, the rails maintainers do *not* tout rails as enterprise ready, big community members like the above hinted at large rails consultancy on the other hand does.</p>
<p>Nginx + mongrel may work fine for you.  The problem here is that the community always seems to take some outside piece of software for reasons that appear to mostly be so that they can be different.  Why rails didn&#8217;t initially target apache, bar none the most stable and supported webserver out there (that everything else &#8216;cept java targets as a top tier environment) I&#8217;ll never know.  Instead we are stuck with a web server with half it&#8217;s docs in russian because it&#8217;s seen as lighter weight (which is a fallicy, but most people don&#8217;t bother to actually configure out most of the apache modules they don&#8217;t use.  Without any modules, apache has a tiny footprint).  There are strong reasons to follow conventional wisdom from time to time.</p>
<p>6. So I will admit that I have moved most of my personal development to python, but the ideas proceeded the move, not the other way around. The convention problem is that there are tons of undocumented conventions that you can run afoul of, or the documentation would be where you don&#8217;t expect it.  Example: type as a column name.  Sure, it&#8217;s documented that type is used for sti, but you have to know to look at the sti docs to find out why you get errors because ruby can&#8217;t instantiate a class with the name of the data in the column.  This implicit behavior makes it very hard to bring people up on code because you need to know what *other* developers see as sensible defaults, which is always opaque.  I&#8217;ll accept that&#8217;s it&#8217;s a philosophy difference, but it&#8217;s one that regularly costs developer time and money.</p>
<p>8. perhaps this is also a philosophy issue, but it sure as hell cost one of our guys a day while he tried to figure out where the config was the first time he used passenger.  it picks up the config.ru from a directory that is *not* the configured web directory with magic.  I get the idea behind sensible defaults, but to look for ../config.ru from the actual path configured is *not* obvious or sensible.</p>
<p>I think there is more to the java/ruby difference then just being overly explicit.  The language itself (java) encourages really hard to follow patterns because it is missing a number of reasonable things (such as passing a method/procedure as a variable).  Anyone who has ever worked with a class whose name ended in FactoryFactory knows just how broken Java is in this regard.</p>
<p>As a note, the ball of mud antipattern that is the large J2EE default is just as easy to implement in rails (and django and on and on).  It probably has less actual code in it, but rails is no closer to meeting the unix philosophy of small programs that do as little as possible and chained via textual interfaces that java fails to blatantly meet.  Yes, I do believe the Unix philosophy is a successful, maintainable and coherent philosophy (The Art of Unix Programming: <a href="http://catb.org/esr/writings/taoup/html/)" rel="nofollow">http://catb.org/esr/writings/taoup/html/)</a>.  I am of course open to other ideas but I think the large object oriented system inherently builds towards a ball of mud.</p>
<p>9. You are right, there are a ton of successful projects out there.  There are also a ton of high profile projects (say like twitter) that basically need to gut rails out of their app to be able to handle real loads.  I will fully admit that most apps do not need serious uptime to push a ton of data.  But rails has pitched itself as a replacement for big applications, *not* for visual basic.  If visual basic/ASP/PHP was what this stuff was marketed against, we wouldn&#8217;t be having this discussion, but it&#8217;s not.</p>
<p>Java is indeed a broken development platform in a number of ways, but that doesn&#8217;t mean responses to it are inherently capable of replacing it wholesale.</p>
<p>Thanks for your response, it was well thought out, and brought forward a number of points.  Personally I think most development environments should be diverse, and use the right language for each job.  I do think rails does the ajax thing quite well, and as templating goes, so long as you follow rules, it&#8217;s no where near the nightmare that jsp is.  Rails has it&#8217;s place, but it&#8217;s not the top solution to every problem that it&#8217;s pitched as.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yehuda Katz</title>
		<link>http://www.evilsoft.org/2009/07/13/106/comment-page-1#comment-17664</link>
		<dc:creator>Yehuda Katz</dc:creator>
		<pubDate>Mon, 13 Jul 2009 23:12:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.evilsoft.org/?p=106#comment-17664</guid>
		<description>Ok. Let&#039;s take it from the top:

1. It&#039;s true that there are some egotistical personalities in the Ruby community, but the examples you cite are open, explicit jokes. I doubt you&#039;ll find many programming communities with no egos at all.

2. Yep. There is definitely a problem with an inadequate source of centralized documentation. I think your position that it&#039;s &quot;egocentric&quot; is misguided. It&#039;s more a product of it being *easier* to put something up on your own blog than try to work on a community-wide solution. I&#039;ve personally started documenting more of the internals I&#039;ve been working on in the Rails wiki (http://wiki.rubyonrails.org/rails/version3/start) and I hope that Rails 3 sees a shift toward better, more centralized documentation. We&#039;ll see.

3. The n+1 problem was neatly solved by DataMapper over a year ago, and I suspect something like its resultset solution will make its way into ActiveRecord. I&#039;m not sure if you&#039;re aware of this, but ActiveRecord is undergoing something of a rebirth at the moment as a more sanely architected ORM (courtesy of Emilio Tagua). As Rails continues to mature and grow as framework it will continue to resolve problems it has had.

4. I hate to say this, but you&#039;re flat out wrong about this. REXML is absolutely despised by most Rubyists, and there are three popular C extensions for parsing XML (hpricot, libxml-ruby, and nokogiri). RMagick, an ImageMagick binding, is quite popular as well. There is an interest in keeping functionality available in implementations that don&#039;t have access to C libraries (like JRuby), but you&#039;re not going to find anyone trying to do image processing in pure Ruby.

5. Gem versions and plugins are a problem that is solvable, and which we will solve. It&#039;s going to require some ecosystem adjustment, but pushing people toward using Rubygems instead of plugins, and avoiding breaking things in minor releases has already started to happen as the ecosystem matures and should happen more readily when some of the underlying packaging technology is improved (I&#039;ve been working with Carl Lerche on improvements to gem bundling for Rails applications that will make it easier for the community to do the right thing).

To some of your points: The Rails 3 packaging solution will not require installing large amounts of Rubygems from Rubyforge at deploy time, which should remove some of your pain. Rack suffered from some growing pains, but contrary to your other claims, the community backlash (especially from the Rails team) to those changes seems to have set them straight. Rails seems to have had a good I18n solution since Rails 2.2. 

And finally, &quot;constant movement from one webserver to another&quot; was the Ruby community&#039;s effort to find the best possible solution. Engine Yard, where I work, has used nginx+mongrel since we started (around 3 years ago), and still recommend nginx+mongrel. We&#039;re evaluating and have had good results with nginx+passenger, but I hardly consider one move in three years to be a mad dash.

6. At this point you&#039;re getting a bit into a religious argument. Python takes your position, that explicit is always better; I&#039;ve personally found that Ruby&#039;s approach makes it possible to create much better abstractions. But that&#039;s just my opinion. 

&quot;Creates a view of the world that clever is good.&quot; Actually, virtually all Rubyists I respect abhor clever code for cleverness&#039; sake. That said, you might be referring to abstractions, rather than purely clever code. Again, I consider that to be mostly a religious argument.

Single Table Inheritance is a pattern first described by Martin Fowler, and first implemented in Java. In fact, the first result on Google for Single Table Inheritance is not Rails, but a section on Fowler&#039;s site about STI. That&#039;s not to say that STI is great--it has its share of problems--but I think it&#039;s a reasonably good thing that Rails has tried out new ideas. Many of them have worked spectacularly well.

7. The pejorative use of the term &quot;magic&quot; is hiding the fact that what you&#039;re actually referring to are simply better abstractions. Rails provides a number of ways to describe things declaratively that actually improve code maintenance because the features work the same way every time. Ruby provides significant mechanisms to add functionality that effectively extends the language. The appropriate way to look at these extensions is to think of them as *language features* that should be learned and understood by anyone who wants to work with the codebase.

It is of course possible to be explicit about everything all the time. That produces a language like Java, where nearly half of your code is talking directly at the compiler, and may not even be used at runtime (String string = new String). In practice, though, the only way to use Java effectively is to write wrappers around it (like Spring) that give you more dynamic features.

8. Rails pushed Ruby in ways that it would almost certainly not have been pushed. Before Rails, very few Ruby applications were run long-term; long-running Rails processes have pushed Ruby into making GC improvements. It has pushed Ruby into creating alternative implementations, like JRuby, that make it usable in a number of environments. And despite your argument, a tremendous number of very successful Rails applications are running right now, serving a tremendous number of requests every second. If you&#039;re putting forth the idea that Rails projects are more likely to fail than Java projects or Python projects, I&#039;d love to see some real statistics, but the fact that some projects started with Ruby on Rails eventually fail is hardly earth-shattering.

---

It seems like you may have had some bad experiences, having grown together with the Rails community. As we have grown, I believe we have done a reasonably good job of identifying deficiencies and trying to resolve them, and I believe that the release of Rails 3 will go a long way (but probably not all the way) to resolving those deficiencies. That said, your post was overly hyperbolic and your criticisms, offered in a more constructive way, would probably have more effectively improved the situation.

Feel free to email me (wycats -at- gmail -dot- com) if you have any further thoughts or suggestions. I would love to work with you to resolve some of the pain that you&#039;ve experienced.</description>
		<content:encoded><![CDATA[<p>Ok. Let&#8217;s take it from the top:</p>
<p>1. It&#8217;s true that there are some egotistical personalities in the Ruby community, but the examples you cite are open, explicit jokes. I doubt you&#8217;ll find many programming communities with no egos at all.</p>
<p>2. Yep. There is definitely a problem with an inadequate source of centralized documentation. I think your position that it&#8217;s &#8220;egocentric&#8221; is misguided. It&#8217;s more a product of it being *easier* to put something up on your own blog than try to work on a community-wide solution. I&#8217;ve personally started documenting more of the internals I&#8217;ve been working on in the Rails wiki (<a href="http://wiki.rubyonrails.org/rails/version3/start" rel="nofollow">http://wiki.rubyonrails.org/rails/version3/start</a>) and I hope that Rails 3 sees a shift toward better, more centralized documentation. We&#8217;ll see.</p>
<p>3. The n+1 problem was neatly solved by DataMapper over a year ago, and I suspect something like its resultset solution will make its way into ActiveRecord. I&#8217;m not sure if you&#8217;re aware of this, but ActiveRecord is undergoing something of a rebirth at the moment as a more sanely architected ORM (courtesy of Emilio Tagua). As Rails continues to mature and grow as framework it will continue to resolve problems it has had.</p>
<p>4. I hate to say this, but you&#8217;re flat out wrong about this. REXML is absolutely despised by most Rubyists, and there are three popular C extensions for parsing XML (hpricot, libxml-ruby, and nokogiri). RMagick, an ImageMagick binding, is quite popular as well. There is an interest in keeping functionality available in implementations that don&#8217;t have access to C libraries (like JRuby), but you&#8217;re not going to find anyone trying to do image processing in pure Ruby.</p>
<p>5. Gem versions and plugins are a problem that is solvable, and which we will solve. It&#8217;s going to require some ecosystem adjustment, but pushing people toward using Rubygems instead of plugins, and avoiding breaking things in minor releases has already started to happen as the ecosystem matures and should happen more readily when some of the underlying packaging technology is improved (I&#8217;ve been working with Carl Lerche on improvements to gem bundling for Rails applications that will make it easier for the community to do the right thing).</p>
<p>To some of your points: The Rails 3 packaging solution will not require installing large amounts of Rubygems from Rubyforge at deploy time, which should remove some of your pain. Rack suffered from some growing pains, but contrary to your other claims, the community backlash (especially from the Rails team) to those changes seems to have set them straight. Rails seems to have had a good I18n solution since Rails 2.2. </p>
<p>And finally, &#8220;constant movement from one webserver to another&#8221; was the Ruby community&#8217;s effort to find the best possible solution. Engine Yard, where I work, has used nginx+mongrel since we started (around 3 years ago), and still recommend nginx+mongrel. We&#8217;re evaluating and have had good results with nginx+passenger, but I hardly consider one move in three years to be a mad dash.</p>
<p>6. At this point you&#8217;re getting a bit into a religious argument. Python takes your position, that explicit is always better; I&#8217;ve personally found that Ruby&#8217;s approach makes it possible to create much better abstractions. But that&#8217;s just my opinion. </p>
<p>&#8220;Creates a view of the world that clever is good.&#8221; Actually, virtually all Rubyists I respect abhor clever code for cleverness&#8217; sake. That said, you might be referring to abstractions, rather than purely clever code. Again, I consider that to be mostly a religious argument.</p>
<p>Single Table Inheritance is a pattern first described by Martin Fowler, and first implemented in Java. In fact, the first result on Google for Single Table Inheritance is not Rails, but a section on Fowler&#8217;s site about STI. That&#8217;s not to say that STI is great&#8211;it has its share of problems&#8211;but I think it&#8217;s a reasonably good thing that Rails has tried out new ideas. Many of them have worked spectacularly well.</p>
<p>7. The pejorative use of the term &#8220;magic&#8221; is hiding the fact that what you&#8217;re actually referring to are simply better abstractions. Rails provides a number of ways to describe things declaratively that actually improve code maintenance because the features work the same way every time. Ruby provides significant mechanisms to add functionality that effectively extends the language. The appropriate way to look at these extensions is to think of them as *language features* that should be learned and understood by anyone who wants to work with the codebase.</p>
<p>It is of course possible to be explicit about everything all the time. That produces a language like Java, where nearly half of your code is talking directly at the compiler, and may not even be used at runtime (String string = new String). In practice, though, the only way to use Java effectively is to write wrappers around it (like Spring) that give you more dynamic features.</p>
<p>8. Rails pushed Ruby in ways that it would almost certainly not have been pushed. Before Rails, very few Ruby applications were run long-term; long-running Rails processes have pushed Ruby into making GC improvements. It has pushed Ruby into creating alternative implementations, like JRuby, that make it usable in a number of environments. And despite your argument, a tremendous number of very successful Rails applications are running right now, serving a tremendous number of requests every second. If you&#8217;re putting forth the idea that Rails projects are more likely to fail than Java projects or Python projects, I&#8217;d love to see some real statistics, but the fact that some projects started with Ruby on Rails eventually fail is hardly earth-shattering.</p>
<p>&#8212;</p>
<p>It seems like you may have had some bad experiences, having grown together with the Rails community. As we have grown, I believe we have done a reasonably good job of identifying deficiencies and trying to resolve them, and I believe that the release of Rails 3 will go a long way (but probably not all the way) to resolving those deficiencies. That said, your post was overly hyperbolic and your criticisms, offered in a more constructive way, would probably have more effectively improved the situation.</p>
<p>Feel free to email me (wycats -at- gmail -dot- com) if you have any further thoughts or suggestions. I would love to work with you to resolve some of the pain that you&#8217;ve experienced.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
