What will be Ruby's legacy?
posted by pete on August 21st, 2008
This month, I’ve been hacking Ruby for four years!
I caught wind of Rails’ release a few weeks behind the curve, and when I tried to run it, I admit I didn’t get very far… but that was largely because I was a Microsoft VB/ASP developer, and since I couldn’t believe what I was seeing — ActiveRecord sounded like an April Fool’s joke on newbies — I assumed that it was too good to be true and got distracted. However, it kick-started my exploration into Ruby; it was blocks and iterators that got me. Most importantly, it planted serious doubt that anything on .NET was going to be that cool.
A few weeks later I met Ryan McMinn, and he helped me fire all of my terrible clients. To be clear, some of these clients are good friends today; it doesn’t change the fact that they were terrible clients. We started adapting some of his Access database clients to work on the web with ASP/IIS, which was seriously showing its age. When new opportunities came up, we had a chance to try something new. The obvious choice: C# running on ASP.NET v2.
That project was a disaster! I felt like every time I had a good idea, the framework kicked me down the stairs for being insolent. ASP.NET should be re-branded as Bank Portal Studio, Drone Edition. Luckily for us, Rails was looking more and more mature every day, and we sent out a press release to everyone we knew suggesting that we would be building all future projects on this new open source framework that nobody had ever heard of.
Not only was I a rank amateur Rubyist, but I couldn’t even force my partners to sit through the “blog in 15 minutes” video because it had too many console commands. Anthony was a designer, and he used Windows… so why was I showing him script/generate commands? Clearly, Unspace was borne of a true “act first, apologize later” philosophy. We knew that someone was going to form the Rails A-Team, and it might as well be us!
Four years later, I’m still a rank amateur. My grandfather was a brilliant inventor, and he once told me, ”The more you know, the more you realize you don’t know.” He also told me that I was stupid for thinking I really knew much of anything at all, since I was about 8 and only knew BASIC — on just one microprocessor!
Folks in Ruby tend to write a lot of nostalgic, self-aggrandizing bullshit, though. You see a lot of “MY MY, THE COMMUNITY HAS EVOLVED INTO SOMETHING SPECIAL” and talk of changing the history of software development. I’m all for progress, and as a musician, I understand the function of hype in generating momentum. But sometimes we need to get real and be a little more harsh in our own self-analysis. I liked what Tom Preston-Werner said about “death-bed filters” at RubyFringe; if you ever have to ask yourself whether something is a good idea, picture yourself answering the question at the tail end of your life. Maybe it wasn’t even good or bad, but just insignificant or forgotten altogether.
So if we took a rare, super macro-view look at what the Ruby phenomena might have done for software, technology, and humanity, what have we really gained that might not have happened otherwise?
Ruby has proven to be a popular evolutionary language for PHP developers. Many PHP developers are self-taught amateurs with no formal CS backgrounds. This led to a more egalitarian, “nobody knows you’re a dog” bazaar community. By contrast, hundreds of thousands of dudes with Java degrees from the cathedral on the hill saw PHP as a toy language with script kiddies brutally hacking together forums and content management systems. It wasn’t taken seriously or seen as a solution to important problems.
Well, the script kiddies have grown up, and they like Ruby now. Except, it’s pretty hard to call JRuby, IronRuby, and soon MagLev toys.
Suddenly, the preferred solution of self-employed amateurs without a formal education is frequently perceived as superior to those so-called real languages.
Ruby has captured the hearts and imaginations of artists and the poets.
The Matrix made geeks cool. David made geeks into eloquent supermodels. And Zed is like our own Most Interesting Man In The World. “Stay DRY, my friends.”
Ruby somehow made testing cool. This is bewildering, but suggests a future where our children do not know the Blue Screen Of Death.
In Ruby, it’s cool to learn all about things that used to be the realm of the academic elite: functional programming, parallel processing, finite state machines, compiler optimization, MapReduce… and really, how did Erlang suddenly become Playmate of the Year?
I was reading an article about MapReduce on the consistently excellent RailSpikes blog, and it reminded me of a rant that former UnCov blogger Ted Dziuba posted earlier this week about how Hadoop was real technology developed in a real language and that Ruby was just a bunch of script kiddies posting shitty MapReduce tutorials on their blogs.
I laughed at the time, because Ted is a seriously smart guy who happens to be such an asshole that he gets away with it. However, upon consideration, I’ve decided Ted is wrong because he’s not taking the long view. Let’s face it, people with access to special power or information are always threatened by a future where their pet special thing is now common and mundane. This happens when an indie rock band becomes too successful for their fans to consider them cool, even if successful is being able to go on tour and make enough to record another album.
Check out this refreshing post on GigaOm about how undersea cable laying often suggests imminent economic growth. Given my above points, I think that if the script kiddies are responsible, pragmatic and eloquent artists who teach themselves functional programming because it’s cool… well, that’s a future I’m proud to be a part of.
August 21st, 2008 at 06:35 AM
I am a Rubyista since 5 years but I came to Ruby because of the language, not RoR.
I think you should not talk about hype like MagLev – they announced a lot and up to today did not produce much.
The whole Ruby agenda right now is a bit slowed down since Ruby 1.9.x is changing a lot – since a long time. I hope ruby wont become a perl 6…
August 21st, 2008 at 09:34 AM
I couldn’t agree more with pretty much every point. The reason I love Ruby is that it welcomes everyone to give it a go. I’m all for breaking down artificial barriers to entry and ridiculous stereotypes in any industry, Ruby has been doing a great job so far in ours.
Zed is very much our own Most Interesting Man In The World but in my mind he’s saying: “Stay humble, my friends.”
August 21st, 2008 at 09:38 AM
Suddenly, the preferred solution of self-employed amateurs without a formal education is frequently perceived as superior to those so-called real languages.
People who use Ruby obviously have a high opinion of it. Is this opinion held outside of the community though? Dziuba article makes the point a lot of people I’ve dealt with make, that many Ruby projects do come off as half-baked and half-assed. More so, that Ruby itself isn’t quite there yet. Ruby is a very slick language, but as scripting languages go, Python seems to have more traction in industry. A lot of places are cool with deploying Python code, but not Ruby code—including the place I work at. (Maybe that’s not a real metric for anything.)
I like Ruby a lot mind you. And like you, I find it amazing that it seems to have sparked an interest in a lot of esoteric computer science topics.
August 21st, 2008 at 10:17 AM
Pete, I have a CS degree. Can I still hang at the kids table? xD
(In other anecdotes: me, too! I was at one point a big PHP dev, and I had a similar experience with C#/.NET once, and never tried the stuff again. the best is when someone wants to back their .NET webapp with an excel spreadsheet. fun!)
August 21st, 2008 at 03:02 PM
[Edit: Please delete the previous version of the post with the rampant strike-throughs.]
Two things:
1) Although the blog post I did on it was unduly harsh on Ruby, my experience of the total failure that is REXML ( http://enfranchisedmind.com/blog/2008/03/24/rexml-dynamic-typing-lose/ ) and the community response (“Nobody uses that. Use Hpricot.”) illustrates the PR problem that Ruby has outside of the Ruby community. Sure, it’s kinda-sorta nice if you’re busy creating the next Basecamp, but the reality is that the language is uglier and the libraries are less stable than a lot of other languages (including Python and Groovy). And those libraries which are considered “core” (even the ones in the core API itself!) are frequently abandoned and neglected in a broken state without documentation and warning, so any people who don’t keep up with the crowd are left holding the bag. There’s no doubt that Rails is a whole lot prettier than any web development framework that existed as of when it is written, but let’s not confuse Ruby with Rails—Rails could have just as easily been written in Perl or Python or JavaScript or (anachronistically) Groovy. And DHH’s reputation outside of the Ruby world is as a dick who reminds managers why they don’t want to hire Ruby-obsessed developers, and most people don’t know who Zed Fucking Shaw is. So I’m not sure that “the preferred solution of self-employed amateurs without a formal education is frequently perceived as superior to those so-called real languages” is a defensible assertion. 2) A lot of your expressions seem to be from within the Ruby community looking out, and they give credit to Ruby for a lot of other things in the programming world. For example, Ruby didn’t make testing cool: testing was cool among all the non-amateurs (see “Agile development”), and that’s why there was so much attention paid to it by the Rails developers. For another, functional development is also not a revolution kicked off by Ruby: it’s been something that was going to come one way or another with the advent of multicore systems and the diminishing returns/quantum manufacturing wall on clock speeds ( http://enfranchisedmind.com/blog/2007/06/28/functional-language-adoption/ ). There is just as much excitement – if not more—about functional language adoption in the corporatey Java and .Net world (e.g. F#, Scala, Fortress) than in the Ruby community. And MapReduce was all Google, who slighted Ruby hard with their App Engine.
August 21st, 2008 at 03:07 PM
Now that I’ve ranted a bit, the one thing I will say for Ruby is that it did raise the bar for the amateur, and Rails made large-scale, maintainable web app development accessible to a much larger audience than it was before. So it’s gone a long way to push forward the cult of the amateur.
From the professional side, the nicest thing Rails did was allow people to say, “No, really, the pain involved in Struts isn’t an essential part of web app development.”
August 21st, 2008 at 03:27 PM
Hey Robert, thanks for your comments. I actually do appreciate your perspective, because I am a Rubyist looking out.
However, I think I have failed to communicate a key point that I wanted to express, which is that we are all amateurs at some point, and a lot of CS-background developers tend to see self-taught developers as inferior to some degree. I can’t convince you that is right or wrong, but my opinion is that it’s just different, and so casual dismissal of hundreds of thousands of smart people seems like a folly of judgment. I’ve never read The Art of War but I suspect it has a few nuggets about underestimating your opponent… point is, the average hobby coder is now much more well-versed in things like functional programming because of Ruby, and I think this will have a long term impact.
Also, I would argue that there’s a difference between testing being taught as important in university, compared to teenagers learning testing because it’s the cool thing to do.
August 21st, 2008 at 05:18 PM
The Matrix did not make geeks cool. While many geeks may have considered their coolness elevated upon seeing the Matrix, this was just the latest episode in a long history of geek/coolness self-delusion.
August 21st, 2008 at 06:25 PM
Hah, I sent Jon a link to that Ted Dziuba rant while he was working on his post because I thought it was funny that Ted was ranting about all these intros to MapReduce while Jon was writing one!
I do think Ted has a point. Ruby programmers tend to chase after the latest new thing (“Ohh! Shiny!”) while neglecting all that is old and tired (“Fast CGI? Use Lighttpd! No, Mongrel with nginx! No, Thin! No, Passenger!”—think of your own examples). I think this is because Ruby’s still moving faster than most languages. Things haven’t quite settled yet, and we don’t have to support many old things. I think that’s mostly a good thing.
August 22nd, 2008 at 07:15 AM
Scala and Fortress have penetration in the business world? Nowhere near as much as Ruby; probably by a couple orders of magnitude. Fortress barely exists. The Scala language spec is barely done making non-backwards-compatible changes. Ruby “uglier” than Groovy?!
August 23rd, 2008 at 09:36 AM
I don’t interpret this as a half-way point between critique and praise, nor do I see it as a wankfest for Ruby—I don’t see it being as much about the language as it is about those who try, use and love it and the reasons why. I think you really nailed it when weighing in Ruby’s aura of cool—Ruby’s allure, for seasoned programmers, is its beauty in simplicity and simultaneous complexities and agility. For newcomers, the allure is that it is within reach. To the naysayers—Ruby is not perfect, but show me a language, or any entity for that matter, (of both the animate and inanimate forms) that is. The benchmark of the semantically perfect, brainless, broad-scale programming language does not really exist. Personally, I’m okay with that, ‘cos, well, if it did, many of us wouldn’t have jobs.
Also—what a great talk by Obie Fernandez. Thanks for making this available.
August 24th, 2008 at 03:24 AM
“Ruby helped popularize testing” That’s right, unit testing didn’t exist before Ruby. Ruby singlehandedly invented not only unit testing, but URL rewriting, MVC design patterns, hell, Ruby invented the web people. wait, what do you mean rails? rails is ruby duh :rolleyes:
August 26th, 2008 at 12:08 PM
Great post Pete. I can’t not respond to this.
I was first inspired to start doing test driven development by the PHP Developer Network Community. Later when I attended the PHPLondon meet-ups I asked two questions. I was very receptive to the answers because these guys clearly knew their shit; you could tell within 10 minutes of being with them. So I asked:
1) People on forums seem to be in disagreement over whether OO is really justified. Do you use OO? 2) I hear a lot about unit testing how important is that?
Each of the five people that were on my table each went in turn and told me that: OO is important, people that curse OO have just missed the point, OO is hard but worth it, you can’t run a serious business without the stability that tests give you, etc. etc. —absolutely uniform in opinion. Never again did I question whether writing object oriented code with unit test was the best thing to do. I just did it. And that gave me the motivation to really learn it, do it properly, and benefit from it.
In the coming months and years I would lecture countless fleeting PHPLondon attendees, less experienced than myself, that they should start writing unit tests and that they shouldn’t give up on OO. And, crucially, each makes the other easier.
What Ruby does that blew me away – literally so that couldn’t go anywhere because of this hanging jaw below my face that refused to be closed from amazement – is make this stuff really really easy!
I wasn’t so much amazed at how great Ruby is. I mean, it is, but I was really amazed by how misguided languages like C++, PHP and Java were. But it was expressly because of unit tests that I managed to be able to write OO in PHP that didn’t blow up in my face after a couple of weeks and even then it was always a challenge. Most people who tackle OO in PHP without tests fail, and give up and now… omg in Ruby it actually makes sense. It’s just fluid.
I wrote unit tested OO in PHP and I survived. I write unit tested OO in Ruby, with less effort, and I’m awesome!
As for what “made it cool” – I don’t know. Does it matter? Seems as if testing was always cool amongst people who knew what they were doing in almost any language.
August 26th, 2008 at 02:45 PM
Is there some magic beyond RUnit i’m missing when it comes to unit testing ruby code? Because, you know, there are a xUnit frameworks for a bunch of languages, including C++ and Java and PHP. I’m also curious how C++, PHP, and Java are all misguided languages? They all serve particular niches quite well—shockingly, much like Ruby.
August 26th, 2008 at 03:39 PM
Nice post Pete.
Re: amateur programmers – I couldn’t agree more. 4 months ago I didn’t know how to program shit. Now I have 2 apps I’ve made myself.
August 26th, 2008 at 06:21 PM
I’m really enjoying watching comments come in off this, because it seems like some people read it and other people didn’t.
This isn’t a post about testing, or xUnit, or Ruby breaking ground in much of anything.
Ruby made something really dull like testing into something amateurs were suddenly excited to talk about. This is not a technical feat, but a marketing feat. It’s probably always been a good idea. What’s new is that people are now ashamed to admit when they don’t test.
This is a post about how Ruby — the idea, more than the language — has the ability to make people excited to embrace change.
August 27th, 2008 at 04:24 AM
On a practical level I have serious objection to the amount of code setters and getters use up. A lot of OO newb say “so I really have to declare all this methods just to set and get values?”... and dude, they had a point and it’s pretty basic.
Or was that Rails?
August 27th, 2008 at 04:27 AM
^ Damn I was using less-thans to show where I was quoting but they got removed. :-( ^ I hope you guys can follow that
August 27th, 2008 at 10:29 AM
Pete, I get what you’re trying to say with this post. As I said in my first comment, I do find it interesting people are talking about functional programming or test driven development or whatever else. Is Ruby the driving force here? I think it has more to do with Digg and Reddit than programming languages.
Not to single out Ollie’s comment
- which I will now do -but I think it illustrates something I find common to the Ruby/Rails community, which is this sense it’s a bit of a cargo cult. Duck Typing is the bomb- why? Mixins are the bomb -why? Stoustrup wrote a whole book on his design choices for C+, and most of them derive from the fact he wanted things to be quick and memory efficient. That’s why you end up with static typing, not storing integers in objects, and junk like this. He’s a smart dude, and i’m sure he was well aware of Smalltalk when developing C+. With respect to mixins, you should read up on multiple inheritance. Just because C++ code isn’t as pretty as Ruby code isn’t a good reason to dismiss it out of hand. People do more with programming languages than write web sites. Maybe one day we’ll be writing operating systems in Ruby, but that day isn’t here yet. Ruby evolves from a different set of design choices. Ruby and C++ are both suited for solving different problems. You can make similar arguments in defence of PHP or Java.Maybe I need to wait a little bit longer, and ebb will make C programming sexy.
To get back to testing. Ruby, as far as I can tell, hasn’t made testing cool, it’s made a particular type of automated testing cool. So people write specs and unit tests all that junk. Hopefully there aren’t bugs that spring up because of deployment issues, network latency, web server bugs, etc, etc, etc. I never see blog posts about boring stuff like this. I do see lots of blog posts about how to unit test your models in some new and fancy way.
Maybe i’m just glass-half-empty when I read the same articles you are Pete.
I want to believe. I really do.
August 27th, 2008 at 10:32 AM
Damn, my comment got mangled the fuck up. I guess faux-em-dashes are a no go.
August 27th, 2008 at 10:20 PM
Rereading my comment, i’m totally being the obnoxious old curmudgeon you’re going on about. And i’m only 28. God damn it.
August 29th, 2008 at 02:47 AM
It’s OK Ramanan we still love you. :-)