> If you were trying to make a machine that goes “Ping!” to alert the CEO's secretary that he's got a new email, then any old bodge job will do, even Java possibly.
Yeah, no. That's exactly the opposite actually. If you're trying to make a very complicated and specialized piece of software likely to run on a dedicated machine you'll want to write it in the language you're familiar with, because you're infinitely less likely to screw it up than if you were trying to shoehorn your mental mechanisms into another language. Then if it's really, really, really impossible to run that on any machine that you can get, you'll magic in into a piece of C (there are tools to do that for most high-level languages).
On the contrary, when you're designing a tiny little thing that is both utterly unimportant AND will run atop of gazillions of other tiny unimportant things (such as the ping machine you described), it is of outsanding importance that you make the effort to write it as tightly and as efficiently as humanly possible, because if running the ping machine together with the secretary's minesweeper crashes her machine, you and several other people are in the shit. And even if it wasn't the CEO secretary, writing things badly "just because it's small anyway" is the stupidest thing ever, because in real life piling small crap upon small crap is what makes you run out of ressource for the important things.
The important things being less than optimal (as long as they can be proved to come up with the right result) is less of a burden, because they're important, so subsequent people in the loop will either throw more ressources at them or optimize them (there are plenty of automated tools to do that); no-one's going to do anything like that with the small things, and they'll clutter systems 'till the end of times. And that's bad, m'kay?