
Now programmers are well paid for narrow-profile tasks, be it development for a single platform or applications of the same type. But the industries that are called the most promising require a deeper study of related areas, an understanding of both the natural and human sciences. I believe that the breadth of knowledge is again becoming more important than narrow specialization, and soon in programming everything will be different.
"Programmers" are better called engineers
I never use the word "programmer" in my work. When I address people in my profession, I always try to call them engineers. The very narrow wording "programmer" - just like the "tester", for example, - poorly reflects the specifics of our profession. And the further, the worse this formulation works.
Take this example. In the classical sense, there are "programmers", "testers", "project managers" and other specializations. From the point of view of roles, this division makes sense, because historically, any division of labor arose from the fact that the means of labor management required special knowledge. Roughly speaking, in order to become a tester, I need to study certain tools — as well as an engineer who develops for a specific platform.
As time passes, the entry threshold becomes lower. For example, in Microsoft now there is no such role as “tester” - they have developer in test. In this case, all the people who are engaged in the development are called software engineers (software engineers), they are simply involved in slightly different areas. Now it became so easy to master the tools that the boundaries between specific specializations are erased. In the future, there is hardly any separation, say, into a JavaScript programmer, a Python programmer, or a .NET programmer — just like the separation between the front end and the backend.
')
True, so far there remains a problem with the means of expression. There is javascript on the front end, and it’s more convenient to choose another language on the backend. From this thought, the whole trend came from Node.js. This simplifies standardization and team building, the knowledge and expertise of which will be approximately equal. Yes, Node.js has problems now, but it’s much more important that we get the same set of tools in the frontend and backend.
Knowing a programming language is not enough
An understanding of the technological stack, the technologies that underlie what a person uses, is becoming more and more important. There are people who program in JavaScript, and when asked how the TCP protocol works, they say that this is too low-level and they don’t want to figure it out. That's scary: based on my experience, understanding the basic principles that lie under what you use is very important. For the time being, this may not affect, but, as a rule, narrow-sightedness in one technology does not allow making normal decisions for the entire technological stack.
Here is an example of what I mean by the technology stack in the case of the browser. There is JavaScript, there is an idea of ​​what is HTML, the HTTP protocol. A JavaScript programmer cannot get away from this, he has to understand him - just like where the isolation and cross-domain security rules came from, how SSL works, how certificates-based security works. Further, if we go to the backend, then the person must understand the organization of data structures. In any more or less complex application, when it comes to visually displaying complex data structures, combining tables and organizing samples, the interface and backend become directly connected. It is very difficult to make an effective application if the people who make the interface do not understand at least the basic problems that need to be considered in the backend: sharding, data organization, query structure. And vice versa: it is very difficult to make the correct API in the backend, to correctly foresee the possibility of sharding and horizontal scaling, if the person who writes the backend does not understand the problems that exist on the front end.
You can go below - and long to say that you do not want to think about how the processes and threads in the operating system are arranged. But, when you, for example, choose how to run your application on the web, the question of processes against threads immediately arises: you need to understand how they differ, pros and cons, how it works. People who do not understand this, at some point, run into the ceiling of professional growth. This happens often: there have always been few people who think broadly, systematically and study new areas. You can always do websites of the same level without thinking about complicated things, but making a website with a large number of clients and dynamic content is fundamentally different. Often this step can not be done without building in my head the foundation of basic knowledge.
The line between designers and engineers will remain
In the future, blanks created by designers will begin to turn into programs faster. This has largely happened in programming for desktop platforms, where there is a set of ready-made elements with visual editing. As for the programmer part, it will certainly remain, although it will be used less frequently and, most likely, will become more high-level - but not people, but tools will be engaged in simple uniform work.
Now, if I want to make a good site, then it probably makes sense to hire a JavaScript programmer. On the other hand, I can go to Wix or another builder and make a site there that is close to what I need. It seems to me that this trend will continue. The ability to make your site with good dynamic content, simply by moving the sliders and leaving the buttons, will appear in any person. The need for people to write such sites will die off by itself. Most likely, JavaScript programmers will not disappear - someone will need to create high-level visual modeling tools. But specialists will require deeper knowledge.
You can go up a level forever. There used to be low-level programming tools: people wrote in bytecodes, and they were not very worried. Then came the means of the same assembler, followed by them - means a level higher. If you fantasize, in 50-100 years, everything can be automated and reach semi-artificial intelligence - the question is in the time and complexity of the next technological revolution. If you look at the development history, then at each new technological revolution, the total volume and breadth of knowledge that you need to keep in mind is increasing - although access to them is simplified. The fact that you can simply take and study JavaScript is an illusion. You really need to know JavaScript and everything under it. Turning to the next round, you need to have at least a basic understanding of what happened before.
Engineers need both the natural and human sciences
The farther away, the more alien are the affected areas. Take at least the development of Apple, which was largely dictated by the enthusiasm of Steve Jobs and the people who surrounded him, the humanities: in particular, a manic love for beautiful fonts and hieroglyphs. All memorable changes in information technology often occur at the intersection of science. It is almost always a synthesis, because IT is simply a way of presenting and processing information that is meaningless in a vacuum. So, it’s hard to call people who came up with a graphical user interface “programmers” —that is how to say that the iPhone was successful thanks to only hardware or software.
Just 10 years ago, the front-end developer would have thought it a wild idea to read books on people's perceptions and psychologies. Now this is a matter of course: if a person develops websites, he read all the possible books on UX, UI, how much information people are able to perceive, how best to present it. And this is after all the related technology that came to us almost from medicine - and the same will apply to physics, chemistry and biology.
Today they talk a lot about quantum computers, but few understand what it is. When you manage to create the first valid quantum computer ready for launching to the masses, this will radically change the entire technological stack. In this case, do not have to throw everything. People will look for compatibility tools: conditionally, how Parallels Desktop solves the problem of compatibility between Windows and Mac, but to a much larger extent.
Consider and build biological computers. When this happens, they will radically change not only computing technology, but also the device of medicine and the whole society. Nowadays, mass medicine monitors the health of people by just a few indicators: roughly speaking, it is pulse, pressure, biochemical blood test. But what if they create a device that will “live” in the human body and issue all this data in real time for each person on Earth? Imagine the consequences that this entails: life expectancy will increase not by pitiful percentages, but by very visible figures.
I assume that the gradual growth will go in breadth. To create new development tools and new platforms will require knowledge not only in IT. The same Ilon Musk creates efficient ways to transport and preserve energy. All this involves a very wide range of technologies and knowledge. If you manage to make a battery that will fit into a small device and you don’t need to recharge it for at least a year, then this will be a crazy growth point that will cause the next technological wave. In each area there are border areas where such a point of growth will inevitably appear - the only question is when and who will succeed. There are those who during the next transition remain in the past: they do not die out, but there is no such growth, money and something interesting.
Get basic knowledge that does not expire
Whatever you start learning now, in 5–10 years it will become obsolete. Therefore, no matter how silly it sounds, you need to learn to learn. If you have enough time, it is better to dedicate it to how what you are going to use works, starting from a course in physics and mathematics. Without basic knowledge, the notorious ability to learn is difficult to use. Phase transition to the next level is always much easier for people who understand how computers work at the physical level - even if they do not use this and work in much higher-level languages. They do not just use the car and include the transfer, but understand how the car works. When this thing becomes something like an electric car, they make this transition much easier.
If we put on a strategy for long-term development and growth, then fundamental knowledge is more important than practical, not fundamental. Not a trivial idea how to send a GET request, but an understanding of the HTTP protocol: why it was done this way, what ideas were put into it. When we move to the conditional SPDY (Developed by Google protocol, proposed as a replacement for parts of HTTP. - Ed.), You can understand how this change occurred. You need a general understanding of when these requests are sent to the server, how the processor that makes these calculations on the server works. It’s not necessary to go deep into everything, but for the breadth of knowledge you need to understand how it all works.
Source: my column on LookAtMe