How Yandex created the C ++ course, or why we had to rewrite everything

    In Yandex, C ++ is one of the main languages, our search is written in it. Its development is so important to us that more than a year ago, at the initiative of Yandex, a Russian working group was set up to standardize the “pluses”. Through it , all developers of the Russian-speaking space have the opportunity to influence the development of the language.



    Recently, Fizteh, Yandex, and ShAD launched another course on the Coursera platform - “ Fundamentals of C ++ Development: White Belt ”. It is dedicated to getting to know C ++. I will tell you for whom this course is, how we prepared it, what happened in the end and what our future plans are.

    How it all began, was thrown out and started again


    Of the five C ++ courses, we conceived an online specialization last summer. At first they composed the program slowly, then more actively, and in October they started shooting a video.

    We managed to take off almost half of the first year, but then I looked at the report of Kate Gregory on typical C ++ learning errors and realized that we made most of them. November 30, I wrote in a general chat room:
    Guys! I have a bad news. I realized that our first course is ***** :(

    Here it should be noted that from the very beginning we decided to do courses that, firstly, would tell about modern C ++ and, secondly, would be aimed at practice. It makes no sense to retell a textbook or reference book - you need to give people a skill so that a person can start writing code after the very first lessons.

    Nevertheless, the academic habit and propensity for meticulousness were too strong. In the initial version of the program, the topics followed one another, obeying strict logic. All dependencies between them were observed, C ++ capabilities were considered deeply and in detail. Unfortunately, as a result, standard containers and algorithms were not mentioned for the first time before the second year, because they were template constructions - and until the middle of the second year, we thought, students would not know the templates.

    Probably everyone understands what the problem is. To use std :: vector, it is absolutely not necessary to know how templates are structured and even what it is.

    The moment of awareness was deafening: from the very beginning we knew that the course should be practical and give a skill, not a help — and still made a mistake. We fell victim to our own expertise and began to delve into the internal structure of C ++, instead of telling how easily it can be used to solve practical problems.

    It became clear that the program needs to be rewritten, and most of the captured videos should be discarded and removed again. This added a lot of work to the teaching team and the habit of constantly thinking about the practicality of the course.

    What happened


    So far, the first course has turned out. It is assumed that at the beginning of the course the student can see the C ++ language for the first time in his life (but at the same time you should imagine what programming is in general, and not be afraid of the words “variable”, “cycle”, “list”), and in the end there will be able to write a small key-value repository with the ability to add records there and request all values ​​for some known key.

    To make it convenient for a person to solve such a problem, one needs to tell him about the basic language constructions, functions, several standard containers and algorithms, structures and classes, input and output flows, exceptions. It’s worth not telling too deeply, but so that all of this can be used. And of course, you need to give out more tasks so that after watching the video you can immediately "touch" the material with your own hands.

    Testimonials from beta testers and listeners are encouraging. We hope that we have obtained a good introductory course, besides in Russian, which should seriously facilitate the perception of the material by many people.

    Other advantages are described above: focus on practice, many tasks, use of modern language features. The authors of the course are senior Yandex developers who know C ++ at a deep level and are ready to share rich experience in using the language in combat projects. Therefore, both lectures and assignments teach the most efficient, safe and simple C ++ programming.

    The plans - more hardcore courses, from yellow to black belt. We try to prepare them so that even those who are knowledgeable in C ++ can listen with interest and, possibly, learn something new. In the meantime, advise our first course to new friends, they will like it.

    What exactly are we telling


    The course lasts five weeks. Each week, from the first to the fourth, the listener will have to watch 10-20 short videos and solve several problems. A fragment of the course for each week contains both tasks and tests necessary to obtain a certificate, as well as additional optional tasks - for those who want to practice more. Last week is completely devoted to solving the final problem.

    Access to compulsory assignments costs about 1,600 rubles, but students can apply to Coursera for financial assistance and get access for free. All videos and optional tasks are free by default.

    The course program looks like this:

    Week 1

    C ++ Features Overview
    Hello, world
    Type overview
    Simple type
    operations Container operations
    Language constructs
    Compilation, launch, debugging
    Installing Eclipse
    Creating a Project in Eclipse
    Debugging in Eclipse
    Operations

    Arithmetic
    Logic Assignment
    Conditional statements and loops

    Week 2

    Functions
    Syntax
    Passing parameters by
    reference value as a way to change the passed
    const-reference object as a way to save on copying
    const protects against accidental change of a variable
    Containers
    std :: vector
    Std :: map
    Std :: set
    Looking to the future: traversing a dictionary with structured bindings

    Week 3

    Algorithms and Lambdas
    min, max, sort
    count, count_if, lambdas
    modern analogue of std :: transform - for (auto & x: container)
    Visibility and initialization of
    OOP variables
    Introduction to Structures and Classes



    OOP Week 4 : Examples
    Working with Text Files and Streams
    Overloading Operators
    Embedding Custom Types in Containers
    Exceptions

    Week 5 - The

    antoshkka course project , which participates in the work of the standardization group, helped us with the course: “C ++ is beautiful, fast, and used by most major IT companies, and specialists in this language are appreciated all over the world. Unfortunately, many C ++ courses and tutorials are actually “C” tutorials, and with such knowledge you will have a hard time. Therefore, we prepared a course on the correct C ++, with classes and without memory leaks. If you know any other programming language and want to discover the world of the right C ++, then our course is for you. ”

    Also popular now: