📜 ⬆️ ⬇️

How to get the most out of Computer Science Education

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.

image

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?


image
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?


image
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?


image
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.


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


image
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.


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.

Source: https://habr.com/ru/post/458676/


All Articles