The history of sports programming dates back to 1970, when the first student programming competition ICPC was held at the University of Texas (USA). At various times, technological giants – IBM, Apple, Microsoft – became sponsors of international tournaments.
The first programming competition in Russia was held in 1981 among Moscow schoolchildren, in which only four people participated. In the 90s, students joined the Olympiad movement. Interest in programming, like a sport, grew in the 2000s – the Internet developed and geographical barriers collapsed. .
Today, ICPC is a global competition: in 2019, about 50,000 participants from 110 countries took part in the Olympiad. We tell how sports programming works, what prospects it has and who it is designed for.
What is sports programming
Today, the popularity of sports programming is growing. The number of participants in the ICPC championship has increased by 2000% in 20 years. But what does programming have to do with sports? The reference to sports is not accidental here – to achieve high results in the algorithm competition, you need to spend a lot of time preparing, solving problems for speed and working in a team. That is, to make efforts and train in your free time in order to show class at competitions.
You can participate several times a year in different competitions and track your professional growth. To participate, you need to know basic algorithms and have programming skills from university courses, somewhere you need knowledge of mathematics in order to come up with more complex algorithms or combinations of them.
The main participation, not just winning
Just like in Olympic sports, programming competitions have their own stars. Russia occupies a leading position in a number of competitions: for the past eight years, our students have won victories in the ICPC International Student Championship.
Olympiad programming is a career springboard
Modern IT companies actively cooperate with technical universities and organize their own educational programs in Computer Science. So they look for future talented employees and contribute to the development of IT education.
Olympians are willingly accepted not only to the best universities, but also to leading technology companies. Often, at interviews, developers are given tasks of the same level of complexity or a little easier than at olympiads.
What will happen next
Sports programming is relatively young when compared to mathematics and physics, but there is already a huge demand for it. The organizers of educational programs and competitions are increasingly focused on helping people take the first step in programming, showing that this is not something terrible and unattainable, but that everyone can become a programmer if they wish.
Briefly about reactive programming in game development
To begin with, reactive programming is a slightly different approach to implementing your software. Of course, no one forbids you to combine different approaches (OOP, ECS and RX), but you need to understand what, why and why. Reactive programming is based on interaction with data streams. You need to understand that all you will be doing is manipulating flows.
Let’s imagine such a situation – that we have a player who can receive damage from the enemy, and the UI will output this damage. In the basic understanding, we have methods for working with this inside objects, and we will refer to the example from the player to the UI by links. In the reactive approach, we create a data stream (for example, the player’s health) that will have its own timeline, during which the health values will change and cause an event about it, and all subscribers will receive a new event.
What else can streams do?
In addition to dispatching events, you can manipulate streams to filter data, handle errors, and cancel them. This distinguishes them from regular Event-Bus. Streams are based on observers – which track changes in the stream and notify listeners about it.
Merging threads
In order to group our data, we can combine streams and work with a single stream using filtrations. These filterings can be done by simple comparison, or through LINQ (however, LINQ performance is a separate issue and should not be abused).
What are the pros and cons of working with streams?
As with any approach, there are pros and cons to working with streams. I have highlighted a few items for myself in both columns.
Benefits of working with streams:
- Reduces cohesion and glue in the project, as well as the amount of code;
- Increases the fault tolerance of the system – since if errors occur in one of the classes, it will not disrupt the operation of the system as a whole, but simply stop updating data in the stream;
- High control over data and events;
- Can be combined with OOP and ECS approaches;
- Disadvantages of working with threads:
Difficult to understand for beginners, requires some thinking;
- In some cases (such as in Unity) Rx extensions (such as UniRx or self-written solutions) may be required, which in turn may impose their own limitations;
- Ideally – requires an understanding of asynchronous application development, since these approaches often overlap;
- Difficulties in debugging multilevel reactive fields when developing projects.