Здравствуйте! Мы с вами начинаем третий курс нашей специализации - красный пояс по С++. После первых двух курсов вы уже хорошо овладели возможностями языка и применили их в нескольких десятках задач. Компании по всему миру разрабатываю на С++: поиск, браузеры, back-end социальных сетей и многих других сервисов. На С++ написаны популярные библиотеки машинного обучения, а также этот язык активно используется в области разработки игр. В Яндексе С++ можно встретить в поиске, рекламе, браузере, картах и многих-многих других продуктах. С++ позволяет писать эффективный код тогда. Когда производительности других популярных языков программирования оказывается недостаточно. Это актуально не только для десктопных и сервисных программ, но и для мобильных приложений, где помимо скорости необходимо экономить еще и батарейку, и в этом курсе мы вам покажем как это делается. Но начнем мы с двух вещей, без которых освещение возможности языка было бы неполным - макросов и шаблонов классов. Макросы в С++ пользуются не самой лучшей славой. Однако бывают ситуации, когда без них невозможно добиться простоты и читаемости кода. Мы познакомим вас с такими ситуациями и применим макросы для улучшения библиотеки тестирования, которую мы разработали в желтом поясе по С++. В предыдущем курсе вы научились создавать шаблоны функций, в этом же курсе мы познакомим вас с шаблонами классов. Начиная со второй недели, мы перейдем к основной теме нашего курса: создания быстрых программ, и начнем мы с того, что поговорим, а что же такое быстрые программы? Для этого мы рассмотрим принципы оптимизации кода. Затем вас ждет очень важная тема - сложность алгоритмов. Уметь оценивать асимптотику алгоритмов критически важно, когда речь заходит об оптимизации программ. Мы расскажем вам, что такое асимптотика и научим ее считать. Дальше мы перейдем к изучению модели памяти в С++. Это очень знаковый блок, потому что в нем впервые прозвучит слово указатель, хотя обычно о них рассказывают на самой первой лекции по С++. Освоив модель памяти мы перейдем к важнейшей теме - изучению внутреннего устройства и эффективного использования линейных контейнеров. Как говорится, если хочешь на что то влиять, эффективно использовать, нужно понимать, как оно работает внутри, поэтому мы заглянем внутрь вектора дека, а также изучим пару новых контейнеров. На пятой неделе курса вас ждет не менее важная тема - move семантика. Грамотное ее применение позволяет не только ускорять ваши программы, избегая лишнего копирования, но и делает проще и понятнее функции и методы классов. Наконец, заключительная тема нашего курса - базовая многопоточность, современный процессор уже давно выпускается с несколькими ядрамы и могут выполнять параллельно несколько наборов команд, поэтому современному разработчику очень важно уметь создавать многопоточные приложения. Так же как и в предыдущих курсах, вас ждет очень много задач по программированию и финальный проект в конце курса, на этот раз вам надо будет написать собственную поисковую систему, единственный способ освоить любой язык программирования - это практика. Можно прочитать кучу книг, посмотреть массу лекций, но если регулярно не программировать, вам никогда не удастся овладеть ни одним языком программирования, именно поэтому подготовили так много задач. Если вы не проходили желтый пояс по С++ и не уверены, стоит ли тратить на него время, то в самом начале курса у нас есть специальная задача. Попробуйте ее решить. Если вы не поймете ее условия и не сможете решить ее быстро, то скорее всего вам надо сначала пройти желтый пояс по С++. Когда вы закончите этот курс, не останавливайтесь. Впереди вас будет ждать коричневый поясь по С++. В нем мы научим вас различным идиомам языка С++, то есть научим создавать и проектировать элегантные эффективные и надежные блоки кода.