A single programming language?


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.


 

Comments (4)

  1. S says:

    I think this is more akin to one nation one language/..or we use so many languages in this world to communicate/express/do stuff..why cannot we do this with one language english everywhere..are we moving towards the goal..definietely yes….so why not do this in the virtual world too..aka software world

  2. Paul Collings says:

    I think I’ve asked myself that question in the past, but over time have come to accept that every skill set/language has it’s own advantages, so the more the merrier as far as I’m concerned now.

    I don’t believe there are two different languages that do _exactly_ the same thing?

    but I could be wrong 😉

    PC