Ding Ding Ding! We have a winner. Anders Hejlsberg is quite possibly the most clued-in designer of a mainstream programming language. The work that Anders Hejlsberg is doing with C# is amazingly progressive and forward thinking. He’s putting ideas like lambdas, type inference and anonymous classes in a mainstream languages used by armies of programmers. This, to a programming language nerd like myself, is a big deal.
So what’s the motivation behind all this? Well, he started off by saying that data does not equal objects. We’ve got data in XML, databases and all manners of weird files. Thus begat LINQ (Language Integrated Query) which makes querying data a first class citizen in C#. In doing so, you start to insinuate a declarative language inside an imperative one.
During his quick tour of LINQ, Anders made a point to emphasize his idea that “we over-specify the solution” in our programs, leaving little room for the execution infrastructure to do intelligent things. He shows some imperative code for ordering, grouping and filtering data, basically a rats nest of loops and conditionals. Using LINQ he refactors the code down to a simple, albeit SQL-ish query.
Once you’ve declared just the essence of your program to the implementation, it can do clever things to make it go faster. For instance, there’s a parallel version of LINQ in the works. Your average developers gets this “for free” by expressing his queries in LINQ. Thankfully, LINQ is just sugar for a straight-up .NET API, so the younger generation of developers who have never used SQL, let alone @malloc@ can still play. ;)
When he was wrapping up, Anders made a comment that, in the future, they are looking into making languages more like services. I think this is a strategy that they share with Sun — it’s not so much about Java or C# as the interesting runtime bits they ship with. I’m not sure where this idea will go, but I like the sound of it.
Some other great Anders pseudo-quotes:
* Pure Functional programming is fantastic…the only problem is that it doesn’t work for real applications
* Transactional memory is the string theory of computer science
* Dynamic versus static typing is a pendulum that is currently swung towards the dynamic side. The answer is somewhere down the middle. (I think he’s doing a pretty decent job of dragging mainstream languages towards the middle)
* Languages shouldn’t solve a problem until the solutions is known. Otherwise, you just slap a bunch of crap onto your language.
This was my favorite presentation of the week. I’m looking forward to talking to friends who use C# about the clever programming tricks I use every day in Ruby. And it should prove fun to gang up on Java folks too! ;)
Eh… Anders is also the guy who crippled c# with the “NO BYTECODE FOR J00!”, making huge swaths of the BCL Sealed, and the single biggest bone-headed move of all time: Default Final Methods.
So now he’s following a trend and invented Extension Methods to get around his own mistakes without breaking the language.
Most c# developers seem to worship Anders. After reading the PoEAA, and trying my hand at a .NET O/RM, I realized this is the guy who made all the cool stuff impossible. If any single person can take credit for the .NET to Ruby exodus, Anders is your man.
Keep in mind he’s also a big figure behind Delphi, so c# was an effort towards a more constricting protect-developers-from-the-sharp-knives type of language.
Of course he’s obviously a lot smarter than myself. And people learn… ;-) It’s just hard to let go I suppose. :-D