Most modern programmers have been educated in universities. Over time, this will change, but now things are in such a way that good personnel in IT companies still come from universities. In this post, Stanislav Protasov, director of university relations with Acronis, talks about his vision of the features of university training for future programmers. Teachers, students and those who hire them can even find a couple of useful tips under the cat.

For the last 10 years I have been teaching mathematics, algorithms, programming languages ​​and machine learning in various universities. Today, in addition to my position at Acronis, I am also the deputy head of the department of theoretical and applied informatics at MIPT. From the experience of working in good Russian (and not only) universities, I made some observations about the preparation of students in computer disciplines.
The rule of 30 seconds no longer works
I’m sure that you’ve come across a rule of 30 seconds, which says that a programmer should understand the purpose of a function after a quick glance at its code. It was invented a long time ago, since then many operating systems, languages, hardware and algorithms have appeared. I have been writing code for 12 years, but relatively recently I saw the source code of a single product, which at first glance seemed to me like magic spells. Today, if you are not immersed in the subject area, then the rule of 30 seconds stops working. Otherwise, you will not have enough not only 30, but 300 seconds to figure out what's what.
')
For example, if you want to write drivers, you will need to dive into this area, read thousands of lines of specific code. With this approach to the study of the subject, a specialist has a “sense of flow”. As in rap, when the feeling of good rhyme and the right rhythm appears without special rationalization. Similarly, a well-trained programmer can easily find out ineffective or just bad code, without going into a detailed study of where a style violation occurred or a non-optimal approach was used (but it is very difficult to explain this feeling).
Specialization and growing complexity lead to the fact that the education of bachelor already does not give an opportunity to study all directions quite deeply. But it is precisely at this level of education that one must acquire an outlook. Already after, in the master's program or at work, you will need to spend some time diving into the problematics and specifics of the subject area, study the slang, programming languages ​​and code of colleagues, read articles and books. It seems to me that only with the help of the university can one “pump up the crossbar” for future
T-shaped specialists .
Which programming language is best taught at university?

To my delight, university teachers have already abandoned the search for the correct answer to the question: “What is the best way to program?”. The debate about which is better - C # or Java, Delphi or C ++ - has virtually disappeared. The emergence of many new programming languages ​​and the accumulation of pedagogical experience led to an understanding in the academic environment: each language has its own niche.
The problem of teaching with the use of one or another programming language has ceased to be a priority. No matter what language is taught in the course. The main thing is sufficient expressiveness of the language. The book “
The Art of Multiprocessor Programming ” is a good illustration of this observation. In this already classic edition, all examples are given in Java, a language without pointers, but with a Garbage Collector. Hardly anyone would argue that Java is far from the optimal choice when writing high-performance parallel code. But to explain the concepts outlined in the book, the language turned out to be suitable. Another example is the
classic Andrew Una
machine learning course taught in Matlab in Octave. Today, it would be possible to choose another programming language, but what is the difference in essence if ideas and approaches are important?
More practical and closer to reality
At the same time, in recent years, there have been many more practitioners in universities. If earlier Russian university programs were actively criticized for being divorced from reality, then today it is already impossible to say so about IT education. 10 years ago there were almost no teachers in the universities with real industry experience. Now, more and more often, in the specialized department, classes are conducted not by regular teachers in computer science, but by practicing IT specialists who read only 1-2 courses in their free time. This approach justifies itself in terms of quality training, updating courses and, of course, searching for potential employees in the company. I do not think that I will reveal the secret, saying that we support the basic department at MIPT and are building relationships with other universities, including in order to prepare students who could start their career in Acronis.
Mathematician or programmer?

Holivary, which previously developed around programming languages, moved into the philosophical channel. Now conditional "programmers" and "mathematics" argue with each other. In principle, these schools could stand out in two educational programs, but the industry still poorly shares such subtleties, and from university to university, we have a similar education with a slightly different bias. This means that both the student and the company in which he will continue to work will have to supplement the knowledge puzzle with missing pieces.
The appearance in universities of practitioners who write the industrial code in different languages ​​gives students a better development skill. Being well acquainted with the implementation of standard libraries, frameworks and programming techniques, practicing programmers educate students in the desire to write good code, to do it quickly and efficiently.
This useful skill, however, sometimes leads to the appearance of lovers of reinventing the wheel. Program students think like this: “that I should write another 200 lines of good code that will solve the problem in the forehead?”.
Teachers who have received a classical mathematical education (for example, mathematics or applied mathematics), more often work in the near-scientific environment, or in the field of modeling and data analysis. “Mathematicians” otherwise see problems in the field of Computer Science. They primarily operate not with code, but with algorithms, theorems, and formal models. An important plus of the mathematical approach is a clear, fundamental understanding of what can and cannot be solved. And how to solve it.
Accordingly, teachers of mathematics talk about programming with a bias towards theory. Students who come “from mathematicians” often offer well-thought-out and theoretically more perfect solutions, but, as a rule, are not optimal from the point of view of language and, often, simply inaccurately written. Such a student believes that his main goal is to demonstrate the ability to solve such problems in principle. But implementation can limp.
The guys, who were brought up by programmers at school or on the first courses, bring with them a “very beautiful bike”, which, however, usually does not work as effectively asymptotically. On the contrary, they do not set themselves the task of deeply theorizing and turning to textbooks in search of optimal solutions, preferring beautiful code.
In different universities at student interviews, I usually see which “school” is at the heart of his education. And I almost did not come across an ideal balance in basic education. As a child in my city, it was possible to prepare for olympiad mathematics, but there were no programming circles. Now, in circles, children learn to program in “fashionable” Go and Python. Therefore, already at the level of admission to universities there are differences in approaches. I believe that it is important to support both skills at the university, otherwise a specialist with an insufficient theoretical background or a person who has not learned and does not want to write good code will come to the company.
How to “pump up the crossbar” for future T-shaped specialists?

It is clear that in such conditions the student simply chooses what he likes best. The teacher simply transmits the point of view that is closer to him. But everyone will benefit if the code is written beautifully, and from the point of view of algorithms everything will be clear, reasonable and efficient.
- IT outlook . A graduate of a bachelor degree in Computer Science is a ready-made specialist with a developed technical outlook, who probably chose his profile. But in the undergraduates, we do not know what he or she will do. It can go to science or analytics, and, conversely, can write a huge amount of code every day. Consequently, the student needs to show all aspects of work in the IT sphere, to acquaint with all the tools. Ideally, teachers from theoretical courses will show a connection with practice (and vice versa).
- Growth point . Do not allow the slide to extremes - in the interests of the student. Understanding who you are - “mathematician” or “programmer” - is not difficult. It is enough to listen to the first impulse in solving the problem: what do you want to do - look at the textbook in search of the optimal approach or write a couple of functions that then come in handy for sure? Based on this, it is possible to build a further complementary trajectory of one’s learning.
- Alternative sources of knowledge . It so happens that the program is well balanced, but “System Programming” and “Algorithms” are completely different people, and one student is closer to the first teacher, and another to the second. But even if you do not like the professor, this is not a reason to hammer on some objects in favor of others. The bachelors themselves are interested in finding the will to work with sources of knowledge and in no way trust radical opinions such as “mathematics is the queen of sciences, the main thing is to know the algorithms” or “good code compensates for everything else”.
You can deepen your knowledge in theory by accessing specialized literature and online courses. Pull up the ability to handle programming languages ​​can be on Coursera, Udacity or Stepik, which presents a lot of different courses. Also, students often begin to look at hardcore language courses if they feel that the teacher of algorithms knows mathematics well, but cannot answer complex questions in the field of implementation. Not everyone will agree with me, but in my practice
, C ++ specialization from Yandex has proven itself well, in which more and more complex language features are dealt with. In general, choose a course with high marks, from reputable companies or universities.
Soft skills

Coming from a university to work in any company, from a startup to a large corporation, students even from top universities are poorly adapted to the real working environment. The fact is that today universities are much “nursing” with students. Even having missed a lot of classes, not being prepared in time for tests and tests, having overslept, being late for the exam, everyone can pass and retake it again - and in the end still get a diploma.
Nevertheless, today there are all conditions for students to be prepared for adulthood and independent professional activity. They will have to not only program, but also communicate. And this, too, needs to be taught. In universities, there are various formats for pumping these skills, but, alas, they are often not given sufficient attention. Nevertheless, in our arsenal there are many opportunities to gain effective teamwork skills.
- Written business communication . Unfortunately, most of the specialists at the exit from the university do not have a clue about the etiquette of correspondence. The specifics of communication in instant messengers in the exchange of messages at night and day, and the use of conversational style and informal vocabulary. However, it would be possible to train a written speech when a student communicates with a department and a university.
In practice, managers are often faced with the need to decompose a large project into small tasks. To do this, it is necessary to describe each task and its components well, so that younger developers understand what is required of them. A poorly assigned task often leads to the need to redo something, and therefore experience in written communication helps graduates to work in distributed teams. - Written presentation of the results of their work . For the presentation of their educational projects, senior students can write posts on Habr, scientific articles, as well as just reports. There are many opportunities for this - from the second year in some universities, term papers begin. You can also use the essay as a form of control - usually they are closer in form to a journalistic article. Such an approach has already been implemented at HSE.
If a company practices a flexible approach in development, it is necessary to present the results of its work in smaller portions, but more often. To do this, it is important to be able to briefly communicate the result of the work of one specialist or the whole team. Also in many companies today are held “reviews” - annual or semi-annual. Employees discuss the results and prospects of work. A successful review is the main cause of career growth, awards, for example, in Microsoft, Acronis or Yandex. Yes, you can program well, but “sitting in the corner” even a cool specialist will always lose to someone who can well present their success. - Academic Writing . Separately, it is worth to distinguish academic writing. It is useful for students to get acquainted with the rules of writing scientific texts, using arguments, searching for information in various sources and arranging references to these sources. It is advisable to do this in English, since there are many more good texts in the international academic community, and for various disciplines there are already established templates for presenting scientific results. Of course, academic writing skills are also needed when preparing Russian-language publications, but there are much more examples of good modern articles in English. These skills can be obtained through the relevant course, which is now included in many educational programs.
- Conducting meetings . Most students do not know how to prepare for meetings, take minutes and process data. But if we develop this skill in a higher education institution, for example, by participating in collective projects, we will be able to avoid wasting time in the workplace. This requires control over the students' project work in order to teach them to effectively conduct meetings. In practice, it costs a lot of money to each corporation - after all, if several people who receive a large salary spend an hour of working time at a rally, I would like to have a corresponding return from it.
- Public speaking Many students are faced with the need to speak in public only to defend a thesis. And not everyone is ready for this. I have seen many students who:
- stand with their backs to the listeners
- reeling, trying to introduce a commission to trans,
- break pens, pencils and pointers,
- walk in circles
- look at the floor.
It is normal when a person performs for the first time. But with this stress you need to start working earlier - with the protection of coursework in a friendly atmosphere, among fellow students.
In addition, the standard practice in corporations is to enable an employee to propose an idea, get funding, position or a dedicated project for it. But, if you think about it, this is the same defense of a term paper, just at a higher level. Why not train such useful career skills while studying?
What did I miss?
One of the reasons for writing this post was an article
published on the website of TSU . The author of the article focuses only on the shortcomings of Russian students noticed by foreign teachers. The practice of my teaching in different universities suggests that Russian school and higher education provides a good base. Russian students are knowledgeable in mathematics and algorithms, it is easier to build professional communication with them.
In the case of foreign students, on the contrary, the expectations of a Russian teacher can sometimes be too high. For example, at the level of basic training in terms of mathematics, Indian students that I met are similar to Russian ones. However, they sometimes lack specialist knowledge at the exit from the bachelor degree. Good European students are more likely to have less strong math training at the school level.
And if you study or work in a higher educational institution, you can now build work on communication skills (your own or students), expand the fundamental base and practice programming. To do this, all opportunities are provided in the Russian education system - you just need to use them correctly.
I’ll be happy if in the comments to the post you share your links to courses and methods that help to balance the balance in education, as well as other ways to pump soft skills while studying at the university.