I suppose we couldn’t give Paul Graham his nerd bona-fides if we didn’t hear him voice his opinions on programming languages… three times… if you ran these essays through a plagiarism checker, I’m pretty sure we’d see a strong dependency circle, but at least we know Graham is consistent.
Before I actually unpack my feelings on Graham’s feelings about programming languages, I’m still mad about “Why Nerds Are Unpopular,” so I’ll blow off some steam by asking: if nerds (and hackers) are born, then do mindset changes actually matter? Why can’t a non-hacker do the same thing and adopt the hacker mindset?
Now that that’s out of my system, let’s talk programming languages. Most people have some idea of what a programming language is, even if that idea is “the spell programmers cast on computers to make them do stuff.” Everyone knows that there is more than one language and if you use the wrong one you’ll be shamed forever. This variety is actually the most cited reason I’ve heard for why people give up learning to code; the weight of figuring out what all of these languages mean and what you want to do in them is harder than actually learning some of these languages. Figuring out how to talk about languages would be great, we could sort this weak pile of labels and get back to using the languages instead of hemming and hawing at them.
Graham presents a simple solution to the problem of picking a language: pick the most powerful one and use it. His proof: it is better than all the others because it is the most powerful, anything else would be less effective.
Hooray! We did it! We solved the language crisis! Let’s go grab a book for the language with the most power and learn the last language we’ll ever need. Okay, powerful language… power… power, power, power…
Power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power, power.
Wait, what makes a language powerful? Is it its efficiency in CPU cycles? But if so, what operations are we measuring? Is it some flexibility in its typing system of data paradigm? Is it its ease of learning? Or maybe the brevity of its syntax? Nobody knows the answer to this question. If you go to any forum discussing programming language, you’ll find ample evidence that not everyone is even aware that this is the question they should be answering.
To his credit, Graham does offer an opinion on what power is: he belongs to the cult of brevity in source code. “It may not be quite true that the shortest program is the least work to write, but it’s close enough that you’re better off aiming for the solid target of brevity than the fuzzy, nearby one of least work.” It’s not a bad argument, it pairs well with his point on sacrificing CPU cycles to save programmer time. But I have to disagree. Partly because of my own principles, partly because it goes against some of Graham’s own statements.
Graham’s best point about languages was the blurb paradox, most programmers are willing to do a less efficient job using a language (tool) that they are familiar with than to take the time learning a new skill. And in that speech Graham says that people should try to rise above this to a acquire a more universally useful tool. Unfortunately, I’m still waiting for that definition of “power” and I don’t think I’ll get it. I contend that there is no single standout language, having a set of tools is necessary to achieve productivity Nirvana. Sorry Graham, you contradict yourself and you’re wrong twice.
I think this idea of languages as a perfectible part of programming is an extension of Graham’s vision of hackers as an artist: the medium through which you convey your messages is important, after all. But for me this is a proof of why hacking isn’t an art form the same way, oh, let’s just randomly say painting is. We choose a language for any number of reasons: resource constraints, relationship to past work, fitness with our mentality, but none of them connect to expressing ourselves: it’s always about getting the job done. Programming languages are all tools, they’re for investing effort to generate products, and avoiding other types of effort (if you write esoteric languages, I guess it’s actually about creating more effort, but that’s a different 500-word blog post). If Graham wants beauty brevity, and perfect axioms, I suggest he switch to math, there’d be much less in his way.