# About the knowledge and skills of a programmer

Suppose that after reading the previous post " On Computer Science in General ", you have weighed all the pros and cons and decided to become a programmer.

What abilities in itself makes sense to develop and how do you know if you have a vocation for programming?

It is generally accepted that mathematics is a good basis for programming. Of course, this is true. A person must be familiar with Aristotelian logic and be able to solve mathematical problems in three actions.

But there are other requirements ...

By the way, it is appropriate to say here that the programmer comes across tasks not in three, but in 10,000 actions. And you need to be able to break down these actions into sub-tasks, each of which needs to be clearly formally described, assess complexity, formulate performance criteria, assign each program to each group of programmers (or yourself), monitor their progress (carry out self-monitoring) and be able to make important adjustments in the course of the assignment. Something like this, something like that ... Have you decided to become a programmer?

Yes, the tasks for programmers are complex. And especially important is the ability of the programmer to reduce this complexity. Surprisingly, the fact is that two different IT specialists (IT - information technologies) can offer two different solutions to the same problem, which will ultimately differ in labor costs dozens of times. It is not easy to guess which of the two IT specialists is the most correct. In the IT industry, the main risks are still related to recruitment. The success of the project depends on what technology will be the basis, and which people will lay the basic architecture of the product. The latter is most important. The choice of programming language and technology is usually made right. So it turns out that after formulating the problem, elementary analysis of technologies and taking into account available funds, there are two or three options for choosing

The unpredictability of a programmer (a team of programmers) is one problem. It is solved simply - you just need to give test lines. But there is another problem - the incorrigible optimism of programmers. They really succeed in simplifying complex tasks, they are able to find architectural solutions that reduce the seemingly impossible task to a completely feasible one. But they almost always overestimate their abilities and believe that everything will be fine until “imperfect matter” once again puts them in their place. If you become a programmer who will be mistaken in the timing of the task less than twice - you will not be priced.

So, a programmer needs basic mathematical knowledge, the ability to simplify tasks (a systematic approach to solving problems) and the ability to adequately assess the complexity of a task.

But, despite the obvious need for mathematical knowledge and abilities, I would not want to say that programmers need a classical mathematical education. This should be a special mathematical program in which there is not much continuous analysis, but a lot of discrete mathematics and logic. Moreover, a significant part of the time in training programmers should be given to the ability to clearly express thoughts. Regular training should be as follows: studying texts, annotating them, highlighting the main idea, evaluating usefulness, interestingness and prospects. To put it bluntly, programmers need to be made up of mathematicians, preparing them according to the programs of linguistic specialties, or from linguists - according to the programs of computer specialties (this is the idea of Nepeyvoda NN).

If you analyze the types of activities of a typical IT specialist or programmer, it turns out that this is not work with mathematical abstractions, but analysis of technical texts, annotation, expression of thoughts and concepts as briefly and clearly as possible.

Moreover, we can say that the programmer’s everyday life goes through turning thoughts into a formal language. This work can naturally be compared with the work of a translator - it is necessary to translate the technical text in the native language into the programming language. A person who is unable to clearly state his thoughts will not be able to write logically complete working programs. Programs should be well structured and easy to read. Today this is one of the most important quality criteria for a programmer. This is due to the fact that software systems are becoming more complicated, a large team is working on them, and it is important that team members read and understand the code written by others and write easy-to-read code themselves. It is important not only the ability to put together the right beautiful long sentences, but also the talent for harmonious construction of the presentation, splitting into parts and the location of these parts.

Programming languages are not the only area where a programmer is confronted with languages. Formal languages are used to describe data, protocols, architectures, and processes. A professional programmer can be compared to a polyglot, which already knows a lot of languages, each of which increases its ability to express thoughts concisely, accurately and beautifully. Learning or developing a new language is a typical task of a programmer.

What abilities in itself makes sense to develop and how do you know if you have a vocation for programming?

It is generally accepted that mathematics is a good basis for programming. Of course, this is true. A person must be familiar with Aristotelian logic and be able to solve mathematical problems in three actions.

But there are other requirements ...

By the way, it is appropriate to say here that the programmer comes across tasks not in three, but in 10,000 actions. And you need to be able to break down these actions into sub-tasks, each of which needs to be clearly formally described, assess complexity, formulate performance criteria, assign each program to each group of programmers (or yourself), monitor their progress (carry out self-monitoring) and be able to make important adjustments in the course of the assignment. Something like this, something like that ... Have you decided to become a programmer?

Yes, the tasks for programmers are complex. And especially important is the ability of the programmer to reduce this complexity. Surprisingly, the fact is that two different IT specialists (IT - information technologies) can offer two different solutions to the same problem, which will ultimately differ in labor costs dozens of times. It is not easy to guess which of the two IT specialists is the most correct. In the IT industry, the main risks are still related to recruitment. The success of the project depends on what technology will be the basis, and which people will lay the basic architecture of the product. The latter is most important. The choice of programming language and technology is usually made right. So it turns out that after formulating the problem, elementary analysis of technologies and taking into account available funds, there are two or three options for choosing

The unpredictability of a programmer (a team of programmers) is one problem. It is solved simply - you just need to give test lines. But there is another problem - the incorrigible optimism of programmers. They really succeed in simplifying complex tasks, they are able to find architectural solutions that reduce the seemingly impossible task to a completely feasible one. But they almost always overestimate their abilities and believe that everything will be fine until “imperfect matter” once again puts them in their place. If you become a programmer who will be mistaken in the timing of the task less than twice - you will not be priced.

So, a programmer needs basic mathematical knowledge, the ability to simplify tasks (a systematic approach to solving problems) and the ability to adequately assess the complexity of a task.

But, despite the obvious need for mathematical knowledge and abilities, I would not want to say that programmers need a classical mathematical education. This should be a special mathematical program in which there is not much continuous analysis, but a lot of discrete mathematics and logic. Moreover, a significant part of the time in training programmers should be given to the ability to clearly express thoughts. Regular training should be as follows: studying texts, annotating them, highlighting the main idea, evaluating usefulness, interestingness and prospects. To put it bluntly, programmers need to be made up of mathematicians, preparing them according to the programs of linguistic specialties, or from linguists - according to the programs of computer specialties (this is the idea of Nepeyvoda NN).

If you analyze the types of activities of a typical IT specialist or programmer, it turns out that this is not work with mathematical abstractions, but analysis of technical texts, annotation, expression of thoughts and concepts as briefly and clearly as possible.

Moreover, we can say that the programmer’s everyday life goes through turning thoughts into a formal language. This work can naturally be compared with the work of a translator - it is necessary to translate the technical text in the native language into the programming language. A person who is unable to clearly state his thoughts will not be able to write logically complete working programs. Programs should be well structured and easy to read. Today this is one of the most important quality criteria for a programmer. This is due to the fact that software systems are becoming more complicated, a large team is working on them, and it is important that team members read and understand the code written by others and write easy-to-read code themselves. It is important not only the ability to put together the right beautiful long sentences, but also the talent for harmonious construction of the presentation, splitting into parts and the location of these parts.

Programming languages are not the only area where a programmer is confronted with languages. Formal languages are used to describe data, protocols, architectures, and processes. A professional programmer can be compared to a polyglot, which already knows a lot of languages, each of which increases its ability to express thoughts concisely, accurately and beautifully. Learning or developing a new language is a typical task of a programmer.