The Ruby book is great, and I've learned a lot reading it. (Haven't read all of it. But the morsels I've sampled were really appetizing.) But something struck me as odd. One of the nicest things about Smalltalk is that statements read like ordinary imperatival sentences in English. Instead of writing object.doFoo(otherObject, thirdObject) you can write object doFooWith: otherObject andWith: thirdObject using prepositions and not simply named parameters. I know it can make you go "blink" if you're used to the parentheses and commas approach, but it lets you write amazingly readable code -- there's very little "semantic gap" between the way you would think and talk about a problem and the way you write a Smalltalk statement. The authors praise Ruby for having dropped this "non-standard" syntax. I can see how dropping it would be a selling point if you were thinking about enticing people to pick up Ruby after C++, Java or Python, and maybe it's just a matter of making reasonable trade offs, but if you bracket concerns about people's prior familiarity with other languages, I lament the loss of the Smalltalk messaging syntax. For how many years will we be designing new languages that look enough like whatever looked enough like C to catch on? What Ruby does share with Smalltalk is the use of blocks. I might grow to like blocks, and I'm not denying it's a powerful feature. But it is not a feature that lends itself to readable code. I find it much easier to quickly get my head around a Python statement like for each item in myCollection I'm going to keep an open mind about this. But the decision to borrow blocks and drop the Smalltalk messaging syntax is the exact opposite of what I would have wished for. But maybe in six months I'll come round. -- invert: asu.edu jdevlin insert: shift "2"