Написать пост

Инструкция к погружению в С++ и более 10 бесплатных ресурсов для начинающих

Аватарка пользователя Алексей Толстиков

Школа анализа данных Яндекса составила подборку из 10 бесплатных ресурсов для изучения языка программирования C++.

Освоить C++ сегодня — не такая большая проблема, в интернете много учебных материалов. Но сориентироваться в них и выбрать действительно полезную информацию порой сложно, особенно новичкам, которые только начинают свой путь в программировании.

Алексей Толстиков, академический руководитель Школы анализа данных Яндекса, делится практическими рекомендациями по изучению языка, а также подборкой бесплатных ресурсов для тренировки.

Что нужно знать

Для того, чтобы научиться писать на С++ , обычно бывает достаточно знания любого языка программирования. Если такого опыта нет, то свой путь придется начать с изучения  основных понятий: переменные, циклы, функции, условные операторы и так далее. 

Базовые знания, которые позволят новичку приступить к проектам и началу карьеры:

  1. Базовые компоненты: создание итераторов, конструкторов, шаблонов. Для этого будет полезно изучить не только базовую библиотеку STL, но и другие, которыми пользуются разработчики, например, Boost. 
  2. Структуры данных и алгоритмы: линейный поиск, двоичный поиск, быстрая сортировка, хеш-таблицы, списки, деревья. 
  3. Многопоточность: важная концепция, которая применяется, когда есть несколько задач, работающих параллельно, и несколько доступных ядер процессора.
  4. Эффективный код: написание такого кода включает в себя тестирование и проверку на безопасность для определения проблем, которые  могут возникнуть с производительностью. Нужно понимать, как их исправить, как оптимизировать поиск, использовать память, настраивать ограничения.

C чего начать знакомство с C++

Стратегия изучения частично зависит от профессионального бэкграунда разработчика. Но есть три универсальных совета, которые помогут как новичкам, так и более опытным специалистам.

1. Прокачивайте логику

Тем, кто изучает C++ на базе другого языка, освоить синтаксис будет намного легче, чем начинающим разработчикам: основные «кирпичи» те же, просто сформированы немного иначе. А вот новичкам на старте важно научиться трансформировать свои мысли в последовательность действий-команд, которую можно задать компьютеру при помощи операторов языка программирования.

Этот процесс включает два этапа:

  1. Тренировку алгоритмического мышления.
  2. Изучение синтаксиса языка.

Теорию и практику лучше осваивать параллельно — такой системный подход позволит сразу же применить абстрактные знания в решении задач, пусть и учебных. Из стартовых материалов подойдут руководства, например, «Язык программирования С++» от его создателя Б. Страуструпа, и видео на YouTube, которые можно дополнить различными тренажерами для развития алгоритмических навыков.

2. Совершайте ошибки

Этот совет подойдет для изучения любого языка программирования. И новичкам, и опытным специалистам важно помнить, что С++ — очень низкоуровневый и «опасный» язык. При его использовании легко совершить базовую ошибку, которую удастся выявить только тогда, когда сервис вместо 10-ти человек начнет использовать миллион. Еще про С++ говорят, что, используя его, легко “выстрелить себе в ногу”.

Во многих языках такие ошибки проявляются быстрее и скорее исправляются разработчиками, но за это нужно платить временем работы программы. Например, в Python встроенный интерпретатор еще по ходу исполнения упадет и скажет: «Происходит не то, что ожидалось, давайте прервемся. Вот что пошло не так.», а C++ не будет до последнего реагировать на неправильную работу – это связано с термином “неопределенное поведение”. Поэтому всем, кто программирует на C++, нужно набирать практику на множестве возможных ошибок. Это не гарантирует, что в процессе кодинга реального проекта разработчик не столкнется с проблемами, но снизит вероятность локальных и глобальных программных сбоев в будущем. С опытом и насмотренностью ошибки становятся более редкими, нестандартными и даже интересными. О самых нетривиальных случаях специалисты делают доклады и выступают с ними на конференциях или пишут статьи.

3. Пишите свой код и смотрите чужой

Программист должен знать не только, какие ошибки встречаются, но и понимать, как предотвратить их, а если они случились — уметь оперативно исправить. Все это невозможно без практики, поэтому важно набивать руку: часами писать код, а потом столько же читать чужой. Последнее научит мыслить в обратную сторону — от команд для компьютера к пониманию, чего же хотел добиться своими действиями другой разработчик.

Практиковаться лучше не только по книжкам, но и в реальных условиях, например, можно просматривать открытые репозитории проектов в github или использовать платформы вроде Codeforces и Codewars, где объединяются люди, которые интересуются быстрым и эффективным решением задач. Такие активности позволяют не только потренироваться в поиске решения, но и посмотреть, как с задачами справились другие. Если у платформы есть возможность проголосовать за понравившееся решение, то получаем классную возможность посмотреть, что другим специалистам в этой области нравится больше, что они считают более читаемым, компактным и быстрым.

Где еще набираться опыта и закреплять теорию

Помимо соревнований, практика может состоять из хорошо подобранных учебных задач или собственного пет-проекта, например, начать можно с калькулятора, конвертера валют, простой игры по типу «Змейки», «Сапера»  или «Тетриса».

Ниже несколько ресурсов, которые помогут закрепить теорию и поупражняться в программировании:

  1. Хендбук Академии Яндекса по С++ — бесплатный онлайн-учебник для самостоятельного погружения в С++ для новичков, которые знакомы с основами информатики и владеют любым языком программирования на школьном уровне. Теория разбирается одновременно с тренировкой на практических задачах. Решения проверяются автоматически. А заниматься можно в своем темпе: проходить материал по порядку или выборочно по главам, чтобы освежить и закрепить конкретную тему. 
  2. Hacking C++ — наглядный справочник с картинками и инфографикой. Здесь также есть подробное руководство по изучению языка для новичков.
  3. The C++ Asynchronous Framework — современный асинхронный фреймворк с открытым исходным кодом и богатым набором абстракций для быстрого и удобного создания микросервисов, сервисов и утилит.
  4. CodeRun — это онлайн-тренажёр с каталогом задач для разработчиков. Эксперты Яндекса и приглашённые спецы собрали задачи с Тренировок по алгоритмам от Яндекса, Yandex Cup и многих других мероприятий. Все задания разбиты по темам и уровням сложности. 
  5. Комьюнити Stack Overflow — платформа, на которой собрана огромная коллекция вопросов и ответов по программированию. Участники сообщества активно делятся опытом с коллегами. Для тех, кто самостоятельно работает над своим первым проектом, такая помощь неоценима.
  6. Онлайн-документация по С++ — справочник на английском по языкам C, C++ и стандартным библиотекам с подробными примерами. Для пользователей, которые предпочитают учиться на русском, есть адаптированная версия сайта.
  7. Сайт Standard C++ Foundation — ресурс, на котором публикуются новости, обсуждение стандарта C++ для всех компиляторов и платформ, а также анонсы тематических конференций.
  8. Гайдлайны С++ Core Guidelines — open-source проект от создателя С++ Бьярне Страуструпа и эксперта по C++ Герба Саттера. На сайте публикуются рекомендации, которые помогают разобраться с синтаксисом языка и упростить процесс написания кода.
  9. Онлайн-компилятор Compiler Explorer — интерактивный инструмент, который позволяет набирать код в одном окне и сразу просматривать ассемблерный вывод в другом. Результатом проверки можно поделиться с друзьями и коллегами, отправив им ссылку.
  10. #SimpleCode — YouTube-канал о том, как программировать на разных языках,  в том числе и на C++. Будет полезен разработчикам с любым бэкграундом.
  11. ProgrammingKnowledge — YouTube-канал для начинающих программистов. Здесь можно найти много пошаговых видеоуроков по разным языкам.
  12. Codeforces — платформа для создания, проведения и обсуждения соревнований по программированию с элементами соцсети.
  13. Сodewars — огромная подборка задач на более чем 20 языках программирования. На Сodewars можно обсудить задачи с другими игроками, а также посмотреть альтернативные решения.
Следите за новыми постами
Следите за новыми постами по любимым темам
12К открытий14К показов