How to Get the Most Out of a Computer Science Education

Most modern programmers have received their education at universities. Over time, this will change, but for now, it remains true that good talent in IT companies still comes from universities. In this post, Stanislav Protasov, the Director of University Relations at Acronis, shares his vision of the unique aspects of university training for future programmers. Instructors, students, and those who hire them might even find a couple of useful tips below.

How to Get the Most Out of a Computer Science Education

For the past 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 also serve as the Deputy Head of the Department of Theoretical and Applied Computer Science at MIPT. From my experience working at several good Russian (and not only) universities, I have gathered some insights into the preparation of students in computer disciplines.

The 30-Second Rule No Longer Works

I'm sure you're familiar with the 30-second rule, which states that a programmer should understand the purpose of a function after a quick glance at its code. It was conceived long ago, back when numerous operating systems, languages, hardware, and algorithms emerged. I've been writing code for 12 years, but recently I encountered the source code of a product that seemed like magical spells at first glance. Nowadays, if you're not immersed in the subject area, the 30-second rule ceases to be valid. Otherwise, you won't have enough time—not even 300 seconds—to figure out what's what.

For example, if you want to write drivers, you will need to dive into that field and read thousands of lines of specialized code. With this approach to learning the subject, a specialist develops a 'flow' feeling. Just like in rap, where the sense of good rhyme and correct rhythm emerges without special rationalization. Similarly, a well-prepared programmer can easily recognize inefficient or simply poor code without delving into the details of where style was violated or an unoptimized approach was used (explaining that feeling, however, can be quite challenging).

Specialization and increasing complexity mean that a bachelor's degree no longer provides the opportunity to study all fields in sufficient depth. However, at this level of education, it's essential to gain a broad perspective. Later, during graduate studies or at work, one will need to spend some time immersing oneself in the issues and specifics of the subject area, learning the jargon, programming languages, and the code of colleagues, and reading articles and books. It seems to me that only in this way can a university help to 'build the barbell' for the future. T-shaped specialists.

What programming language is better to teach at university?

How to Get the Most Out of a Computer Science Education
To my delight, university teachers have already abandoned the search for the right answer to the question: 'What is the best language for programming?'. Disputes over whether C# or Java, Delphi or C++ is better have practically died down. The emergence of many new programming languages and the accumulation of pedagogical experience have led to an understanding in the academic community that each language has its own niche.

The issue of teaching using a specific programming language has ceased to be a priority. It doesn't matter which language the course is taught in. The main thing is the 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 presented in Java—a language without pointers but with a Garbage Collector. It's hard to argue that Java is an optimal choice for writing high-performance parallel code. However, for explaining the concepts laid out in the book, the language proved suitable. Another example is the classical machine learning course by Andrew Ng, taught in Matlab within the Octave environment. Today, one might choose a different programming language, but what difference does it really make if the ideas and approaches are what matter?

More practical and closer to reality

At the same time, in recent years, there has been a significant increase in practitioners at universities. While Russian higher education programs were previously criticized for being disconnected from reality, this can no longer be said about IT education today. Ten years ago, there were almost no instructors with real industry experience at universities. Now, it's becoming more common for classes in specialized departments to be taught not by full-time computer science educators, but by practicing IT professionals who teach only 1-2 courses during their free time from their primary jobs. This approach proves beneficial in terms of high-quality workforce training, course relevance, and of course, finding potential employees for companies. I don't think it's a secret to say that we support the basic department at MIPT and are building relationships with other universities to prepare students who could start their careers at Acronis.

Mathematician or Programmer?

How to Get the Most Out of a Computer Science Education
The debates that once surrounded programming languages have shifted to a philosophical realm. Now, so-called 'programmers' and 'mathematicians' are arguing with each other. In principle, these schools could be distinguished as two separate educational programs, but the industry still poorly delineates such nuances, and from one university to another, we have similar education with slightly different focuses. This means that both the student and the company they will work for later will have to fill in the puzzle of knowledge with missing pieces.

The emergence of practitioners in universities who write industrial code in various languages provides students with a more robust development skill set. Being well-versed in implementations of standard libraries, frameworks, and programming techniques, practicing programmers cultivate in students the desire to write good code quickly and efficiently.

This valuable skill, however, sometimes leads to the emergence of enthusiasts who like to reinvent the wheel. Student programmers think to themselves: 'What does it cost me to write another 200 lines of good code that will straightforwardly solve the given task?'

Teachers with a classical mathematical education (such as from a math faculty or applied mathematics) often work in scientific environments or in data modeling and analysis. Mathematicians view problems in Computer Science differently. They primarily operate not with code, but with algorithms, theorems, and formal models. An important advantage of the mathematical approach is a clear fundamental understanding of what can and cannot be solved, and how to solve it.

Accordingly, math educators discuss programming with a focus on theory. Students coming from 'mathematicians' often propose well-thought-out and theoretically superior solutions but are generally suboptimal in terms of language and, often, poorly written. Such a student believes their primary goal is to demonstrate the ability to solve such tasks in principle, while the implementation may be lacking.

Students who were trained by programmers in school or during their early years often come up with a 'very beautiful bicycle' that, however, usually does not operate very efficiently asymptotically. They, on the contrary, do not aim to theorize deeply and refer to textbooks in search of optimal solutions, preferring beautiful code.

In various universities, during student interviews, I usually see which 'school' is at the foundation of their education. I have rarely encountered an ideal balance in basic education. In my childhood, there were opportunities to prepare for olympiad mathematics in my city, but there were no programming clubs. Now, however, children learn to program in trendy languages like Go and Python in clubs. Therefore, even at the level of university admissions, there are discrepancies in approaches. I believe it is important for universities to support both skills; otherwise, either a specialist with insufficient theoretical grounding will come to work, or a person who has not learned and does not wish to write good code.

How to 'pump up the horizontal bar' for future T-shaped specialists?

How to Get the Most Out of a Computer Science Education
It's clear that under such circumstances, a student simply chooses what they prefer. The teacher conveys the perspective that they feel closest to. However, everyone benefits if both the code is well-written and the algorithms are clear, justified, and efficient.

  • IT Horizon. A graduate with a Bachelor's degree in Computer Science is already a skilled specialist with a developed technical understanding, who has likely chosen their specialization. Yet in the early years, we do not know what they will pursue. They might go into science or analytics, or perhaps write a vast amount of code every day. Therefore, it is essential to showcase all aspects of working in the IT field and familiarize them with all tools. Ideally, instructors from theoretical courses should demonstrate the connection to practical applications (and vice versa).
  • Growth Point. Avoiding extremes is in the student's best interest. Understanding whether you are a "mathematician" or a "programmer" is not difficult. It’s enough to pay attention to your first impulse when solving a problem: do you want to consult a textbook for the optimal approach or write a couple of functions that will surely be useful later? Based on this, one can construct a complementary trajectory for their learning.
  • Alternative Sources of Knowledge. Sometimes the program is well-balanced, but "Systems Programming" and "Algorithms" are taught by entirely different instructors, and some students may relate more to the first teacher while others prefer the second. However, even if you dislike a professor, it's no reason to neglect some subjects in favor of others. Bachelor students are motivated to find the will to work with various sources of knowledge and should never blindly 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 enhance your programming skills on Coursera, Udacity, or Stepik, where many different courses are available. Students often begin to watch hardcore courses on programming languages if they feel that the algorithms instructor has good knowledge of mathematics but cannot answer complex implementation questions. Not everyone may agree with me, but in my experience, I have found that the C++ specialization from Yandex, which systematically covers increasingly complex language features. In general, choose a course with high ratings from reputable companies or universities.

Soft skills

How to Get the Most Out of a Computer Science Education
When entering the workforce from university, whether in a startup or a large corporation, even students from top universities find themselves poorly adapted to the real work environment. This is because universities tend to coddle students today. Even if one misses many classes, fails to prepare in time for tests and exams, or arrives late, everyone can still pass and retake — and in the end, still earn a diploma.

Nevertheless, today there are all the conditions necessary for preparing students for adult life and independent professional activity. They will need to not only program but also communicate. And this too needs to be taught. Universities have various formats to enhance these skills, but unfortunately, they often do not receive enough attention. Nevertheless, we have many opportunities to acquire effective teamwork skills.

  • Business writing communication. Unfortunately, most graduates have no understanding of correspondence etiquette. The specifics of communication in messengers involve exchanging messages at night and during the day and using colloquial styles and informal vocabulary. However, written communication could be practiced through student interactions with their department and the university.

    In practice, managers often face the need to break down a large project into smaller tasks. To do this, it is essential to carefully describe each task and its components so that junior developers understand what is expected of them. Poorly defined tasks often lead to the need for revisions, and therefore experience in written communication helps graduates work in distributed teams.

  • Written presentation of work results. For presenting their academic projects, senior students can write posts on Habr, scientific articles, as well as simply reports. There are many opportunities for this — already from the second year, some universities start having coursework. Essays can also be used as a form of assessment — they usually resemble journalistic articles in structure. This approach has already been implemented at HSE.

    If a company practices an agile approach to development, presenting the results of one's work often happens in smaller portions, but more frequently. It is important to be able to convey the results of one specialist's work or the entire team briefly. Additionally, many companies today hold reviews—annual or semi-annual. Employees discuss results and work prospects. A successful review is the main reason for career advancement, bonuses, for example, at Microsoft, Acronis, or Yandex. Yes, you may be a good programmer, but even a top specialist sitting in the corner will always lose to someone who can effectively present their success.

  • Academic Writing. It is worth highlighting academic writing separately. Students benefit from familiarizing themselves with the rules of writing academic texts, using arguments, searching for information from various sources, and citing these sources correctly. It is advisable to do this in English, as there are many more good texts in the international academic community, and established templates for presenting research results already exist for various disciplines. Of course, academic writing skills are also necessary when preparing Russian-language publications, but there are far fewer examples of good modern articles in English. These skills can be acquired through a relevant course, which is now part of many educational programs.
  • Conducting Meetings. Most students do not know how to prepare for meetings, keep minutes, and process data. However, if we develop this skill in university, for instance, by participating in collective projects, we can avoid wasting time in the workplace. This requires oversight of students' project work to teach them how to conduct effective meetings. In practice, this costs corporations a lot of money—if several high-paid employees spend an hour in a meeting, one hopes for appropriate returns from it.
  • Public Speaking. Many students face the need to speak publicly only during their thesis defense. And not all are ready for it. I have seen many students who:
    • stand with their backs to the audience,
    • rock back and forth, trying to lead the committee into a trance,
    • break pens, pencils, and pointers,
    • wander in circles,
    • stare at the floor.

    It's normal for a person to be nervous when speaking for the first time. But one should start working on this stress earlier—during coursework defenses in a friendly environment among peers.

    Moreover, standard practice in corporations is to allow an employee to propose an idea, secure funding for it, or get a position or dedicated project. But, if you think about it—it's just a thesis defense at a higher level. Why not train such useful career skills during study?

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 as observed by foreign teachers. My teaching experience at various universities indicates that Russian school and higher education provide a solid foundation. Russian students are well-versed in mathematics and algorithms, making professional communication easier.

In the case of foreign students, on the contrary, the expectations of a Russian instructor may sometimes be inflated. For example, at the basic level of mathematical training, the Indian students I have encountered are similar to their Russian counterparts. However, they often lack specialized knowledge upon graduation from their bachelor's programs. Good European students are likely to have a less robust mathematical background at the high school level.

If you are studying or working at a university, you can start building your communication skills (for yourself or your students), expand your foundational knowledge, and practice programming right now. The Russian education system offers all the necessary opportunities for this — you just need to make the right use of them.

I would be pleased if in the comments to this post you could share your links to courses and methods that help balance education, as well as other ways to enhance soft skills during university studies.

Source: habr.com

Buy reliable website hosting with DDoS protection, VPS VDS servers šŸ”„ Buy reliable website hosting with DDoS protection, VPS VDS servers | ProHoster