10 Things I Hate About Ruby

1. initialize

To create a new object in Ruby you invoke the new class method like so:

c = Car.new("Toyota")

Naturally you think the constructor would be defined in a method called new, right? Or just maybe a method called Car like in Java? But no, instead it has to be called initialize like this:

class Car
  def initialize(make)
    @make = make
  end
end

Would this have been so hard?

class Car
  def new(make)
    @make = make
  end
end

2. Weak typing

As a library vendor, it scares the bejeezus out of me that anyone can pass anything to my methods and I’m expected to handle it. It’s like walking into McDonalds and ordering a Big Mac, and instead getting a Tofu burger; not very appetizing. Ruby’s thrown out the one piece of precondition checking most languages give you for free.

3. Automatic returns

Didn’t C teach us that unexpected results were confusing? This is Ruby’s equivalent of C’s a = b + a = c;. Returns should be explicit. An explicit return is not hard to write, and it’s a lot easier to read and understand. Reducing finger typing and at the expense of increasing brain confusion is not a wise tradeoff. Languages should be concise only in so far as that improves clarity. When compactness comes at the expense of clarity, it’s a bad thing.

4. Global variables

Didn’t somebody tell me Ruby was an object-oriented language?

5. puts

Do we have to copy C’s most ungrammatical, pointless method names?

6. Zero-based arrays

C arrays began at zero to match memory addressing. In a weakly typed scripting language, there’s exactly no reason to do this. There hasn’t been for decades. Can’t we please start the arrays at 1 where God intended? Hasn’t anyone read Numerical Recipes? Aren’t we tired of fencepost errors yet?

7. elsif

Sorry. “elsif” is not a word in the English language, and it shouldn’t have been one in Ruby. Would typing one extra letter have been so onerous?

8. $_

Global variables suck. Did I say that already? Global variables you didn’t actually create and that pop up out of nowhere suck even worse. And global variables whose names are indistinguishable from line noise suck still more. Java’s verbose, but that verbosity is in the service of legibility. Ruby’s compactness all too often serves only to obfuscate.

9. Methods are public by default

Minimal interfaces to classes are important. The less a class promises, the easier it is to change, optimize, fix, and otherwise improve. Furthermore, the easier it is to learn and understand. Everything that can be private should be private.

Now of course you do need public methods. Not everything can be private. However this shouldn’t be the default. Marking a method public decreases the flexibility and increases the learning curve of the class. It should require an explicit decision from the programmer to do this. Ruby gets this exactly backwards. A programmer just banging out Ruby code is likely to create a class with nothing-but-public-members, without even thinking about it. That’s a bad thing.

10. No package access or friend functions.

There’s no access in-between public and private. All too often different classes in the same library/application/codebase need more detailed access to their other parts than the general public should have. Ruby provides no way to manage this.

In conclusion

I could go on (and I probably will) but that’s a nice round number of hates for now. I’m also keeping a list of things I love about Ruby as I learn the language. However, the things I hate hit 10 before the things I love. That’s not a good sign.

102 Responses to “10 Things I Hate About Ruby”

  1. Dan Hayward Says:

    You’re all fucktards. Ruby suck the poo from your asses.

  2. MilesZS Says:

    If anyone has made it this far in the comments, wow.
    Someone up there had problems with implementation in Ruby. You should check out the future of Ruby, including YARV (to be included in Ruby 1.9 in November-ish), JRuby, Rubinius, Cardinal, etc. etc. etc. I won’t claim to know that much about them, except that, if I understand correctly, they will fix some of those implementation issues that have been discussed.

    Also, I have heard/read a ‘rumor’ that, in the future, if you have a string foo[0], it will no longer print the ASCII character code, but rather a character. (See page 79 in “The Ruby Way” by Hal Fulton.)

  3. Mystilleef Says:

    Try Python. I can’t stand Ruby’s syntax and semantics either.

  4. monowheel Says:

    1. init would better, less typing, especially the pesky z key.
    2. Swings and roundabouts here. Nice to have dynamic typing but there’s a cost in terms of testing. Pet peeve is the lack of syntax for declaration of variables.
    3. Like the consistency of expressions returning values. Explicit returns are much more readable though.
    4. Necessary evil.
    5. Like puts – short and obvious.
    6. C has a lot to answer for here. A whole generation of programmers have been brought up with the assembly level indexing of C and don’t know better. I’ve seen several severe system bugs over the years due to fencepost errors in 0-indexed languages. I can’t recall a single similar error in 1-indexed languages. Lost battle I fear.
    Note: Lists in human languages always start at 1, including this article! Zero is described as a state or condition.
    7. Agree about elsif in a pedantic fashion. Is it so hard to have elseif.
    8. Agree about the awfulness of $_ et al. What’s wrong with names?
    9. Private should be default. Outside access should require explicit syntax/permission.
    10. friend accessors are just bad design.

  5. Dean Says:

    I agree with rhubarb response 100%. No one ever thinks about maintainability. That’s the bottom line.

  6. Forstis Bonitas Says:

    “I don’t particularly agree with the list, but Paul has it spot on. A lot of these responses are immature and give an extremely poor impression of the Ruby community…”

    “Man, some people get so defensive over Ruby. Settle down, you are giving Ruby a bad name….”

    I find these kind of comments amusing, as if this only happens in the “childish” ruby community. I’m sure a blog post with the title “10 things I HATE about c++” would only elicit “let’s agree to disagree” and “you’re right, our language of choice does suck”.

    When one writes a post that has “hate” in the title, then you get basic things wrong (like not understanding the difference between weak typing and dynamic typing), you are going to get annoyed responses; as the author intended I’m sure.

  7. Forstis Bonitas Says:

    “I don’t particularly agree with the list, but Paul has it spot on. A lot of these responses are immature and give an extremely poor impression of the Ruby community…”

    “Man, some people get so defensive over Ruby. Settle down, you are giving Ruby a bad name….”

    I find these kind of comments amusing, as if this only happens in the “childish” ruby community. I’m sure a blog post with the title “10 things I HATE about c++” would only elicit “let’s agree to disagree” and “you’re right, our language of choice does suck”.

    When one writes a post that has “hate” in the title, then gets basic things wrong (like not understanding the difference between weak typing and dynamic typing), you are going to get annoyed responses; as the author, I’m sure, intended.

  8. Jaehyun Yeom Says:

    1. I think that’s because Ruby has class Object. “new” creates instance of self prototype and “initialize” initializes self. That’s different.
    2. Disagree, Tofu is my favorite, indeed. I can’t live without it.
    3. This can be confusing. You may want nil returned if no explicit return statement was written.
    4. Did OOP say “No global variable allowd?”
    5. It’s short and easy vocabulary. I like it.
    6. Oh… I once used indexed from 1. Now I realized why I should count from 0. I think counting from 0 is the god’s will.
    7. I’m non-English user. If “elsif” is a problem, so is “def”, “int”, and so on.
    8. No comment. I’m pretty busy now sorry.
    9. For agile development, I like this stuff. What if I have to put “public” everytime when I just like to test class?
    10. No comment.
    Not to be late for school. Have a good day.

    Tofu is my favorite.

  9. ob1 Says:

    None of these have EVER been a problem for me, and the fact that they are for you says that you haven’t been using Ruby very long. Are they problems in practice, or just in theory. Use Ruby to make something cool and you will understand why things are the way the are. (and the 2 character globals, like $! and $_, all have long named brethren. They come in very handy though for one liners and such. Don’t forget, Ruby is a SCRIPTING language. )

  10. zem Says:

    I had few frustrations with ruby before, but now….
    Check this out:

    arr = []
    arr.concat [3,4] # Following syntax logic, it should be: concat!
    # But its ok I suppose, lets see the result
    #>>> [] # What! It is supose to be [1, 2] you stupid!

    # Lets try again
    arr = [1,2]
    arr.concat [3,4]
    #>>> [1,2,3,4] # Aaah, I see! Stil stupid!

    # ok
    arr = []
    # arr += [3,4] # You cannot do that! Sucks!
    arr = arr + [3,4] # What about that?
    #>>> [] # What the f***!!! That is just disgusting!

    So how I’m supose to add to one array(posibly empty) another
    I wanna do it in ONE call please!

    And for the record ELSIF – sucks as!

    Anyway, I’m just started to learn smalltalk, Its pretty amaizing!
    Ruby is a crippled SMALLTALK!

  11. zem Says:

    Hey, its magic!!!
    concat is working!
    Yuppe!
    Maybe ruby or rails have changed their minds.
    I didn’t change a single bit of code by the way.
    Maybe when I was writing previous comment, the GC….
    Ah, what a heck! It doesn’t matter, it happens not the first time!
    I’m starting to understand what ruby magic means:)

  12. zem Says:

    By the way I love ruby;)
    It would be nice to see access modifiers for instance variables though!
    Another thing is the difference between class and def. I believe it should be the same as in JavaScript. Just def would do:)
    Next ofcourse, arrays should start from 1!

    Methods/classes names are poorly designed at the moment! Documentation is fragmented and hard to find.
    Not mention the slooooooow interpriter.

    But as I said, RUBY is the best language I used so far!
    SMALLTALK looks better but I’m just started learning it.
    Could someone point me why RUBY better than SMALLTALK, or otherwise?

  13. yeago Says:

    301 -> 10-nags-about-perl

  14. Me Says:

    Somebody finally put there money where there mouth is.

    I hate ruby and I have been using it for 8 months.

    It is ridiculous.
    I personally do not recommend it.

    Now I am back in Java and loving the simple things.

    Ruby has this weird following of kids.
    Congratulations to Ruby on Rails for reinventing the wheel.

  15. BusinessRx Reading List : The Way The Wind Blows Says:

    […] Of course, your approach won’t make every user happy. You’ll still need to make trade offs. In “10 Things I Hate About Ruby”, Elliote Rusty Harold (author of Java I/O) is surprised by some of the conventions in the king of […]

  16. Steven Says:

    Wow, a full year of comments. In spite of multiple comments correcting the author’s failure to understand the difference between new and initialize, the incorrect point remains posted. In spite of multiple comments contradicting the claim that “[t]here’s no access in-between public and private”, the incorrect sentence stands. These things are not matters of preference or opinion. The fact that these misconceptions continue to be referenced by others is what’s really Not A Good Sign.

  17. Pedro Penduko Says:

    Ruby would have been perfect if it followed the C style syntax the way Java did. I realy miss { }

  18. 5 Things I Hate About Ruby « Devi Web Development Says:

    […] 3rd, 2007 at 5:19 am (language theory, syntax, ruby) I read an article at The Cafes about all the things he hates about Ruby. I love Ruby, but there are a few things I would do […]

  19. Bian Xi Says:

    #6: Disagree. Can not imagine a ruler starts at one.

  20. DUDE Says:

    RUBY SYNAX IS THE WIN. NOT… It should have followed C’s. Ruby has some usefulness, but… PEOPLE USE JAVA INSTED!

  21. Sudipta Mukherjee Says:

    I completely agree with Christopher Burkey.
    At this point of time, We don’t need any more new languages. We have enough already. All new languages popping up can actually be replaced by ideally designed APIs.

  22. anon Says:

    Then write your own ‘PERFECT’ language.

  23. Ruby Says:

    why do you hate me?

  24. Merlion Says:

    Great, great post. I have been stuck in Ruby hell (RoR, real suffering) and I agree with most of your top ten. There are some good things, but be dammed their are too many hates.

  25. qwerty Says:

    “Great, great post. I have been stuck in Ruby hell (RoR, real suffering) and I agree with most of your top ten. There are some good things, but be dammed their are too many hates.”

    Nearly everything in his top 10 list is incorrect.

    If you do not understand weak vs strongly typed and static and dynamic typing, then you have no business commenting, just like the original author.

  26. rgz Says:

    1. “constructor is named like class” is a bad idea to begin with.
    2. You are missing the point of dynamic languages…
    3. SORT OF agree, methods should automatically return self unless there are explicit returns. But you will probably hate that too.
    4. There will always be something in the global namespace.
    5. Please tell me you are suggesting “print” or “println” else fail.
    6. Fail, go back to school, take a CS course.
    7. Please tell me you are suggesting “elif” else fail, er… just fail.
    8. First sane complain, that few people use it just makes it more likely to bite you by surprise.
    9. Fail and privateness is a bad idea to begin with, too, just embrace dynamic programming.
    10. No idea what you talking about.

  27. Rusty Shackleford Says:

    1. Car in java is a constructor for the class Car, not a method. new is a class method, initialize is exactly what it implies. When you call Array.new, initialize is NOT what gets called.

    2. Ruby is strongly typed. Every object has a type and that is all it will ever be.

    3. Unexpected returns? What? Every statement and method return something. If it is always the case, how can it be expected?

    4. What does OOP and globals have to do with each other? Answer: nothing! If you don’t line them, don’t use them.

    5. Then use print, or just alias puts.

    6. This is just stupid it defies belief. Computers start counting at 0. How many languages use 1? Very, very few.

    7. This is nonsense as each language uses something different.

    8. No one uses those in ruby, those are simply a by product of its heritage(Perl).

    9. This is retarded, it is like you don’t know that ruby has private methods. Hint, type private and every method below it is now private.

    10. You mean like observers? You can do this in Ruby.

    10 points of complete, utter and epic fail.

    All you have shown is that you have no clue about Ruby.

    Back to school for you.

  28. Rusty Shackleford Says:

    “There’s an attitude in some of those responses that I don’t care for. It looks like this…

    Me: The right windshield-wiper on my car makes streaks on the window instead of cleaning it properly.

    Mechanic: Don’t like Volvos? Then take the bus.

    Seriously, if you don’t have a valid response to a criticism then don’t get all defensive.”

    Post 10 legitimate and correct reasons and you will get reasoned responses. This article show that the writer knows absolutely nothing about Ruby.

  29. Rusty Shackleford Says:

    “Why was Ruby created? It seems to have no purpose other than as an esoteric platform for creating cute code.”

    Why was Java and C# created? They are both younger than Ruby.

    In fact we should all be using Algol or 1950’s Fortran right?

  30. Rusty Shackleford Says:

    ““a lack of understanding of what’s going on under the hood seems to be absent”

    Isn’t that what we want?”

    No, we want programmers who understand what is going on from the processor on up. If you don’t understand what is going on under the hood, you are an API monkey, not a programmer.

    Most Java and .net programmers do not, and thus suck.

  31. Rusty Shackleford Says:

    “It’s bad enough that it’s not mandatory (why have it!) But the actual coding convetion – or idiom – is to not use it. ”

    The results of the last line of a method automatically gets returned, explicitly putting a return is redundant.

    Why does it exist?

    def meth state
    return “hi” if state.nil?
    “bye”
    end

    It is that much to ask for people who complain to understand what they are complaining about?

  32. Craig Says:

    Why are some people so zealous about defending their language? I don’t go to France and tell everyone English is a better language than French. Why not just shut the hell up and use whatever suits your individual tastes? They all get the job done in the end.

    Personally I would love to be able to speak to my computer in plain English and have it construct some software for me in 10 seconds flat but that isn’t gonna happen any time soon. Until then, all languages are flawed.

    The most retarded thing about this discussion is that there are people saying some things are down-right wrong. How the fuck can a language be “wrong”?

  33. Jim Says:

    Try this on for size…..

    —-

    Class Player
    def initialise()
    end
    end

    puts “Welcome to a retarded example”
    puts “As you can see
    player = Player.new
    puts “The results of this example are fucking retarded.”
    ——-

    Returns “unexpected keyword_end, expecting $end” in Ruby 1.9.1 and 1.9.2
    Have yet to try it on the older versions.
    Shitty languages produce shitty useless errors. I’ll be taking up python TYVM.
    Also tried spelling it initialize()

  34. Cameron Says:

    Jim, I don’t know what environment you’re running in, but your code didn’t produce any errors on my system with Ruby 1.9.2. You mistakenly used a capital “C” for “Class”, which I fixed, so that might be your problem. Make sure you’re using the right syntax before you call a language shitty – the problem here between the keyboard and the chair.

  35. Javitzso Says:

    In the future there will be two types of computers. One that can process only mundane things like browsing the internet and updating a Twitter account. The other type of computer will have the added ability to compile code for making things. This compiler will be standardized and you will not be able to purchase or own one of these (legally) without a doctorate and certification.

    It will be illegal and abhorrent to experiment in programming languages just as much as performing science experiments on human bodies without the proper credentials and permission. Computers hold people’s lives now! It’s a serious business. It’s not a game anymore. Get these insecure “easy button” languages out of here before some idiot uses them to code a government website somewhere!

  36. Battletron Says:

    Jim, your code returns “____.rb:4: syntax error, unexpected keyword_end, expecting $end” because on line 4 there’s an unexpected “end,” that is, it’s not closing anything. That’s because “Class” should be class. Also, “initialise()” should be “initialize()”. Also, you need to close your quotes. These issues a) are programming 101, and b) shouldn’t need a compiler, as in any decent text editor the errors should literally be color-coded.

    As for the main argument, there are some legitimate complaints about Ruby, and there were more back when it was written (documentation, XML, speed) that have since seen at least partial progress toward resolving. Syntax peculiarities are not among them.

    1. new creates a new instance of a class, and it calls initialize to set it up for you. Think of it more as self.new(*args, &block), which allocates memory, sends the args and block to initialize, then returns the object. It can also be overridden, but generally people use initialize because they don’t want to alter the allocation and return parts.

    2. Already been addressed. Dynamic typing (and Ruby’s focus on duck typing) has its benefits and drawbacks, but given the amount of work some verbose languages like C# require just to maintain the type system, Ruby does eliminate some mindless work. There are speed consequences and type safety consequences, but no programming language is perfect in all cases, and Ruby fits its niche quite well.

    3. Everything returns something. Why is implicitly returning a null or undefined value better than implicitly returning the last line? And given Ruby’s emphasis on closures and chaining, it works: I’d rather see arr.map { |n| “a” * n } than return arr.map { |n| return “a” * n }. Plus, is there a reason and object-oriented language should default to a nil object (or, God forbid, a special literal like null)?

    4. Global vars are generally used sparingly. It’s better that they exist than not. Even if they’re usually a bad idea, in some cases they’re indispensable.

    5. puts can be abbreviated as p. You can use print and end it with a newline. You can alias it in one line with put or say or println or cout or whatever.

    6. Zero-based arrays are what most programmers expect. An array of length l has indices 0 ? i < l. l – 0 = l, so this interval also describes the length of the array. When extended by m places, the added elements have indices l ? i < l + m. They just make the math easy. Plus, there's an ary.first method.

    7. Is there any reason it's worse than else if or elseif or elif or nested ifs? It's just a control keyword, and it's really a fairly uncommon one (roughly 1/10 as common as else and 1/5 as common as case in Rails source, for example).

    8. Are these really being abused?

    9. It takes a second to type private and begin typing private methods after it. Any half-decent code will do this.

    10. Friend accessors? In general, when I see these used it's to break encapsulation. Its legitimate use cases exist, and probably the biggest one missing from Ruby regards testing, but it's hardly something worth hating. Furthermore, despite the limitations imposed by "mere" public/protected/private visibility, they generally allow for terse, legible, fully functional code.

  37. a Says:

    1. I agree… it would be more intuitive if ruby behaved like many other languages and made new and initialize the same method. it would also lead to much more elegant method overloading with multiple constructors rather than a single constructor and a giant case statement for determining how to process the completely arbitrary arg list.

    2. this is pretty standard for dynamically-typed languages

    3,4,5. agree

    6. disagree as this would make ruby unintuitive if you’ve used java, perl, python, php, c#, etc.

    7. no opinion

    8. agree

    9. no opinion

    10. there is the protected keyword

    my biggest gripe with ruby is that one can redefine a class arbitrarily. that wreaks all kinds of disastrous havoc in the wrong hands, esp in a relatively complicated system. this behavior should be modified or at least there should be a warning that a class is defined across N files and what those files are.

  38. feifei Says:

    “#7: A matter of taste. Me, I like elif.”

    man I can not tell you how much I loved this kind of nonsense. when you make public facing product — it better be the taste of public, not “a matter of taste”.

    this is just purely ego, arrogant and stupid to make things unnecessarily different. Unfortunately there are a bunch of smart *ss in this world which
    enjoy to make the world a worse place…and they are clever indeed, that is why we end up where we are.

  39. airtonix Says:

    eh While I’m not a computer scientist, I’m not a fan of the Ruby syntax. I would much rather use Python.

    1) end statements? really? what’s the point?
    2) pipe symbol not being used as a pipe ?
    3) just too many damn weird ass characters in non nonsensical places.

    Python is far more elegant.

  40. Tim Rowe Says:

    Arrays based at 0 or 1? Real programming languages let you *define* the base of the array, to match the problem it’s being used for. Gotta love Ada! 🙂

  41. Isaac Zepeda Says:

    The title should be: “10 things I hate about ruby based on my ignorance” or “10 things I hate about ruby because it’s not like Java”, I agree with the Masklinn arguments u.u, maybe my comment is useless but I want to say it 😛

  42. Seo Says:

    1. Agreed. This has always annoyed the shit out of me; From a design standpoint, initialize is not an easy word to type, it’s a lot of letters, and it’s an ugly word for such a pretty language.
    2. Agreed. As long as the strict-typing system was elegant and faster than the regular type system in clarity and compactness. It would be convenient to have a short, one-line like “foo, bar are String” that auto-throws, or a way to discriminate between a function that could except say a space seperated string or an equivalent parameter array of strings. If an elagent, out of sight solution existed for these problems, I think you could improve (A) readability for functions that are not particularly descriptive in what they accept and (B) potentially even create non-order-dependent functions i.e. “def foo Integer String { puts “#{the Integer}” where a pro-noun architecture could be used to reference a variable.
    3. “When compactness comes at the expense of clarity, it’s a bad thing.”, “Languages should be concise only in so far as that improves clarity.” You would be forced to assume the same argument when people wanted to say 3 + 4 instead of 3.plus(4). You would have to prove your argument on the grounds that leaving “return” off the end of a statement, is grounds for ambiguity. Using less words to convey the same message is an improvement on clarity, not a counter to it. Again, you need to argue that the message is not as easily interpreted by a human as the “same message”. I don’t have a strong opinion on this matter.
    4. There are never times you need a global variable, and there are many times when global variables will fuck you over (Fork will fuck you). With that being said, I personally like using them in temporary scripts because they are immune to object-context and ruby has peculiar scoping mechanisms when dealing with variables and scopes. We will have to agree to disagree here. I prefer languages to have an air of freedom because I think expressibility improves clarity, creativity, and productivity. P.S. To everyone ripping
    5. I think puts is a nice, friendly, word. It’s like “put it here pal” :).
    6. You could say ruby supports this, e.g. “my_arry.first”, but I don’t think that’s to the degree you were considering. I don’t know enough to testify for the fencepost fix argument, but if that works, i’m all for trying it out! (I tried it in matlab, and hated it, but that’s probably because I hated matlab, or because matlab is a pile of shit for uncreative fucks).
    7. Yea.
    8. Yea.
    9. “Minimal interfaces to classes are important. The less a class promises, the easier it is to change, optimize, fix, and otherwise improve.” Disagree. Ruby has always had a strong tradition of having interfaces declared in human friendly “example” documentation and it is often useful to have private functions exposed by default for debugging purposes. The era of “privatize everything” will hopefully die alongside C++, along with Java interfaces. Interfaces are an unnecessary overhead and are nightmares to manage; talk about a waste of time. That is, interfaces, whether they be implied through private/public keywords like ruby/C++, or defined in java/C#; interfaces push programmers to spend their time over-engineering how they are going to cooperate with another department so they can fail horrifically at integration stage because corner cases were not evaluated. This is more a critique on engineering practices in general, however.

    10. “No package access or friend functions.” Similar to answer 9, you will fall victim to over-engineering. KISS

    ~Electrical Computer Engineer for 16 years. 🙂 peace.

  43. Seo Says:

    @airtonix

    “eh While I’m not a computer scientist, I’m not a fan of the Ruby syntax. I would much rather use Python.

    1) end statements? really? what’s the point?
    2) pipe symbol not being used as a pipe ?
    3) just too many damn weird ass characters in non nonsensical places.

    Python is far more elegant.”

    Good thing you’re not a computer scientist.

    (1) end statements are good visual cues for your eyes, and prevent silly things like … say, a misplaced space from catastrophically fucking up your program and preventing the if statements from actually executing the correct lines because it think’s the indention level is off. end is necessary because ruby is not a white-space delineated language (beyond specific instances of newlines).

    (2) Dorthy says, “We’re not in *nix sh anymore”
    (3) Yea, probably. An example is hash syntax, {:this => “sucks”}, when the coffescript equivalent this: “sucks less” is much more succinct. I imagine it has something to do with tokenization because of the ambiguous nature of the coffescript version in comparison with other ocmmon operations. If i’m not mistaken though, ruby has been adding support for these kinds of shenanigans lately. 🙂

  44. Wow Says:

    Anyone who doesn’t understand that Ruby is strongly typed doesn’t know enough to have an opinion.

    “Java is number” + 999999999;

    That will compile and run just run.

    Ruby will spit an error message because it doesn’t coerce types and you morons think Java is strongly typed?

    Whiskey Tango Foxtrot?

  45. Andreas Says:

    So, where is the list of 10 things you love about ruby? It’s been 8 years…

  46. Johaness Says:

    We are at 2015 and Ruby still sux a lot.

  47. Jacques Says:

    Funny, I disagree with almost everything you hate. The one thing that truly drives me fucking insane about ruby, after 8 years of using it fairly regularly, is the goddamn case/when instead of switch/case syntax. I have to look it up almost every freaking time.

  48. Your Programming Language Sucks - Vegibit Says:

    […] Automatic Returns. Good luck with that. […]

  49. fishbreath Says:

    What I hate about ruby is it’s lazy-as-hell fix for variable scoping (@ and @@? Really?) and the obscure, pre-1980s approach to syntax. What’s with all the damn pipe symbols? Why is white space so important? ‘end’ to close blocks? And the whole :thing… It really drives me up the wall. Even PHP does a better job of not looking like total crap while doing what you expect it to do.

  50. Lona Says:

    I also don’t like Ruby but for other reason. First like all script-like programming it’s hard to maintain and there are too many gem and you always need to stay alert to the community to get help. The developer are also hard to find. The community is not so big (compare to C, C++, C#, Java, JavaScript) this is a real problem when you try to get help, maintain your code or the gem you use.

    Actually choosing Ruby is choosing a lot of strong dependency to your code but also to your ressources and development ressources. You are always dependent of something or someone. For big company or to create a website that need performance it may be the good choice but not for rapide development in Agile mode. None of the Ruby developer I met were able to maintain correctly our project.