Ruby Quirks
engineyard.com
engineyard.com
I like that sentiment, especially if it's tempered with not actually doing any of them until you run into a legitimate use case.
But in the meantime, finding weird corner cases seems very hacker-ish to me. It may not make any sense to me, but someone else may look at the article and say to themselvs, "aha!" and they may discover a new way to do something.
I can't help but think that Symbol#to_proc probably looked just as weird the first time it was explained to someone: When the interpreter sees &, it sends the #to_proc method to its subject and converts the result to a block. So if we implement a #to_proc method for Symbol we can use &method_name instead of writing out a block...
All that being said, I have no idea what you've been reading lately, so maybe it really is the worst you've encountered. Under the circumstances, I won't actually disagree with you, just share my own perspective :-)
For example, I can see the value of allowing a default function argument to be a Proc/lambda. I can even imagine how it might make sense to allow it to be a named function declaration -- if def actually returned a function object, rather than nil as the article notes. But what the author demonstrates seems to me nothing more than a broken consequence of Ruby's syntax.
Finding weird corner cases may indeed be very hacker-ish, but blindly labeling them as good is not, in my opinion.
I could be wrong about the value of this construct; someone might come up with something useful you can do with it. But, until then, I'm not going to view it as anything other than a curiosity, not as an example of "ZOMG look how cool Ruby is!!11!".
Regarding Symbol#to_proc, I would say that it is only syntactically weird. But if you have any background with functional languages, it's an incredibly natural semantic construct.
Did Thomas do that? I don't see anywhere where he "blindly label(s) them as good". Right there in the title he calls them Quirks, and he says you have to love them. Then, in the text he explains, quite clearly, that you should almost never use these in actual code.
I think you've missed the point that the examples presented (especially the function definition in a default argument) merely show how Ruby works; specifically that all code is executed as expressions during runtime. To me these "quirks" are similar to showing somebody that dereferencing an offset to an array pointer in C is the same as using an array index. You're not going to do it in production code, but knowing that it's possible helps in better understanding what's going on with all that code you write.
Is it x = foo(bar, baz), x = {foo(bar), baz} or something else? I could probably derive the true meaning by looking at surrounding code, but I shouldn't have to.
Anyhow, my point is that I can write C or Java or whatever else that's just as unreadable due to its lack of clarity, but that doesn't mean I will. It's a skill issue more than a language issue. ;)