End of IT era
Now programmers are well paid for narrow-profile tasks, whether it is development for one platform or applications of the same kind. But the industries that are called the most promising require a deeper study of related fields, an understanding of both the natural sciences and the humanities. I believe that the breadth of knowledge is again becoming more important than narrow specialization, and soon everything will be different in programming in general.
I never use the word "programmer" in my work. When I turn to people in my profession, I always try to call them engineers. The purely narrow wording “programmer” - just like a “tester”, for example - poorly reflects the specifics of our profession. And the farther, the worse this formulation works.
Take an 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 has arisen because the means of labor required special knowledge. Roughly speaking, to become a tester, I need to learn certain tools - as well as an engineer who develops for a specific platform.
As time goes on, the entry threshold becomes lower. For example, Microsoft now does not have such a role as a “tester” - they have developer in test. Moreover, all the people who are engaged in development are called software engineers, they are simply involved in slightly different areas. Now it’s become so easy to master tools that the boundaries between specific specializations are erased. In the future, there is hardly any separation between, say, a JavaScript programmer, a Python programmer, or a .NET programmer - as well as a separation between the front-end and back-end.
True, there is still a problem with the means of expression. There is JavaScript on the frontend, and it’s more convenient to choose a different language on the backend. From this thought came the whole trend with Node.js. Thanks to this, standardization and team building are simplified, the knowledge and expertise of which will be approximately equal. Yes, Node.js now has problems, but more importantly, we get the same set of tools in the frontend and backend.
Understanding the technology stack - the technologies that underlie what people use, is becoming increasingly important. There are people who program in JavaScript, and when asked how the TCP protocol works, they answer that it is too low-level and they do not want to deal with this. This is 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, lateness in one technology does not allow making normal decisions on 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 HTML is, the HTTP protocol. The JavaScript programmer cannot get away from this, he needs to understand it - as well as where the rules of isolation and cross-domain security came from, how the SSL protocol works, how certificate-based security works. Further, if we go to the backend, then a person must understand the organization of data structures. In any more or less complex application, when it comes to visualizing complex data structures, joining 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 you need to think about 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 envision the possibility of sharding and horizontal scaling if the person who writes the backend does not understand the problems that are on the front end.
You can go down below and say for a long time that you don’t want to think about how the processes and threads in the operating system work. 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, the pros and cons, how it works. People who do not understand this, at some point, rest against the ceiling of professional growth. This happens often: there are always few people who think broadly, systematically, and study new areas. You can create sites of the same level all the time without thinking about complex things, but to make a site with a large number of clients and dynamic content is completely different. Often this step cannot be taken without building the foundation of basic knowledge in one’s head.
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 often and, most likely, will become a higher level - but not just people, but tools will be engaged in simple work of the same type.
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. Any person will have the opportunity to make their site with good dynamic content by simply moving the sliders and leaving the buttons. The need for people who will write such sites, in itself will die. Most likely, JavaScript programmers will not disappear - after all, someone will need to create high-level visual modeling tools. But experts will need deeper knowledge.
You can go to the next level endlessly. There used to be low-level programming tools: people wrote in bytecodes, and they weren’t very worried. Then the tools of the same assembler appeared, followed by the tools of a higher level. If you fantasize, in 50-100 years everything will be possible to automate and reach semi-artificial intelligence - the question is the time and complexity of the next technological revolution. If you look at the history of development, then at each new technological revolution, the total volume and breadth of knowledge that you need to keep in mind increases, although access to them is simplified. Just taking and learning JavaScript is an illusion. You really need to know JavaScript and everything below it. Moving on to the next round, you need to have at least basic ideas about what happened before.
The farther, the more external the affected areas are. Take, for example, the development of Apple, which was largely dictated by the passion of Steve Jobs and the people who surrounded him, the humanities: in particular, a manic love for beautiful fonts and hieroglyphs. All the memorable changes in information technology very often occur at the intersection of sciences. It is almost always a synthesis, because IT is simply a way of presenting and processing information that makes no sense in a vacuum. So, it is difficult to call the “programmers" of the people who came up with the graphical user interface - this is how to say that the iPhone was successful thanks only to the hardware or only the software.
Even 10 years ago, it would have seemed a wild idea to the front-end developer to read books about the perception and psychology of people. Now this is taken for granted: if a person develops websites, then he has read all the possible books on UX, UI, how much information people are able to perceive, how best to submit it. And this is after all an adjacent 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 people understand what it is. When it is possible to create the first operational quantum computer, ready to be launched into the masses, this will radically change the entire technological stack. You don’t have to throw everything away. People will look for compatibility tools: conditionally, how Parallels Desktop solves the compatibility problem between Windows and Mac, but in a much larger volume.
They are also considering the possibility of building biological computers. When this succeeds, they will radically change not only computing technology, but also the structure of medicine and the entire society. Now mass medicine monitors people's health in just a few indicators: roughly speaking, this is a pulse, pressure, and a biochemical blood test. But what if they create a device that will “live” in the human body and produce all this data in real time for each person on Earth? Imagine the consequences that this will entail: life expectancy will increase not by miserable interest, but by very noticeable numbers.
I assume that phased growth will go in breadth. To create new development tools and new platforms, knowledge will be required not only in IT. The same Elon Musk creates effective ways to transport and conserve energy. All this involves a very wide range of technologies and knowledge. If you manage to make a battery that will fit in a small device, and it does not need to be recharged for at least a year, then this will be a crazy growth point that will cause the next technological wave. In each sphere, there are border areas where such a growth point 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 longer such growth, money, and something interesting.
Whatever you start learning now, it will become obsolete in 5–10 years. And therefore, no matter how stupid it may sound, you need to learn to learn. If you have a margin of time, it is better to devote 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. Moving to the next level is always much easier for people who understand how computers work on the physical level — even if they don’t use it and work in much higher-level languages. They do not just use the car and turn on the gears, but understand how the car works. When this thing becomes something like an electric car, it’s much easier for them to make this transition.
If we put on a strategy of long-term development and growth, it is more important than applied, but fundamental knowledge. Not a trivial idea of how to send a GET request, but an understanding of the HTTP protocol: why it was so done, what ideas were put into it. When we switch to the conditional SPDY (Google’s protocol, proposed as a replacement for HTTP parts. - Ed.), You can understand how this change happened. You need a common understanding of when these requests are sent to the server, how the processor that does these calculations on the server works. You don’t have to go too deep into everything, but for the breadth of knowledge you need to understand how it all works.
Source: my LookAtMe column
"Programmers" are better called engineers
I never use the word "programmer" in my work. When I turn to people in my profession, I always try to call them engineers. The purely narrow wording “programmer” - just like a “tester”, for example - poorly reflects the specifics of our profession. And the farther, the worse this formulation works.
Take an 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 has arisen because the means of labor required special knowledge. Roughly speaking, to become a tester, I need to learn certain tools - as well as an engineer who develops for a specific platform.
As time goes on, the entry threshold becomes lower. For example, Microsoft now does not have such a role as a “tester” - they have developer in test. Moreover, all the people who are engaged in development are called software engineers, they are simply involved in slightly different areas. Now it’s become so easy to master tools that the boundaries between specific specializations are erased. In the future, there is hardly any separation between, say, a JavaScript programmer, a Python programmer, or a .NET programmer - as well as a separation between the front-end and back-end.
True, there is still a problem with the means of expression. There is JavaScript on the frontend, and it’s more convenient to choose a different language on the backend. From this thought came the whole trend with Node.js. Thanks to this, standardization and team building are simplified, the knowledge and expertise of which will be approximately equal. Yes, Node.js now has problems, but more importantly, we get the same set of tools in the frontend and backend.
Knowing a programming language is not enough
Understanding the technology stack - the technologies that underlie what people use, is becoming increasingly important. There are people who program in JavaScript, and when asked how the TCP protocol works, they answer that it is too low-level and they do not want to deal with this. This is 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, lateness in one technology does not allow making normal decisions on 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 HTML is, the HTTP protocol. The JavaScript programmer cannot get away from this, he needs to understand it - as well as where the rules of isolation and cross-domain security came from, how the SSL protocol works, how certificate-based security works. Further, if we go to the backend, then a person must understand the organization of data structures. In any more or less complex application, when it comes to visualizing complex data structures, joining 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 you need to think about 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 envision the possibility of sharding and horizontal scaling if the person who writes the backend does not understand the problems that are on the front end.
You can go down below and say for a long time that you don’t want to think about how the processes and threads in the operating system work. 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, the pros and cons, how it works. People who do not understand this, at some point, rest against the ceiling of professional growth. This happens often: there are always few people who think broadly, systematically, and study new areas. You can create sites of the same level all the time without thinking about complex things, but to make a site with a large number of clients and dynamic content is completely different. Often this step cannot be taken without building the foundation of basic knowledge in one’s head.
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 often and, most likely, will become a higher level - but not just people, but tools will be engaged in simple work of the same type.
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. Any person will have the opportunity to make their site with good dynamic content by simply moving the sliders and leaving the buttons. The need for people who will write such sites, in itself will die. Most likely, JavaScript programmers will not disappear - after all, someone will need to create high-level visual modeling tools. But experts will need deeper knowledge.
You can go to the next level endlessly. There used to be low-level programming tools: people wrote in bytecodes, and they weren’t very worried. Then the tools of the same assembler appeared, followed by the tools of a higher level. If you fantasize, in 50-100 years everything will be possible to automate and reach semi-artificial intelligence - the question is the time and complexity of the next technological revolution. If you look at the history of development, then at each new technological revolution, the total volume and breadth of knowledge that you need to keep in mind increases, although access to them is simplified. Just taking and learning JavaScript is an illusion. You really need to know JavaScript and everything below it. Moving on to the next round, you need to have at least basic ideas about what happened before.
Engineers need both natural sciences and humanities
The farther, the more external the affected areas are. Take, for example, the development of Apple, which was largely dictated by the passion of Steve Jobs and the people who surrounded him, the humanities: in particular, a manic love for beautiful fonts and hieroglyphs. All the memorable changes in information technology very often occur at the intersection of sciences. It is almost always a synthesis, because IT is simply a way of presenting and processing information that makes no sense in a vacuum. So, it is difficult to call the “programmers" of the people who came up with the graphical user interface - this is how to say that the iPhone was successful thanks only to the hardware or only the software.
Even 10 years ago, it would have seemed a wild idea to the front-end developer to read books about the perception and psychology of people. Now this is taken for granted: if a person develops websites, then he has read all the possible books on UX, UI, how much information people are able to perceive, how best to submit it. And this is after all an adjacent 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 people understand what it is. When it is possible to create the first operational quantum computer, ready to be launched into the masses, this will radically change the entire technological stack. You don’t have to throw everything away. People will look for compatibility tools: conditionally, how Parallels Desktop solves the compatibility problem between Windows and Mac, but in a much larger volume.
They are also considering the possibility of building biological computers. When this succeeds, they will radically change not only computing technology, but also the structure of medicine and the entire society. Now mass medicine monitors people's health in just a few indicators: roughly speaking, this is a pulse, pressure, and a biochemical blood test. But what if they create a device that will “live” in the human body and produce all this data in real time for each person on Earth? Imagine the consequences that this will entail: life expectancy will increase not by miserable interest, but by very noticeable numbers.
I assume that phased growth will go in breadth. To create new development tools and new platforms, knowledge will be required not only in IT. The same Elon Musk creates effective ways to transport and conserve energy. All this involves a very wide range of technologies and knowledge. If you manage to make a battery that will fit in a small device, and it does not need to be recharged for at least a year, then this will be a crazy growth point that will cause the next technological wave. In each sphere, there are border areas where such a growth point 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 longer such growth, money, and something interesting.
Get basic knowledge that doesn't expire
Whatever you start learning now, it will become obsolete in 5–10 years. And therefore, no matter how stupid it may sound, you need to learn to learn. If you have a margin of time, it is better to devote 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. Moving to the next level is always much easier for people who understand how computers work on the physical level — even if they don’t use it and work in much higher-level languages. They do not just use the car and turn on the gears, but understand how the car works. When this thing becomes something like an electric car, it’s much easier for them to make this transition.
If we put on a strategy of long-term development and growth, it is more important than applied, but fundamental knowledge. Not a trivial idea of how to send a GET request, but an understanding of the HTTP protocol: why it was so done, what ideas were put into it. When we switch to the conditional SPDY (Google’s protocol, proposed as a replacement for HTTP parts. - Ed.), You can understand how this change happened. You need a common understanding of when these requests are sent to the server, how the processor that does these calculations on the server works. You don’t have to go too deep into everything, but for the breadth of knowledge you need to understand how it all works.
Source: my LookAtMe column