What is taught at the Master of Software Engineering in St. Petersburg HSE

Many do not understand what they can teach in the master's degree in Software Engineering, and believe that after undergraduate you need to go to work and learn everything right there. Is it worth going to a master's program in SE? This is a difficult question, and in this article we will not answer it, but we will tell you what graduates of strong bachelors are taught in ours.



My name is Olya Kunyavskaya, I am in my first year of the Master's program in Data Programming and Analysis at the Higher School of Economics - St. Petersburg on the Software Engineering track. In the previous series, I already talked about my path to HSE and the motivation with which I came here.

How is our study


What are conceptually taught


Only graduates of strong bachelors in IT are accepted for our master's program, therefore it is believed that we have already received all the necessary basic knowledge in mathematics, algorithms and programming in undergraduate studies. The goal of the Software Engineering track is to give students an idea of ​​the different fundamental directions in development. Therefore, courses for us are selected from different areas of knowledge, one way or another related to development.

The ability to influence your learning


Our program is new, and we can influence what the courses will be. The set of disciplines is now changing from year to year, and our program is already quite different from the program of our colleagues one year older.

We can express wishes, what courses we want to attend (preferably with a specific indication of who reads this course and where), and the administration will try to agree. Our opinion also affects how and who will read the courses next year. At the end of each semester, we fill out questionnaires, and then the curator discusses the results with us and advises how best to change the course and whether it is worth leaving it for the next year. This feedback is important for the development of the curriculum, as many courses are taught for the first time. 

Learning Features


Of the unusual things that are specific to HSE, studies are broken down by modules, rather than semesters, as in other universities. A module is two to three months, and in a year we have four training modules. As a rule, in each module we go through about three subjects. 

Some subjects last a semester, some one module. Some of the subjects are read only for us and for students of the 2nd year of our sub-direction (then from four to six people are present in the classes). We take some subjects at the Yandex Data Analysis School, and part of the courses along with children from other areas. 

We had both theoretical and fairly applied courses, and courses related to the development of soft skills. 

What are we taught


The goal of the Software Engineering track is to give us some experience from various areas related to development. I’m not sure that I can describe the big picture, so I’ll just tell you about the courses that were taught to us this year: what happened at each of them and what impressions I had.

Data management algorithms


Theoretical course on algorithms related to databases. The course lasted one module, three pairs a week. We were told about transaction processing algorithms in distributed databases. For example, about the criteria for the correctness of transaction execution schedules, concurrency control protocols, database recovery after a fall.

We had two lectures and one seminar weekly. At each seminar, three people prepared reports for 20 minutes on one of the previously prepared articles. There were only seven of us on the course, so it was necessary to prepare a report every two weeks, which is often enough. At the same time, prepared reports were always treated positively. 

The main benefit of this course for me was not related to the main material. The key skill that I have improved is the ability to prepare scientific reports in English. 

The course was read by Boris Novikov in full in English. Despite the fact that all the students were Russian-speaking, lectures were given in English, questions should have been asked in English, and reports should also be prepared in English, respectively. In my life, it constantly seems to me that I don’t know English well enough and therefore I should hide and be silent, but one of the rules of the course was “Anyone can say arbitrarily stupid things and arbitrarily illiterate”, therefore a very positive atmosphere was created.

After this course, I, firstly, believed that I could tell some non-trivial thoughts in English for a long time without problems, and secondly, I got some skill in isolating key information from scientific articles.  

Computer graphics


The course was designed for one semester and was mainly devoted to rendering in Unity. It was read by Mikhail Panin , a techlide at Playneta.gg . There were a lot of practical assignments, mainly devoted to writing shaders and generating meshes. 

While I was taking this course, I had an expansion of consciousness in terms of visual perception of objects. The final assignment was cloud generation. And while I was doing it, I realized that, in fact, I never really looked at the clouds and wondered how they looked. I could not validate whether I managed to generate a beautiful sky, so the task took me a lot of time and in the end I did not pass it to the maximum grade. I’m generating some kind of cloud, it seems to me that it’s a normal cloud, I’m sending it to the teacher and I immediately get the answer: “Well, here it’s dark, it must be dark not here, but below, but this place doesn’t look like a cloud at all” . I think I sent about 20 different versions of the clouds.


Now I go to work, look at the sky, see a cloud, immediately stick and think: “Hmm ... And why, interestingly, is the cloud dark above and below, on the contrary, bright?” Then I understand that it is dawn and the source of light is below. 


Homework in which it was necessary to implement a diffuse, reflective model and something in between.

After a course in computer graphics, I now look at the clouds a lot. And also on brick walls and objects of different specularities. 

Network Attack Protection


The course was read only for our sub-direction, there were six students in total. We learned to lift the network, configure and load Apache and nginx, detect vulnerabilities and defend against attacks.

The course was completely practical and mainly consisted of the teacher's answers to our questions and laboratory work, to which we were given detailed instructions on what to do. The main thing that I understood during this course is that this is not at all the area that I want to deal with. Each time you sit down to decide the laboratory, at first it seems that everything is extremely clear. Then a lot of pitfalls are discovered, for example, inconsistencies in program versions, unexpected limits on the number of open connections, or it suddenly turns out that somewhere there are not enough configs. Moreover, everyone who took the course had problems in different places, and without the help of a teacher they often could not figure out what was the matter.

It was simple on the subject, when everything was going as it should, and it became very difficult if something suddenly went wrong.

Finite-field Algebra and Coding Theory


The course is built very interactively. Lectures and practices were held for only five people, and there was a lot of communication. At the lecture, the transition to the next thought occurred only when all those present understood the previous one. We rather discussed real objects, rather than ideas and abstract concepts, as this, according to my recollections, happened at mathematical courses in undergraduate studies. At lectures, we were first given examples of some new objects, we examined them, twisted them in our hands, understood how we could work with them, and found some patterns. And only after we were inspired by a new object, the teacher began to formulate and prove the theorems. 

Since there were five of us, during the practice everyone managed to solve problems at the board. The tasks were very practical: for example, constructing a finite field, determining inverse elements, encrypting and decrypting something. And so the knowledge was much more lively.

An example of a task: there is a sufficiently large finite field and you need to calculate a lot about it: element orders, inverse, cyclotomic classes and something else. From the very beginning, you don’t know how to count it all, and you think in the simplest way. After several iterations, you notice that you can count an order of magnitude faster, and you begin to use some properties in the calculation. You yourself understood how this or that property works and why it works, and you use it for this reason, and not because one of the theorems says that this should be done. 

It seems to me that there are really not enough such items where intuition is simply developed to work with one or another object. It is a pity that the course lasted only one module. 

Game development


An introductory game development course was taught with the assistance of Playkot , and was taught for the first time: for us, and in general. He was taught by several different people who represent the gaming industry.


The course was divided into parts devoted to various aspects of game development: animation, physics, AI, advanced aspects of rendering and optimization, network. In addition, there were overview lectures on related fields (game design, analytics in games, user interaction and art). The person who deals with it spoke about each area. For example, a series of lectures about Unity was given by Anton Yakovlev . He works as a physics leader at Unity, makes games on behalf of his PointOmega Games team, and gives a variety of lectures. We were told how to make animation in Unity, add control over players, or create bots.

This is the case when there are more teachers on the course than students. There are only five of us, and as a task for the entire course, the five of us make a small game with network interaction, physics and several bots. Let's see what we get in the end :) 

C ++


I really wanted to listen to this particular course. In undergraduate, we had an annual C ++ course, however this was in 2014. Since then, the standard and features of the language have already changed. I am developing in C ++ and I know this language to some extent, but my knowledge is slowly becoming obsolete and I want to update it. 

This course is the second part of the C ++ course, and it goes together for us and for students of Computer Science Center. It lasts one semester, read by Valera Lesin and invited lecturers who are well versed in specific areas. We are told about all sorts of cool chips that appeared in the 20th standard, that is, a few months before the start of the course. For example, about modules, concepts or coroutines. After that, in practice, we solve problems on each topic, and we have the opportunity to play with the new concept of the language. 

Game theory


This course was taught for first-year students of two master's degrees in our faculty: for about thirty people. There were many teachers, they were employees of the International Laboratory of Game Theory and Decision Making in St. Petersburg HSE. The course was taught simultaneously in Russian and English: some foreign teachers did not speak Russian and lectured in English, some could speak Russian, but they wrote in English.

Due to the fact that the teachers changed all the time, some lectures were very cool and interesting, and on some I fell asleep. And I categorically did not have enough practice. There was one simple test and two homework, and it turned out that for the test it was enough to pass two of these three tasks. So I threw the second homework in the middle and did not finish it. She moved into the line of non-urgent and optional tasks.

Too undemanding course, in my opinion.

IT management


The course on IT management lasted one module and was read by Ilya Andreevich Pshenichny: acting director of business development at Playkot . The course was attended by undergraduates of two programs: ours and the program "Information Systems and Human-Computer Interaction."   

The classes were mainly lecture, and the course told us a little bit about the various aspects of management specific to the IT industry. For example, what are the approaches to development, stages of development, and at what stages what can be used, how to manage risks, what are the main functions of a leader, how to motivate a team, how to hire and fire employees, and at the very end of the course there were some recommendations for self-development.

The lectures were very easy and interesting to listen to. Usually, the story about each of the areas of management was actively supported by examples from personal experience and explanations of what exactly worked well and in what cases. 

The practical task for this course was only one. We were given an application, and we had to make a development plan and budget. The work needed to be done in two weeks, then it was checked, and with everyone who wanted to listen to the feedback or fix something, the teacher personally called up and talked. After that, another week was given for correction. 

The lectures separately addressed the topic of how to work with the team and what affects the motivation of employees. For example, we were told that one of the important tasks of a leader is to competently give feedback to subordinates. 

In this regard, I want to tell a story how Ilya Andreyevich gave me feedback on my final assignment. Initially, I got 7 out of 10 for the task (on a five-point scale, this is 4). In general, this is so-so, but not a disaster. I doubted whether I should correct: there are other things. During the call, Ilya Andreevich naturally told me what was wrong with the work: the salaries of the employees were not market, taxes were not taken into account, and testing the application was generally lost somewhere from the plan. In the end, he added that he definitely expects me to correct this task. I wondered where such confidence came from. He replied: "Because you are obligatory, diligent and strive for perfection." And I want to meet these characteristics, so I went to fix it, without any doubt! 

It seemed to me that this is a very beautiful example of how you can give negative feedback in such a way that a person has a surge of motivation to fix the job. And yes, for this task I have a total of 10.    

Theory and Practice of Concurrency


We take this course remotely at the Yandex Data Analysis School, taught by Roman Lipovsky. The course is dedicated to competitive systems. It tells us how the memory model works, how coroutines, fibers work, and also about the device of different synchronization primitives and about working with asynchronous systems. 

The course is remote, and many students attend it, so individual communication with the teacher does not work. But the practices and homework are very thought out. 

Homework is checked automatically on your computer inside the Docker container. You can flush changes from Clion to Docker, and then start the test with a simple command. At the same time, testing was done quite well, and this is very difficult for a course on competitive programming. If I understand correctly, the fact is that instead of standard primitives, we use our own implementations from teachers who can check the correctness of work. For example, switch flows in a certain way or do spurious wakeup.

Homework is also done very well. A set of tasks of various difficulty levels appears regularly. Moreover, usually the entire infrastructure is already implemented for us and we do not need to spend time on it. It is only necessary to directly realize the essence for which the task was given. There were tasks to figure out how to work asynchronously in C ++, and to implement their coroutines, and to implement their primitives. 

MAGUEGO


In addition to the courses in the specialty, during the course of studying at the magistracy, we must take one small course the size of a module that is not related to our chosen direction. In the St. Petersburg HSE, such a course is hiding under the code name MAGOLEGO. We were given a choice of about 20 disciplines related to different areas: economics, law, psychology, management and so on. Instead, you could take the online course of our choice, if you agree it first. 

I took a full-time course called Psychology of Professional Success, and I was more than pleased with my choice. We were told about what conflicts are likely at work, how to respond constructively to feedback, what professional dysfunctions are, and what can be done with emotional burnout. In addition, they told how you can understand something about a person by the style of his speech and writing, and what they can pay attention to during interviews. 

It seems to me that I can devote a separate article to interesting thoughts from this course. The course was read by Elena Igorevna Kudryavtseva, it was very easy and interesting to listen to. A good narrative structure, a well-set voice with clear emphasis on the intonation of interesting places and with a lot of examples explaining what is meant. 

As a reporting task, we needed to create our own portfolio. The portfolio is similar to a resume, but the difference between them is that each project / place of work / achievement has a separate page with a story. There is an opinion that it’s very convenient to have such a dad when interviewing for a job, because it’s much easier to talk about yourself, and it’s easier for an interviewer to understand what you can do. 

I liked that after completing the course I still had some artifact in the form of a portfolio, which may be useful to me in the future. I plan to supplement it as I gain new experience.   

Summary


Here is a complete list of the courses that we managed to take in the first year of study at the master's program “Data Programming and Analysis” at the Higher School of Economics - St. Petersburg in Software Engineering. 

Now the magistracy of the St. Petersburg HSE perfectly satisfies my development needs as a developer. I especially like that we have courses that are attended by only 5-6 people, and in which teachers give each student a lot of attention and are ready to respond to all problems that arise. Another important feature for which I value our master's program is that for me there is nothing superfluous in it. 

*****

April 30 at 18:00 at the faculty will be Open House Day online about master's programs. Come!And if you read it later (I hope in the beautiful Russia of the future that defeated the coronavirus), the DOD record is available in the VK group .

All Articles