Site Map
:: Bitwise Courses ::
Bitwise Dusty Archives



ruby in steel

learn aikido in north devon

Learn Aikido in North Devon


Section :: opinion

- Format For Printing...

What’s Right With Ruby?

Can Ruby succeed where other languages have failed…?
Sunday 1 April 2007.

Last month Matthew Huntbach took a sceptical look at the Ruby phenomenon which caused anger and outrage among many dedicated Ruby programmers. Undaunted, Huntbach says that only time will tell if Ruby is capable of realising its full potential…

It seemed to be my remark on Why’s Poignant Guide which did it. For a community which makes a big thing about being "cool" and "fun" I was surprised at how hot under the collar and serious Ruby fans got about what was meant to be a light-hearted comment about styles of tutorials. To be charitable, there may have been a transatlantic translation problem here, as noted in what was one of the more sensible comments in Why’s blog on this article. My (British) use of the childish word "horrid" was an indication that I wasn’t being too serious, Americans, however, do not seem to have this ironical use of the word. I really did not expect my short article to attract the response it did.

However, the Poignant Guide in some ways symbolised my problem with Ruby. Underneath, there is something worthwhile though not earth-shattering. But look what you have to dig through to get to it: irrelevant verbiage which is really just striking a pose, which gives a superficial image of cleverness and "cool" but adds nothing if you just want to get a job done. Given that the community atmosphere of Ruby fandom is often given as a major factor in its favour, I don’t think it entirely underhand to criticise aspects of it. You cannot both sell something by its packaging and then say it’s unfair to criticise it for its packaging.

Down From The Ivory Tower

The strange thing about the replies and web comment elsewhere on my article was how many people seem not to have read the article for what it was and, instead, jumped to assumptions, in some cases personal ones about me. Most of them completely wrong. The person who guessed my politics must be USA Republican was particularly amusingly wrong. But mostly it divided into those who thought I was corporate man, wanting to churn out Java programmers to fit what industry demands, unable to appreciate those cool Ruby programmers who were into fun not business-thinking, and those who thought I was academic man, locked away in my ivory tower, unable to appreciate those busy Ruby programmers rapidly churning out real world applications. Nearly all assumed I had some vindictive grudge against Ruby and wanted to kick it down.

” Academic research into programming languages has for quite a few years now been sterile… Part of the reason for this sterility was the dominance of Java.”

A particularly common assumption was that I was a sour academic who thought everyone should be using academically-derived languages like Haskell, and was angered by the rise of Ruby and similar languages. Did those who made this assumption read my point about the failure of Prolog, and Haskell being "infuriating"? The point I was actually making was that the rise of new languages which do not have any obvious corporate backing should be a source of inspiration to those of us researching into developing new programming languages, but we also have a lesson to learn from the fact that in recent years these languages have not been coming from academia. Elegance and a strong theoretical background are fine things, but they don’t necessarily coincide with ease of use and practical needs.

In fact, I am concerned that academic research into programming languages has for quite a few years now been sterile. When I first became a researcher in this area, academic conferences and journals on the subject were fun, plenty of new ideas which spoke to me as a coder. Now they seem to be dominated by mathematical papers on proof or semantics, which say nothing about the practical issue that concerns me: what are the practical features of a programming language that make it easy to use for ordinary people, productive, safe and efficient? Part of the reason for this sterility was the dominance of Java, and the failure of the academic push for declarative languages. It seemed that the language wars had ended and Java won.

The widespread adoption of Java as a teaching language has led many to suppose it is the language favoured by academics, but the rise of the object-oriented paradigm put into practice by C++ and then enhanced by Java, was industry pushed. The academic obsession of the 1980s, when C++ first arose, was logic programming, adopted by the Japanese Fifth Generation Project. There was a real concern that this would lead to the Japanese coming to dominate the computer industry, and millions were put into research projects elsewhere in the world to try and keep up with them.

I date the academic loss of confidence in the development of new programming languages to the failure of the Fifth Generation Project.

The Roots Of Ruby

Academics should not lose heart, however. Much of what is productive in new programming languages which aren’t derived from research institutions nevertheless owes its origin to ideas that first came from these institutions. The object-oriented paradigm owes its origin to the programming language Simula, designed at the Norwegian Computing Centre. Reflective metaprogramming (the idea of a computational system which can inspect and manipulate its own internal structures), owes its origin to work on 3-Lisp at MIT. These are at the heart of Ruby, which also shows obvious influences from the pure functional programming which developed into Haskell. Interestingly, one of the fall-outs of the research inspired by the Fifth Generation Project is the now widely admired concurrent language Erlang.

”I am actually interested to see ideas which were once abstruse academic concepts taken and put into practical use in a language like Ruby…”

Thus it was particularly sad to see abusive comments from Rubyists aimed at me, which seemed to assume that, as I am an academic, I should be treated as a worthless hate object. I am actually interested to see ideas which were once abstruse academic concepts taken and put into practical use in a language like Ruby. The idea that there is some huge gulf between myself as an academic who likes exploring new programming language concepts, and hackers who like putting them into practice is nonsense; we have different roles but we should be working together.

As an academic, however, it is my duty to be sceptical and to ask awkward questions. That is why I reacted against the Ruby hype and asked, in particular, for further evidence for some of its claims. This concern was take up further by Hacknot who was rather more rude about Rubyists than I was. In fact, my comments on the language as opposed to the hype around it were fairly balanced. I noted there was a case for the much looser typing mechanisms of Ruby, though I expressed my concern that this might cause problems if Ruby became established as a general purpose language for writing large-scale long-lived code. Why is it that so many Rubyists read that as expressing "hatred for dynamic typing"? I raised similar concerns with metaprogramming. If the language is to develop, there must, of course, be open debate in which concerns are raised and answered.

I made no pretence over the fact that what I wrote reflected my initial experiences with Ruby. But part of the argument used by its supporters is that you need only a short period of experience with Ruby to appreciate its superiority. I am fully aware that to know a language properly one must have long experience with it. It took me several years of teaching using the Java language, exploring it by writing code in it, before I felt I had a really deep grasp of it. As someone who teaches programming I have different insights into it than those who work in commercial development and I reflected these in my article. I would ask that, just as those who work in commercial programming want their experience and comments on that basis be respected, my experience in teaching programming also be respected.

Those for whom programming comes naturally may not have the feel for how difficult it is for most ordinary people. If you have not had long experience of trying to teach programming, do not jump to the conclusion that difficulties experienced are due to "bad teaching". My own experience is that in a class of a hundred in a middle-ranking university Computer Science department, less than ten are true hackers, in the old sense of the word of people who have a natural flair for programming and grasp it right away. I can see that the intricate nature of Ruby has a particular appeal for such people, but if you are one of them, do not assume everyone else is like yourself.

Ruby: The Next Generation…?

There is a concern, which was reflected in a previous Bitwise article Ruby Off the Rails, that with Ruby having come to prominence due to its conjunction with Rails, many people are not making sufficient distinction between the two. Ruby is not even that "new" in strict calendar terms, but what is new about it and similar languages is that having previously been seen as having a use only in limited domains, and Rails is an example, there is a growing movement to push them forward as general purpose languages. Ruby has been explicitly noted as a post-Java language in that sense. If the quicker development time using Ruby is actually due to Rails, then that’s not actually an argument for Ruby on its own.

My point about maintainability of code, which was actually my main criticism of the language itself, seems to have been answered by no-one. We will not know for sure until the first generation of Ruby-developed systems has entered the second generation and it’s the updates that people are working on. I think there actually are answers to my points, in particular that more sophisticated programming environments reduce the need for built-in checks in the language itself. It may well be that the mathematical work of my academic colleagues I was so disparaging about above will lead to more sophisticated tools which manage the complexity of languages designed for ease of practical use rather than theoretical elegance.

” Ruby has led the way into what is required, in particular the ease of interaction with other components in a practical system such as a web application. This is what makes it work within Rails and is, I think, is the key feature lacking from the old declarative languages.”

I still think, however, that something similar to Ruby but with a stronger theoretical basis could be developed. Ruby has led the way into what is required, in particular the ease of interaction with other components in a practical system such as a web application. This is what makes it work within Rails and is, I think, is the key feature lacking from the old declarative languages. The traditional functional and logic languages were designed on the basis that they would manage the entire computation and straight input/output, let alone any more complex interaction, was a minor "dirty" issue. So what I require is a language which is both interactive and has the clear and clean operational definition of the sort first proposed by Peter Landin in his landmark paper The Next 700 Programming Languages. A language should be fully defined by rules which translate it to an underlying calculus and rules which say how that calculus operates. It is in not living up to this that I found Ruby ad hoc, and my judgement seems to be supported by those who have looked into these issues in more detail.

Algorithms, Arrays and Academics

On issues of syntactic trivia as opposed to deeper operational issues, it’s a mark of the lack of insight of many of my critics, that they failed to understand my point about the addition operator with arrays, and supposed that it was a major concern of mine that I thought it should work by pairwise addition rather than concatenation. In fact I expressed a personal opinion neither way. It happened that while I was writing my original article, I came across an article elsewhere where someone claimed that pairwise addition was the "obvious" way addition should work with arrays, and I happened to remember it didn’t work that way in Ruby. My real point was to express caution about the "Principle of Least Surprises", and in particular over the claim that the decisions that have been made in Ruby over syntax are somehow more natural than those in other languages. I illustrated that with this one example, I could have chosen plenty of others.

In my experience, the first hurdle at which people learning to program fall is the inability to distinguish between an example and the more general concept it was brought in to illustrate. It shows a basic inability to abstract; and then procedures and everything else that follows are never properly understood since it all involves abstraction: the ability to distinguish between the general and the particular. But such people can often get by with programming which involves just fiddling with boilerplate code, or flat calling of library routines.

It may be unfair, but I was reminded of this by my many Rubyist critics who failed to note the array addition example was just an example. As one of them put it, "I’d rather build webapps used by hundreds of thousands of users than be considered a ’good computer scientist’". I wonder if this means "I failed CS101 and I don’t care". I think I can see why these guys don’t like academics. Although, while I’m an old-fashioned computer scientist still interested in core things like programming languages, many of my colleagues are doing things in useability, social implications, and much else where they may have other things to say about your webapps than discussing how they are coded. What this discussion has also revealed is that many people’s idea of what academic computer science teaching is about is stuck on what it was several decades ago. The days when it was dominated by algorithms and obscure programming languages are long gone.

If building webapps is all you want to do, and if there’s a tool which does most of the work for you, so the only coding you have to do is fiddling with a few snippets which glue it together, that’s fine by me. The claim with Ruby is that though it does a good job here (which I don’t dispute) it has much wider capabilities. That’s what interests me, and I am genuinely interested to see a family of languages which originated from this gluing and text-processing role break out and make claims to be able to do more than this and to take over from the traditional heavyweight languages. That is why I took a long hard look at Ruby, and why, despite the negative reaction to my first comments on it, I shall continue to do so.

Matthew Huntbach is a Lecturer in Computer Science at Queen Mary, University of London. During his eighteen years working there, he has taught introductory and intermediate programming in a variety of programming languages. His research interest is in the development of practical programming languages which are inherently concurrent. He has a DPhil in Artificial Intelligence from the University of Sussex.

AddThis Social Bookmark Button


  • What’s Right With Ruby?
    2 April 2007, by Paddy3118

    Hmm, Hi Matthew, after reading your statement: "what are the practical features of a programming language that make it easy to use for ordinary people, productive, safe and efficient? " I realy would like you to also try Python. It does use indentation for block structuring, but don’t let that put you off. I am not sure if you are aware of the Original authors background, but he was a part of the academic team that put together the ABC language and has steered Python on a path of making it easy to create maintainable code, as well as a language that is easy to teach and learn.

    One of the major features of several Dynamic languages is that they have a command line interface. This allows pupils to easily play with ideas they have been taught and so fix them in their mind. Python comes with the IDLE IDE. With idle, if you were teaching students about the concept of variables they could then easily try it out, try something slightly different maybe and see for themselves what is happening, in ways that were more meaningful to them. They could compare and contrast variables in maths versus variables in Python for themselves, (with guidance).

    Nothing ever lives up to its hype, but in some cases there is substance behind it. You are not new to programming, try going to www.python.org and researching the aims of Pythons developers - it seems to me that they share a lot of your concerns on maintainability, ease ot learning, suitability for large projects, and are addressing them in Python. I have seen several proposed language features rejected because of their impacts in those areas; yet other developments are welcomed, such as Python on the JVM, Python on .NET, PyPy (Python implemented in Python allowing easier development of interpreter and compiler variants), SciPy, BioPython, crunchy (at http://code.google.com/p/crunchy/)... (I decided not to mention any w*b frameworks ;-) .

    Looking forward to your "Whats right with Python" article, - Paddy3118.

    • What’s Right With Ruby?
      3 April 2007, by Matthew Huntbach

      Yes, I have looked at Python, and, in response to an earlier poster, Perl too (though I haven’t looked at the latest version of Perl). Perl’s always been there in the background as something I know a little about, though I don’t have cause to make active use of it. Python’s intrigued me for the same reason Ruby has, and in many ways I see the two as variations on a single theme. It was the particularly strong hype for Ruby, together with its advocacy by people whose take on Java I had agreed with in the past that led me to concentrate on Ruby rather than Python. But I’ve certainly worked my way through a few Python tutorials as well.

  • Ruby’s easier to teach than Java
    2 April 2007

    As an academic who’s taught Ruby and Java in early programming classes, I’ve found that students pick up Ruby much faster than Java. Java’s too complex to use as an introductory language, as many universities have discovered. See all of the ACM SIGCSE papers on the difficulties of teaching Java as a first language, and check the academic IDEs and libraries like BlueJ and the ACM Java libraries for some of the attempts to make Java simple enough to teach. Python might be a better choice for a first language than Ruby, if only for the easy availability of textbooks using Python, but Ruby’s definitely better than Java.

    • Ruby’s easier to teach than Java
      3 April 2007, by Matthew Huntbach

      Now this intrigues me, because I *don’t* see Ruby as less complex than Java. Ruby has classes and methods like Java, and a great variety of extra things added on top. Ruby has a richer control syntax - the several different ways of expressing loops and conditionals, it has the block and yield structure, it has all the syntax that manages arrays and strings/regexps,and plenty of other peculiarities which I see as at the heart of Ruby i.e. you have to deal with them straight away, you can’t file them off as advanced issues. The only obviously complicating factor that Java has is all the syntax involved in maintaining strong typing. Java, if you make minimal use of the APIs, is actually quite an austere language.

      I’m aware of SIGCSE papers on the difficulty of teaching Java, but really these are on the difficulty of teaching programming. As I said in my first article, I don’t see Ruby as having introduced a magic solution to make teaching programming any easier.

      My own approach to teaching using Java is to make it as simple as possible by not introducing any APIs except simple use of String, and some of the Collection framework. Also Scanner has made I/O much simpler, a shame it wasn’t there at the start. I think then you are pretty much down to the basics you can concentrate on. Also, I don’t use an IDE, because it seems to me that too is added complexity right at the start - students find it difficult to distinguish between what’s Java and what’s IDE.

    • The Problem with Current Scripting Languages as Teaching Tools
      3 April 2007, by IamWhoIam

      Two problems I see with scripting languages being hard to teach and they are interconnected. [Warning! Strong Language]

      1. Pretensions

      2. A lack of immediate visual reward that most human subjects crave while working with something as plastic and powerful as a programming language.

      (1) Pretensions — This is a tension between two types (The "Developer" type and the "Sys Admin" type)

      The biggest problem that I see with most of the so called "scripting" languages is their pretensions. They are now pretending to be what they were not originally intended for. They started out as attempts to ease the pain of shell scripting and to act as the glue between various compiled components of large systems, and because of the later community push ended up in the so called "general purpose" arena.

      Not to beat up on Ruby so much, I dare you to find me an archive of scripts written to help unix systems administration. And some will trot out capistrano (what’s with these names? Again, it is the pretensions, IMO) or some other specialised application (like rake, what the heck was wrong with make? Really? Except that someone was not willing to learn the syntax and nuances of make, so they decided to duplicate it in Ruby .. ) And the argument that "sys admin scripts are sort of private, and kind of throw away, and pretty much easy to do.. Yada yada yada" just doesn’t hold water. If that actually was the case, then sites like shelldorado.com wouldn’t exist. Seems to me that sysadmins are quite willing to share their scripts. Scripting language enthusiasts on the other hand, would rather polish their egos and pooh-pooh the daily mundane tasks than actually do it.

      Reason there aren’t many scripts out there? Because sys admins are quite skilled at using existing tools (the old UNIX philosophy of NOT re-inventing the whell) and string them together to do the job, and they just don’t pick up Ruby or Python because most of the people who are actually using these languages are actually "software developers". In the IT world, there is real tension between these two groups as they represent two different ways of thinking. The "scripting" languages, though started as general purpose "glue" languages have taken a course of becoming more specifically tuned for development tasks specifically because of the tendencies of their adherents. A "developer" couldn’t care less about administering various machines and keeping certain things in sync or monitoring backups or whatnot. These are things "those IT people" do.. Ironically, due to this early influx of "developer" types, there is a natural resistance to the ideas and aspirations of the "sys admin" types and therefore the scripting language inevitably starts to veer towards the concerns of the developer "type".

      NOTE: A "Glue" language MUST provide gratification IMMEDIATELY. There is NO time to get into the nuances of closures or the philosophical reasons behind how a string is treated vs. a symbol etc. Sys admins don’t have time for this stuff. They are busy doing stuff so that the enterprise doesn’t collapse under the weight of all that garbage accumulated over the years as the fads came and went and various developer types created awkward systems to fulfill their most recent technological phantasies, which they at the time held to be self evident truths (4GL tools anyone?)

      This dovetails nicely to the next point, which is closely related to the so called scripting languages being deceptively difficult or just plain boring for the students at high-school level. (And "Pythonista’s" please, the fact that Negroponte agreed to put Python on OLPC is _NOT_ a self evident truth that Python is the best language to teach children with - It only tells us that millions of these pc’s will have Python, it remains to be seen whether or not they will actually learn it or even like it. Kind of like the free bible in every room, everyone’s got it pushed to them, nearly no one ever reads it. )

      Point TWO - A lack of immediate gratification ==============================

      Children don’t give a shit about how beautifully the latest PEP spec was drafted, or how you can "meta-program" the shit out of your super-classes. They are concerned with one thing: Can I make this little dot move around the screen? Or make it look like a little animal which does what I want it to do without having to get a fucking degree in rocket science?

      And this is where EVERY SINGLE ONE of the scripting languages FAILS! And fails MISERABLY!!!

      In a day and age, where the children are exposed to the most immersive of visual environments day in and day out, all Python and Ruby have to offer is PUTS and PRINT .. NO FUCKING WONDER they don’t give a shit about learning the language. They want visual feedback, and you want to tell them about linked-lists and iterators? Good frikkin luck! They will drop you faster than a lead weight on a sinking ship.

      When I look back to my first experience with programming, it was a TI-99/4A with 16k of RAM, and a cheesy TI-BASIC interpreter in rom. It had a simple manual which told me what statement did what. I went NUTS! And within a couple of weeks I had this stupid animation going jumping around on the TV screen.. Changing colors and moving and doing sound..

      Why isn’t Ruby or Python like that?: One word: PRETENSIONS

      Despite the cacaphonous claims to their humility and niceities, reality is usually the opposite, scripting "communities" are chock full of PRICKS, who don’t have the metal to try their "skillz0rz" on something really substantial (and I don’t mean the 3 percent of you who have bothered to look at the C code behind "that language that you love and get orgasms over in every second thread on the mailing list"), so they use the opacity of their "scripting" language to bamboozle their audiences and detract from their lack of appreciation of simplicity as a value in itself, not to mention their lack of a proper training in the discipline of computing.

      Why wouldn’t Ruby or Python make it easy for newcomers, real newcomers like high school children to learn the language they "love" so much? PRE-FRICKING-TENSIONS. They aspire to be the C programmers without having to endure the pain and suffering and the mental workout of actually _being_ a C programmer who knows the machine intimately. These light-weights are the reason B&N and Borders have started putting VB, PHP, Excel and Access "programming" books in the "Advanced Computing" sections. You just have to be in that aisle to believe it.

      If Texas Instruments — that big bad corporation archetype which you knights in shiny armours are fighting so valiantly — could do it in 26k of rom and a 3 MHz cpu, why THE HELL can’t you give today’s children AT LEAST the same learning experience with your 2GB 2ghz shiny laptops? Why does a 10 year old have to figure out which libraries to downlad and which extensions to precompile with your shitty scripting language to make a little 8-bit character ball change color and move around the screen? Because you aspire to be what you are NOT and will never be.

      BASIC had you beat 20 years ago, and you still havn’t come up with something better to teach the children with. The proof is in the pudding, and this scripting pudding is full of crap, with a lot of pretentious pricks trying to make a buck off of people’s real need for an easy to use computer language.

      I’ts been time for decades. It’s about time. But no one cares.

      • The Problem with Current Scripting Languages as Teaching Tools
        4 April 2007, by The Badger

        And this forum is moderated...

        “Children don’t give a shit about how beautifully the latest PEP spec was drafted, or how you can "meta-program" the shit out of your super-classes. They are concerned with one thing: Can I make this little dot move around the screen? Or make it look like a little animal which does what I want it to do without having to get a fucking degree in rocket science?”

        I don’t give a shit about the latest PEP spec either, but if you can’t manage to make a little dot move around the screen in pygame (or a little sphere move around in VPython) then you’re not going to have the ability to realise those game programming ambitions with most of today’s tools, and you certainly wouldn’t have got very far on your TI-99/4A, either.

        “BASIC had you beat 20 years ago, and you still havn’t come up with something better to teach the children with.”

        What? The best BASIC dialects of 20 years ago didn’t even have things like structures, let alone garbage collection: it was all integers, strings, floats (if you were lucky) and pre-allocated raw memory. And Pascal, Lisp and various other languages were all considered better than BASIC for teaching (as well as for everything else) 20 years ago.

        The only pretensions I see here are yours, but where you consider yourself to be "elite", you’re at best "mostly harmless".

        • The Problem with Current Scripting Languages as Teaching Tools
          5 April 2007, by IamWhoIam

          My dear Badger, You have got me now. I am not elite by any means, if anything, I am trying to voice the concerns of a constituency which is repeatedly ignored by the "pretensions" of the scripting language crowd. Who seem to equate "Used by NASA" with "USED by NASA, therefore it ought to control the next spaceship". Well, NASA uses pure cotton mops too, should the mop makers start pretending their mops are somehow superior and not for the general riff-raff just because NASA happens to use them?

          When I say "pretensions", I mean to say: be who you are. You are a scripting language fer-crying-out-loud (childsafe enough for ya?), so please stay that way, that is the reason we fell in love with you (etcetera..) Out of all the scripting languages, Lua and REXX are probably the least pretentious and therefore closer to their problem domains. Stick to what you do best, be easy to use and accessible out of the box. Not the space shuttle out of the box, which can be made into a car after much hooing and hawing, something it was supposed to be in the first place.

          Regarding "Structures", "Garbage collection" etc, I think you may have just proved, or at least strengthened my point. The issue IS NOT, game programming "ambitions" as you, and by anecdotal evidence, many afficionados seem to think. The issue is the Accessibility of the language. My example was not about how BASIC was better, it was about how BASIC was more accessible. I didn’t need to download BAgame module and apply the Bamonkeypatch just to make a silly dot move around. I was there, 15 years old and making the thing DO something RIGHT THERE! Within a week of getting my computer. No download this, configure that CTRL-D here blah blah blah. It was me and the console and the 20 pages worth of info on the BASIC commands. And that is ALL that was needed to do something which seemd "useful" to me, at the time. When I was a teenager getting introduced to the magic of computers and programming, I didn’t really care what the implementation was, or how efficient it was. It was good enough for me, and it let me get into doing cheesy stuff right away. Then when I was hooked, I looked things up on my own. There was no boredom, no feeling like someone was making me do work. I loved it. Just my personal experience.

          The point is that once a newcomer can get things going, they then take the initiative to learn about loops and variable assignment and system constraints (16k of RAM for example). The point is that I haven’t forgotten those lessons in all those years. I am not uber or something, I would just like to have that magic back please. The magic which needless pretensions have seemed to suck out of the whole experience. Programming is something which should be ubiquitous by now. Every child should have programming as part of their daily play routine. We shouldn’t wait for them to go to high-school and take a course to learn the basic concepts (hyperbolizing a bit here, but you get the sense).

          Kids today live in the most visually immersive and feedback rich environments, but when it comes to programming, the scripting languages, or rather their "pretentiousness" seems to be telling them, well you really have to do the boring stuff first, before you find it to be exciting. Well, it wasn’t always like that. We got to do the exciting stuff first, got hooked and then learnd the advanced stuff just to scratch that itch. It’s not new territory. Its been done, by a boring old corporation.

          The pretensions have put the cart in front of the horse, and no-one wants to ride it anymore, or they do it begrudgingly, and there are "experts" (in needless complexity) who defend this status-quo.

          Given all the work that has gone into "improving" Python and Ruby etc. The barrier to entry, from a pedagogical perspective, should have been eliminated by now while keeping the languages just as flexible and powerful as they have become. TI-BASIC didn’t have a thing when it comes to "richness" of syntax or "power" thereof, but it was leagues ahead of today’s scripting languages when it came to getting the kids/newcomers interested in immediate feedback via very low barriers to entry.

          There is no reason Python or for that matter Ruby cannot start in a barebones mode in which the command window is your canvas or maybe a canvas is started by default. If the user wants to go into a more powerful mode they should be able to do it via a flag (in a cfg file or interactively). DRScheme does it, and it is not very complicated to achieve. The hurdles are philosophical and sectarian, and they stem from the so called "pretentious" nature of the respective communities. This is where BASIC has you beat.

          • The Problem with Current Scripting Languages as Teaching Tools
            6 April 2007, by Paddy3118

            One of Pythons continuing goals is to be a good teaching language. The following link has pointers to further information for those who want to teach programming to others (from kids to Scientists):


            "Scripting language" is just a convenient name that allows you to group programming languages. Over time, languages such as Python have shifted what is generally seen as the capabilities of a scripting language. On Unix platforms I’ve used AWK (great tool), and sed, grep, vi, sh, csh, bash type tools for twenty years and still might use them; but only where appropriate. some sysadmin tasks are better handled by Perl, others are better handled by Python. You can call Python a scripting language - I use it to write small scripts as well as large programs, - but if you do call Python a scripting language then you need to expand the gamut of what scripting languages can accomplish rather than decry their abilities to do more.

            - Paddy.

      • The Problem with Current Scripting Languages as Teaching Tools
        6 April 2007, by Paddy3118

        If you are teaching younger children programming then there are graphical environments, written in Python, that give kids the more immediate visual feedback that they need. Try the following link to several videos of children demonstrating how easy it is to learn about programming using Python, and tools specifically written for children in Python.


        There is also a Human side to learning to program. A good teacher with TI 99/4A Basic may well do better than an angry, vulgar, teacher with the best of Python’s tools :-)

        - Paddy.

      • The Problem with Current Scripting Languages as Teaching Tools
        27 April 2008

        “EVERY SINGLE ONE of the scripting languages FAILS! And fails MISERABLY!!!”

        1. Start Logo

        2. Type in the command center: forward 100

        3. The graphic cursor, called the Turtle moves 100 turtle-steps


  • What’s Right With Ruby?
    2 April 2007

    Very interesting pair of articles. I am an enthusiastic Ruby programmer, having worked mostly with Java over the last 6 or 7 years, and C (and Fortran and a bit of assembler) before that. I find it has much to recommend it, but one thing that struck me as I learned is that the hype that it is particularly intuitive and simple doesn’t ring true. Certainly the syntax is clean and simple, but it includes some language constructs that are a lot more complex than you get in Java or similar languages - such as programs editing their own code, the whole code block structure etc. I rather like these powerful tools now that I am getting to grips with how best to use them, but they are not simple (IMHO).

    And as for Why’s Poignant Guide - I also found that a bit annoying: I could live with the cutesy style and certainly good to try to make a programming guide interesting to read, but the very low information content per page was frustrating for someone who already knows a bit of programming and wants to find out all the essentials quickly. I’m not sure what a novice programmer would get out of it - if anyone has used it as a way of learning to program, I’d be interested to hear how they found it.

  • That Ivory tower must be very tall...
    2 April 2007, by usquebaugh

    ... for you seem unable to see the ground that the rest of us have to walk on.

    The original article was written in a very inflammatory and condescending manner, is it any wonder that it got the responses it did. This continues in a similar vein. If you come out throwing punches do not be surprised if you get kicked.

    I responded to the first article and my points still stand. You are an academic, most commercial problems will not be solved by academic band aids. Most commercial programming problems have little to do with the language or tools and everything to do with the people involved. Furthermore, your ideas as to how/what commercial programming is are that of a lay person. You can read about the pain, you can imagine the pain but nothing brings clarity like feeling the pain.

    In future stick to academia, tell us about the new paths being investigated or old paths once thought right but now shown to be wrong. Tell us the hell of teaching CS101 to uninterested students etc. But please, please no more comments on commercial programming you are just not qualified to do so. In fact the best article would probably be you getting yourself a six month contract gig as a java dev on a large project, no cushy consulting but a hands on 100% coder.

    • That Ivory tower must be very tall...
      2 April 2007

      Inflammatory? Condescending? You sound like an little insecure prick. If saying something negative about Ruby is seen as condescending by the entire Ruby community, then the community needs to re-evaluate itself.

      Are you just insecure about your favorite language getting trashed? Do you like trying feeling better about yourself because if you whine loud enough people will just give you what you want?

      I love Ruby, but I really dislike people like you.

      • That Ivory tower must be very tall...
        2 April 2007, by Usquebaugh

        It was not the content but the tone that was condescending.

        I do not speak for the entire community any more than Mathew speaks for his community. The community is not something that will do this or that rather it will just exist. Individuals do this or that not communities.

        Ruby is not my favorite language, Lisp and Smalltalk rank above it on my list. I’ve been paid to develop code in all three and Ruby is nice but not that nice.

        Whining about academics who choose to pontificate on subjects outside the sphere of expertise, yep I am most guilty of that. What I asked for was Mathew to stick to his sphere of expertise. When he strays into areas that he doesn’t have experience in his comments betray this all too plainly.

        I repeat the main thrust of my point. To comment on improving commercial programming requires you to have experience of commercial programming at many levels.

        I like Ruby and know you not at all.

        • That Ivory tower must be very tall...
          3 April 2007, by Matthew Huntbach

          The article wasn’t intended to be condescending. It seems to me there are some people - you are one - who have assumed some sort of tone or attitude that I assure really is not there. By "condescending" you are accusing me of thinking I am superior to everyone else. I don’t, and I can’t see anything I have written which suggests I think I am. I am just giving my own opinion from the basis of my own experience, that’s all. If I have written anything you believe to be factually incorrect, then say what it is. I am happy to listen to you. If your opinion is different from mine on any of these issues, then say what it is, and justify it. Again, I am happy to listen to you. But you have done neither of these - you have written nothing about my actual comments, just insulted me on the basis of the job I happen to have.

  • What’s Right With Ruby?
    1 April 2007, by iwarford

    I’m wondering, if you wanted to look at a text processing/glue language, why haven’t you taken a serious look at Perl yet (given how long it’s been around)? I’d have thought that the current phase it’s in (a feedback loop between several implementations and refining of the semantics of Perl 6) would be capital-I Interesting.

    Perl, aside from being used to build web applications since CGI was synonymous with Perl, is a fully general purpose language — it’s being used to build everything from huge transaction processing systems to desktop applications down to the average 2 line shell script replacement.

    Especially considering that Ruby’s "do what you would expect" philosophy is a descendant of Perl’s goal of trying to create a programming language taking into account general semantics of natural languages.

  • What’s Right With Ruby?
    1 April 2007, by Reginald Braithwaite


    I have found the objective points you have raised about Ruby the language in both of your posts interesting. These points alone make your posts worth careful consideration.

    Like the previous post, this one also takes some time to leave the language itself and get into what you think of other people’s behaviour. I am not surprised that some people will get hot under the collar, and I imagine you are not surprised either. After all, you have left the objective truth behind and ventured into your personal likes and dislikes about others.

    Is that wrong? Of course not. What makes our world beautiful are the things beyond truth and falsity, the things we like and dislike, the people we admire and the behaviour we appreciate. My own weblog is about passionate programming: you cannot talk about a thing like that without provoking an emotional response.

    That being said, I have found that those kinds of Ad Hominem observations have a way of taking over a discussion and obviating any meritorious technical points you make. This seems to have happened with the previous article. I pointed out some places where I agreed with you and was accused of "fanboyism" (I personally feel this word always says more about the speaker than the subject). I also pointed out that I was surprised about your condemnation of the language over Why’s tutorial.

    I try to separate the two issues, because the ARE separate: the language works or doesn’t work for a particular application in a particular environment, period.

    The "community" is not one buzzing hive but really a seething mass of autonomous agents, some of whom are annoying, some pleasant, some vocal, some quiet, just like any other large group of independent people. I would hope that nobody would ever praise or condemn the Java, Ruby or even Rock Climbing "communities" for something I say or do, and I try to give the Java, Ruby and other "communities" the same leeway.

  • What’s Right With Ruby?
    1 April 2007, by Sam Danielson

    Ruby is a win because it embraces a universal polymorphic base. Unix has the stream, ruby has the object. To argue that ruby is either strongly or weakly typed is sort of barking up the wrong tree. There is only one Ruby type IMHO, and that type is the object. I think many popular software systems have this quality. A spreadsheet has cells, an XML database has documents, a file-system has files, and so on. What a stream, document, object, file, or cell, actually represents is dependent on its content, but all are still members of the universal polymorphic base. We can sort, swap, collect, and otherwise manage these objects efficiently with one set of operations. Ruby has a syntax well adapted for working with it’s internal representation of objects, as it should, and it’s representation of objects strikes a balance between simplicity and flexibility.

  • What’s Right With Ruby?
    1 April 2007, by IamWhoIam

    Matthew, you do have some good points. But I’m still trying to figure out what exactly do you think is "right" with Ruby? I read through it once and it seems the first half is just rehashing the bad manners of some of the "hyper enthusiasts" or fan-boi’s shall we say, and the second half is kind of vague on any particular merits. That is just as well.

    Personally, I found the Hacknot article you pointed to a lot more well reasoned and well-argued than either of your articles (FWIW, and this is just my opinion). I think you will find that the response to your first article was disproportionately negative because of a percieved attack on _Why the lucky stiff, who is an artist and a songwriter first and foremost. and a percieved cheap shot on his so called book may have triggered most of the negative responses.

    That is not to say that the make-up of the Ruby community itself has not changed and now it is a hodge-podge of refugees from PHP and the Java world. Like all converts, it is the converts who are most fanatic in their zeal because they have to justify their abandonment of a previously cherished system of beliefs along with their need to prove that they are true converts and not just transients.

    I am using the religious metaphors because, sadly, that is what seems to be happening to the Ruby community. Most people recently attracted to Ruby have done so because of the hype surrounding Rails(A Trademark of David Hannsson btw). The attitudes fostered by David and his cronies have mainly been to be insular and reside in ivory towers of their own. The rails community especially the US one, has developed into a collection of zealots who take any kind of nonsense coming out of David Hansson’s mouth as manna from heaven. One has to note that David’s training is not as a computer scientist, and it shows, in his lack of understanding of performance issues, "...a database is just a big hash..." or referring to the Ruby interpreter as "..the ruby compiler.." in keynote addresses no less.

    To question anything that David or his cronies have to say is not merely frowned upon, but concerted attacks are launched against those (even long standing members of the old guard) who dare to question the latest hair-brained idea du-jour. The Neo-Rubyists are like religious fundamentalists because they are not willing to listen to the concerns of their constituency and various means of coercion are utilized to keep people in line. One major way of controlling opinion is to basically ignore any dissent or to discredit the people by means of vicious attacks. Anything which affects the "Rails" brand is defended against with religious zeal, and this attitude has also started to seep through to the Ruby community at large. The myth of the nice rubyists is fading fast though. As you may have noticed, Matz and most other noted rubyists stay out of these flamewars which are nothing but a tool for defenders of "the brand". Any product which even remotely challenges the status of Rails as the leading web development framework is ignored or attacked based on who the proponent happens to be.

    Ruby the language is defended not because it has merit, but because it was used to create Rails. If you realy want to step on their tails, just mention the P word. And I mean "performance". I guarantee you an earful of retarded comments and flames about how it is good enough etc.

    You also failed to ask one other question: If Ruby is so concise, why the heck has Rails become such an unweildy beast of a framework spanning 80 thousand lines of code? What happend to the conciseness? Well, cute little snippets of code comparing variable assignment or method definition with C++ are convenient chuckle fodder for the conferences, but these analogies really breakdown when rubber hits the road. Good thing most startups have millions of dollars to buy tons of servers to compensate for the horrid (and I mean it in the American sense) performance levels that the poster-application of Ruby has to offer.

    You will notice that Matz and other prominent rubyists have acknowledged these shortcomings and are working to correct those. A move to YARV (now part of core ruby) is one such step. But rest assured that if it wasn’t Matz, these fanatics would be attacking him as well for putting up a list of what is wrong with Ruby (see his blog for that list). There are multiple efforts underway to make Ruby faster (JRuby, Rubinius etc.) but a large majority of Neo-Rubyists are incompetent PHP converts who would piss their pants if they had to write some C code. A favorite hair-brained mantra you see being repeated over and over again is that "We don’t want to do SQL" never mind the fact that Rails can get on with ludicrous 100 query chatter sessions with the back-end just to display a simple page, and when someone points this out to the zealots, they just respond by saying something to the effect that "Hardware is cheap"

    The fact is that Rails is a phenomenon, and everyone is busy trying to ride the gravy train. Like it or not, it has become a convenient cash cow for publishers like Pragmatic Programmers and Oreilly etc, and the conferences with hordes of fan bois shelling out 1500 bucks a piece to learn how to create a stupid blog in 10 minutes are just too lucrative to not defend and guard jealously. Meanwhile, the documentation rots and the fan boi’s are none the wiser. They are too busy fawning over the latest stupid pet trick on the Rails blog circuit, when they are not busy viciously attacking well meaning critics that is.

    No one EVER talks about maintainability. Period. If a Ruby project (essentially a Rails project most of the times now) is the cash cow, then maintainability is the dirty secret cash-calf of this equation. Most Rubyists in general and Railers in particular never bother to document their applications. Don’t believe me? Go download a randon rails project (and there is a dearth of those because everyone is writing their stupid to-do list variant and hoping google knock will on their door any day now) and look at the README file. 90% of the time there will be no basic documentation to go with the app. Because you see, Ruby is so beautiful, kind of like the perly ass of an angel, that it doesn’t really need documentation. If you can’t figure out whether its a Class or Module or a Constant "meta-programmed" in some bizzarre way, then surely either you are STUPID or just not willing to read the 400 daily blog entries churned out by the helpful Rails bloggers. Or you could go kiss someone’s ass on the IRC to get the solution which will never make it to a howto or a readme or anything resembling that packaged with the product itself.

    Obviously something is going to give. And the horde will move on to a new promised land. But for now, they’re camping right here in Ruby land, poisoning the atmosphere with their feces slinging sessions.

    • What’s Right With Ruby?
      2 April 2007

      Wow. Well said.

    • What’s Right With Ruby?
      3 April 2007, by Matthew Huntbach

      Both articles were actually quite balanced on Ruby, covering rights and wrongs, but I thought as the first one went out under "What’s wrong with Ruby" it would be a nice balance for the second one to go out under "What’s right with Ruby".

      As to what is right, I think I’ve said - a big part of it is that people I respect have gone for it, and as there are plenty of languages invented which never get anywhere for one to get anywhere and get enthusiastic support as Ruby has, it must have something going for it.

      Personally, I find the sort of programming that Ruby is used for with Rails - building a web front end to a database - to be extremely tedious and mainly involving routine rather than the real thought of the sort of programming I like to do, which tends to involve fairly complex algorithms and data structures (remember, I have an AI background). But I can see that Ruby is good for doing that job, and Rails seems to be a reasonable tool for taking away some of the tedium.

      It may be that because I don’t find webapps exciting, I go "huh" rather than "wow" at Ruby and Rails. My main interest with Ruby is over the claim that it can be a general purpose language, so has a role outside the Rails system.

  • What’s Right With Ruby?
    1 April 2007, by Steve

    I don’t have a strong opinion on the matter, but entertainment is an effective teaching technique. So while Why’s guide might not be an effective reference, the meandering style may have softer benefits.

  • What’s Right With Ruby?
    1 April 2007

    As someone who entered the Python community just as it left the fervent zealotry phase and began to mature, I for one appreciate your articles as I watch the Ruby community enter the same zealousness.

    It’s an inevitable process, I imagine, Java and Perl had similar moments to my knowledge.

    I appreciated your article far more than the Hacknot one for the simple fact that the Hacknot author initially spent most of his article calling Python and Ruby "weakly typed" contrasting them to "strongly typed" languages like Java. I see someone’s pointed out his error and a massive copy and paste has occurred, but yeah, the damage was done...

    ...so it’s nice to have comment on the hysteria that’s well informed.

  • What’s Right With Ruby?
    1 April 2007, by Fuzzyman

    I’m a Python programmer (although I work with a couple of Ruby fanboys). I thought a lot of your previous article was relevant to dynamic languages in general - not just Ruby, although obviously I have a different take on the subject to you.

    Personally I find Python offers a lot of the advantages of Ruby, with a much cleaner syntax.

    You might be interested in this entry, which has a fairly reasoned response to the much more ’emotive’ hacknot article :


  • What’s Right With Ruby?
    1 April 2007, by R

    For what it’s worth, I was a big fan of both of your articles. I thought the "What’s wrong with Ruby" was particulary well put - I found myself nodding all the time, as I kept reading excellent descriptions of what I also found curious about the language, but couldn’t put in words quite as well. :)

    It’s unfortunate that the community has some inexperienced but nevertheless very vocal developers, who can’t tell an honest critique from internet flame wars. I guess it takes a bit of experience to recognize that some of the design choices made in Ruby will encounter serious scalability problems, both as the code base and as team sizes increase. Perhaps it’s telling that its ’killer app’ is enabling small teams to quickly build straightforward database-backed websites.

    But what confuses me most is that there’s a strange level of personal identification with the language, which I guess happens in all budding communities. But it leads to a level of arrogance that does nothing to endear them to their more experienced colleagues. It takes a while to realize that a language is just a tool, not an extension of one’s identity.

  • What’s Right With Ruby?
    1 April 2007, by Harbinjer

    Really well put. I agreed with most of your last article too. Unfortunately I think the writing wasn’t as good as the insights in that one. I did find something strangely "fun" about Ruby almost immediately, different from any other language I’ve tried. Its hard to describe, but also hard to dismiss for me. And hearing other people talk about it too, makes me think there’s something to that. When Matz says he was concerned with how a programmer felt when using it, I think he was really on to something.

    I really look forward to a language that combine’s Ruby’s ease of use and hackability, with the elegance and academic rigor of something like Haskell. That might be exponentially harder to create than both of those languages.

  • What’s Right With Ruby?
    1 April 2007

    The ’horrid’ thing is absolutely true. In the States, you’d find the word in a sentence like: "The Abu Ghraib prisoner abuse was horrid."

  • What’s Right With Ruby?
    1 April 2007, by Steven

    Nicely put :o)

    Hopefully the fanboys will realise their mistake at jumping to conclusions about both yourself and your previous article, and realise what both a blunder they made, and most importantly, the negativity they put on themselves and their community.