logo

 

     
 
Home
Site Map
Search
 
:: Bitwise Courses ::
 
Bitwise Dusty Archives
 
 
 

rss

 
 

ruby in steel

learn aikido in north devon

Learn Aikido in North Devon

 


Section :: opinion

- Format For Printing...

What’s Wrong With Ruby?

Matthew Huntbach takes a long hard look at the coolest language on the planet and is distinctly under impressed by what he sees…
Friday 16 March 2007.
 

Tim Sweeney’s talk The Next Mainstream Programming Language (PowerPoint PPT) is in many ways an antidote to the recent Ruby hype. Tim calls for the use of stronger types to ensure program reliability. He praises the academically-developed Haskell functional programming language. He raises concurrency as a feature which must be tackled in the next big programming language, using a better model than the shared state with threads and mutual exclusion devices used by Java - and by Ruby - which haven’t changed since the 1960s.

As a major player in the computer games development world, Tim Sweeney has to be listened to with respect, but it is not surprising that he, rather than a proponent of Ruby, was asked to speak at the POPL (Principles of Programming Languages) conference in 2006. POPL is the premier conference for academic programming languages theoreticians: types, concurrency and programming languages like Haskell with a strong background in discrete mathematics are what these people are about. Tim Sweeney’s words are sweet music to their ears. Ruby, and the whole scripting language phenomenon is a slap in the face.

Ruby – The Sales Pitch

I confess, as an academic whose main research interest has been programming languages, to have been taken aback by the rise in scripting languages. We have been used to complaining that the programming languages we had developed were so much better than the mainstream programming languages, the only reasons they hadn’t taken off were that they weren’t developed and promoted by big companies, and that the inherent conservatism of industry restricted commercial programming to tried and trusted languages.

Yet a whole stream of new languages: Perl, PHP, Python and now Ruby, each initiated by one person as back-room projects, have been adopted for serious use and achieved many thousands of users. Unlike academically-derived languages, they have given the impression of being thrown together to meet a need without any strong underlying theoretical basis. This is, however, not entirely fair. Python was heavily influenced by the functional and object-oriented languages. Ruby claims to be purely object-oriented.

Clearly the rise of web programming has developed a niche for simple text manipulation languages, with Perl and PHP starting with few pretensions to be anything else. Python and Ruby, however, have been more ambitious. While originating in the scripting language niche, their supporters have proposed them as general purpose programming languages, claiming them to be more elegant and better suited for introducing programming to novices and for development of fairly large-scale programs than what has developed into the leading mainstream language, Java.

I had been meaning for some time to take some time to learn a scripting language seriously, both for practical purposes and to further my interest in programming languages. Putting me off was the fact that every time I had been convinced to start on one, another one making more claims came along. The latest of these, Ruby, seems to be promoted with some fairly outrageous claims. In the sales pitch for "Programming Ruby: The Pragmatic Programmer’s Guide" (the ’pickaxe’ book), it is described as ‘the finest and most useful language available today’, and this is mild compared to some of the hype. Yet there are people whose views I have respected in the past going for it. I have therefore bitten the bullet and taken some time to teach myself at least the basics of Ruby.

Not Elegant – Just ad hoc

I have a great aversion to hype, having seen a lot of it during my time as a computer scientist. As an undergraduate in the 1970s, I was exposed to the Prolog, taught it by its originators, and assured it was a revolutionary language, so much easier to use than conventional programming languages, almost like a human language to use, as it was based on human-derived logic rather than building a language to run a machine. Personally, I did appreciate Prolog, but it was a minority taste. It was a humbling experience, in my later years, having to teach it to a new generation of undergraduates, who almost all found it extremely difficult to use.

I have lived through the rise of Java, which at its birth was hailed with the sort of language now used to describe Ruby: claims that it would make the process of programming so much easier by eliminating many of the complexities of earlier languages, and by using a programming model so close to human thinking that programs written in it could be understood almost as if they were English. Java has not made teaching programming any easier. Get together any group of university Computer Science teachers, and the chances are you will find them moaning about how difficult it is to get many of their students to get to grips with even the simplest practical programming exercise. The recent blog explosion on the subject of Why can’t programmers program? indicates a problem we Computer Science academics have long known, and have covered up either by setting the pass barriers low or by using the excuse "well, these days there’s a lot more to Computer Science than just coding". Programming is a skill a few take to naturally, but many, despite the keenness for the technology shown by joining a Computer Science degree, struggle with and never master. The many attempts to introduce it in new ways, with different languages or different paradigms have only convinced me, since none of them have shown conspicuous success, that the programming language used is not the issue. I don’t accept the Ruby claim that throwing away types and their supporting syntax will make programming much easier to learn.

As Fred Brooks put it there is no silver bullet, "no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware". A telling point is that the first proposed "silver bullet" he mentions is the then widely touted language, Ada, whose impact proved rather limited. Claims that Ruby is such a different language from the others and so natural to use that it will magically increase productivity sound hollow when the same has been said about so many previous programming languages.

A major reason for Ada’s lack of impact was that it was developed just before the object-oriented revolution, and it was C++ which came to be the dominant mainstream language as a result of its pragmatic introduction of object-oriented features on top of C. Java cleaned up C++ by removing the low-level aspects inherited from C. It is often forgotten that Java also made automatic garbage collection mainstream, along with the insistence that an extensive code library provided with the language be considered an integral aspect of the language. These are now taken for granted in Ruby, and it is unlikely a new general purpose language would be introduced without them.

If I was put off Ruby by the hype, I was put off more by the many cutesy introductory tutorials I encountered when trying to get into it. Why’s (Poignant) Guide is a particular horrid example, but there are many others. Sorry, if I’m getting into a new language, I don’t want to be patronised in this way. I don’t want someone chatting away to me and telling me how "cool" it all is (I’ve lived long enough as a computer programmer to know it’ll never really be "cool" to be one). I just want the straight facts, plainly put. However, that’s just me, and if there weren’t plenty of others who disagree, the "Head First" books would never have sold so well.

Having ploughed through several tutorials, I did not find Ruby particularly "elegant", or its syntax particularly obvious. Much of it seemed ad hoc, thrown together, in particular when there were several different ways of doing something, and it seemed to be the philosophy of the language to provide all of them. I did not find its constructs as intuitive and natural as claimed, trying out simple coding examples proved as frustrating when things didn’t do what you’d suppose they’d do, as it has with other languages I’ve taught myself from tutorials.

I’ll give just a couple of examples. In Ruby, if a is [1,2,3] and b is [10,20,30], then a+b is [1,2,3,10,20,30]. Why not [11,22,33], which Tim Sweeney in an earlier article suggests "intuitively makes sense"? What does a[x,y] (when a is a two-dimensional array) mean in Ruby? Not what I first supposed it might mean from other languages (otherwise a[x][y]), or even what I then thought it might mean (otherwise a[x..y]).

Untrue To Type

The point about these relatively trivial examples (many more could be produced) is that what is obvious and intuitive to one person may not be to another. This has been brought home to my through my experiences of teaching novices to program in a variety of programming languages. It is surprising just how many ways a novice can build up which are different from the correct understanding of some language construct. I do not think Ruby has the answer to this; indeed in its rather rich variety of constructs it has plenty to mislead the novice. My take on some of its "clever" or "elegant" features is "how could I teach this to a bunch of first year undergraduates?". I know from experience, it would be painful.

More than this, the introductory tutorials to Ruby which I’ve seen make the time-old mistake of assuming that learning the language syntax is learning to program. In my experience, learning to program is much more about being able to see patterns and abstractions than it is mastering programming language syntax. Some people seem to have a natural ability for this, some don’t. Some never really grasp why a local variable in a procedure call does not have the same value as a variable of the same name in the code which called it; a great many never really grasp recursion. I do not see anything in Ruby which makes this sort of issue any easier. In fact I see aspects which would add to the confusion. The single optional block parameter to every Ruby method which many of its proponents seem to find particularly "elegant" (I see it as an ugly way of doing what is done more powerfully and elegantly in higher-order functions in the functional languages), would I think be a source of intense confusion to many novices.

Ruby’s dynamic typing is put forward as more elegance. I can take it or leave it. Yes, it gives a superficially cleaner appearance to code by cutting out all the syntax required to maintain static types, and required for compile-time checks to ensure that methods are only called on objects that can accept them. But who really uses a variable or argument without some idea of its type? I see types as useful language-supported comments, a guide to clear thinking. My advice to novices is always to start by writing a method’s header, with its argument and return types, that is the first step to understanding what it does. When I look at old code, the types are a good guide to start working it out. I’d hate to have to debug a large piece of typeless legacy code, that wouldn’t be "fun" no matter how much fun it was when its original author picked up Ruby and threw away types.

Ruby’s dynamic class modification also strikes me as something with the potential to produce hugely complex and non-understandable code. If I am tracking down the source of some buggy behaviour, I might start by looking for the class of the object whose method call led to the bug. The lack of types in Ruby would make that more difficult, but on top of that I have to face the possibility that the method may have been redefined somewhere else during code execution, maybe for the whole class, maybe for the individual object. There isn’t one class definition I can reliably say completely defines an object’s behaviour. There is a growing criticism of code inheritance in Java, with recommendations that we stick to interface inheritance and otherwise use composition and delegation for clearer and more reliable code. How very much worse this problem is with what can easily be done in Ruby. Sure, the ability to modify code dynamically can be valuable, but it should be done with caution and clearly flagged up. The casual nature by which it can be done in Ruby worries me - again, it may be "fun" now, but how about debugging code using it in a few years time?

When The Revolution Comes…

Still, as many people whose opinion I have found sound in the past have taken to Ruby, I have to concede it has something going for it. A big part of that is clearly Rails. I have deliberately avoided mentioning it in this article but, looking at it, it seems a useful tool which does a lot of the donkey-work of building web-based applications, and I can see the place of Ruby on Rails. I mentioned Tim Sweeney’s article at the start as a reminder that many of us are doing coding which is not primarily web-based, and our needs may differ. This needs to be noted in a world where many new programmers have grown up with the web, and tend to think of programming purely in terms of building web applications.

The other issue is the over-maturity of Java. As a simple language in which I first learnt to appreciate the object-oriented paradigm, Java was fun. It was also good, after years in which we seemed to be in bitter disagreement, to see both industry and academia converging on a programming language both could agree was useful - no more did I have to try and explain to students why I was teaching them to program in a language they never saw in the job ads.

However, these days when I look at the Java section in the bookshop, there is little I understand. There are huge numbers of add-on libraries, each of which has its justification but which have been developed on a learning curve and so haven’t got it quite right. Even the core APIs are bloated, since backwards compatibility means one cannot throw away one’s first solution to a problem once it has become an integral part of the language, even if developing and using it has led to a better solution. It seems to be inevitable that once a language becomes widely used as a general purpose language, it is pushed in directions it isn’t suited to, builds up unnecessary complexity through accretions, and the urge to throw it away and start again becomes stronger. A bit like any large software system which has served its time.

Despite what I’ve written above, I didn’t find Ruby horrible. If I needed to use a scripting language, it’s the one I would now use. It’s cleaner than Perl, and I like its syntax better than Python. Its object-based nature works for me: object-orientation is not the silver bullet, but it is a better abstraction for managing complexity and modelling things than anything else we have. It has picked up some useful aspects from functional programming as well and put them into a language whose ability to handle interaction between stateful objects makes it more practical than pure functional programming (still to me, real elegance, but of an infuriating kind). But it isn’t as revolutionary or as cool as its advocates suppose.

To me, the real revolution in programming languages will come when we have one which breaks away from the single-processor sequential computer. There is some truth in the claim that Ruby doesn’t really give us anything that wasn’t there long ago in Lisp and Smalltalk, but they weren’t bad languages.


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

Forum

  • What’s Wrong With Ruby?
    13 January 2011, by Give the hype a rest.

    Amen! I’ve coded for different platforms using different languages from Pascal on a Vax, C and C++ on sili g machines, Java and C#, and many in between including Perl, Python, and Ruby. Each is a tool in the developers toolbelt and has a place where it fits best. This whole A is better than B is nonsense is maddening. It’s not just languages either, tonight I listened to someone trying to argue that developing *nix style OS’s was better than on Microsoft’s Windows OS because Vim had a faster startup time than Visual Studio.

    Thank you for bringing back some sanity.

  • What’s Wrong With Ruby?
    22 October 2010, by Jonathan Turner

    Christ, stop *whining*.

    • What’s Wrong With Ruby?
      21 December 2010, by Matthew Huntbach

      No, I will not stop "whining". I would hope that any decent person would appreciate it when someone takes the time to look at a product and think critically about it and its hype, not being afraid to throw attention at dubious claims or point out potential problems.

      I haven’t read my article for a long time, but was prompted today by yet another stupid comment from someone who clearly missed the point completely. Even I, having remembered all the attacks, some of them personally abusive towards me, had come to believe I had written some over-the-top rant against Ruby, but when I read my article again I could see it was just the sort of fair and balanced coverage I’d like to see of any new product which was making waves in the market-place.

      What you call "whining" I call "making use of my critical abilities". Sure, I could stop doing that and just go along with every ad-man’s hype, or every wave of fashion, or even every politician’s stump speech, without ever seriously engaging the brain and asking "Is this really as good as they say it is?". Probably I would be a happier person if I did - I am increasingly coming to realise this world is made for morons and run by morons, and that not being one is a curse not a blessing.

      • What’s Wrong With Ruby?
        4 July 2011, by charliemagee

        I agree: your analysis reads as fair and balanced. An honest appraisal from someone with a lot of experience. I, for one, appreciate it.

        Perhaps you’ll answer a question. I’m a novice to programming. I want to write a web app because I’m interested in doing that, because I can’t afford to pay for programmers, because I want my app to see the light of day.

        I’ve been roaming the boards and websites for several weeks and I keep being drawn to Ruby on Rails. Your conclusion seemed to be a shrug: okay, web apps with RoR might be a good idea.

        Do you have any new thoughts about this? Suggestions?

        Thanks for the insightful analysis.

        Charlie Magee

    • What’s Wrong With Ruby?
      28 July 2011, by Brad

      Interesting analysis and very well written. Thank you. (This Johnathon Turner character is a moron.)

  • What’s Wrong With Ruby?
    10 October 2010, by A Frustrated old Programmer

    I have programmed in C++ a lot. There is a need for a much more flexible language like Ruby.

    We need programmers that write more generalised code. It is easier to write a specific solution for one problem. But then a similar situation comes and the second specific solution is written. Then you are locked in because no one wants to rewrite those specific solutions now they are being used.

    These are my goals for a good language, 1 Providing a single way of saying something. 2 Allow you to say what you are doing (not how). 3 Allow you to write your rules in a sufficiently abstract form so that can be written once and used in different context. 4 Never force you to repeat things because of lack of flexibility in the language. 5 Provide a natural, simple and intuitive way of saying things.

    I think Ruby falls down on 1, 3 (a little) and 5. In the end you shouldnt have to resort to reflection, or use proc block for event handlers. There appears to be far to much messiness there.

    Lastly threads shouldn’t be necessary in a modern language. We have known how to implement concurency without that kind of low level concept for a long time.

  • What’s Wrong With Ruby?
    16 August 2010, by Rusty Shackleford

    "Ruby’s dynamic class modification also strikes me as something with the potential to produce hugely complex and non-understandable code. If I am tracking down the source of some buggy behaviour, I might start by looking for the class of the object whose method call led to the bug. The lack of types in Ruby would make that more difficult, but on top of that I have to face the possibility that the method may have been redefined somewhere else during code execution, maybe for the whole class, maybe for the individual object."

    Lack of types in Ruby?

    Are you serious? CS Professor indeed!

    I doubt you could find a stronger type system then what Ruby has.

    Every object has a type and will never, ever be anything but that type.

    If you don’t understand the basics, how can you critique it?

    • What’s Wrong With Ruby?
      21 December 2010, by Matthew Huntbach

      Ruby has a dynamic typing system. That’s different from the strong static type system of Java, and also from the strong type system of modern functional language like Haskell. In particular, with static type systems variables have types. This is a distinct thing from objects having types.

      As I said, there are advantages and disadvantages to Ruby’s dynamic type system as opposed to the static type systems of some other languages.

      Instead of making yourself look stupid by issuing ignorant insults at me, why not look up "Type system" on wikipedia? You will see there a description of different type systems, static and dynamic. It is obvious from your comment that you don’t even know this stuff, let alone have any deeper sort of knowledge that would enable you to make a good critical judgment here.

      • What’s Wrong With Ruby?
        28 May 2011, by Rusty Shackleford.

        You are a moron since you are confusing static and strong.

        Dynamic and strong is the type system that Ruby uses. There is no casting or other type of coercion available in Ruby. It is true that an objects type is not set until runtime(dynamic) but it is still strongly-typed.

        Static and strong is the type system that Java uses.

        You don’t know that static and strong have nothing to do with each other? You could have a weak and static type system.

        It is obvious you don’t understand CS 100 concepts.

        Where did you get your Phd? A cracker-jack box?

        • What’s Wrong With Ruby?
          30 May 2011, by meagar

          Dial it back a notch Rusty, you’re embarrassing yourself.

          • What’s Wrong With Ruby?
            3 August 2011, by Steve

            How is he embarrassing himself?

            The OP is the one that is not understanding simple concepts.

  • What’s Wrong With Ruby?
    21 May 2010, by sj

    >> if a is [1,2,3] and b is [10,20,30], then a+b is [1,2,3,10,20,30]. Why not [11,22,33]

    >>

    because [man]+[woman] != [child]

    • What’s Wrong With Ruby?
      25 May 2010, by Matthew Huntbach

      I’m afraid that, like many other people who have responded similarly to this sentence in my article, you have completely missed the point.

      My real point was that the claim that some language feature is "intuitive" is not as strong as some might suppose. One of the arguments for Ruby is that all its features are intuitive. I was just picking out one feature where what some might think is the obvious intuitive meaning it should have is not what in other contexts others would say.

      It just happened that I was aware of a respected author writing that [1,2,3]+[10,20,30] is "intuitively" [11,22,33]. So I quoted that.

      Look, this is just standard use of logical argument. Finding a counter-example disproves the "for all" proposition. Is this really so hard to grasp for people who are computer programmers? I wasn’t expressing any personal commitment to + not being used as a symbol for list appending, just noting one case in one context where there was a claim that "intuitively" it should mean something else.

      So my real point was nothing at all to do with what + should mean, but rather to express caution about the idea that there is an "intuitive" meaning to some programming language construct, or some "intuitive" syntax which is the obvious way to express some concept. I made this point to counter what I saw as rather over-blown hype about Ruby which made a lot of use of this claim about certain constructs being "intuitive".

      I wasn’t even saying Ruby was a particularly bad language. All I was really doing in my article was expressing some scepticism about the hype it was receiving at the time.

      The ability to think in abstract terms is an important one, crucial to being a good programmer. Most people who have replied to this article over the years have demonstrated poor abstraction abilities by failing to understand the point I was making here, and so thereby also demonstrated they are probably poor programmers.

      It is a more general useful skill to be able to be sceptical of hype, and when one sees something new and fashionable being put forward as if it is the answer to everything to be able to look beyond current fashion and see potential problems. Being able to do this does not necessarily mean one is saying there is no good in that new and fashionable thing. I am not an employer, but if I were, I would definitely prefer to employ someone who is level-headed and can see arguments on both sides rather than someone who just jumps for the latest fashion, or who cannot take any criticism of something they personally like. I do not think a good employer would want to recruit the sort of people here whose only response to my article was to reply in abusive terms to me, while completely missing the real points I was making.

      • What’s Wrong With Ruby?
        19 December 2010, by beavis

        [1,2,3]+[10,20,30]

        The + is operating on arrays, not its contents. If you think [11,22,33] is intuitive you need help.

        Where did you get your PHD? A cracker jack box. There is no way you are a CS person.

        • What’s Wrong With Ruby?
          21 December 2010, by Matthew Huntbach

          I have just been marking my students’ end-of-term tests. One of the signs that a student will NEVER make it as a good programmer is an inability to understand the concept of an "example". You give this sort of student a coding problem, you give them an example which is more specific but quite trivial, to help them into it, but they just can’t generalise. They just can’t abstract out the particular data given in the example, turn it into a parameter, or see how it’s expressing a point in logic, and grasp what the real more general issue is.

          Please re-read my comment above. I am sorry you seem to lack the ability to understand it.

          • What’s Wrong With Ruby?
            28 May 2011, by Rusty Shackleford.

            I am sorry you lack the understanding about operating on an object.

            Take your theory to the next step and "abc"+"def" should equal "adbecf".

            See how stupid you are?

            • What’s Wrong With Ruby?
              14 December 2011, by Alpheus

              This inability to understand abstraction and example—and attacking the person who *does* understand it—is really beginning to irk me!

              Let’s take an example from Commutative Algebra. I’ll define a polynomial to be [a0, a1, a2, a3, ..., an], where the ai’s are from some field F, and n is the degree of the polynomial (that is, an != 0).

              Thus, [1, 2, 3] + [10, 11, 12] = [11, 12, 13].

              This sort of thing happens again, and again, and again, with vectors, matrices, and who knows what else!

              And yes, this *is* a real math example. If you’re going to complain otherwise, I would suggest that you get a PhD in math, with an emphasis in Commutative Algebra.

              Before you say "But we’re talking about computer languages!", I’ll simply counter with: Look at APL. This is *precisely* how addition of two arrays is defined. APL is highly influenced by Linear Algebra, after all, so it shouldn’t come as a surprise.

              As another example of how intuition can differ between two people: When someone first starts working with Hyperbolic Geometry, everything seems counter-intuitive. What can you expect, when we’ve been taught all our lives that two straight lines both parallel to a third straight line cannot intersect? After working with this new geometry, however, you begin to develop an intuition for it. If you were to *exclusively* devote your time to such a geometry, standard Euclidean geometry would become counter-intuitive!

              • What’s Wrong With Ruby?
                25 January 2012, by Rusty Shackleford

                Oh,great! Another idiot.

                An array is not a polynomial, nor is it a matrix or vector.

                If you need to use an array as one of those then you can override the + method.

                Arrays in programming exist to arrange data in memory is a certain way. That is it.

                What you use an array for is orthonormal to what an array actually is. To have the default for + in a general purpose language is pure idiocy.

                APL is a language specifically designed for mathematics so of course it would not use + concatenate arrays like any general purpose language. Using APL to try and claim Ruby is wrong is beyond retarded. yes, that is what you were doing in defending the OP’s assertion about the unintuitiveness about concatenating arrays with + method.

                You might have a PhD in math, but like Huntsbach you know exactly jack and shit about computer science.

                Before you make yourself look more stupid + is actually a method in Ruby,not an operator, as operator overloading is not allowed in Ruby.

                • What’s Wrong With Ruby?
                  1 February 2012, by Matthew Huntbach

                  Please note, Mr Shackleford, that my surname is "Huntbach" not "Huntsbach". If you are going to make a great play about accuracy, then please be accurate yourself.

                  I am sorry that nearly five years after I wrote this article you are still replying in such a vituperative manner and yet utterly missing the point.

                  Once again, I have no great commitment to what + should mean with arrays, I was just using it an an EXAMPLE of a more general concern about the idea that certain syntactical forms are "obvious". My brief when I wrote this article was just to look quickly at Ruby and see what I thought about it. At the time there was a huge amount of hype about it, as if it were something fundamentally different, a real revolution in programming. To be fair, its own author was modest about it, the hype seemed to be coming from a fan-club which had been attracted to it.

                  When I looked at Ruby I saw just another programming language. A neat enough programming language, but that’s all. I didn’t see it as anything dramatically easier to use than plenty of other languages nor did I see it as having any really great innovative features. But it was not a BAD language at all. On its type system, as I said in my article, you can take it or leave it. I think there are advantages to the sort of strong type system they have in Java, I even quite like Java generic typing. Others like the the "duck typing" of languages like Ruby. So I didn’t see Ruby’s type system as making it fundamentally a better language, as some were claiming. As it happens, a little experimental language I have been developing myself has duck typing, because the type system wasn’t something that interested me and it made it easier to do what did interest me by having the simplicity of duck typing. So I am certainly not a rigid opponent of the idea.

                  It just happened that at the time I wrote my article I had recently read, for reasons unconnected with my Ruby article, an article where a fairly throwaway comment said something about "obvious" behaviour of + with arrays which was different from how + works in Ruby. It seemed to me this was a good example to use of where what is "obvious" in one context is different from what is "obvious" in another. I didn’t give it more than a minute’s thought. I could probably have picked out plenty of other aspects of Ruby where the decision made on what syntax to use or what meaning to give to some symbol was perhaps rather arbitrary and a differently decision could have been made that to others would seem "intuitively" or "obviously" the right one. However, in this case I could actually quote someone else and someone whom I thought might be reasonably respected in the circles where I was writing (i.e. someone with a good practical record, not a fellow academic) as saying someting different about "obvious" from what is in Ruby.

                  If you happen to work in a domain where the main thing you use arrays for is to represent matrices or vectors then to you it might seem "obvious" that operators on arrays should work in a matrix or vector like way, just like to people working in other domains where arrays or array-like notation is primarily used to represent lists it seems "obvious" that an "addition" operator should mean "append". As it happens, I don’t myself work in a domain where I do a lot of matrix processing, so to myself the meaning "append" for + on lists IS the most obvious meaning. But I had just read an article where someone else expressed a different view, obviously that was someone who did a lot of vector or matrix work. So I quoted that person, as an example - an example of someone who thought differently, actually differently from me as well.

                  MOST new programming languages come out with the claim their syntax is intuitive. Who would produce a new programming language with a deliberately non-intuitive syntax? Over the years I’ve seen MANY examples of new programming languages coming out with great new claims about being so much easier to program with because they are so intuitive and close to the way humans think. I studied under Bob Kowalski, the great proponent of Prolog, and worked on logic programming in the 1980s when it was all the rage because it was supposed to be so easy to use because close to they way humans think, and the Japanese were so impressed by that that they invested huge amounts of money into their "Fifth Generation" with logic programming at its heart. Actually, Prolog is a pig of a language and in my experience most people who try to use it end up running away screaming at the incoprehensible way it behaves. The Fifth Generation project was a flop. The point being that what to Bob and a few other people who work in formal logic is obvious and intuitive is not to most people.

                  The real point I was making was that the claims of the Ruby fan club that their language was such a fundamental improvement on all other programming languages because it was so much more "intuitive" or "obvious" in its syntax and choice of symbols seemed to me to be naive and overblown. That’s all.

                  • What’s Wrong With Ruby?
                    6 February 2012, by Tired of retards

                    You think type erasure was a good idea?

                    No wonder you got slammed so hard.

                    So because you work in an area where it makes sense to use arrays as matrices then general purpose arrays should exist for that specific purpose.

                    What part of general purpose do you not understand?

                    • What’s Wrong With Ruby?
                      8 February 2012, by Matthew Huntbach

                      No, I don’t think type erasure’s a good thing. It’s a fix to get round the way generic typing was not in Java at the start, and it’s a mess. I would like Java’s generic typing better if it didn’t have type erasure.

                      As for the second bit, well, no, as I said, I don’t work in an area where I use arrays as matrices. You are still missing my point. I think I have made it as clear as I can, I am sorry you just cannot see it.

              • What’s Wrong With Ruby?
                25 January 2012, by Mike

                APL is a language used for a specific purpose: mathematics.

                Comparing that to a general purpose language is just plain dumb.

        • What’s Wrong With Ruby?
          11 March 2012, by dhamilton

          to someone used to operating with 3D line vectors, the [11,22,33] answer is perfectly ’intuitive’. To someone used to operating with strings, or lists-of-things generally, the other meaning, appending, is ’intuitive’ (but note both ways can be considered as operation on an array). In fact, neither are intuitive. It’s a convention, and which you accept depends on where you came from and what you did there. Why be abusive? If you think you’re ’defending’ your favourite language, you’re not, It doesn’t need defending, and you’re making yourself look uncharitable and inflexible. I would stick with [1,2,3].append([10,20,30]) because then it’s obvious what’s intended.

  • What’s Wrong With Ruby?
    7 February 2009, by Paul

    Thanks for the article, I am a rubyist, but only because I’m a web developer...

    the reason for the revolution is not the language itself, it’s because of the explosion of the internet, and Ruby is the new Java for this reason... developing web apps in Rails is clean, clear, and fun... getting from the object modelling stage to the working web app stage is very simple with Rails, not so in Java... Another factor helping Rails is the fact that it has consensus among a large community, which will only grow when it merges with it’s biggest competition - Merb, on the release of Rails 3... honestly, I think it will be ubiquitous in 5 years time, which is why I took the time to learn it...

    this is only going to grow as more and more companies will move their services online in the coming years, and as Rails and Ruby mature as frameworks and programming languages respectively... (just wait for Rails 3!!!)

    • What’s Wrong With Ruby?
      7 August 2010

      "developing web apps in Rails is clean, clear, and fun..."

      also its main reason why we can see a lot of slow and stupid rail app on web.

  • What’s Wrong With Ruby?
    1 January 2009, by Huang

    One thing I agree with you is that Ruby is just another programming language. However, I don’t agree with you at what you accuse dynamic language of lacking static language’s features. It sounds similar to me that C programmer accuse other languages of lacking pointers or C++ programmer accuse other OO languages of lacking multiple inheritance.

    Yes, we all know what are dynamic language’s pros and cons but we still love using dynamic languages like Ruby/Python/Groovy/Whatever.

    How often in your life that you have to write new large system like databases/operating systems? Nowadays programmers use any tools to help them to be productive. Dynamic language is just one of them.

  • What’s Wrong With Ruby?
    17 October 2008

    Few computer scientists master how to teach...

    • What’s Wrong With Ruby?
      28 May 2011, by Rusty Shackleford.

      Few CS professors understand programming...

      Well just this clown

  • What’s Wrong With Ruby?
    12 October 2008, by DocMerlin

    "...breaks from the single processor..."

    Oh, you mean Erlang?

    As to your other points, The simple truth as to why Ruby (and Perl ) is so awesome is because it does a lot of work for you, dynamic typing means a lot fewer bugs get made in small programs. I find the majority of bugs in my code in statically typed languages are type conversion bugs, and anything that does that work for me flawlessly and automatically, so my scripts get built in much less time is a good thing.

  • What’s Wrong With Ruby?
    18 March 2008

    # if a language was bad or useless it would receive no attention # on the other hand if it was half decent - then it should get some air time # when I went to QM, they were still teaching cobol, looks like things haven’t changed much # check out the major US colleges what are they teaching ? # it’s a pity that Matthew doesn’t like Ruby — it’s crying out for a decent academic textbook — another opportunity missed I guess

    class Array; def sum; inject( nil ) |sum,x| sum ? sum+x : x ; end; end

    • What’s Wrong With Ruby?
      27 March 2008, by Matthew Huntbach

      I am not sure when you went to QM - I am one of the longest serving members of academic staff in the Computer Science department at QM and we didn’t teach in Cobol when I joined the staff (in 1989), I suppose it’s just possible it came up in a comparative programming languages course, but I don’t recall it doing so. I don’t know what you mean at all - where in anything I wrote is something that could be interpreted as recommending Cobol? If anything, what I’m saying is that I’d like to see is a more revolutionary approach to programming languages than is offered by Ruby, which is the exact opposite of what you seem to be accusing me of.

      • What’s Wrong With Ruby?
        11 February 2010, by Michael J. Welch, Ph.D.

        I worked with a visual language called Prograph which was put together by Dr. Phil Cox and other academic types. It was interesting and had some revolutionary concepts, but piles of poorly commented nested graphs produced non-understandable code (at least to anyone other than the creator of the code). Some of the constructs (notably IF graphs) were difficult to work with, but overall, I thought the concept had some amazing possibilities, albeit after some further development. Regretfully, it didn’t catch on.

        Personally, I get the idea that [1,2,3]+[10,20,30] could be understood in more than one way, but that’s why we learn the language. Too much code is written today with the idea that the user can "figure it out" with almost no documentation. I’ve never seen any "self documenting" language. Self documentation is an urban myth. Thorough documentation is key to a useful product (and we have precious little of that today, IMHO, but that’s a whole other discussion).

        I agree that there is the appearance that academics could create a better language, but so far, they haven’t. Why? Personally, when I saw [1,2,3]+[10,20,30], I intuitively saw it as two lists being concatenated to get [1,2,3,10,20,30]. Why did I see it that way, and not a matrix addition? Probably because I come from a business background, not a mathematical background (I have a Ph.D. in Business Administration).

        I agree that the measure of the usefulness of a language is in how good a work you can produce with the smallest input. Why can I describe the contents of a report in 5 minutes, but it will take you 2 days to program it for me?

        I’ve been a programmer for 40 years. Why has the process of programming never been simplified, only complicated more? To make us programmers indispensable? Are we making nearly incomprehensible systems to protect our jobs? It’s time to look into building systems that minimize the input to produce complex results, like beautiful and functional web sites, and that’s exactly what Ruby and RoR was designed for. You can judge it academically, but in the end, it is what it is, as is every other programming product. My vote: thumbs up for Ruby and Ruby on Rails.

        By the way, Ruby was created by an academic, Yukihiro "Matz" Matsumoto. It was his intent to design an academically better language. Apparently, even academics don’t agree on what those requirements are.

  • What’s Wrong With Ruby?
    13 March 2008, by Rollie

    Contrary to a lot of the earlier comments, I found this article fair and that it raised some very good points. Ruby really is over-hyped. I don’t know why people don’t recognise the primitiveness of the "everything about this good," "you bad" fanboy attitude. Human nature I guess.

    That being said, Ruby is fast becoming my personal favourite language and the addition of Rails gives a huge productivity boost to website development. As clichéd as it is, time really is money. As importantly, a programmer who isn’t mired in writing repetitious and unrewarding support code is a happier, better motivated person who can react much faster and with less stalling of the creative process. That has real, if intangible value as well.

    There’s nothing wrong with calling for something new or something better. In the mean time, I’ll have fun with Ruby.

  • What’s Wrong With Ruby?
    31 January 2008, by André Cardoso

    Although I don’t use Ruby, and think that the characteristics of Dynamic Languages are valuable but not intrinsic (i.e, conciseness and interactivity don’t require a dynamic language, see F#/Scala), I disagree with your point about Head First books. IMHO, I think that’s the problem with academic articles and languages: even though they are superior, the approach, reasoning, tutorials, are so dry, dull and academic that the brain switches off.

    Academic teachers, researchers, theorists, should take a wider look into cognitive sciences (how and when the brain learns, the best conditions), the Head First series, Kathy Sierra, and learn a thing or two about presentation and learning. That is, if they want students to really learn and academic work/languages to reach a wider audience.

    • What’s Wrong With Ruby?
      1 February 2008, by Matthew Huntbach

      What do you mean you "disagree with my point about the Head First books"? Looking back at my article, the only point I made about them is that they sell well. Do you disagree with that? Or are you, like many people who have commented on this article, just jumping to a point out of prejudice because you assume all sorts of things from the little I have said about myself (I am still particularly amused by the person who supposed that I - an activist for the UK Liberal Democrat party in my spare time - was a supporter of the US Republican Party) I never said the Head First books were bad, or people shouldn’t buy them etc. They may not be to my personal style, neither was the "Poignant Guide", which annoyed me because I found its whimsiness got in the way of my understanding of the language rather than helped it. But that’s my taste, which I hope you would agree I have a right to, even though I am perfectly willing to accept that other people have different tastes and have a right to those tastes as well.

      • What’s Wrong With Ruby?
        4 February 2008, by André Cardoso

        First of all, I didn’t assume anything, much less jump to any point, or stated any political conotation. I really don’t care about politics or religion in programming languages. They’re just tools. I certainly didn’t make any political or religious comment, so I really don’t care.

        The point I disagree was : "...patronised in this way. I don’t want someone chatting away to me and telling me how "cool" it all is (I’ve lived long enough as a computer programmer to know it’ll never really be "cool" to be one). I just want the straight facts, plainly put. However, that’s just me, and if there weren’t plenty of others who disagree, the "Head First" books would never have sold so well."

        The point I was trying to make is that computer scientist academics should learn a thing or two about Head First series. They are not patronising books, and it’s not fluff, or not "only the facts". It’s presenting things in a compelling way for the brain. As for personal taste, I prefer the Head First style over dry and dull academic books. With this, I’m not saying that you are boring or your lectures are dull. I live in Portugal, so I don’t know it. It’s my personal opinion and personal taste from academic lectures, books and articles (again, I’m not including you or your articles, because I only read this article from you), but I have to disagree with your opinion on Head First series and "just the facts" approach to learning.

        I too am entitled to my opinion and taste, and expressing my opinion and disagreement with yours...

  • Matthew Huntbach is a Total Clown
    22 December 2007, by fred

    Matthew Huntbach is a total Clown..

    a dude that teaches at some university and think the knows what a language should be like....

    does he have any contribution to the actual languages we all use now a days? I guess not. prove me wrong.

    he can’t do anything but just talk.

    • Matthew Huntbach is a Total Clown
      15 June 2008

      Come on... That is unfair. He has made valid points which you as an obvious Ruby adventist should take time to consider. Particularly his point on what Ruby offers that LISP does not.

      • Matthew Huntbach is a Total Clown
        4 August 2011, by Steve

        What valid point? That arrays are vectors or matrices? How is that valid? That he thinks Ruby is not strongly typed? How is that valid? That he doesn’t like _why’s book(valid) but somehow thinks that related to the language and community? How is that valid?

        There are several strong criticisms of Ruby, but he didn’t mention one. He certainly beat up on a lot of strawmen though.

        tl;dr: educated criticism good uneducated criticism bad.

  • What’s Wrong With Ruby?
    22 December 2007, by fred

    Matthew Huntbach is a teacher.... not a programmer.

    Work and make use of the language, then talk about...

    You teach cause you can’t make money from doing what you teach it.

    I feel sorry for you buddy...

  • What’s Wrong With Ruby?
    8 December 2007, by uberto

    I agree with you about Ruby being "just another fine language", all in all I still prefer Python as syntax and elegance. But the thingy called "Duck typing" is really a new way to look at OOP, and even if it’s not really Ruby-related, it was born in Ruby community (AFAIK) and it’s definitely a Ruby idiom.

  • What’s Wrong With Ruby?
    19 September 2007, by Ken

    I just don’t understand why he has to build Rails on Ruby. I would have preferred Rails on Java or Rails on C++, why Ruby, don’t we have enough languages already, none has made life any simpler, at least for me.

    I believe there are two schools of programmers, those who love highly logical, strict, structured approach to programming, and those who just love to get things working asap—who cares about extensibility, flexibility, scalability, reliability and all that crap. The latter group is the people "who never really got it." These guys never really worked in a huge, complex, mission-critical, million-line concurrent distributed application (a soft-switch for example), and never truly understand the importance of properly structured code, which means the difference between a development team of 12 and a team of 120. These people think that writing 1 line of Perl or PHP code that looks like line noise is cool (it’s cool only right after you write it, not when you come back a year later, and I *used to be* fluent at Perl, I don’t want to touch it any more).

    I believe Java has nailed the functional programming paradigm, and no, eliminating types is not cool, only cool when it’s a short script running in the browser, hence javascript. Every large application needs strong types and strict structures. The revolution only comes with a new paradigm, a new way to state the problem and let the computer figure it out. I’m tired of telling these machines what to do, like traversing the list and all. Let them figure out that in order to find it it needs to traverse the list, "you still don’t know that? you stinking pile of metal."

    I came from Pascal, C, 8086 assembly language, C++, Java, some Prolog, learned Scheme at UCB (now that’s Computer Science), picked up Javascript, Perl, PHP, did some stuff in VBA, not to mentioned these shell scripting languages. I become sick of it all, SICK, SICK. I did some Rails tutorial, sure that was quick to develop a web app, but where to go after that, it was nauseating to start going through the Ruby documentation. Every documentation should follow the javadoc format by the way, I never even had to adjust the size of the doc frames! And wait I forgot, I just picked up ActionScript out of necessity. ActionScript 3 support strict types, for a reason I suppose.

    • What’s Wrong With Ruby?
      11 February 2010, by Michael J. Welch, Ph.D.

      You’re not alone. Some PHP enthusiasts felt the same way, and built a Rails-like product for PHP called CakePHP. See http://cakephp.org/

      Personally, I prefer object oriented Ruby over the procedural PHP language. Also, Cake is not as well developed as Rails.

      Nevertheless, as Paul Simon said in one of his songs, "a man hears what he wants to hear, and disregards the rest."

    • What’s Wrong With Ruby?
      16 August 2010, by Rusty Shackleford

      Creating Rails in Java or PHP would be ridiculously difficult.

      Rails was written in Ruby because it is the best language for Rails.

      PHP and Java have no real metaprogramming features built in.

      Python has very little.

      Look at the pretty decent ActiveObjects library for Java, it tries to be ActiveRecord, but requires a lot more work for the developer. That is because Java has nothing in the way of dynamical programming support.

      PHP is such a terribly designed language it isn’t worth talking about.

      Java is way too rigid, no anonymous functions(inner classes is a kludgy hack that pales to anonymous functions), and no closures. Its exception handling system is the main thing getting in the way of a decent closure implementation for Java.

      The only other languages that could have been used for Rails are the Lisp variants. Where else can you call methods that do not yet exist?

      Are you sure you understand what functional programming is, because Java has ZERO support for it. It is a good laugh though. You should make that claim to Haskell programmers.

      Are you also aware that Ruby is more strongly typed then Java is? It is true that Ruby references have no type, but an object in Ruby can never, ever be changed. Not even to a subtype like you can in Java. I suspect you do not understand type systems. ie. The argument is dynamically typed vs strongly typed. You are obviously confusing weak typing with dynamic typing, something even a CS freshman should understand.

      Why should Ruby copy Javadocs when Ruby is older than Java? I suspect your claim of knowledge of languages is a lie because all you are doing is asking "why isn’t Ruby like Java"?

      Ruby is much closer to the original idea of OO and Java is about as far away from true OO as you can be and still claim to be OO. Hint: OO is about messaging.

    • What’s Wrong With Ruby?
      28 November 2010, by Rusty Shackleford

      Me thinks you don’t understand functional programming if you think Java "nailed it".

      Most Java programmers abuse static typing and use it in lieu of testing. Furthermore, nearly every, if not every, Java EE framework goes out of its way to work around Java’s insane typing system.

      If it was so good, all the frameworks used in these big projects wouldn’t run from static typing.

    • What’s Wrong With Ruby?
      28 November 2010, by Rusty Shackleford

      Why should Ruby have to follow Java when Ruby is older than Java?

      • What’s Wrong With Ruby?
        5 August 2011, by gerryk

        You do your argument no favours when you make statements that are clearly demonstrable as garbage.

  • What’s Wrong With Ruby?
    10 August 2007, by Rick O’Shay

    I am happy to report that this computer programmer agrees entirely with your observations and I suspect everybody who actually grasps the craft (as distinguished from those who just claim to) will also agree. I purchased a book on Ruby and was immediately disappointed. It was obvious there was nothing Earth shattering about the language itself. It was nice to see a typeless scripting language with a strong OO flavor, but the supposed "power" was clearly the domain-specific gems and the Rails framework. In terms of a general purpose programming language, Ruby is no less disastrous than [insert favorite scripting language here]. The author of the book babbled on endlessly about the virtues of Ruby without presenting any evidence other than his LOC argument. He bashed Java without providing a particle of evidence or logic to support his complaints.

    Most web applications are a few pages and ROR is a great tool in that regard. Any idiot (literally) can jump in to ROR and start hacking out a horrible application. It’s the best of breed in the Quick ’n Dirty camp. Having said that, it’s also an excellent tool for generating high quality applications in the hands of skilled developers. ROR is a necessary and excellent tool. That it’s being hyped in a child-like manner by an army of nitwits doesn’t detract from that. Just remember, it’s a DOMAIN-SPECIFIC framework with an OO scripting language and NOT useful for general purpose programming. ROR is great for putting a thin veneer on a robust back-end with services written in Java and exposed as REST services.

  • What’s Wrong With Ruby?
    3 August 2007, by awidarto

    A twitch in the brain :) I’m not a Ruby fan, not because I don’t like it, but just because I haven’t try it. I do programming for a living, not a Computer Scientist ( degree in Business Management, cos life is easier in social science faculty ), I was self taught on programming since I was in primary school and that was 20+ years ago. And what all that make me ? a language agnostic that is. I always wonder why is a language can be considered good and "natural" ? is it because it looks like English ? Take a look around, major portion of programmers around the world, including me, don’t speak English as their native language. Practically no programming language is "natural" for them. even Ruby’s creator, Matz, is Japanese. It’s just another language, nothing more, the difference will be whether the language can pay the bill or not. I’ve learnt and use many programming languages, C, C++, Python, PHP, Java, and maybe Ruby later. I also occasionally learn Haskell and Erlang, and I really appreciate the concept and theories behind it, although I never saw any good use of them in my real life. Just consider programming is art, not pure science, where the quality of craft, and the process of creation more matters than the quality of the tools. I always started a project using a language, then end it with arrangement of different modules written in different languages. I think there’s nothing wrong with a language having a horde of "groovy and humourous" followers, every programming language has that. And I don’t think that makes the whole stuff bad either, it’s just eye candy to attract more users and adopters of the language, don’t like it, skip it, go straight to the hot core if you want. Maybe it’s just me, but getting used to something and whining about something else because it didn’t behave like the one we’ve gotten used to, is just plain weird. IMHO

    • What’s Wrong With Ruby?
      6 August 2007, by Matthew Huntbach

      Like most of the people who have replied to my article, you seem to have assumed I was saying Ruby was a particularly bad language. I wasn’t, I was actually saying that it’s just another language. I looked at Ruby after reading the hype which suggested that Ruby was somehow hugely superior to other programming languages, a major innovation which would make programming so much easier, but I couldn’t find much which supported that.

      Like most other commentators, you’ve also made far too much out of one small paragraph, which I didn’t mean too seriously, about my not particularly liking cutesy introductions to programming languages.

      I disagree with your comment that all programming languages are much more unnatural for people who are not native English speakers than they are for those for whom English is a first language. Programming simply isn’t like using natural language, maybe the idea that large numbers of English keywords made it so was believeable when Cobol was first developed, but surely no-one can think that way seriously now. Anyone who has programmed for any length of time thinks of the keywords as just symbols, not pieces of English. If it was a big issue, it would be trivial to introduce a new programming language just by changing the keywords of an existing programming language to words form another human language, but as there has been little demand for such a thing, I guess it can’t be a big issue.

      Like many other posters here, you accuse me of "whining" or similar, yet fail to understand the point I was making. As Ruby makes the claim that the way it does things is so much more simple and natural than other languages, it’s a counter-argument to find an example which suggets its choice is just as arbitrary as other languages. Again, what I am arguing here is not that Ruby is particularly bad, rather that it’s just another programming language.

  • What’s Wrong With Ruby?
    29 May 2007

    I think the big issue is. Do we need another scripting/programming language. What does it set out to do? Are we reinventing wheels do while [] if then ifthenelse ifelse end begin [ ] [] a+b object.method var.message etc Is the framework where its at? Should we develop Lego sets? Are we making significant progress? Should we be empowering end users to do our job?

  • What’s Wrong With Ruby?
    31 March 2007, by Brian

    After reading this I now know another reason why the number of cs grads drop consecutively every year... What’s wrong with trying to make a programming language look cool and fun as opposed to using the conventional dry textbook approach? This is what’s wrong with your generation of software engineers and why in general the interest in computer science has dropped.

    If you don’t like the way people like Why present Ruby, then stop reading it and stick with traditional printed reference manuals; there are many good ones. Or even better, stop bitching and write your own articles on Ruby and and start posting them to prominent sites.

    • What’s Wrong With Ruby?
      14 April 2007, by Stephan Eggermont

      ’What’s wrong with trying to make a programming language look cool and fun as opposed to using the conventional dry textbook approach?’

      Nothing. Ruby is just failing at it. Smalltalk makes Ruby look dumb and boring and complex, just like Seaside does with Rails.

      Unneeded complexity is evil.

  • What’s Wrong With Ruby?
    28 March 2007

    Why all the fuzz?

    Try the thing out by yourself, if you don’t like it, don’t use it. Simple as is.

    Unfortunately, the article started a big flame war, lots of heat, almost no light. That’s sad...

  • What’s Wrong With Ruby?
    25 March 2007, by Brian

    Here’s the disconnect: Very few top notch computer scientists can code themselves out of a hole. They are academics whose environment is so bound and artificial they have lost touch with the reality of the craft. Is like expecting somebody that can teach ballistics to be an expert marksman. Some of the best programmers I know came from completely non-CS environments, sometimes CS seems to be a "tainting" force in the upbringing of a programmer.

    I am a computer scientist but I was first a programmer (since age 9) and been getting paid to solve problems since age 15. That’s some 20+ years ago. Today I’m solving problems for my clients faster and more efficiently than I used to do with Java or Pascal or Lisp or C/C++. He’s an academic and that’s that, he’s not gonna get it. Many of the most successful languages have the most flaws when looked from the point of view of language theory. The great thing about such languages is that sometimes these flaws tend to match our flaws as humans. I like Ruby but yes it has it flaws. They just happen to be flaws that I can live with.

    No disrespect to the author but you really have to get a job programming for a living, dealing with short iterations cycles and showing value to paying and demanding customers before you can judge a language or the "hype" behind it. (Yeah I’m making a big assumption that this guy doesn’t code for a living but I’m pretty sure most readers will arrive at the same conclusion)

    • What’s Wrong With Ruby?
      24 February 2012, by vRRkGkoyKKoR

      TIOBE Programming Community Index for November is just out and isetrentingly , TIOBE will be announcing the Language of the year next month . News Read the original post on DZone

  • Polymorphism
    25 March 2007, by John Nowak

    I am no fan of Ruby. Like the author, I find it rather ad hoc.

    However, he’s missing the point in a lot of areas. Just to take one, he seems to think that duck typing’s sole benefit is to eliminate the need to specify types. What he doesn’t seem to realize is that this is merely a side-effect.

    The real benefit is run-time polymorphism. Try explaining to CS101 student that "an object will respond to a method invocation if it has a method with that name". With some work, you’ll probably manage. Then try explaining Haskell’s type classes, compile-time polymorphism and its generated code, union types, intersection types, type-inference, the reasons for homogeneous data structures, etc... it suddenly becomes a lot more to handle conceptually.

    • Polymorphism
      11 February 2010, by Michael J. Welch, Ph.D.

      I agree completely. I think you described my attempts to teach community college students succinctly.

      I once hired a graduate of DeVry Institute who had received a B.S. in C.S. As his first assignment, I asked him to build a module to update a customer record in a DB. He was having troubles after a day of looking at it, so I explained that all he had to do is retrieve the record, allow the user to make changes, and store the record back. His question to me was, "Why would anybody want to do that?" DeVry probably only taught him game programming.

      My personal belief is that a few people are just born with what it takes to understand recursion, poly-morphism, Haskell’s type classes, et.al. Trying to explain all that to those who were not born for it is an exercise in futility.

      For the foreseeable future, I imagine that no one will be able to invent the perfect language/tool any more than Einstein was able to find the Grand Theory of Everything, although both may be possible someday in the future.

      When the perfect language does come along, it will probably be ignored, and die an ignominious death.

  • What’s Wrong With Ruby?
    22 March 2007, by Marvin

    I’m a first year computer science student. Your article is very interesting. I’m learning to program with Python. I really like this language, especially the indentation rule that force the programmer to write clean code. Moreover I fully agree with Python philosophy (Explicit is better than implicit, Readability counts, There should be one— and preferably only one —obvious way to do it, etc.) Learning Python is a joy and I think every beginner should start with Python. I was greatly tempted to learn Ruby for using the Rails web-framework but nowdays there are good web frameworks also in the Python world (Django, Turbogears, etc.) so my interest in Ruby is feeble. What do you think about Python? What other programming language should I learn for modern web development?

    • What’s Wrong With Ruby?
      21 June 2008, by Rip

      I would start out by checking out some other languages other than Python myself...It seems like you are hoping to stick with what you know but any good developer knows that learning other languages can greatly improve the way that you think about certan design patters and code structures. For example C/C++ makes you think about garbage collection and data types or Java makes you think about class reusability, actionscript makes you think about event communication and end-user platform performance etc etc etc....When you start any programming after looking at these languages you will start to think about the bigger picture as you program, thus eliminating any of those (damn, what now) moments! Good luck and happy programming!

    • What’s Wrong With Ruby?
      4 August 2011, by Steve

      Python forces well-formatted code, but at a high cost, not clean code. I have seen Python code worse than the nastiest Perl code ever written.

      The biggest tradeoff is that multiline lambdas are impossible in Python and that hurts the language in significant ways.

      Another is if the formatting of the file gets messed up or stripped, you are in a world of hurt because there are no other hints about what scope a line of code is in. I have seen it happen with large python files being moved around on different platforms.

      The last is that is makes it annoying to be able to throw in a simple test print easily, although whether or not this is a good idea is debatable.

      Everyone uses whitespace to format their code to make it readable, in every language. Forcing it is redundant, it adds no value to the language(it would be formatted the same way if Python didn’t make whitespace significant) and hurts the power and expressiveness of Python.

      Beginners should start with either Scheme or C, depending on whether or not you think learning concepts or learning how software interacts with hardware is more important.

  • What’s Wrong With Ruby?
    21 March 2007, by Gregg Irwin

    "It is often forgotten that Java also made automatic garbage collection mainstream..."

    I think VB actually beat it to the punch. Other langs did it before, and you could argue that other MS BASICs were mainstream, but it would be hard to say that VB wasn’t (or isn’t).

    As far as the rest of the article, and the comments I’ve skimmed...the author says right up front that he’s an academic, and this is his opinion. Not everybody will find every language intuitive, so I don’t see the problem with him saying that he doesn’t find Ruby elegant or intuitive.

    We can throw stones between trenches and ivory towers, but in all reality, we need both. If it weren’t for the academics, our "pragmatic" tools and languages would probably not exist; and if they did, they would perform terribly, be unstable, and leak memory like sieves. Conversely, how much money is being made, and how much work—outside the field of computer science—is being done with academic languages? Not much. Some of it vital, but still not much, comparatively speaking.

    Where do I fall? Somewhere in between. What do I use? It doesn’t really matter.

    It’s great if we can enjoy ourselves doing this work, but that’s not nearly as important as producing software that reliably does *what* is needed, *when* it’s needed.

  • What’s Wrong With Ruby? Try Rebol!
    21 March 2007, by Oldes

    "[Ruby] claims that it would make the process of programming so much easier by eliminating many of the complexities of earlier languages, and by using a programming model so close to human thinking that programs written in it could be understood almost as if they were English." - If someone agree with this sentence, take a look at Rebol scripting language, which I consider much more innovative than Ruby and really useful for every day scripting usage.

    • What’s Wrong With Ruby? Try Rebol!
      21 March 2007, by Huw Collingbourne

      I took a look at Rebol a while ago and I thought it looked very interesting. Any thoughts on why it has failed to make a bigger impression?

      • What’s Wrong With Ruby? Try Rebol!
        22 March 2007

        That it’s not open-source is probably the main reason. It’s justifiably promoted as a net-friendly language, but try and find web-hosts that openly support it and you’ll probably come up with less than 5.

        • What’s Wrong With Ruby? Try Rebol!
          18 November 2010

          Simple, you have to be online to use it; Therefore, no thank you.

  • What’s Wrong With Ruby?
    20 March 2007, by protoscript

    *yawn*

    The problem with this article is that "Ruby" doesn’t claim to be one of the best programming languages for teaching programming 101. It does, however, claim to be one of the most fun programming languages for writing certain types of applications.

    The article was an attack on a red-colored straw man.

    • What’s Wrong With Ruby?
      23 March 2007

      Great! Next time I want to convince a group of stakeholders that an application should be developed using Ruby I will tell them "Because Ruby is fun".

      Wonderful

      • What’s Wrong With Ruby?
        11 April 2007, by RubyPanther

        You may be interested to know that we are actually doing just that, and Ruby is growing very fast in response

  • What’s Wrong With Ruby? This comment thread
    20 March 2007, by pantagruel

    Actually the article wasn’t enough to convince me one way or another about Ruby, I had already decided to avoid it because I felt it didn’t solve any particular problem for me I couldn’t solve adequately with my other languages but i thought the new analysis would be interesting. That said while the article didn’t convince me to try or not to try Ruby this comment thread did, and I’ll continue avoiding Ruby.

  • What’s Wrong With Ruby?
    20 March 2007, by Zorbid

    If I was put off Ruby by the hype, I was put off more by the many cutesy introductory tutorials I encountered when trying to get into it. Why’s (Poignant) Guide is a particular horrid example, but there are many others. Sorry, if I’m getting into a new language, I don’t want to be patronised in this way. I don’t want someone chatting away to me and telling me how "cool" it all is (I’ve lived long enough as a computer programmer to know it’ll never really be "cool" to be one). I just want the straight facts, plainly put. However, that’s just me, and if there weren’t plenty of others who disagree, the "Head First" books would never have sold so well.

    If this wasn’t a big troll, I don’t know what it was.

    It’s not criticism against Ruby as a language, but against the community and culture that surrounds it, and especially the tutorial writers. Ad hominem answers should be expected. especially since the point isn’t exactly fair: there are also serious, straight to the facts introductions to Ruby.

    Stop whining, dudes, the backslash was well deserved.

  • What’s Wrong With Ruby?
    20 March 2007

    Never mind the article, the real problem with Ruby is the community. WTF is wrong with you people?

    Decent article with some debatable points and the fanboys are frothing at the mouth.

  • What’s Wrong With Ruby?
    19 March 2007

    I thoroughly enjoyed the article. Well-written and thought out.

    I am unsuprised by the comments. They reflect the growing community of immature "developers" who can’t think their way out of a paper bag and are unable to sustain concentration long enough to read a piece such as this. Are these the type of people you want developing mission-critical code? Ad hominem attacks are the best they can manage through ADD-addled brains.

  • What’s Wrong With Ruby?
    18 March 2007, by Goyox86

    I have a friend,with a little afirmation about the current mainstream language, Java:

    "Java and C++ make you think that the new ideas are like the old ones. Java is the most distressing thing to hit computing since MS-DOS."

    Alan Kay Source: OOPSLA 97[2]

    Have you ever played around smalltalk??

    For me there is no more intuitive language than it, tuby follows the smalltalk principles.

    Ah..., The problem is about our perspective.

    Have you ever read the article below??

    • What’s Wrong With Ruby?
      18 March 2007, by Huw Collingbourne

      Regarding "Design Principles Of Smalltalk", the one crucial feature which Smalltalk implements but Ruby doesn’t is data hiding or, as it says in the Design Principles article:

      Modularity: No component in a complex system should depend on the internal details of any other component.

      Ruby permits the modification of an object (instance variables, methods and more) "from the outside of that object" without sending messages to be handled by methods (as in Smalltalk). This is very useful for some ’dynamic’ programming activities but, as a consequence, it compromises Ruby’s modularity (encapsulation) to a significant degree.

      • What’s Wrong With Ruby?
        22 March 2007, by David Koontz

        Actually you cannot get at the internals of a ruby object without going through a method. The attr_accessor/reader/writer methods generate your getters and setters which by default just pass through to the instance variable but you are free to override that. You can, if you’re looking for pain and scorn by fellow Rubyists, directly request an instance variable from a class using send. This is not something I’ve ever seen done outside of a mixin library or a unit test. I would point out that you can do the same thing using reflection in Java, albeit not quite so easily.

        • What’s Wrong With Ruby?
          22 March 2007, by Huw Collingbourne

          You can access the internals of a Ruby object in various ways, not only using specific methods designed for that purpose but also by using the modified values of input parameters (much as people use byref /var parameters in C/Pascal etc.) which can access values when the sender is modified, thereby building in a dependency on a method’s implementation.

          • What’s Wrong With Ruby?
            31 March 2007, by Piers Cawley

            If I’m understanding you correctly, you can do exactly the same in Smalltalk Huw. Isn’t that what the ’collecting parameter’ pattern is all about? Methods like

            ArbitraryObject << printOn: aStream
             aStream nextPutAll: 'some stringification of self'

            which modifies the state of a passed in stream.

            I was about to say that in both Ruby and Smalltalk, you can’t get at the sending object if it doesn’t pass itself as a parameter but, on further inspection of my local Squeak image, I find thisContext, which is the MethodContext in which the current method is being evaluated. And a MethodContext responds to the #sender method, which returns the calling context, which knows which object the method was sent from...

            Hijinks ensue.

            Of course, those hijinks are generally useful.

            I dunno if you can get at the same information in Ruby. You certainly can’t do it as directly as you can in Smalltalk.

  • What’s Wrong With Ruby?
    18 March 2007, by dominiek

    After all those years of being a respected academic you didn’t learn a very important lesson that we young stupid practical programmers did:

    Software development is about interacting with humans and is all about creativity and making mistakes.

    • What’s Wrong With Ruby?
      2 April 2007

      You’re attitude sickens me. "Software development is about interacting with humans and is all about creativity and making mistakes" Go write some NASA software. Get creative. Make some mistakes. I dare you.

      That is the problem with the community of developers who skip everything and go straight into web programming by learning PHP, Ruby, etc. Every word you say aligns with the bullshit that is "Web 2.0" and you should realize that everything you use in built on top of the effort of many people before you. Educate yourself and respect what everything you use is built upon.

      • What’s Wrong With Ruby?
        5 August 2007, by Not a bitter programmer

        Why are so many programmers so bitter? You sound so angry. I enjoyed the article, and thought it had a lot of good points. I think that Ruby looks like a good scripting language, and like the author, I think it will be my choice for scripting. I will not use it to write code for NASA — I promise!

  • What’s Wrong With Ruby?
    17 March 2007, by Buu Nguyen

    "Ruby’s dynamic class modification also strikes me as something with the potential to produce hugely complex and non-understandable code... There isn’t one class definition I can reliably say completely defines an object’s behaviour"

    First, even in Java or .NET, you do not always find a class completely defining an object’s behavior in any well OO design. Ever heard of Single Responsibility principle, and separation of concern? How about AOP? Second, open class feature is huge strength of Ruby (ever knowing .NET 3.5 is trying to achieve the similar thing with extension method?), and if you do not happen to appreciate that, pick another language that is more suitable for your need.

    Buu Nguyen.

    • What’s Wrong With Ruby?
      11 February 2010, by Michael J. Welch, Ph.D.

      I would suggest here that every programming language has "the potential to produce hugely complex and non-understandable code."

      Also, I’ve been a programmer for over 40 years, and I assure you, I’ve used languages most of the commenters on this list have never heard of. I never saw one that couldn’t use some improvement to the documentation.

      It is the skill of the programmer who uses the language who produces the really outstanding code.

  • What’s Wrong With Ruby?
    17 March 2007

    and a KOWARD! you fascist! it’s pricks like you who deligitimize the field of programming and suck the joy out of everything!

    • What’s Wrong With Ruby?
      19 March 2007

      Be nice! What drew many of us to Ruby was its community. If you cannot take criticism of "your" language, it is a clear sign that you need to learn a few more. You are not the language you program in. There is no one perfect language you can learn and cling to. Deal with it.

    • What’s Wrong With Ruby?
      22 March 2007, by David Koontz

      Good god would these morons please go away and leave the real Rubists alone, you’re defaming our "friendly" reputation with your inane attacks. Put up some facts or shut up.

  • What’s Wrong With Ruby?
    17 March 2007, by SeanJA

    What about the java way of printing things to the screen

    System.out.println("This"+that);

    That concatination makes sense but

    [1,2,3]+[10,11,12]

    doesn’t?

    • What’s Wrong With Ruby?
      20 March 2007

      To a mathematician, it wouldn’t make sense. mostly because it looks like you’re trying to add two sets. However, I believe this is a really picky point the author of this article has pointed out. The problem here is that (like so many other languages in the dynamic sphere) + is not just a math operator, but a concatenation operator. Either method would have made sense to implement. Adding the elements from array A to array B seems to me an operation one would do more often.

  • What’s Wrong With Ruby?
    17 March 2007, by d. day

    Not a bad attempt at trying to deflate the hype (although Rails is a juicier target for this sort of polemic). Many people are missing the final point: it is not the golden hammer but this is better than anything else out there today. I would accept that criticism any day.

  • What’s Wrong With Ruby?
    17 March 2007, by Jake

    The clever and elegant features are clever and elegant because of the slight-of-hand that looks like magic to those who don’t know what is happening. I was never very good at math and when first learning algebra and when I watched other people solve problems they would often skip steps that they could do in their heads. They would do one or two steps, and then ’magically’ arrive at the answer. Later, I learned to take those steps in my mind and after that having each step explicitly written on the page was just clutter. Would you write each little step of an algebra problem in a real world situation? Now that I understand algebra, I would use a calculator. Ruby may be a more complicated language to learn than something like Java, but the complexity of the language allows for more flexibility which ultimately allows for less complex programs. A good example of this is with creating domain specific languages. In many ways Rails leverages Ruby to give developers a clear domain specific language for developing web apps, which is one of the reasons that I think it has become so popular.

    You ask "how could I teach this to a bunch of first year undergraduates?" The answer is that you explain what is going on. What are the steps that they can’t see. I have found that most often the problem is not that undergraduates cannot grasp the underlying concepts, it is that the professors don’t know how to teach them. I had to take a 100 level cse class for a credit requirement. I taught myself programming and already understood and had been using everything presented in class already. However, the professor confused me and I already knew what he was talking about! After class (I don’t know why I continued to actually attend class) I would have to explain the material to my classmates and then they got it just fine. It wasn’t that they couldn’t understand, they just couldn’t understand the professor.

    You can make a mess with Ruby if you regularly abuse the flexibility it gives you. I definitely agree with you that learning syntax is not learning to program. But there is more to Ruby than syntax. Since learning Ruby I have started to realize the value of learning a variety of languages, because I have found that the way that the language is written encourages me to think differently about how my program is structured, or encourages me to think of a different way of doing things than I would in a language like Java. I heard a quote recently that went something like this: "You can write a FORTRAN program in any language". Ruby takes features from several different languages, which I have been trying to understand and use so that I am not just writing the same old thing in a new language. One of those ways Ruby has stretched my thinking is with blocks.

    "The single optional block parameter to every Ruby method which many of its proponents seem to find particularly ’elegant’ (I see it as an ugly way of doing what is done more powerfully and elegantly in higher-order functions in the functional languages), would I think be a source of intense confusion to many novices."

    When I first started using Ruby I had trouble understanding blocks, but now that I have used them for a while, I wouldn’t want to go back to a language without them. I would like to see actual examples of other ways of doing things if they really are more elegant and powerful.

    The examples of adding the elements of the arrays with the array’s + method to get [11.22.33] doesn’t make sense if you understand what is happening. The + method is a method of an array object, not the + method of each of the individual objects in the array. To illustrate why this is a problem we can use a real life example. An array is basically a list. A common real-world list is a grocery list. let’s say I have two shopping lists. One list has ice cream, chocolate syrup, and whipped cream. The other list has bananas and cherries. I need to go shopping so I add the two lists together. So does that mean that when I go to the store I should look for an banana split because that is what I should get when I combine all of the items on my list? No, it means that I should look for all the ingredients for a banana split, because that is what is on my new list. If you don’t like it like that, Ruby is a flexible tool and will let you do what you want, that doesn’t mean that you should, but there may be cases where it just works better to get a list with a banana split.

    "[Ruby] claims that it would make the process of programming so much easier by eliminating many of the complexities of earlier languages, and by using a programming model so close to human thinking that programs written in it could be understood almost as if they were English."

    It may not be easier to teach, but for me, it is much easier to read (and write). That makes a big difference to me when I am looking at code all day and I have to figure out what something does quickly.

    A lot of the focus of this article has been against the hype surrounding Ruby. I am glad for the hype because it was because of the hype that I heard about Ruby and decided to actually use it for a serious project. I resisted for a long time, but once I actually began using the features of Ruby I was so glad that I did. The hype nudged me to learn something new that I probably wouldn’t have without it. I consider that a very good thing.

    Of course, your objection to Why’s guide is ridiculous, it is because of people like him that help us realize that programming is something to enjoy. Play a little. It will be good for you (and your students).

  • Of ivory towers and amateurs
    17 March 2007

    Firstly, this was way to wordy for the content imparted.

    This could almost be a poster child for the adage those that do , do and those that can’t teach! 18 years in academia, please come into the trenches, watch your fellow devs step on land mines and try and avoid getting shot in the back by the officers. It’s great fun! In the midst of all this chaos try and write software. When you’ve done that then retreat to your ivory tower to contemplate.

    ’They have given the impression of being thrown together to meet a need without any strong underlying theoretical basis. This is, however, not entirely fair...’ It is entirely fair, it is why they are successful. The first rule of any language is that it must accomplish it’s task, languages written by devs for devs usually do this well.

    Java is the COBOLof the 90s. We’ve done that it sorta works if you have really good management and blub programmers. It is designed to bring all devs to a common level of incompetence.

    C++ became dominant thanks to the Microsoft libraries. No other reason.

    ’I was put off more by the many cutesy introductory tutorials I encountered when trying to get into it. ’ Then don’t read the cutesy tutorials, read something else. It’s a bit like saying that scheme would be great if it wasn’t for the little schemer etc.

    I guess your dev training is somewhat different from the C/C++/Java syntax that most devs are used to. Ruby is a simple language to pick up with that sort of background.

    The + sign is concatenation, as well as addition.

    ’My take on some of its "clever" or "elegant" features is "how could I teach this to a bunch of first year undergraduates?". I know from experience, it would be painful.’ If these are compusci under grads then you might as well teach them brick laying. Programming is not about language but abstractions. If you’re having to explain syntax then your wasting your and their time.

    Most novices are just that, novices, they do not know how to think in programing terms. 1st year under grads who cannot already program should not be accepted. They need to be given HTDP and packed off for a year.

    ’But who really uses a variable or argument without some idea of its type? I see types as useful language-supported comments, a guide to clear thinking.’ Duck typing/late binding is the way to go if you want to write reusable code. Gto mis-quote ’Give me your poor and dis-enfranchised and I shall make use of them’ When I write a system I’m not sure of all the paths my users will take. As developer of libraries I do not want to hand cuff my users. Sure pass me any old object as long as it has the methods I need, I’ll use it.

    Debugging code in a few years! How about debugging code now! It’s possible to write fortran in any language.

    What’s the difference between scripting and other languages? You seem to place certain langugaes in the scripting realm as tho this is a bad or wrong thing. Dev time is expensive, runtime is cheap.

    The revolution in computing will ocme when we break free of that bastard von neuman and start to write truly scalable code. It won’t be in any imperative language. But until we have a machine with 64 processors for less than $1000 there will not be a pressing need. We’re all stuck in this mire the difference being some of us realize it’s shit and some of us think it’s and exclusive body lotion.

    If you want to get a better understanding of what devs need, get off your academic butt and start writing code to deadlines set by market forces and projects managed by insecure psychopaths with users who have been sold utopia by salesmen with no soul.

  • What’s Wrong With Ruby?
    16 March 2007

    Nice ruby example, array unions? Have you looked into the objects, blocks, procs and such, or didn’t you finish the poignant guide? Looked into the freely available pickaxe, ruby-doc.org, or perhaps planet ruby or the variety of mailing lists available. Every language has a slew of introductory tutorials available, ruby happens to have an entertaining one, this is a problem? I like your pink shirt.

    • What’s Wrong With Ruby?
      20 March 2007, by lvk

      I like your pink shirt.

      I agree, that shirt is the dank.

  • What’s Wrong With Ruby?
    16 March 2007, by blz

    Never mind what’s wrong with Ruby, what’s wrong with you?

    • What’s Wrong With Ruby?
      24 February 2012, by qUkxGNYi

      Why would I want to learn any of these? What does ruby alaltcuy DO? what does PHP alaltcuy DO? How would I use these in my job? I’ve never even heard of these before. My computer does what I want it to do why would I want to re-program it? Neither this entry nor the comments have explained this to me.

  • What’s Wrong With Ruby?
    16 March 2007, by Dave

    Your article smells like flamebait.

    _why’s a legend. Not to everyone’s taste, but would you knock C cos Kernighan tells bad jokes? That tutorial is not written for ageing academics.

  • What’s Wrong With... Having a Choice in Resources?
    16 March 2007, by stipes

    In a similar vein...

    Your theoretical approach to computer science is admirable (and one I enjoy myself). But I enjoy BOTH sides of computer science (or, if it makes one more comfortable, I enjoy both computer science and programming). If you don’t like a book on a subject merely because it takes an different educational approach from what you are used to, or a different tone than you enjoy, or focuses on a different aspect of a language, then you do not need to peruse that resource. As mentioned in the article, the "Pickaxe" mostly fills the need of a "purely the facts" reference. There are also numerous references and plain tutorials on Ruby that follow this style. But simply because there are books on a subject that are not in your preferred style does not mean that that subject itself is no longer valid.

    If I were to write a children’s book about Java, and a solid chunk of the Java user community enjoyed it and created more resources in that vein, would that mean Java was now no longer a valid topic? Would that mean that Java is no longer a "mature" language, a language that can be adapted to serve the needs of the programmer? No. It simply means that some of the user community believes that the community should be expanded to those beyond the merely "technical" side of computer science. They merely want to open the community and the language to all who care to join in.

    And there’s no reason why computer science and programming can’t be fun, if not even light-hearted... especially if you’re making it your vocation. Once you’re drawn into a subject, you can pick apart the nitty-gritty aspects of the language (using the standard documentation for Ruby and the Pickaxe book, in this case). But not all people are knowledgeable enough, or have a desire to learn in this way.

    And beyond that, WPGtR has some fantastic content about the under-noticed aspects of Ruby (and on many things that he himself has developed in Ruby, especially his explanations of Ruby’s power in metaprogramming). Is an example program using a dragon any less relevant than an example program using an accounting firm?

    I can tell you which one I’d rather study from.

  • What’s Wrong With Ruby?
    16 March 2007

    He praises the academically-developed Haskell functional programming language.

    Snicker. Yeah, that’ll work. Just like it did with Algol, Pascal, Modula-2, Eiffel, ML, and all the other toy languages that came out of academia and took the world by storm, right?

    Believe it or not, some of us care more about writing working code than about proving useless pseudo-theorems.

    • What’s Wrong With Ruby?
      17 March 2007, by CR

      Yeah, I mean *no one* uses Pascal or a variant thereof. After all, the editor of this site is most known for his Ruby tutorials, isn’t he?

      • What’s Wrong With Ruby?
        17 March 2007, by Huw Collingbourne

        Who, me?

        It’s true, I’ve dabbled in Pascal - I first programmed in Turbo Pascal in the ’80s and for more than 10 years I wrote the Delphi (Object Pascal) programming column for PC Plus magazine in the UK. I now spend a lot of time writing Ruby (or writing in C# when developing an IDE for Ruby). I’d say Pascal has been a pretty influential language and I very much doubt if Ruby would look quite the way it does if Pascal hadn’t happened ;-)

        best wishes

        Huw

        • What’s Wrong With Ruby?
          17 March 2007

          Turbo Pascal != (or <>, if you prefer) genuine Niklaus Wirth (tm) Pascal (R).

          You know, the language that was explicitly designed to prevent undergraduates from doing anything useful, creative, or fun?

          Every organization (Borland, Apple, you name it) that tried to use Pascal for realistic projects wound up having to add a whole slew of incompatible extensions — which of course is precisely the point.

        • What’s Wrong With Ruby?
          19 March 2007, by CR

          Huw - I know. I was just taking the mickey out of the previous poster’s attempt at sarcasm! (He/she wrote, with respect to to article author’s praising of Haskell: "Snicker. Yeah, that’ll work. Just like it did with Algol, Pascal, Modula-2, Eiffel, ML, and all the other toy languages that came out of academia and took the world by storm, right?")

          [And as to the guy who has made the nitpicking claim that Turbo Pascal (let alone Delphi’s OP) <> Wirth’s Pascal... per-lease. Do you really believe that if a language evolves, it is no longer the same language? For example, are the additions of early versions of Turbo Pascal over Wirth’s Pascal any bigger than those between (say) Delphi 2007 and Delphi 1? Surely not.]

    • What’s Wrong With Ruby?
      11 March 2012, by dhamilton

      "toy languages that came out of academia and took the world by storm"

      well, actually, they did. All of those languages, especially the earliest, Algol ( which was pretty useless in the real world) had huge influence on what came after, and contributed most of the ideas that are alive in all good programs today. It’s horses for courses, you choose the language that’s suitable for the task at hand - you wouldn’t write an Air-traffic-control system in Ruby or php, would you? How about defence system code, control code for a nuclear power-plant or some other thing that absolutely had to work correctly, and when meeting a situation that it couldn’t explicitly deal with, couldn’t afford to take a best guess or just go off-line? The ’toy’ applications are the ones where their failure isn’t particularly disastrous (maybe it costs money, even a lot, but it doesn’t cause someone to be chopped into little bits or lead to the drowning of thousands). The toy languages are the ones they are written in. God help us, that’s why we (still) have Ada.

  • What’s Wrong With Ruby?
    16 March 2007, by Steven

    I’ve not tried Ruby yet, but I do use scripting languages, and the main reason for such is the speed in which things can get done, when compared to "real" programming. The learning curve is also a heck of alot smaller ;o)

  • What’s Wrong With Ruby?
    16 March 2007, by You are an idiot

    When will academia learn that they need to get out in the real world and experience what it is like to actually do the work. We are using Ruby and Rails...it has been a godsend for the projects that we working on and facing.

    • What’s Wrong With Ruby?
      22 March 2007

      What a bunch of dis-respect to others. Should I remind everyone criticising the Academia that the Internet was a research project? not a company invention? It was people with PhD and that stuff who created Internet and the World Wide Web.

      And just because Academia is not doing or saying what everyone else is, doesn’t mean it’s right. Look at Windows. The only reason why 99% of the world uses it is Marketing, otherwise, the world would be much different.

      • What’s Wrong With Ruby?
        29 May 2008, by Michael

        I’m a ruby fan because for me its an OO scripting language with a simple MVC web framework, if I use Haskel Im screwed.

        The internet has multiple antecendants, but a big driver was the military.

        The ARPANET (Advanced Research Projects Agency Network) developed by DARPA of the United States Department of Defense, was the world’s first operational packet switching network, and the predecessor of the global Internet.

        Michael

  • What’s Wrong With Ruby?
    16 March 2007, by Bob

    The author seems amazingly ignorant of the fact programming languages have a culture around them. Ruby’s culture encourages creativeness and innovative test-driven techniques. To truly understand a language, you have to see beyond your initial impressions of its overall features.

  • What’s Wrong With Ruby?
    16 March 2007, by Jason Watkins

    I don’t know which is worse, the tone of your writing or its length.

    You, like everyone who has parroted versions of this rant since the original "worse is better", still miss the point. The only thing that’s going on here is you’re hitching your contrarian cart onto the hype bandwagon.

    Scripting languages, even horrid ones like Perl, gain popularity because they are good tools for the activities people need to do. The ROI of these languages is tremendous.

    It would have been nice if this article had some real content. Your only specific example is quite possibly the least interesting criticism of ruby I’ve seen to date. Far more interesting ones are the differences between object, class object and module or between lambda, proc and block.

    • What’s Wrong With Ruby?
      16 March 2007, by The Occasionally Disgruntled Programmer

      It really isn’t such a long article and the author has an opinion and he writes it down. I see no problem here :)

      There is, however, a problem with your statement that the ROI of these languages is tremendous. Just to put things in perspective, in general. Try to figure out how many people are writing software in the US (or in the world for that matter) and multiply that number with what you think is the average yearly salaries for those individuals. Do you still think that tremendous ROI should be in the same sentence when talking about software or a programming language in particular.

      We should all be using 3D interfaces via voice control and AI in Haskell for all that money that has been spent in software development worldwide by now. To be fair writing software is hard but to say that the whole development process hinges only on the programming language is something that a complete amateur would try to argue.

      I haven’t seen a lot of interesting software written in Ruby; a lot of Web applications (most in BETA state and proudly advertised as such) and they all have pretty trivial functionality, most of their coolness stems from very professionally done graphics albeit apparently developers churn these out much faster now because they have dynamically typed languages such as Ruby with a nice "print" function where they spew out HTML interspersed with data.

      Do you really think that what has been called the "software crisis" (you really should google for it) can be solved with Ruby.

      Ahhh now that I have that off my chest: Have a nice day.

      The Occasionally Disgruntled Programmer

      • What’s Wrong With Ruby?
        17 March 2007, by hellfeuer

        Just to put things in perspective, in general. Try to figure out how many people are writing software in the US (or in the world for that matter) and multiply that number with what you think is the average yearly salaries for those individuals. Do you still think that tremendous ROI should be in the same sentence when talking about software or a programming language in particular

        What are you talking about? Yes, a lot of money has been spent on software development. What does that have to do with ROI with scripting languages? Good ROI does not mean a low investment it means good returns.

        We should all be using 3D interfaces via voice control and AI in Haskell for all that money that has been spent in software development worldwide by now. .

        What do you mean "should"? Its like sayin we "should" have cured cancer by now considering all the money thats spent on cancer research

        • What’s Wrong With Ruby?
          17 March 2007, by The Occasionally Disgruntled Programmer

          What am I talking about. Just what I said. I would like to point out to you the word general as in "Just to put things in perspective, in *general*". The general case would seem to indicate that ROI in software development is not tremendously high. Ruby, *specifically*, has not, in my opinion, provided for tremendous ROI so far.

          With regard to the latter point I must admit it was an attempt at levity (humour) but after reading your brilliant comparison with cancer research I see the error of my ways. So you are saying that people writing blogging software or other software that permit people to post comments and add images to web pages and storing that in a database (and retrieve said content later and let the browser render it) is somehow comparable to cancer research in complexity. Very interesting point indeed. I always thought that cancer research was hard stuff like genetics, DNA, RNA complex protein folding and stuff, understanding the way the human body works, etc..

          The main point here is that Tim Sweeny maintains that type-safety is important and many Ruby proponents counter with the fact that when using Ruby they crank out code faster. I think these to issues are rather orthogonal in nature. If you know that you are going to write in code and understand what you are going to write then type-safety shouldn’t be much of a hindrance and additionally it can help verify the correctness of your code after you write it. Ruby is certainly a nice language experiment but as a platform (language + libraries + runtime VM + reference documentation + community tutorials) it doesn’t provide enough value for me to jump on the bandwagon. That might change in the future.

          I am an old fart (thirty-ish :) and I have used many languages such as assembly, Pascal, Object Pascal, C, C++, Prolog, Scheme, Perl, Python, Lua, F-script, Java, C#, Objective-C, Erlang, Haskell) and many platforms so it is perhaps understandable that I am getting more picky about things that I invest my time and brain resources in :) And the stuff that I do invest time in must have a really compelling reason for doing so not syntactical sugar that tries to emulate functional constructs in an imperative language and what’s up with that lack of Unicode support?

          Best regards.

          TODP

      • What’s Wrong With Ruby?
        19 March 2007, by Jason Watkins

        I wouldn’t object to the length if it was dense with content.

        When I say ROI, I was speaking from a developer’s perspective. It takes very little time to be productive with Ruby. Or Python, or Perl. In fact, the ROI of those languages is higher due to their more expansive class libraries.

        You seem to believe that software should be cheap... or at least, that the business community should spend less on it. I disagree. Software is taking over an increasing share of aspects of business that used to be left to manpower and aptitude. It’s price is no surprise, and while I might rail about the productivity of certain technologies that have gained majority market share, I also wouldn’t argue that software as a whole is so utterly invaluable that I can’t use the term ROI.

        3d interfaces? Voice control? AI? Seriously? You’re babbling incoherent. I also never said that the whole software process hinges only on the programming language. Please stick to critiquing what I wrote, as I did with the original author. That said, I do believe the language is important, particularly in light of empirical measurements that lines of debugged code produced per man hour are relatively constant across all languages, even those that differ substantially in abstractive power.

        Judge Ruby on it’s own merits, rather than whatever web applications you happen to have encountered. Need I repeat the trite "you can write fortran in any language"? For someone experienced with software in general, I’d suggest skipping straight to "the ruby language" chapter in the pickaxe book, which summarizes the syntax and semantics. From there, explore the object model and it’s implications. Unless you are wholely unconvinced by dynamic typing I think you’ll find interesting content. For even more tasty exploration check out Io and Slate (but please ignore slate’s horrid syntax).

        I think "the software crisis" will never be solved. That doesn’t mean we should through out useful tools, or cease making comparisons of utility between them. It’s been some 4 decades since Dijkstra coined that term, and while I have enormous respect for his writing, I feel his recommendations are inappropriate for the vast majority of businesses. Do you really think it’d be useful to be working through predicate transformers and finding weakest pre-conditions for your work? On the whole I find Backus’s thoughts more interesting for the modern context: use languages that have semantics amenable to machine proof.

  • What’s Wrong With Ruby?
    16 March 2007

    Very good article. No offence but while reading the article, I get the feeling that you were biased towards the academic/theoretical/scientific background side of languages (kinda confirmed when I got to your bio and sorry in advance if I’m wrong). Nothing wrong for sure but I believe that there will always be a gap between the labs and the real world. For example, in a perfect object oriented world we wouldn’t have primitives in java. (I believe that decision was for performance reasons at that time but no longer holds true current VM technology.)

    With regards to your array a + b example, I think context (‘intuition’ is relative because it is developed through experience) plays a role. If it is known that in language “X” an array is a bunch of pointers to objects then “adding” an apple object to a cone object does not make sense.

    I believe people in AI will eventually create the perfect language for programming. Until then, I do not get bothered by people claiming that language "X" is intuitive, elegant, clear, concise, etc. - depending on your background and the surrounding context, it might be true!

  • What’s Wrong With Ruby?
    16 March 2007, by jc

    Syntax-wise ruby is nothing special. I found it extremely confusing at first. But syntax is just a small hump in the learning curve. The power of ruby that I don’t see mentioned here is the the meta programming aspect. I haven’t been involved in a language so far where building a coherent DSL was such an accepted practice (I never saw lisp as particularly coherent), and the possibilities this allows is really amazing. I see the power of Rails coming from the ease which Ruby lets you metaprogram, and combined with some good pragmatic engineering philosophies, has made me more productive as a web developer in 3 months using Rails than I had been with 5 years experience with C# and ASP.NET.

    And while its fun to bring up past overhyped languages that didn’t deliver, that doesn’t have much of a relation to current technologies. Sure, we should all be skeptical of hype, but sometimes technology does actually improve, and large productivity gains are possible. Any passionate developer knows this and is always looking for the latest cutting edge tools to give him an advantage over his competition.

  • What’s Wrong With Ruby?
    16 March 2007, by tim

    I, too, have recently come by Ruby and you’ve echoed many of my own sentiments regarding the language. There’s not a lot to recommend it beyond Rails, which I’ve had a good time with.

    As an undergrad studying CS, I was first exposed to Prolog in a computational linguistics class — my classmates were primarily linguistics/philosophy students, with a few of us CS blokes in the mix. The CS folks had more trouble with it than the others, which wasn’t at all surprising to me knowing the kind of folks in the CS program. Once I grokked Prolog, I fell in love with it. Heady stuff.

  • What’s Wrong With Ruby?
    16 March 2007

    You could stand to tighten up your writing; I had to force myself to finish less than halfway through.

    • What’s Wrong With Ruby?
      16 March 2007, by Andy

      You could stand to tighten up your writing; I had to force myself to finish less than halfway through.

      Uh, this is not a web structured article, this is written for a magazine, of course it’s not going to be as tight. Learn to recognize that. In particular, it doesn’t use the inverted pyramid structure which I’m sure you would have appreciated. Here’s more on writing for the web.

      • What’s Wrong With Ruby?
        16 March 2007, by Piers Cawley

        Dear ghod, I pity your students.

      • What’s Wrong With Ruby?
        17 March 2007

        Oh Boy! I bet your students love you too! you’ll make drone-programmers out of them yet.

  • What’s Wrong With Ruby?
    16 March 2007, by Reginald Braithwaite

    I like your objective points. Ruby often strikes me as ad hoc. Of course, some of your "surprises" are matters of taste. While you think that [1, 2, 3] + [10, 20, 30] ought to be [11, 22, 33], I like [ [1, 10], [2, 20], [3, 30] ]. Even though it’s hideously inconsistent, since 1 + 10 is not [1, 10]. These may be arguments in support of Java’s position that operators should not be overloaded.

    I must say a word about Why’s Poignant Guide. I haven’t learned to like it as much as "The Little Schemer," a book in entirely the same vein. But just as I can’t say to anyone that the mere existence of that one book justifies my enthusiasm for Scheme, I stop short of suggesting that Why’s existence is a knock against Ruby.

    • What’s Wrong With Ruby?
      16 March 2007, by Yan Pritzker

      Oh come on here people who cares, really? Why get all wound up about something as silly as programming language syntax? Ruby is _fun_. Who cares if it defies your expectations of what the + operator should do. To me, it was perfectly logical to mean set union when used on two arrays, but that’s besides the point.

      You see most people using Ruby are using it to solve real world problems, like building the next generation of web applications. These are not times to bicker about syntax, these are times to have fun with your language to get your job done faster. Programming is a means to an end, and if you take it so seriously as to have to deride a dude who created a really creative book with cool artwork and a sense of humor to boot, you’re missing the entire point of what being a programmer means.

    • What’s Wrong With Ruby?
      16 March 2007

      Regarding [1,2,3] + [10,20,30] = [11,22,33],

      I’m not sure what the expected behavior would be of ["a", "b", "c"] + ["d", "e", "f"], or [1,"a", 0.3] + ["b", 2.5, "c"] for that matter. I think the decision to concatenate the arrays was a sound one.

      • What’s Wrong With Ruby?
        19 March 2007

        "I think the decision to concatenate the arrays was a sound one."

        I’d go so far to say that anything else is totally ridiculous.

        But you can just redefine #+ in the Array class if you have your heart set on it. The damned operator can _always_ return ’chunky bacon’ if thats what you want. I think that would make about as much sense as adding the elements of one array to the other’s. But hey.

        • What’s Wrong With Ruby?
          20 March 2007, by Ladislav

          "Anything else is totally ridiculous"?

          You might like to read up about APL, or its successor languages J and K. Or the languages MATLAB and IDL, all of which behave in the way he describes (ie [1,2,3] + [10, 20, 30] = [11,22,33]). APL has seen heavy use among actuaries and those in the financial industry, and MATLAB is popular among scientists and applied mathematicians. If you’re dealing with large numerical arrays, this is a very sensible way to work.

          It’s also often suggested that APL et al’s array-based design would allow programs written in them to be straightforwardly and programmatically parallelized.

          • What’s Wrong With Ruby?
            21 March 2007

            Of course, in MATLAB, [10, 20, 30] is a vector, not an array. Yeah for semantics!

        • What’s Wrong With Ruby?
          26 January 2008

          "But you can just redefine #+ in the Array class if you have your heart set on it."

          Oops! If you do that, you risk breaking existing code.

          What’s needed is the possibility to redefine Array::#+ only for your code, not for libraries

          • What’s Wrong With Ruby?
            4 August 2011, by Steve

            You can easily do that.

    • What’s Wrong With Ruby?
      17 March 2007, by jjonphl

      I thought the example [1,2,3] + [10,20,30] was some stupid nitpicking, but this is worse. Obviously in that expression, we are "adding" arrays. [1,2,3] + [10, 20, 30] = [11,22,33] is crazy to expect in a general purpose PL. The user is operating on an array and suddenly it operates on elements of the array? [1,2,3] + [10,20,30] = [1] is a list operation, but this operation is so exotic compared to concatenation. Inconsistent because 1 + 10 != [1, 10] ? But the + here are operating on numbers... Unbelievable.

      Contrary to what this article says, I think ruby is elegant & ad hoc. As it’s creator Matz said, it is "Matz’ lisp." I like ruby because it is perl (ad hoc) + lisp (elegant). I have been thinking of leaving perl and go on with my life with python a long time ago. Python is great, but it gets boring sometimes. I like the way perl makes me laugh and look up with reverence to someone else’s insanity (perl golf, japh, crazy modules in cpan, perl community).

      As for Why, why, he’s probably the coolest ruby geek out there. He’s humor may not be to your liking, but I assure you he’s better than you in more ways than you can think of "adding" 2 arrays.

      • What’s Wrong With Ruby?
        31 March 2007, by Piers Cawley

        I think he’s confusing the meaning of ’Array’ in a mathematical context - in which arrays are added in the way he describes - with its meaning in a programming context. Mathematically, Arrays are made of numbers. In programming, not so much.

        So, the behaviour he expects of addition on Ruby arrays is defensible, but it doesn’t sit well with the way arrays are used in Ruby. (Surprisingly (to me at least), in Smalltalk, Collection#+ works in the way Mr Huntbach expects. Collections are joined using , - which is just another binary operator.)

      • What’s Wrong With Ruby?
        31 March 2007

        Actually, I think you would expect "a + b" joining of these two arrays if you have a developer-mind.

        In my first algebra classes at college, I was introduced to vectors in R^n spaces, which we all know have the sum operation. Now, even though algebra’s abstract concepts may be hard to grasp, when asked to sum (1,1,1) + (2,2,2), everybody agreed in class that the correct result is (3,3,3)... Now, that is what I call natural, intuitive.

        So, again, why [1,2,3] + [4,5,6] = [1,2,3,4,5,6] in ruby? Why give the + sign a functionality that is not the sum? Wouldn’t it be clearer to attach that functionality to [1,2,3].join([4,5,6])?

        • What’s Wrong With Ruby?
          29 April 2007, by Gavin Baker

          "hello" + " world" = "hello world" makes sense. Operator overloading makes code nice and readable. For Strings, we treat it as a concatenate operator.

          So, for arrays, [1,2,3] + [4,5,6] = [1,2,3,4,5,6] also makes sense. It concatenates two Arrays.

          Your confusing [1,2,3] with a Vector. [] is an Array literal. If you want a Vector sum, then + is overloaded again.

          Vector[1,2,3] + Vector[4,5,6] = Vector[5, 7, 9].

          And overloaded again for Matrix.

          Matrix[ [1,2,3] , [0,0,0] ] + Matrix[ [0,0,0] , [4,5,6] ] = Matrix[ [1, 2, 3], [4, 5, 6] ]

          An Array isn’t a Vector, and ruby isn’t matlab, so it shouldn’t treat it like one.

          • What’s Wrong With Ruby?
            30 July 2008, by Pieter Viljoen

            The point the Author is making, is that without typing variables more strongly, the language becomes ambiguous. The expression under discussion is open to various interpretations, and therefore omitting typing does NOT make the language easier and more intuitive to understand and use.

            He is certainly not confused, neither is he promoting any particular preferrence!

            • What’s Wrong With Ruby?
              11 February 2010, by Michael J. Welch, Ph.D.

              So, I understand the idea that typing clarifies the code. Like in Microsoft MFC, where some character strings are defined as signed char, and some are unsigned char, and then, if you use UTF-8, some are wide and some are not wide. What a load of crap! This all comes from building endlessly on top of old legacy code, with the new code eventually becoming more old legacy code on which new code is again built.

              If you’re building a module in Ruby, and exact typing is important to you, simply check the type of the argument upon entry. Easy solution.

              Ruby programmers like type-free code because they can have a module which is capable of performing it’s function on a variety of data configurations, like (not a real def) add(1,2) or add([1,2],[3,4]). When add looks at the argument, it can decide to add two numbers, or the elements of two arrays. You can’t do that in C++ unless you define two methods with overloading. C and Java are not DRY.

              Also, C++ and Java don’t have built-in strings or hash functions. You have to use libraries, and you can’t statically type hash variables whose data element types are defined at runtime.

              C++ and Java have their use. Some things need to be statically defined and compiled for a number of reasons, like speed or pseudo-confidential source code. I get that.

              But for some other things that don’t require the high efficiency of C, notably web building, Ruby is a spectacularly better solution, IMHO.

          • What’s Wrong With Ruby?
            25 November 2008, by Sargon

            [quote] "hello" + " world" = "hello world" makes sense.[/quote]

            Well, I couldn’t disagree more. ^^

            One of the basic properties of addition is commutativity, that is, a+b is equal to b+a. String concatenation on the other hand is not commutative at all, the same goes for [1,2,3]+[4,5,6]=[1,2,3,4,5,6]. I consider abandoning basic properties of an operator over "it looks nice" as bad practice. But that’s just me. :)

            Sargon

            • What’s Wrong With Ruby?
              24 July 2009, by Owen

              Just a nit here....

              I agree that + looses it’s commutativity when it is used for concatenating Strings but how is it not commutative in your Array example?

              How is [1,2,3]+[4,5,6]=[1,2,3,4,5,6] different from [4,5,6]+[1,2,3]=[4,5,6,1,2,3]? The overwhelming majority of programming languages define an Array as an UNORDERED list so usually [1,2,3,4,5,6] is no different than [4,5,6,1,2,3].

              In fact, if we could see how the data gets stored internally we just might see that [4,5,6]+[1,2,3] does equal [1,2,3,4,5,6] or maybe [4,5,6]+[1,2,3]=[2,4,3,5,6,1]. In any case, commutativity is not lost when + is used to perform Array concatenation.

              Bottom line is that consistency of basic properties like commutativity lends no weight to an argument against the way Ruby chose to implement + for arrays.

              • What’s Wrong With Ruby?
                11 March 2012, by dhamilton

                "The overwhelming majority of programming languages define an Array as an UNORDERED list so usually [1,2,3,4,5,6] is no different than [4,5,6,1,2,3]." what a strange thing to say. ?? overwhelming majority? Tell that to all the C / C++ programmers (and pascal, ada, java, C#, any maths language, etc etc) an array isn’t a list and a list isn’t a set (which is a bag...). A list has an intrinsic order (from ’start’ to ’finish’). An array has indices (usually, even if they’re not used or important in the particular instance) so why is that if there is no defined order? a bag is a collection of things in a bag, and has no special order, and no indices. And it’s not an array. Or much use as a string.

        • What’s Wrong With Ruby?
          6 August 2008, by Bret Weinraub

          not a ruby guru BUT:

          if I want

          [1,2,3] + [4,5,6] = [5,7,9]

          then I redefine +

          class Array def +(a) if a.class == Array ret = Array.new (0..[self.length,a.length].max-1).each do |array_ndx| begin ret[array_ndx] = self[array_ndx] + a[array_ndx] rescue ret[array_ndx] = nil end end else throw "Array + #a.class not implemented" end ret end end

          With this code, I make the following point. The open class model in ruby is very useful for writing flexible and extensible library code. In problem domains where this is desirable; ruby makes a great choice. Is it THE language? Probably not .... but go into the basement, look in the tool bin, and pick out THE tool. Right..... no such thing.

      • What’s Wrong With Ruby?
        2 April 2007

        Yea but who wants to be associated with a clown like Why?


Home



 

lipitor discount http://www.actuabd.com/?order=188932 purchase femara info about tadaga cialis buy generic bimatoprost 0.03 in mayami http://www.actuabd.com/?order=287405 buy tenofovir disoproxil fumarate viread 300 mg over counter nexium http://www.actuabd.com/?order=22262 lipitor generic in canada buy naltima usa fluticasone spr 50mcg in california armodafinil buy in new york buy fincar 22.50 buy nodict online http://www.actuabd.com/?order=669869 http://www.actuabd.com/?order=431433 where can i buy rogaine shampoo http://www.actuabd.com/?order=728292 http://www.actuabd.com/?order=692502 cheapest tadasoft over the counter fluticasone spray buy finasteride online http://www.actuabd.com/?order=204512 information buy piracetam capsules buy cheap tadarise more femalegra 100 prexaton tablets buy cheapest melanocyl bupropion cost of enalapril maleate w 975 buy floricot quetiapine caverta 100mg about 500mg azithromycin no script buy bimatoprost in france lipitor canada cheap in france info about budeprion sr 150 budeprion xl 150 http://www.actuabd.com/?order=590911 buy cheap attentrol ciprofloxacin cipro cheapest deals on nexium aventis india buy silagra uk in new york more info about assistance with cost of gleevec more order lasix himalaya garlic tablets ciprofloxacin 50mg http://www.actuabd.com/?order=924320 dapoxetine quick ship buy tadalafil 270 online nexium mail order