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.
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?
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...
That web framework sounds very interesting. Please give me a reason to leave PHP behind.
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 ;-)
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.
Similar to Paul Graham's contention that Lisp was important in the development of Yahoo Store's precursor.
http://www.paulgraham.com/avg.html
JP: this page has some OS X specific information that might help solve your problem. I haven't tried any of it myself.
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..
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.