Deep learning programming: what, why and how
Disclaimer: This article was prepared by Skillbox in cooperation with Egor Yakovishen, the leading developer of Setka Editor and the IIDF tracker.

Nowadays, learning to program at a basic level is relatively easy. For example, American homeless Leo Grand, who possessed only primary education, in just three months was able to make his own mobile application, called Trees for Cars.
Why learn programming at all? There can be a lot of answers, ranging from the desire to develop and ending with the desire to earn big money. But suppose we learned how to code and reached a certain level. There is work, money also seems to be there, satisfaction with life (partial or complete) is available. It would seem that you can stop and just enjoy your achievements. In fact, you should not stop. Why? About this and talk.
If you do not improve in the chosen specialty, after some time you can find yourself as a troglodyte, closed in a cave, which is surrounded by levitating buildings of the distant future. Hmm, well, or imagine a "Civilization" with AI, which already has nuclear weapons, and a player still fighting with muskets.
For the programmer, such a comparison is very important, because literally every day there are new platforms, frameworks, hardware, for which you need to write something new. If you do the same thing for several years, then later you may experience difficulties with employment and the very satisfaction with life that we talked about above.
Even if we take relatively simple tasks — for example, local automation of processes by creating VBScript scripts for Microsoft Office — even in this case it will not work: the office suite changes, certain functions are added and removed, VBScript changes. A couple of years - and today's solutions are not suitable. What to say about programming languages like Ruby or JavaScript, which are at the forefront of technology.
In order to keep abreast of new technologies (or, if you are a beginner, immediately do something relevant, and not learn dying solutions) - sign up for one of the Skillbox programming courses. However, the rest of our areas you can also come in handy to pump related skills and begin to better understand colleagues and workflows.

One of the clearest examples of what can happen to a person who has been working in the same field for years without developing is the situation with Flash developers and those who decide to choose Flex, an interactive programming language based on Flash. For quite a long time they were “on horseback” - very popular and receiving substantial money (in any case, more than many other IT specialists). Good work, respect of colleagues - what else does a person need for happiness?
But after a while, with the advent of the iPhone and the proclamation by Steve Jobs of the slogan “We will not support Flash,” this technology was gradually abandoned. Over time, Apple followed the example of developers for other platforms.
It is clear that all this did not happen very quickly, but the flash'ers of change felt. Someone almost immediately began to look for new areas of work and study other programming languages. Well, someone continued to do what he was used to, and in the end he was completely out of work, because there was no time for retraining.
A similar problem can arise for CMS Bitrix specialists, who create similar sites based on this system and do not progress in what they were initially trained in programming. If something happens and Bitrix is no longer so popular, then the former "programmers" will remain out of work, because they did not develop their development skills, but did the same thing for a long time.
When the programmer has reached a certain level of mastery, the question arises: where to go next? Some, having gained some experience in one of the programming languages, begin to learn the second, then the third, and so on.
But the problem is that our time is an era of narrow specialization. The amount of information that needs to be learned in any programming language is so great that it is very difficult to become an expert in something else - it may simply not be enough time. In order to start writing relatively well in one of the languages, it takes about three years (someone says about 10,000 hours). But in order to become a cool pro in the chosen field, it takes more, much more time.
This does not mean that there are no polyglot programmers who know 2, 3, 5 or more languages. They exist, but such people are rarely found. In addition, knowledge of several languages is not a guarantee that a person will thoroughly understand everything. Not at all: in most cases, the programmer simply “picks up on tops” and will consider himself a cool generalist. But give him a specific task - and his knowledge may simply not be enough to solve it.
It is better to stick to the golden mean - it’s very good to understand one of the programming languages, mainly, and if you want to master others a little, just for common development. Additional skills haven't hurt anyone yet.

In order to choose the right direction for development and improvement, you need to be a bit of a visionary. In other words, you need to understand which technologies and programming languages associated with them will be popular in the near future.
It is best to choose an area where there are not so many professionals today, and start developing, gaining the necessary experience and knowledge as a pro before it becomes mainstream.
An example is javascript. Now this language is very popular, it is literally on everyone's lips. But at the beginning of its development, JS was a niche product. Those who immediately began to develop in this area have become steep and sought-after specialists, who (yes, not without it) receive a lot. Now everything is written on it: frontend, backend, even mobile applications. This language alone is enough to know in order to write applications of the most varied complexity for solving practically any tasks.
A good way to capture trends in programming languages, frameworks, etc. - track the use of certain tools in the products of large companies. If one of the corporations begins to engage in a niche product, incorporating it into their products, then it is worth considering why. If this is not an accident, then, most likely, it may soon become mainstream in programming.
If we are talking about the choice, then it is worth giving specific examples. So, Java Script and Python languages at the moment are one of the most promising. The first is because it is universal. The second is because it is one of the simplest (relatively) and at the same time trend languages to master: it is written projects from the field of machine learning, neural networks, AI. Various products of Dropbox, Google and Yandex are written (in whole or in part) in Python.
Java also remains a universal language, which is used, in particular, for writing Android applications.
In principle, it is not so difficult. The main thing is understanding the basics, flexible mind, perseverance and PRACTICE. Yes, it is uppercase. The fact is that no theory, no matter how much you study it, will help you to become a professional if there is no practical experience. It is like in languages spoken by people: you can memorize hundreds of foreign words, read the rules of grammar, but if you don’t speak or write, it all goes into a passive, and over time it is completely forgotten.
Therefore, there are two main recommendations for those who wish to improve in the chosen field:
These tips can be used in any order - there will be no harm, only benefit. Why? The more you create products, write code, the more practice. Certain problems are solved, work principles are being put together, and skills are being formed. In this case, you need to disassemble someone else's code. For a newbie, this is necessary simply because he knows little, and by reading what has been written by others, the junior will be able to understand what is going on and how. For middle, parsing someone else's code allows you to find successful solutions to a problem that comes with developing a certain product. Well, for senior it is, firstly, the search for errors in someone else’s code and help with them, and secondly, self-improvement. “There will always be an Asian who does something better than you” - a famous meme, but he is fair, and not only for Asians. Studying someone else's code, you can come across an elegant solution to any question,

Now there are services that can be called Twitch for programmers. One of them is livecoding.tv. Programmers registered on the resource write their own programs with a demonstration of the operation of the code in real time.
And, of course, we also need a theory. To replenish the stock of knowledge requires a lot of reading, and not only programming, but also related disciplines.
As a conclusion, we can recall a quote from “Alice in Wonderland” (even preschoolers know it, yes, but this does not negate the value of the statement): “You need to run as fast just to stay in place, run at least twice as fast! ”In fact, in the rapidly changing world of technology, you must make solid efforts to remain a good programmer. And to get better, you need to work and study twice, if not three times more.

Nowadays, learning to program at a basic level is relatively easy. For example, American homeless Leo Grand, who possessed only primary education, in just three months was able to make his own mobile application, called Trees for Cars.
Why learn programming at all? There can be a lot of answers, ranging from the desire to develop and ending with the desire to earn big money. But suppose we learned how to code and reached a certain level. There is work, money also seems to be there, satisfaction with life (partial or complete) is available. It would seem that you can stop and just enjoy your achievements. In fact, you should not stop. Why? About this and talk.
Why improve at all?
If you do not improve in the chosen specialty, after some time you can find yourself as a troglodyte, closed in a cave, which is surrounded by levitating buildings of the distant future. Hmm, well, or imagine a "Civilization" with AI, which already has nuclear weapons, and a player still fighting with muskets.
For the programmer, such a comparison is very important, because literally every day there are new platforms, frameworks, hardware, for which you need to write something new. If you do the same thing for several years, then later you may experience difficulties with employment and the very satisfaction with life that we talked about above.
Even if we take relatively simple tasks — for example, local automation of processes by creating VBScript scripts for Microsoft Office — even in this case it will not work: the office suite changes, certain functions are added and removed, VBScript changes. A couple of years - and today's solutions are not suitable. What to say about programming languages like Ruby or JavaScript, which are at the forefront of technology.
In order to keep abreast of new technologies (or, if you are a beginner, immediately do something relevant, and not learn dying solutions) - sign up for one of the Skillbox programming courses. However, the rest of our areas you can also come in handy to pump related skills and begin to better understand colleagues and workflows.

Cases? I have them
One of the clearest examples of what can happen to a person who has been working in the same field for years without developing is the situation with Flash developers and those who decide to choose Flex, an interactive programming language based on Flash. For quite a long time they were “on horseback” - very popular and receiving substantial money (in any case, more than many other IT specialists). Good work, respect of colleagues - what else does a person need for happiness?
But after a while, with the advent of the iPhone and the proclamation by Steve Jobs of the slogan “We will not support Flash,” this technology was gradually abandoned. Over time, Apple followed the example of developers for other platforms.
It is clear that all this did not happen very quickly, but the flash'ers of change felt. Someone almost immediately began to look for new areas of work and study other programming languages. Well, someone continued to do what he was used to, and in the end he was completely out of work, because there was no time for retraining.
A similar problem can arise for CMS Bitrix specialists, who create similar sites based on this system and do not progress in what they were initially trained in programming. If something happens and Bitrix is no longer so popular, then the former "programmers" will remain out of work, because they did not develop their development skills, but did the same thing for a long time.
A polyglot programmer or a narrow profile specialist?
When the programmer has reached a certain level of mastery, the question arises: where to go next? Some, having gained some experience in one of the programming languages, begin to learn the second, then the third, and so on.
But the problem is that our time is an era of narrow specialization. The amount of information that needs to be learned in any programming language is so great that it is very difficult to become an expert in something else - it may simply not be enough time. In order to start writing relatively well in one of the languages, it takes about three years (someone says about 10,000 hours). But in order to become a cool pro in the chosen field, it takes more, much more time.
This does not mean that there are no polyglot programmers who know 2, 3, 5 or more languages. They exist, but such people are rarely found. In addition, knowledge of several languages is not a guarantee that a person will thoroughly understand everything. Not at all: in most cases, the programmer simply “picks up on tops” and will consider himself a cool generalist. But give him a specific task - and his knowledge may simply not be enough to solve it.
It is better to stick to the golden mean - it’s very good to understand one of the programming languages, mainly, and if you want to master others a little, just for common development. Additional skills haven't hurt anyone yet.
What exactly to choose?

In order to choose the right direction for development and improvement, you need to be a bit of a visionary. In other words, you need to understand which technologies and programming languages associated with them will be popular in the near future.
It is best to choose an area where there are not so many professionals today, and start developing, gaining the necessary experience and knowledge as a pro before it becomes mainstream.
An example is javascript. Now this language is very popular, it is literally on everyone's lips. But at the beginning of its development, JS was a niche product. Those who immediately began to develop in this area have become steep and sought-after specialists, who (yes, not without it) receive a lot. Now everything is written on it: frontend, backend, even mobile applications. This language alone is enough to know in order to write applications of the most varied complexity for solving practically any tasks.
A good way to capture trends in programming languages, frameworks, etc. - track the use of certain tools in the products of large companies. If one of the corporations begins to engage in a niche product, incorporating it into their products, then it is worth considering why. If this is not an accident, then, most likely, it may soon become mainstream in programming.
Three whales of modern programming: javascript, python, java
If we are talking about the choice, then it is worth giving specific examples. So, Java Script and Python languages at the moment are one of the most promising. The first is because it is universal. The second is because it is one of the simplest (relatively) and at the same time trend languages to master: it is written projects from the field of machine learning, neural networks, AI. Various products of Dropbox, Google and Yandex are written (in whole or in part) in Python.
Java also remains a universal language, which is used, in particular, for writing Android applications.
How to become a guru?
In principle, it is not so difficult. The main thing is understanding the basics, flexible mind, perseverance and PRACTICE. Yes, it is uppercase. The fact is that no theory, no matter how much you study it, will help you to become a professional if there is no practical experience. It is like in languages spoken by people: you can memorize hundreds of foreign words, read the rules of grammar, but if you don’t speak or write, it all goes into a passive, and over time it is completely forgotten.
Therefore, there are two main recommendations for those who wish to improve in the chosen field:
- Read someone else's code.
- Write your code.
These tips can be used in any order - there will be no harm, only benefit. Why? The more you create products, write code, the more practice. Certain problems are solved, work principles are being put together, and skills are being formed. In this case, you need to disassemble someone else's code. For a newbie, this is necessary simply because he knows little, and by reading what has been written by others, the junior will be able to understand what is going on and how. For middle, parsing someone else's code allows you to find successful solutions to a problem that comes with developing a certain product. Well, for senior it is, firstly, the search for errors in someone else’s code and help with them, and secondly, self-improvement. “There will always be an Asian who does something better than you” - a famous meme, but he is fair, and not only for Asians. Studying someone else's code, you can come across an elegant solution to any question,

Now there are services that can be called Twitch for programmers. One of them is livecoding.tv. Programmers registered on the resource write their own programs with a demonstration of the operation of the code in real time.
And, of course, we also need a theory. To replenish the stock of knowledge requires a lot of reading, and not only programming, but also related disciplines.
As a conclusion, we can recall a quote from “Alice in Wonderland” (even preschoolers know it, yes, but this does not negate the value of the statement): “You need to run as fast just to stay in place, run at least twice as fast! ”In fact, in the rapidly changing world of technology, you must make solid efforts to remain a good programmer. And to get better, you need to work and study twice, if not three times more.