Posted May 20, 2009

Today at lunch, a few of my colleagues got into a discussion of the merits of some of the new language features in the .Net family. Unfortunately, I was at the wrong end of the table to participate in the discussion, but it has spawned an article that I want to respond to. Go take a look at it, then come on back.

To distill Ben's thesis, he's "annoyed that many of these 'cool' language features in C# are nothing more than libraries in Smalltalk". I can understand his annoyance. C# is being touted for having new, innovative language features while languages like Smalltalk get relatively little attention despite having similar features (though usually as a part of a library) for years.

Ben goes on to show how C#'s ?? operator (which returns the left expression if that expression is not null, and otherwise returns the right expression) can be added very easily to Smalltalk.

I guess this is why, despite all of its faults, I have a lot of trouble giving up on Smalltalk. C#s a good language, and .NETs a good framework; but I cannot help but feel that this isnt an issue of reinventing the wheel, as much as forgetting that we can provide programmers the tools to make their own types of locomotion.

Unfortunately, I think he is missing the bigger point. I do not disagree that giving programmers the ability to "make their own locomotion" is important. It is, in fact, completely necessary if you want a language to have useful libraries. But it is also a virtue when languages make it unnecessary to create a new five wheeled vehicle.

And we've been there before. There was a time when language designers seemed to think that a good language implemented a minimal set of features. And from that mentality we got languages like C++, which couldn't even go as far as implementing a native string type. In fact, there are so many that people have created comparison pages to help you figure out which one to use.

So while I can understand his frustration that Smalltalk hasn't gotten the same attention as .Net for features that are trivially implemented, I feel that his argument is analogous to saying that I should not be excited about Python having a built in string type because C++ has always had the ability to implement one.