I just read a blog post, The Myth of the Superior Programming Language. In it, he points out that people who insist on using some wack-ass different programming language are kind of annoying. I agree with this. I'm trying to learn the Go programming language right now... and I notice that, while I love the new features, I also really like the parts of the languages that act like, you know, other programming languages. Anyhow, this blogger, Jonathan Edwards points out: Haskell does not make your program better. And of course this led to a chorus of bitching from fans of esoteric programming languages. It's pitiful. Ah, programming languages, realm of yelling and pissing matches. But why just read a blog post when you can read a long book?
Masterminds of Programming is a saddening book, reminding us of a class of the world's great computer programmers who have all been reduced to brittle husks: programming language designers.
This book is a series of interviews with different programming language designers. A programming language, is, of course, a tool that a computer programmer uses to express a program. Depending on which programming language you use, your program that prints "hello world" might look pretty different. In some versions of the BASIC programming language, there would be "line numbers" scattered all over the place. These "line numbers" made it easy to use GOTO statements:
10 PRINT "Hello World!" 20 REM GOTO 10
GOTO statements are the subject of Edsger W. Dijkstra's long essay "Go To Statement Considered Harmful", a paper from 1968. I think this shows the root of the problem: Trolls have been complaining at length about computer language features for over 40 years. If you design a programming language, what you actually just did is sign up to argue with jerks for the rest of your life. And you can't turn to other programming language designers as a support group. Here's the Java "hello world" program (yes, I'm grabbing these from that excellent web site that has "hello world" in many languages):
class HelloWorld { static public void main( String args[] ) { System.out.println( "Hello World!" ); } }
If you designed BASIC, you're not going to cry on James Gosling's shoulder (i.e., the shoulder of the guy usually credited w/designing Java) about language trolls. Look at that "hello world". It's totally different than yours. James Gosling wants to argue with you just as much as the trolls do. He thinks your language is a mess.
I'm being unfair when I lump Djikstra in with the trolls. At least he talked about a language feature. Most of the trolls aren't even complaining about language features. They complain about frittering little details of language syntax. If I never have to hear another argument about semicolons in programming languages, I'll be very surprised. They just go on and on. People who like semicolons are tiresome; people who don't like semicolons are tiresome; all of these people love to type screeds in discussion groups.
The purpose case are those of expressions are the meaning able feature of semi-colon insertion the end of a statement. Sigh. I seriously do like it. I seriously do not semi-colons option the end of semicolons? Your semicolon insertional is so these low-class couple of places in a number of a statement but in argument - the meaning sever I do not see where's a couple of a statement but it is to leave out the current spanning in at the semicolons? I thought by desire to put think you're making able feature of a statement lists.
I made that text by following the steps:
- go to a discussion group about a programming language (golang-nuts, in this case)
- find a discussion about semicolons
- feed text from that discussion into a Markov chain text generator
At no point in this process did I wonder "Hey, will there be a discussion about semicolons?" Of course there was a discussion of semicolons. Programmers who talk about programming languages can't restrain themselves from discussing semicolons.
If you design a programming language, you are signing up to read drivel like this for the rest of your life. Half of it will be directed against you. Half of it, to your anguish, will be written on your behalf.
There's a blog post that folks discussed at work. It's a jokey History of Programming Languages. It's funny, so people talked about it. But it's about programming languages, so the discussion quickly developed pockets of mean-spirited argument. "Ha ha, I liked that joke about my least-favorite programming language. And furthermore, I will point out something else about my least-favorite programming language." "Your least-favorite programming language is my favorite programming language, your joke is without merit, and that points out a lack of discernment on your part." It's like that, only with the details filled in. Meaner and yet somehow more boring. At least it's boring around the 100th time you've seen the same details trotted out. Most of these angry statements—they're not even part of this discussion. They're reactions to some previous argument about programming languages. Some nerd thought of something funny to say at Haskell's expense, but thought of it too late. So he kept it in mind for a subsequent argument about programming languages. Of course there will be a subsequent argument about programming languages. And when that argument happens, whammo, here's a swipe at Haskell seemingly out of nowhere.
My people. My people.
If you beat on somebody long enough, there's a couple of ways their personality is likely to turn out:
- sullen and withdrawn; avoiding conflict by avoiding the world
- lashing out randomly at friend and foe alike
Reading this book, I'd say these two personality types cover 90% of language designers.
45% of them are sullen: careful not to say much of substance at all: Good design is good; a computer language should make it easy for a programmer to express their intent. If you're familiar with their language, there are some topics you're especially curious to know their opinion on. However, when interviewed, they avoid these topics; they're tired of arguing about them.
45% of them lash out: my programming language is better than all others because of this and that and the other thing. When that other language stole my language's feature, they proved my language's worth, because they thought a feature was worth stealing; but then they combined my stuff with other stuff that wasn't as good, and it sucks.
They're not all bad. (OMG if you're one of the people interviewed in this book and you think I'm calling you a prick: of course you're one of the 10% nice ones. Please don't throw rocks at me.)
In Brian Kernighan's interview, Kernighan goes out of his way to say nice things about other languages. He does it more than once. As I read that, I thought, "Boy are you in the wrong book."
I learned some things from this book. I learned that "generics" in programming languages don't mean what I thought they meant. I learned that the folks who designed SQL started out with an interesting idea: a language for describing the structure of data (instead of just concentrating on actions carried out upon that data).
But mostly I learned... wow, I'm really glad that I never designed a programming language. As it is, when programming language bickerfests break out on some mailing list, I can just hunker down. But if you design a language, you just have to face that crap all the time.