Studies at ITMO

I have always been into engineering sciences, namely satellite navigation, so I decided to study Motion Control and Navigation Systems at ITMO. 

I studied at the School of Computer Technologies and Control at the department that is now called the Institute of Information and Navigation Systems, which back then collaborated with CSRI Elektropribor. In 2015, I got my Bachelor’s degree and in 2017 I defended my Master’s thesis. 

As a student, I discovered that navigation occurs not only on land, but also underwater – there, the coordinates are based on the triads of gyroscopes and accelerometers. I also learned to program on C, C++, and MATLAB, studied classic algorithms, and acquired knowledge of hardware: circuits and analog and digital devices that I relied on most in my work. For example, I used these skills in debugging software and programming drivers, while MATLAB came in handy to analyze and visualize data from sensors. 

Viktor Ovchinnikov. Photo by Dmitry Grigoryev / ITMO.NEWS

Viktor Ovchinnikov. Photo by Dmitry Grigoryev / ITMO.NEWS

Discovering a career path and acquiring new skills

In the software industry, there are two main fields: development and QA (quality assurance). I started out as a developer, creating software from scratch and supporting legacy code, as well as fixing bugs. However, I was also always interested in white- and grey-box testing – such tests take into account the inner mechanisms of a system or a component. I was keen to try testing the work of developers. 

As many other professionals, I came into the field of system-on-chip verification after developing embedded systems – the software used to control various devices. One example of embedded development is software for a cheap microcontroller with small computing power. Such software will have to ensure the microcontroller’s energy efficiency in specific conditions. I personally worked with similar microchips by Automotive; they are used in the car industry and have to be efficient and reliable. 

ITMO students at a hackathon. Photo by Elizaveta Kozyrina / Mediaportal ITMO

ITMO students at a hackathon. Photo by Elizaveta Kozyrina / Mediaportal ITMO

What is public key infrastructure?

As a student, I had many jobs: worked on a dental device, developed control systems for electrical batteries, and even created a fully electric bus for the company Arrival. 

However, my breakthrough came when I came to Electrolux. There, we were developing an IoT chip to be installed in fridges, washing machines, and other household appliances. Thanks to such chips, users can connect their devices to Wi-Fi routers to track and control their activity. 

I was responsible for Public Key Infrastructure (PKI) in this project. In other words, we were working on data authentication and encryption. For example, we have a fridge that generates two keys: one is public, the other – private. The public one is known to anyone, but the private one is hidden even from the developer in a special trusted zone. When the fridge is first connected to a router, the IoT chip generates a certificate signing request. This request is sent to the server, which signs it with the public key, forms a certificate, and returns it. In the future, the chip will be able to use this certificate for various interactions via the now protected communication channel. If a malefactor were to pretend to be the server or the device, they wouldn’t be able to do it – as they wouldn’t understand any message they were to intercept.

Viktor Ovchinnikov. Photo by Dmitry Grigoryev / ITMO.NEWS

Viktor Ovchinnikov. Photo by Dmitry Grigoryev / ITMO.NEWS

Viktor’s career now 

These days, I am a senior engineer in systems-on-chips programming at YADRO. There, we write verification tests for such systems using C. 

Systems-on-chips are electric circuits that have the functionality of a PC. With such systems, it’s possible to develop microcontrollers for specific purposes – to be used in cars, nuclear industry, or various devices. In Russia, very few companies develop such systems; they used to be mainly imported. YADRO is one of the few enterprises with their own systems-on-chips development. 

At the same time, not many professionals in Russia have the background needed for work in this field. You need to have the knowledge of hardware and physical processes happening inside electronic devices, Boolean algebra, hardware description languages (i.e., SystemVerilog) for modelling digital systems, the C programming language. You will also need to have wide knowledge of computers. YADRO is currently on the lookout for such specialists.

At YADRO, students can also work or intern in the field of software quality assurance. ITMO and YADRO have recently launched a corporate Master’s program in this field: Tools for Software Development and Analysis. In the program, students learn various approaches to software analysis and error detection methods, while also training to create their own tools for good-quality software development. Graduates will be able to create analyzers, fuzzers, IDEs and their components, such as debuggers and profilers, as well as develop new programming languages and their compilers. 

Read also:

New Master’s Program by ITMO and YADRO: Learn to Build Your Own Programming Languages

Tips for students

  • For a successful career in any field, it’s best to start working on your projects while you are still at university. This way, your knowledge will have to follow your needs. These projects can come from your internship; they can also be your DIYs – even turning your home smart can be a great pet project for boosting your skills. 
  • Take good care in documenting your code. Otherwise, you risk not making head or tail of it when you next open it after a few months of a hiatus. 
  • It’s important to learn to visualize your thinking process to make it easily understandable to your team. This way, you will save a lot of time on discussions. You can use any tool: a simple one, like, or even turn to the GraphML programming language.
  • If you discover a bug or anomaly, you need to analyze your code in detail and look for roots of the problem at the lowest level.