Recently, several posts on the importance of mathematics for programmers have appeared on Habré, and I will express my opinion.
I do not agree with the fact that
every programmer needs a fundamental mathematical education
in the volume of 5 university courses .
It is not needed in this volume by 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 diversified personality. However, these disciplines do not read programmers in Soviet universities in general, or read only the basics. I agree that mathematics in the first-year volumes of a university (faculty of mathematics) is needed as a basis. But teaching a programmer to math for 5 years precisely
as a core discipline is wrong.
In the USSR, where the principles of the existing program of 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 branch of mathematics. Hence the bias in the method of teaching programmers, when for 5 years they have been taught exactly mathematics, and they pay little attention to programming. Previously, programming was generally studied using the residual principle, even in programming faculties and specialties (judging by the SPPU of St. Petersburg State University, as they are now taught in universities, I do not know for sure, but I see indirectly by the level of specialists).
In the Soviet Union, programming was reduced to computational methods, seeing for it an application in calculating and modeling physical processes, such as a rocket flight or a nuclear bomb explosion. Well, even the Soviet government was interested in digital signal processing, primarily for the purposes described in Solzhenitsyn’s “Circle One”. Indeed, for a specialist in computational methods or specifically in digital signal processing, an excellent knowledge of mathematics plays a key role in a future career. Therefore, the programmer's training program was a variation of the classical university mathematics course.
In the USSR, they did not understand the main thing - computational methods are not only not the main section of programming, they are generally a related discipline at the junction of two sciences. The main sections of programming were read between times. It’s still good if you chose one of the directions, the student could do it in depth within the department - if there were charismatic teachers and enthusiasts in their field. But he usually did not receive full-fledged programmer education. But he could perfectly take integrals and solve differential equations.
The main task that programmers with fundamental education will encounter in their practice is
information processing . Accordingly, it is necessary to teach first of all to
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 pure form. And they should give mathematics to the extent that it is needed for these main areas of activity of future specialists in computer science. Mathematics should accompany the course of programming, and not vice versa.
Of course, no one will suffer from the fact that listens to the 5-year classic Soviet fundamental course of mathematics. If he can master it in full, and not just somehow pass the exams. Only this knowledge will basically be a dead weight, and after 10 years they will almost completely disappear from the head (yes, a person will be able to “renew” it if necessary - but most will never do it
as superfluous ). Of course, the study of mathematics in such volumes is useful for the development of the brain.
But lost time does not return! And the brain can be developed not only through a deep, at the university level, the study of differential geometry or topology .
In order to develop a diverse personality in order to push the boundaries of their 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 areas. Knowledge in a number of the listed areas is more useful in real life and will bring more benefits than differential calculus, for example. However, if a narrow sample of these disciplines is read to programmers at universities, this is far from 5 years old, but in fits and strips, at the fact-finding level. After
all, it is perfectly clear to everyone that it is impossible to grasp the immensity .
I also consider math for programmers - there is no need to overload the programmer's brain with it so much that the actual learning of programming itself becomes some kind of incidental, accompanying branch. You need to read mathematics as you encounter problems when learning programming itself. Yes, it is more interesting. For example, it is usually not interesting for a programmer to listen to a combinatorial course in its pure form. But listening to it against the background of the speed analysis of the data processing algorithms just studied is much more interesting!