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"