My e-mail newsletter ended last year with a look at the progress of Microsofts C# .Net language. One reader then asked why Microsofts forthcoming enhancements to that language werent part of the first release. He wondered, "Why do we have to keep reinventing these wheels?"
Certainly, the family tree of the proposed C# improvements seems to suggest learning opportunities being overlooked during initial language design: generics from C++, iterators from CLU and Icon, and anonymous methods from LISP and Python.
It would be unfair, though, to treat language features as mere checklist items. The proposed generics for C#, for example, will take advantage of the high-level program intelligence thats available in .Nets Intermediate Language and during its run-time compilation.
Programmers using generics in C# will be able to develop logic once and apply it to similar problems involving different data types while enjoying the protection of the type-safety facilities offered by the .Net infrastructure. This is a big step beyond whats essentially the macro-expansion of source code text in generics for C++; Microsoft says that it will also prove more efficient than Javas generics because of limitations in Java virtual machine (more at www.gotdotnet.com/team/csharp/learn/future).
Its tempting to argue that, as more code is generated by visual construction tools or purchased off the shelf, only a shrinking slice of the developer population needs to care. But as application architectures spread their intelligence across more nodes of the network and through more levels of the IT stack, the need for expressive languages—and for developers who can follow the conversations—isnt going away soon.