Last Login:
September 01, 2015


User Profile

Hits: 71,577
Joined April 08, 2010
Examples (2)
Favorite Users

"Programmer" is an Overgeneralization
Posted on February 06, 2012 at 00:31

Originally posted on my blog.


"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.

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...
Posted by Mega February 06, 2012 1:47 - 5.5 years ago
| [#01]

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.
Posted by Alert Games February 06, 2012 2:21 - 5.5 years ago
| [#02]

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.
Posted by sirxemic February 06, 2012 2:49 - 5.5 years ago
| [#03]

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.
Posted by JuurianChi February 06, 2012 6:46 - 5.5 years ago
| [#04]

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".
Posted by death February 07, 2012 11:21 - 5.5 years ago
| [#05]

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.
Posted by SleepinJohnnyFish February 08, 2012 19:25 - 5.5 years ago
| [#06]

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.
Posted by blackhole February 08, 2012 19:57 - 5.5 years ago
| [#07]

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)
Posted by DesertFox February 09, 2012 3:35 - 5.5 years ago
| [#08]

I gotta say blackhole, this was quite the read. I haven't really run into these kinds of issues irl yet though, but I have begun to realize that programmers should not be generalized. There are just way too many things they could specialize in, regardless of their "skill" level.

As all of my thoughts have already been stated, I'm just gonna cut to the chase and say that "I AGREE, LOL HTML". And I'm interested in seeing how this blog blew up on reddit.
Posted by Aistarin February 09, 2012 4:01 - 5.5 years ago
| [#09]

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.
Posted by Alert Games February 09, 2012 14:17 - 5.5 years ago
| [#10]

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.
Posted by blackhole February 09, 2012 15:34 - 5.5 years ago
| [#11]

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

These people exist..?
Posted by Rob February 10, 2012 1:45 - 5.5 years ago
| [#12]

These people exist..?

Yes... yes they do.
I deal with them daily. They advertise themselves as 'web developers', when they only know a bit of HTML and CSS. No JavaScript or PHP in sight. Letting their egos down is fun though. Heheh.
Posted by Mega February 10, 2012 3:07 - 5.5 years ago
| [#13]

I can sort of understand web developer, but programmer?!
Posted by Rob February 10, 2012 15:19 - 5.5 years ago
| [#14]

Shit, I still need to learn JavaScript in order to consider myself a web developer.
Posted by Aistarin February 10, 2012 16:18 - 5.5 years ago
| [#15]

Recent Activity
Active Users (0)