Please note: This site's design is only visible in a graphical browser that supports Web standards, but its content is accessible to any browser or Internet device. To see this site as it was designed please upgrade to a Web standards compliant browser.
 
Signal vs. Noise

Our book:
Defensive Design for the Web: How To Improve Error Messages, Help, Forms, and Other Crisis Points
Available Now ($16.99)

Most Popular (last 15 days)
Looking for old posts?
37signals Mailing List

Subscribe to our free newsletter and receive updates on 37signals' latest projects, research, announcements, and more (about one email per month).

37signals Services
Syndicate
XML version (full posts)
Get Firefox!

A tribute to Ruby

12 Mar 2004 by David Heinemeier Hansson

When programmers speak of code as ugly or beautiful they reveal an appreciation of software that goes much deeper than the functionalistic appearance of their work. There are plenty of obvious and objective correlations between ugly and opaque code and defects and extendability, but the individual and psychological effects are at least equally interesting.

Whether bad code stems from duplication, verbose constructs, low coherence, or high coupling, it brings along a wide array of unwelcome feelings within the mindful programmer. Guilt (I should have done better) and fear (What if I can’t do better?) are the most prominent, which in turn leads to procrastination as a short-termed escape from the unwanted feelings.

It’s against this backdrop of feelings that I best explain my gratitude to Ruby. Ruby helps me avoid feelings of guilt or fear like no other programming language has in the past. The feedback loop between thought and code fulfilling those thoughts is effectively preventing impatience and uncertainty to take hold as a welcome for those other unwanted feelings.

Ruby doesn’t make new things possible, but many things desirable. It also affords continous simplification and occasional breakthroughs at an for me unprecedented level. There’s an immense sense of satisfaction in making less code do more on a regular sometimes even daily basis.

As a practical example, Ruby enabled me to program Basecamp in less than two man-months (which, however, doesn’t map to either calendar months or the entire developing process for 37signals). That while learning the language and building a full-stack web framework (ORM-layer, controller, template system) called Rails (and soon to be released). It further allowed the system, though continous simplification and occasional breakthroughs, to adapt a wide range of new features without significantly increasing the codebase.

I owe my continued interest in programming to Ruby.

9 comments so far (Post a Comment)

12 Mar 2004 | Graham Hicks said...

This might interest you: an IT architect at Sun is saying that a better designed programming language means better, and less buggy software.

Wouldn't that be an excellent project to work on, designing a programming language?

12 Mar 2004 | Sean Devine said...

Do you have any more details on Rails? Can you point us to (or provide) a comparison between PHP/Perl/Java and Ruby? I'd love to hear more abouy why Ruby has made such a big impact...

12 Mar 2004 | Tomas said...

That web framework sounds very interesting. Please give me a reason to leave PHP behind.

12 Mar 2004 | JP said...

After seeing Ruby in action with Basecamp, I've been interested in learning the language. Even after playing with it for only a few days, it's elegance is apparent.

One bugaboo: eRuby and mod_Ruby aren't playing nice with my OS X (Panther) installation. DHH, have you come across a sample httpd.conf file that works for Panther?

Regarding Basecamp, specifically, I think it would be utterly fascinating to read an overview of the design/development process, no matter how brief. Maybe you talented guys at 37signals think I'm asking for too large a peek behind the curtains, though ;-)

12 Mar 2004 | JF said...

Regarding Basecamp, specifically, I think it would be utterly fascinating to read an overview of the design/development process, no matter how brief.

Maybe we'll write a book about it someday. Seriously.

13 Mar 2004 | pb said...

Similar to Paul Graham's contention that Lisp was important in the development of Yahoo Store's precursor.

http://www.paulgraham.com/avg.html

13 Mar 2004 | Jay said...

JP: this page has some OS X specific information that might help solve your problem. I haven't tried any of it myself.

19 Mar 2004 | Simon said...

Ruby is the most elegant language I've yet discovered. Similar enough to java/python/c#/pascal/etc to be easy to learn, yet somehow feels different.

A shame the implementation isn't quite as good as the perl/python interpreters (though it is good enough for most purposes). Threads, for example, are emulated by the interpreter. No unicode support. And the documentation was still rough in spots last time I looked (several months ago).

I just saw an article about "groovy", a language which is strongly influenced by Ruby. It compiles to Java bytecode, and therefore has the standard java library + all other java code available to it. And it's been submitted as a JSR to the java standardisation process.

This will certainly get some of my attention over the next week or two!

groovy.codehaus.org has more info..

28 Mar 2004 | Randy Kramer said...

re Graham Hicks' comment: "Wouldn't that be an excellent project to work on, designing a programming language?"

Yes, I'm sure it would, but I'd hope that anybody that starts a new language would have a firm grounding in existing languages and the problems of each before starting. IMHO, there are already too many languages, but none that are perfect (which, of course, is to be expected).

I suspect you have to segment the problem space, that is target any new language for a particular type of programming problem.

Comments on this post are closed

 
Back to Top ^