Vindication
February 04, 2005, at 11:58 PM
Somebody at Microsoft Research named Todd Proebsting, who doesn't seem to have his own blog, recently got a mention on Lemonodor for a talk he gave a few years ago, "Disruptive Programming Language Technologies". I went to read the Powerpoint slides because it sounded mildly interesting, and, well, it was mildly interesting. But I realized as I got further in that it says something I really enjoyed hearing:
Optimization, he says, is the least important open problem in language design. The most important is increasing programmer productivity.
I doubt any Lisp-using readers I have need to be told why that's a feel-good kind of thing. Personally, my aspirations have always been to build better metatools, but I've sometimes felt that that's just my private obsession, not something that most programmers would see the value of. Well, it may be true that most programmers won't see it as important, but it was nice to be told that it was this once!
Within the next few decades, I expect compilers and development environments to change beyond anything we would recognize. The most immediate change I predict is better support for cross-language development. With things like .NET out there, this is no longer a particularly insightful thing to say, but it's a trend worth pointing out. Notice that every single new language has to get an FFI really quickly if it's going to be widely used. That points to the importance of the problem.
Since it is important, of course, we are going to solve it. I think ultimately, we won't even think of programs as being written in any particular language, because we will be able to mix and match so freely.
Of course, that would be a maintenance nightmare without some sort of help to the poor programmer who is fluent in fewer than ten thousand programming languages; but I further predict systems to make it easier to cast code into familiar terms. Just translating the surface syntax into any chosen language is really quite easy for most languages; the only exceptions I can think of offhand are APL and Perl.
Of course, even with automated syntax translation, APIs and semantics would continue to be unfamiliar. A challenge to any readers I may have: Propose an off-the-wall idea for how to help programmers use APIs and semantics they have not previously encountered.
It's probably safe to regard semantics as a small set of options: Explicit deallocation; garbage collection; or no dynamic memory at all. Lexical variable scope; global scope; dynamic scope. Pure-functional, or not. Closures available, or not. Pointer aliasing allowed, or not. Sure, every few years something new gets invented, but for now it's still a fairly small set. Isn't it? Am I overlooking anything?
Oh yeah, here's those Powerpoint slides, for the curious.
This is a very new blog! Let me know you're reading!