English version is in beta. All contents of the site should be already translated (mostly using machine translation), and everything should work properly. However, if you find any problems, please contact me.

What is this course?

This is a course on algorithmic programming (algorithms, data structures, etc.)

It is primarily designed for schoolchildren and as a preparation for school programming contests (and many materials in the course are written exactly as for schoolchildren), but also everyone can (and do) study: students, university graduates, etc. Classes for Nizhny Novgorod schoolchildren are free, for everyone else — paid.

What is being taught here?

The main topic is algorithmic programming. Starting from the basics of programming, and further into algorithms and data structures.

What is NOT taught here?

We do not deal with "technical" issues:

  • Creating user interfaces, buttons, windows, etc.
  • Programming for specific platforms: creating web applications, programming for Android, iOS, etc.
  • Using various frameworks, libraries, etc.

We will study the algorithms that underlie many such programs (we will not discuss how to make the "sort alphabetically" button, but we will discuss how to implement sorting when there is already a list of objects to sort).

Are you really going to teach?

Yes and no. The format of the online course implies that you will study a significant part of the material yourself. I will rather guide you, advising you where to look at this or that question, on which problems to debug skills, and I will also comment on your programs quite actively. In addition, you can always contact me (contacts in the "About the course" section) and ask any question.

What is the programming language?

Generally speaking, whatever you want, of those that allow you to write console applications and are supported by this site. These are C++, Java, Python, C#, PHP, Perl, Kotlin, etc.

At the same time, if you don't know any programming language yet, then I recommend Python. On the course page there are materials for beginners in python. If you know any of the languages listed in the previous paragraph, you can use it; but in general, all advanced topics (starting from level 2) do not depend on the language.

Personally, I know C++ and Python best of all; I can help you with these languages in sufficient detail. In other languages, I will not be able to tell you about various subtleties of the language, although, as experience shows, this is not very important for algorithms.

And what initial knowledge is required?

In programming — from none and above. In general, the online format allows you to implement almost individual training (i.e., each participant of the course is engaged in his own rhythm and mode), so I expect people with a wide range of initial knowledge here: from junior schoolchildren who are just beginning to program, to already professional programmers who want to improve their knowledge in the field of algorithms.

What should I do to start studying?

  • Register on the site.
  • Contact me using any of the methods listed in the "About the Course" section. In the letter, specify your name, where you study / work. In addition, write briefly what your experience in programming is, or you will be studying "from scratch".
  • Read, or at least review, all the texts in the "About the Course" section.
  • Wait for a response and further instructions from me.

When can I start studying? When does the "next group" start?

You can join the course at any time. All the same, students have quite different levels of training, so there is no single program like "this week we are going through this, next week this, and if you missed or learned about the course too late, then wait for the next group or next year".

The only thing is that during the holidays or in the summer I may have limited access to the Internet, so I may not respond to your letters so quickly, look at your solutions, etc.

And who are you anyway?

I am Petr Kalinin, Ph.D., Senior developer at Yandex, graduate of the Nizhny Novgorod State University. At one time, I actively participated in various programming contests and olympiads: bronze medalist of the International Olympiad in Informatics (IOI) in 2001, gold medalist of the IOI in 2002; as part of the UNN team, I twice participated in the finals of the ACM International Collegiate Programming Contest (ACM ICPC). From 2017 to 2019, I taught at the Yandex School of Data Analysis. I am a student of V.D. Lelyukh.

In one form or another, I have been teaching programming to schoolchildren since I graduated from school in 2002 (I went as a teacher to various summer schools, etc.); this course has been in existence since 2013. Among my students are a number of participants and one winner of the final stage of the All—Russian Olympiad of Schoolchildren in Computer Science (not counting my brother Nikolai, in whose training I also took part not the last time and who is the absolute winner of the final stage of 2013 and twice — in 2013 and 2014 — the gold medalist of the international Olympiad of schoolchildren in computer science).

You can always contact me, contact details are listed in the "About the course" section.