"Programmer" is an over-generalization

Original author: Erik McClure
  • Transfer
There may be errors in this code; I only proved that he was correct, and did not test it.
Donald Knuth

Today I stumbled upon a post stating that it is impossible to use the C ++ STL make_heap function, because almost no one knows how to use it correctly. At first I was indignant at the ridiculousness of this idea - anyone with at least an initial idea of ​​algorithms should know how to use make_heap correctly. But then I thought about how many programmers do not know what a bunch is, moreover, they don’t even need it ... And then I realized that all these people are equally called programmers.

When I was little, I was given a lot of bad advice on the right programming techniques. Over the years, I realized that most of the tips were not bad on their own, but were given out of context. The heyday of startups today is seeing many hackers realize that “performance doesn't matter” is a piece of advice with a lot of pitfalls and nuances of context, especially when it comes to complex architectures that can interact in unexpected ways. The spoiled telephone effect due to lack of context in such statements is a problem in itself, but in reality it is only a symptom of a deeper problem.

The term "programmer" covers a colossal range of abilities and skills. On the vertical axis, a programmer can barely be able to write in vbscript - or develop compilers for Intel or scientific software for airlines. Along the horizontal axis, he can be an expert in databases, improve GPU performance, write parallel computing libraries, physics engines or drivers for printers, do image processing, generate 3D models or research in the field of artificial intelligence, use coffeescript, HTML5 and AJAX for development web applications or nginx and PHP to develop a LAMP stack on which web applications work ... And that’s all the programmers.

This is madness!

Our world is swallowed up by programs. In the future, programming will be a basic course, along with reading, writing and math. Talking about someone "programmer" will be pointless, because 10% of the population, or even more, will be programmers at one level or another. This word has so many meanings that with equal success you can call yourself a scientist instead of a physicist. What are the alternatives? The best attempt to fix it ( difference between developer, programmer and CS scientist) gives you only three options and is unable to distinguish between me and a college graduate with a degree in artificial intelligence. They do multidimensional mathematical analysis and evaluation using functional languages, which I will have to spend years understanding. I write fast code in C ++ and HLSL assembler and juggle matrices of complex transformations to draw pretty pictures on the screen. Both that and that - damn difficult occupation (for absolutely different reasons), and none of us could carry out work of another. That for one of us is a good habit, for the other it is simply disgusting. And both of us are programmers.

Do you know why there are pointless language holivors and senseless disputes about what is better from a practical point of view? Do you know why no one ever comes to an amicable agreement on issues other than narrow circles in which "practice" means the same thing to everyone? Yes, because we are too generalizing ourselves. We think of ourselves as programmers who simply specialize in different things, and we believe that our experience is applicable outside our specialty - and this is not so. We are like industrial engineers who tell chemists how to experiment, or architects who teach linguists how to write essays on the grounds that they both use a lot of paper.

This attitude is rooted in the very foundations of computer science - that a set of basic data structures can do everything you ever need. But it will be a mistake to generalize this to programming in general, simply because it is not true. We forget that these abstract data structures do everything we need only in the ideal country of mathematics, and ignore the differences in implementations created for different fields and completely different applications. Donald Knuth understood the difference between theory and implementation, and we need to learn to distinguish between theoretical and implementation-based advice.

It is not enough to ask someone if he is a programmer. "Programmers write programs" sounds almost like "scientists make science" - that's just nerds do not create nuclear reactors.

Also popular now: