📜 ⬆️ ⬇️

About Encoders, Programmers, and Software Engineers

On this post I was prompted by recent articles on Habré " Who is a programmer? " And " Why Python is so good at scientific computing ."

Reading the comments to them, I repeatedly ran across arguments with the separation of developers into “coders”, “programmers” and “software engineers”, and other labeling.

All this led me to certain thoughts, some of which I have already stated in the comments to one of the posts, and now decided to add and issue as a separate publication.
')
image

Let's look at history. How and why did computers and the first programs appear? To accelerate and improve the accuracy of mathematical calculations and algorithms. Cryptographers wanted the ability to have thousands of combinations to decipher secret messages, the military wanted the ability to quickly and accurately calculate the flight paths of artillery shells and rockets, the builders wanted the ability to calculate the strength of structures with different source data, etc.

In turn, the process went something like this: first, the subject area is examined, the algorithm is thought out, calculation formulas are derived, and then the whole thing is translated into a program (machine) code.

The people who did everything except the last point were the “engineers”, the people who translated the algorithm described in the form of mathematical formulas, flowcharts or natural language were “coders” (or, then, still simply “programmers”).

image

The years went by. The technique developed, languages ​​of a higher level appeared, OS appeared. “Coding” has become easier, and the engineers and scientists who worked out the formulas themselves could already state them in a programming language, compile and debug them. There were people who combined both positions, and they were "software engineers." So far, everything is also ok.

And then the fun began. Computers and microcontrollers have penetrated everywhere, from large data centers to handheld devices. The scope of their use has also significantly expanded - not only scientific and engineering applications, but also information systems, workflow, communications, entertainment and games, etc.

The complexity in the “algorithmic” and “scientific” plan in a very large number of tasks (even if not in a predominantly large) began to decline, but the software products themselves began to grow in complexity and functionality, the number of technologies and libraries increased, programming languages ​​began to become more complex, and A serious criterion for assessing the quality of software was not only “to work,” as before, but also “to be implemented optimally, to have a thought-out extensible architecture, readable code and documentation, etc.”. And the “programmer” has turned from a “translator from human to computer” to “software engineer” - in other words, if you compare programming with construction, any collective farmer can build a barn, but a skyscraper or bridge so that he can stand for a long time any. This is pretty well described in the article " Do not confuse software development and programming ."

image

And then another change occurred, already managerial-social. As in the 90s, everyone understood that when programmers develop UI / UX, they often get something terrible, like this:

image

and as a result there appeared such a separate profession as a UI / UX-designer. A little later, everyone understood that it is difficult and expensive to demand to combine in one person both a software development professional and a professional in some subject area. As an example, look at 1S'nikov (sorry in advance, I don’t want to offend anyone, I have a former brother 1'nik) - in theory this should be a programmer-accountant, but in fact it turns out a non-accountant and a non-programmer.

This brought problems as employers (for example, it is not easy to find an expert expert in the field of trading on the stock exchange, and it is not easy to find a professional in the field of software development, and the likelihood of finding a person who combines both of them, respectively, is still much lower) it brought the same way to the workers themselves (in your city there may be ten companies where java-signors are needed, but each has different specialization in the subject area), and some bright heads got a brilliant idea: analysis of the subject area, formulation of the TOR, and about One person should be engaged in business (a business analyst, a manager, a technologist), and another person (a programmer) should develop software to get a result.

In the black were all. And this is good, and more and more companies are now working on this model. Just look at the summaries on headhunter sites - they are looking for “Senior Java microservice developers” or “ReactJS Middle developer”, and “knowledge of the specifics of the banking sector” or “experience in the XXX industry” is indicated as “good” ".

image

True, the concept of “one is writing algorithms, and the other is their kodit” has changed a bit - on the one hand, it has become easier, because in 90% of the tasks nowadays, it’s more important not the invention of the algorithm or the data storage structure, but the competent choice and optimal use of existing concepts, or their modification for specific cases. But even without the “creation of algorithms” it is impossible to work in principle, since no one formulates tasks like “allocate an array, make a loop for passage element by element, etc.” (this is only found in computer science lessons), now the developer is using the information about “what is and what should work out” developing a sequence of actions . In fact, even an elementary SQL query is already an algorithm.

That is why it can be said that the division into “ coders ” and “ programmers ” was out of date about 20 years ago, now these concepts have become blurred and the division does not make sense.

But here, I still want to somehow divide those who simply “came up with an algorithm and sets it out in the form of a code” and those who are engaged in “software development”.
And here the old division comes in handy again. Anyone who just came up with an algorithm and wrote code on it would be quite sufficient to be considered a " coder ", but someone who not only comes up with the algorithm and coding, but also writing tests, documentation, architecture and API, takes care of readability and reliability. code, and is involved in many other processes, can be considered a " programmer ."

And what about the " software engineers "? As I said at the beginning, in contrast to the old years, software development is not limited to engineering and technical tasks, and everyone who works with computers is no longer required to have a higher technical education. Nowadays, in addition to the "software engineer" and "mathematics programmer" there can be a "programmer chemist", "programmer financier", "gamemaster programmer" (they will understand the role players), and even a "programmer". That is, in fact, this concept only indicates the sphere of human tasks, for which he is engaged in programming.

And considering how often things are going in software development in the field of engineering:
“I’ll reveal a terrifying secret - embedded-software is tested at least an order of magnitude less and worse than any scrubbed web server. And dinosaurs often write it, the debugger is for wimps, and “if the code is compiled, then everything works.”
... I am not joking, unfortunately. ”[ From comments ]

“No wonder. According to my observations, many hardware workers believe that the production of a device is an art subject to the elect, but he can write code to it himself, on his knee. Well this is generally a trifle. It turns out a working quiet horror. They are very offended when they are told on their fingers why their code smells foul, because ... well ... they did a piece of iron, why not, the program is some kind. ”[ From comments ]

and scientific activities:
“In my experience of scientific work, I can say that when one or several people work on a task, he does not reuse the speech code. They write about how it will turn out, they use minimal language features, most do not know about version control systems. ”[ From comments ]
in many cases, the definition would sound more like a “engineer-coder” or “mathematician-coder”.

If someone wants to offer other versions of interpretations and names - I will be glad to see the comments and reasonable comments.

Source: https://habr.com/ru/post/350362/


All Articles