"Programmer" is an Overgeneralization

Posted by blackhole on Feb. 5, 2012, 11:31 p.m.

Originally posted on my blog.

Quote:
"Beware of bugs in the above code; I have only proved it correct, not tried it." - Donald Knuth
Earlier today, I came across a post during a google-fu session that claimed that no one should use the C++ standard library function make_heap, because almost nobody uses it correctly. I immediately started mentally ranting about how utterly ridiculous this claim is, because anyone whose gone to a basic algorithm class would know how to properly use make_heap. Then I started thinking about all the programmers who don't know what a heap is, and furthermore probably don't even need to know.

Then I realized that both of these groups are still called programmers.

When I was a wee little lad, I was given a lot of very bad advice on proper programming techniques. Over the years, I have observed that most of the advice wasn't actually bad advice in-of-itself, but rather it was being given without context. The current startup wave has had an interesting effect of causing a lot of hackers to realize that "performance doesn't matter" is a piece of advice riddled with caveats and subtle context, especially when dealing with complex architectures that can interact in unexpected ways. While this broken telephone effect arising from the lack of context is a widespread problem on its own, in reality it is simply a symptom of an even deeper problem.

The word programmer covers a stupendously large spectrum of abilities and skill levels. On a vertical axis, a programmer could barely know how to use vbscript, or they could be writing compilers for Intel and developing scientific computation software for aviation companies. On a horizontal axis, they could be experts on databases, or weeding performance out of a GPU, or building concurrent processing libraries, or making physics engines, or doing image processing, or generating 3D models, or writing printer drivers, or using coffeescript, HTML5 and AJAX to build web apps, or using nginx and PHP for writing the LAMP stack the web app is sitting on, or maybe they write networking libraries or do artificial intelligence research. They are all programmers.

This is insane.

Our world is being eaten by software. In the future, programming will be a basic course alongside reading and math. You'll have four R's - Reading, 'Riting, 'Rithematic, and Recursion. Saying that one is a programmer will become meaningless because 10% or more of the population will be a programmer on some level. Already the word "programmer" has so many possible meanings it's like calling yourself a "scientist" instead of a physicist. Yet, what other choices do we have? The only current attempt at fixing this gave a paltry 3 options that are just incapable of conveying the differences between me and someone who graduated from college with a PhD in artificial intelligence. They do multidimensional mathematical analysis and evaluation using functional languages. I write incredibly fast, clever C++ and HLSL assembly while juggling complex transformation matrices to draw pretty pictures on the screen. These jobs are both extremely difficult for completely different reasons, and neither person can do the other persons job. What is good practice for one is an abhorration for the other. We are both programmers.

Do you know why we have pointless language wars, and meaningless arguments about what is good in practice? Do you know why nobody ever comes to a consensus on these views except in certain circles where "practice" means the same thing to everyone? Because we are overgeneralizing ourselves. We view ourselves as a bunch of programmers who happen to specialize in certain things, and we are making the mistake of thinking that our viewpoint applies outside of our area of expertise. We are industrial engineers trying to tell chemists how to run their experiments. We are architects trying to tell English majors how to design an essay because we both use lots of paper.

This attitude is deeply ingrained in the core of computer science. The entire point of computer science is that a bunch of basic data structures can do everything you will ever need to do. It is a fallacy to try and extend this to programming in general, because it simply is not true. We are forgetting that these data structures only do everything we need to do in the magical perfect land of mathematics, and ignore all the different implementations that are built for different areas of programming, for completely different uses. Donald Knuth understood the difference between theory and implementation - we should strive to recognize the difference between theoretical and implementation-specific advice.

It is no longer enough to simply ask someone if they are a programmer. Saying a programmer writes programs is like saying a scientist does science. The difference is that botanists don't design nuclear reactors.

Comments

Astryl 12 years, 3 months ago

Blackhole, this was one of the best reads I've had in a while. And I'll agree totally with it.

I'd like to think that my techniques are the best, because that's what all people do. But of course, my techniques won't apply to, for instance, your area of expertise. I write 'correct' code, I don't optimize it until the second time I write it (Optimization should be designed into the solution, but it's no use trying to make an optimized solution when you haven't even got the basic solution - opinion).

Also, let me tell my brother quickly that he's not supposed to be designing nuclear reactors…

Alert Games 12 years, 3 months ago

Interesting read. And I agree with some points. My school has 3 concentrations of computer science, which is business software, game, and scientific. Of course theres barely any difference between them.

What I found interesting though is your statement about how our world is being eaten by software, and I think its true really. Software is a form of robot if you will. It does things for us so we don't have to do them. And of course this can lead to some bad consequences, but also good things.

Also I looked at your link, and I find it funny that I pretty much completely fit the developer category. I've considered myself a developer, and this just clarified it so well :P I also know someone in my classes that would fall under computer scientist, and another under programmer ;) I think the best is a combination of all 3 to get the job done.

sirxemic 12 years, 3 months ago

As I am someone who doesn't take take things 'just' for granted and am actually willing to learn how things work, I know what good practices apply to what I am trying to do, and I'd consider using some by recalling the reasons why they are good in practice in the first place. Furthermore, I haven't really met people who have given me bad advice. So even though I somewhat agree because I am not new to the Internet, I cannot really say that I've actually experienced programmers generalizing themselves.

According to that link I am a programmer, which is funny because I am doing a Master in computer science & engineering, where I'll be specializing in visualization and CG.

JuurianChi 12 years, 3 months ago

I guess I fall into the Generalization of Developer.

But you're right about the ever retarded "Language Wars" it's all the same if you look at it a certain way.

death 12 years, 3 months ago

+1

i agree. whenever people ask me what i'm studying i feel like i have to say "programming" but at the same time i'm like "well that doesn't tell them much".

SleepinJohnnyFish 12 years, 3 months ago

I feel the same way, but I usually just stick to Video Game Developer. It's also pretty general but for the most part they don't need to know anything about the specifics. They won't care or understand if they don't know games well enough to ask you what you do specifically right off the bat.

blackhole 12 years, 3 months ago

My primary concern is usually my inability to articulate how different my job is from another programmer who is convinced that either I can do their job or they can do my job even if they're a database programmer and I'm a graphics programmer. They do not understand that these are two completely different problem spaces. After this blog post exploded on Reddit, most of the comments there pretty much cemented my suspicion that most programmers really do think that code is code and any programmer can do any kind of programming given a month to look over a few functions or a library.

DesertFox 12 years, 3 months ago

I've run into the same thing too. More than once I've had a friend ask for help with some programming issue and I can't because I'm not a database developer or whatnot.

I would however like to say any programmer can do any kind of programming so long as they are able to learn it properly - which leads into just as big a problem a la people assuming that they can be good at all types of programming when they really can't.

(Also it really annoys me when people think html is the same as programming. Arghargharghrageface)

Alert Games 12 years, 3 months ago

Well, I think you actually can do other kinds of programming given you take a month to read up on it.

But obviously without experience, they are not specialized with it. This is where the difference comes in. A person who is experienced with graphics programming vs computer science programming will be much better at it than the person who only reads up on it and practices only a little bit.

blackhole 12 years, 3 months ago

You can spend a month reading about nuclear physics too and that doesn't make you a nuclear physicist, which is the point I'm trying to make.

Reddit post.