I've been reading Good Math, Bad Math for a while now, and it has a fair number of interesting posts on it.

Today I read Why so many languages? Programming languages, Computation, and Math. (a followup to Type Checking in Programming Languages)

As a former semi-professional language designer (involved closely in the C# language design), and develop whose written in a fair number of languages, I think that Mark is missing part of the point.

At a high level, languages have different kinds of abstraction *and* different levels of rigor.

Mark's discussion seems to be about the former point. And it's true that that kind of abstraction means something - functional languages are inherently better at some sorts of problems, and worse at other sorts of problems.

Now, could you design a language that incorporates features of functional languages and procedural languages? A combination of Haskell and C#?

I think you could. Whether it would be coherent and understandable (ie usable) is another matter - I think you could easily end up with an awful mess. And even if you didn't, it could easily be so big conceptually that it would be hard for many developers to get their minds around it. Compactness and simplicity have big benefits as well in programming languages.

Those who have been following the LINQ project may have noticed an obvious parallel - LINQ is precisely about taking two different languages and figuring out how to join them in a rational way. I don't think it's going to be a mess, but whether it adds too much complexity

The second point - which Mark doesn't cover - is one of rigor. Different application spaces require very different levels of rigor. Or, to put it another way, the amount of rigor that it makes sense to pay for is different from application space to application space.

For what professional developers think of as "real projects", rigor - in the form of strong type checking, contracts, things like that - is a very useful thing, as it helps achieve the target quality.

But for what I'll call casual software - which encompasses a really broad range, from scripts to hobby programs to web pages on up to some departmental apps - that amount of rigor isn't required, and sometimes the cost isn't worth it. I could write a short script to launch my profiler and do something with the output in a high-rigor language, but it's probably faster to write it in Perl, or some other scripting languages.

I do a fair amount of carpentry and some woodworking in my spare time. The question "why is there more than one programming language?" is akin to asking "why do you own more than one saw?"

Different tools for different jobs.