# Programming and Math

Recently, several posts on the topic of the importance of mathematics for programmers have appeared on Habré, and I will express my opinion.

I do not agree that

In the USSR, where the principles of the existing program for training programmers in the post-Soviet space were laid down, they did not understand what programming was and looked at it narrowly as a specific section of mathematics. Hence the bias in the methodology of teaching programmers, when they have been taught mathematics for 5 years, and programming has been given little attention. Previously, programming was studied in general by the residual principle, even in programmatic departments and specialties (I judge by the SMPU of St. Petersburg State University, as they now teach at universities I do not know for sure, but I see it indirectly by the level of specialists).

In the Soviet Union, programming was reduced to computational methods, seeing for it to be used in calculating and modeling physical processes, such as a rocket flight or a nuclear bomb explosion. Well, the Soviet government was also interested in digital signal processing, primarily for the purposes described in Solzhenitsyn’s First Circle. Indeed, for a specialist in computational methods or specifically in digital signal processing, an excellent knowledge of mathematics plays a key role in his future career. Therefore, the program for training programmers was a variation of the classical university course in mathematics.

The USSR did not understand the main thing - computational methods are not only not the main section of programming, it is generally a related discipline at the junction of the two sciences. The main sections of programming were read between things. It’s good if, by choosing one of the areas, the student could study in depth within the department — if there were charismatic teachers and enthusiasts in their field. But he usually did not receive a full-fledged programmer education. But he could perfectly take integrals and solve differential equations.

The main task that programmers will face with fundamental education in their practice is

Of course, no one will suffer from listening to the 5-year-old classical Soviet fundamental course in mathematics. If you can master it in full, and not just somehow pass the exams. Only this knowledge will mostly fall under the dead weight, and after 10 years it will completely disappear from the head (yes, a person will be able to “upgrade” it if necessary - but most will never do it

For the development of a versatile personality, in order to expand the framework of one’s thinking, it would be useful (hypothetically) to study not only mathematics, but also physics, chemistry, biology (especially genetics), medicine, psychology, law, economics, management, linguistics, English and Hebrew. :) And a dozen other directions. Knowledge in a number of these areas is more likely to be useful in real life and will bring more benefits than differential calculus, for example. However, if a narrow sample of these disciplines is read by programmers at universities, then it is far from 5 years old, but in fits and starts, at an introductory level. After

I think the same with mathematics for programmers - there is no need to overload the brain of a programmer with it so much that actually studying the programming itself becomes some kind of secondary branch. You need to read math as you encounter problems when learning programming itself. Yes, it’s more interesting. For example, the programmer is usually not interested in pure form to listen to the course of combinatorics. But listening to it against the background of performance analysis of the data processing algorithms just studied is much more interesting!

I do not agree that

__every__programmer needs a fundamental mathematical education*in the volume of 5 university courses*.__It is not needed in such a volume__most programmers, with the exception of specialists in computational methods. Of course, the study of mathematics develops thinking. But there are other disciplines, the study of which develops thinking and contributes to the formation of a diverse personality. However, these disciplines are not read to programmers in Soviet universities in general, or they only read the basics. I agree that mathematics in the volumes of the first year of a university (faculty of mathematics) is needed as a basis. But to teach a programmer mathematics for 5 years precisely__as the main discipline__is wrong.In the USSR, where the principles of the existing program for training programmers in the post-Soviet space were laid down, they did not understand what programming was and looked at it narrowly as a specific section of mathematics. Hence the bias in the methodology of teaching programmers, when they have been taught mathematics for 5 years, and programming has been given little attention. Previously, programming was studied in general by the residual principle, even in programmatic departments and specialties (I judge by the SMPU of St. Petersburg State University, as they now teach at universities I do not know for sure, but I see it indirectly by the level of specialists).

In the Soviet Union, programming was reduced to computational methods, seeing for it to be used in calculating and modeling physical processes, such as a rocket flight or a nuclear bomb explosion. Well, the Soviet government was also interested in digital signal processing, primarily for the purposes described in Solzhenitsyn’s First Circle. Indeed, for a specialist in computational methods or specifically in digital signal processing, an excellent knowledge of mathematics plays a key role in his future career. Therefore, the program for training programmers was a variation of the classical university course in mathematics.

The USSR did not understand the main thing - computational methods are not only not the main section of programming, it is generally a related discipline at the junction of the two sciences. The main sections of programming were read between things. It’s good if, by choosing one of the areas, the student could study in depth within the department — if there were charismatic teachers and enthusiasts in their field. But he usually did not receive a full-fledged programmer education. But he could perfectly take integrals and solve differential equations.

The main task that programmers will face with fundamental education in their practice is

__information processing__. Accordingly, you need to learn first__data structures and algorithms, data models for a DBMS, methods of organizing calculations, principles of organizing network protocols,__and so on. Many programmers will also be engaged in the development of tools, "programming for programming" in its purest form. And they should be given mathematics to the extent that it is needed for these basic areas of activity of future specialists in computer science. Mathematics should accompany a programming course, and not vice versa.Of course, no one will suffer from listening to the 5-year-old classical Soviet fundamental course in mathematics. If you can master it in full, and not just somehow pass the exams. Only this knowledge will mostly fall under the dead weight, and after 10 years it will completely disappear from the head (yes, a person will be able to “upgrade” it if necessary - but most will never do it

*as unnecessary*). Of course, studying mathematics in such volumes is useful for brain development.**But the lost time cannot be returned!***And the brain can be developed not only through a deep, at the university level, study of differential geometry or topology*.For the development of a versatile personality, in order to expand the framework of one’s thinking, it would be useful (hypothetically) to study not only mathematics, but also physics, chemistry, biology (especially genetics), medicine, psychology, law, economics, management, linguistics, English and Hebrew. :) And a dozen other directions. Knowledge in a number of these areas is more likely to be useful in real life and will bring more benefits than differential calculus, for example. However, if a narrow sample of these disciplines is read by programmers at universities, then it is far from 5 years old, but in fits and starts, at an introductory level. After

*all, it is perfectly clear to everyone that one cannot embrace the immense*.I think the same with mathematics for programmers - there is no need to overload the brain of a programmer with it so much that actually studying the programming itself becomes some kind of secondary branch. You need to read math as you encounter problems when learning programming itself. Yes, it’s more interesting. For example, the programmer is usually not interested in pure form to listen to the course of combinatorics. But listening to it against the background of performance analysis of the data processing algorithms just studied is much more interesting!