How to Get the Most Out of Computer Science Education

Most modern programmers are educated in universities. Over time, this will change, but now the situation is such that good personnel in an IT company still come from universities. In this post, Stanislav Protasov, director of university relations at Acronis, talks about his vision of the specifics of university training for future programmers. Teachers, students and those who hire them can even find a couple of useful tips under the cut.

How to Get the Most Out of Computer Science Education

For the last 10 years I have been teaching mathematics, algorithms, programming languages ​​and machine learning at 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 30 second rule no longer works

I'm sure you've come across the 30 second rule, which says that a programmer should understand the purpose of a function after a quick look at its code. It was invented a long time ago, since then many operating systems, languages, hardware and algorithms have appeared. I've been writing code for 12 years, but relatively recently I saw the source code of one product, which at first glance seemed like magic spells to me. Today, if you are not immersed in the subject area, then the 30 second rule stops working. Otherwise, not only 30, but also 300 seconds will not be enough for you 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, the specialist has a “feeling of flow”. As in rap, when the feeling of a good rhyme and the right rhythm appears without special rationalization. In the same way, a well-trained programmer can easily recognize inefficient or just bad code without going into a detailed study of where a style violation occurred or a suboptimal approach was used (and this feeling can be very difficult to explain).

Specialization and growing complexity lead to the fact that the education of a bachelor no longer makes it possible to study all areas in depth. But it is precisely at this level of education that one must acquire an outlook. After that, in a master's program or at work, you will need to spend some time immersing yourself in the problems and specifics of the subject area, studying slang, programming languages ​​and the code of colleagues, reading articles and books. It seems to me that this is the only way with the help of the university you can “pump up the crossbar” for future T-shaped specialists.

What is the best programming language to teach at university?

How to Get the Most Out of Computer Science Education
To my joy, university professors have already abandoned the search for the correct answer to the question: “What is the best way to program?”. Arguments about what is better - C # or Java, Delphi or C ++ - have actually come to naught. The emergence of many new programming languages ​​and the accumulation of pedagogical experience have led to the fact that an understanding has been established 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. It doesn't matter what language the course is taught in. The main thing is sufficient expressiveness of the language. Book "The Art of Multiprocessor Programming” is a good illustration of this observation. In this already classic edition, all the examples are in Java, a language without pointers, but with Garbage Collector. Hardly anyone would argue that Java is far from being the best choice when writing high-performance concurrent code. But to explain the concepts outlined in the book, the language was suitable. Another example - classic machine learning course Andrew Yna, taught in the Matlab language in the Octave environment. Today, one could choose another programming language, but what, in essence, does it matter if ideas and approaches are important?

More practical and closer to reality

At the same time, there have been many more practitioners in universities in recent years. If earlier Russian university programs were actively criticized for being divorced from reality, today it is no longer possible to say the same about IT education. 10 years ago, there were almost no teachers with real experience in the industry at universities. Now, more and more often, at the profile department, classes are taught not by full-time computer science teachers, but by practicing IT specialists who read only 1-2 courses in their free time from their main work. This approach justifies itself in terms of high-quality training, updating courses and, of course, searching for potential employees in the company. I don’t think I will reveal a secret by saying that we maintain a basic department at MIPT and build relationships with other universities, including in order to prepare students who could start their careers at Acronis.

Mathematician or programmer?

How to Get the Most Out of Computer Science Education
Holivars, which used to unfold around programming languages, have moved into a philosophical direction. Now conditional “programmers” and “mathematicians” are arguing with each other. In principle, these schools could be separated into two educational programs, but the industry is still not very good at separating 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 the missing pieces.

The emergence of practitioners in universities who write industrial code in different languages ​​gives students a better development skill. Being well acquainted with standard library implementations, frameworks and programming techniques, practicing programmers instill in students the desire to write good code, to do it quickly and efficiently.

This useful skill, however, sometimes leads to the emergence of fans to reinvent the wheel. Programming students think like this: “what should I 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) often work in a near-scientific environment, or in the field of modeling and data analysis. “Mathematicians” see problems in the field of Computer Science differently. First of all, they operate not with code, but with algorithms, theorems, 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, mathematics teachers talk about programming with a bias towards theory. Students who come “from mathematicians” are more likely to offer well-thought-out and theoretically more advanced solutions, but, as a rule, suboptimal in terms of language and, often, simply sloppy written. Such a student believes that his main goal is to demonstrate the ability to solve such problems in principle. But the implementation can be lame.

The guys who were brought up by programmers at school or in their first years bring with them a “very beautiful bicycle”, which, nevertheless, usually does not work very efficiently asymptotically. On the contrary, they do not set themselves the task of deep theorizing and referring to textbooks in search of optimal solutions, preferring beautiful code.

At different universities, at interviews of students, I usually see which “school” underlies his education. And I almost never encountered perfect balance in basic education. As a child, in my city it was possible to prepare for the Olympiad in mathematics, but there were no programming circles. Now, in circles, children learn to program in the “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 maintain both skills at a university, otherwise either a specialist with an insufficient theoretical base or a person who has not learned and does not want to write good code will come to work for the company.

How to still “pump up the crossbar” for future T-shaped professionals?

How to Get the Most Out of Computer Science Education
It is clear that in such conditions the student simply chooses what he likes best. The teacher simply broadcasts a 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 is clear, reasonable and efficient.

  • IT Outlook. A graduate of a bachelor's degree in Computer Science is a ready-made specialist with a developed technical outlook, who has probably chosen his profile. But in junior years, we don't know what he or she will do. He can go into science or analytics, or, on the contrary, write a huge amount of code every day. Therefore, the student needs to be shown all aspects of working in the IT field, to be introduced to all the tools. Ideally, teachers from theoretical courses will show a connection with practice (and vice versa).
  • Growth point. It is in the interests of the student himself not to allow slipping to extremes. Understanding who you are - a "mathematician" or a "programmer" - is not difficult. It is enough to listen to the first impulse when solving a problem: what do you want to do - look into the textbook in search of the optimal approach or write a couple of functions that will definitely come in handy later? Based on this, you can build a further complementary trajectory of your learning.
  • Alternative sources of knowledge. It happens that the program is well balanced, but “System Programming” and “Algorithms” are taught by completely different people, and the first teacher is closer to some students, and the second teacher is closer to others. But even if you do not like the professor, this is not a reason to give up on some subjects in favor of others. The bachelors themselves are interested in finding the will to work with sources of knowledge and in no case trust radical opinions, such as “mathematics is the queen of sciences, the main thing is to know algorithms” or “good code compensates for everything else”.

You can deepen your knowledge in theory by referring to specialized literature and online courses. You can improve your ability to handle programming languages ​​on Coursera, Udacity or Stepik, where there are a lot of different courses. Also, students often start watching hardcore language courses if they feel that the algorithm teacher is good at mathematics, but cannot answer complex implementation questions. Not everyone will agree with me, but in my practice it has proven itself well specialization in C++ from Yandex, on which more and more complex features of the language are sequentially analyzed. In general, choose a course with high marks from reputable companies or universities.

Soft skills

How to Get the Most Out of Computer Science Education
Coming from a university to work in any company, from a startup to a large corporation, students of even top universities are poorly adapted to the real work environment. The fact is that today universities “baby” a lot with students. Even if you miss a lot of classes, do not prepare for tests and tests in time, oversleep, be late for the exam, everyone can pass and retake it again - and in the end you still get a diploma.

Nevertheless, today there are all conditions for students to be prepared for adult life and independent professional activity. They will have to not only program, but also communicate. And this also needs to be taught. In universities, there are various formats for improving these skills, but, alas, they often do not receive enough attention. However, we have many opportunities in our arsenal to gain effective teamwork skills.

  • Written business communication. Unfortunately, most specialists at the exit from the university have no idea about the etiquette of correspondence. The specifics of communication in instant messengers in the exchange of messages at night and during the day and the use of colloquial style and informal vocabulary. However, it would be possible to train written speech when the student communicates with the department and the university.

    In practice, managers often face the need to decompose a large project into small tasks. To do this, you need to describe each task and its components well so that junior developers understand what is required of them. A poorly set task often leads to the need to redo something, and therefore experience in written communication helps graduates work in distributed teams.

  • Written presentation of the results of their work. To present their educational projects, senior students can write posts on Habr, scientific articles, as well as just reports. There are many opportunities for this - term papers begin from the second year in some universities. You can also use an essay as a form of control - usually they are closer in form to a journalistic article. This approach has already been implemented at the Higher School of Economics.

    If a company practices an agile approach to development, it is necessary to present the results of their work in smaller portions, but more often. To do this, it is important to be able to briefly convey the result of the work of one specialist or the entire team. Also, many companies today conduct “reviews” – annual or semi-annual. Employees discuss results and work prospects. A successful review is the main reason for career growth, bonuses, for example, at Microsoft, Acronis or Yandex. Yes, you can program well, but “sitting in the corner” even a cool specialist will always lose to someone who knows how to present his success well.

  • Academic Writing. Separately, it is worth highlighting academic writing. It is useful for students to get acquainted with the rules for writing scientific texts, using arguments, searching for information in various sources and making links to these sources. It is advisable to do this in English, as there are many more good texts in the international academic community, and there are already well-established templates for presenting scientific results for various disciplines. Of course, academic writing skills are also needed when preparing Russian-language publications, but there are much fewer examples of good modern articles in English. You can get these skills in the framework of the corresponding course, which is now included in many educational programs.
  • Meeting management. Most students do not know how to prepare for meetings, take minutes and process data. But if we develop this skill in high school, for example, by participating in collective projects, we can avoid wasting time in the workplace. This requires supervising the project work of students in order to teach them how to conduct meetings effectively. In practice, this costs every corporation a lot of money - after all, if several people who receive a large salary at once spend an hour of working time at a rally, you want it to have a corresponding return.
  • Public speaking. Many students are faced with the need to speak publicly only at the defense of their thesis. And not everyone is ready for it. I have seen many students who:
    • stand with their backs to the audience
    • swaying, trying to introduce a commission to the trance,
    • break pens, pencils and pointers,
    • walk in circles
    • look at the floor.

    It's normal when a person performs for the first time. But with this stress, you need to start working earlier - with the defense of term papers in a friendly atmosphere, among classmates.

    In addition, standard practice in corporations is to allow an employee to propose an idea, receive funding for it, a position or a dedicated project. But, if you think about it, this is the same defense of a term paper, just at a higher level. Why not practice such useful career skills while studying?

What did I miss?

One of the reasons for writing this post was an article, published on the Tyumen State University website. 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 savvy 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 the level of mathematics, the Indian students I met are similar to Russian ones. However, they sometimes lack special knowledge at the exit from the bachelor's degree. Good European students are more likely to have less strong mathematical training at the school level.

And if you study or work at a university, you can already build work on communication skills (your own or students), expand your fundamental base and practice programming. To do this, the system of Russian education provides all the opportunities - you just need to use them correctly.

I will be glad if in the comments to the post you share your links to courses and methods that help to even out the balance in education, as well as other ways to improve soft skills while studying at a university.

Source: habr.com

Add a comment