Инструкция к погружению в С++ и более 10 бесплатных ресурсов для начинающих
Школа анализа данных Яндекса составила подборку из 10 бесплатных ресурсов для изучения языка программирования C++.
21К открытий33К показов
Освоить C++ сегодня — не такая большая проблема, в интернете много учебных материалов. Но сориентироваться в них и выбрать действительно полезную информацию порой сложно, особенно новичкам, которые только начинают свой путь в программировании.
Алексей Толстиков, академический руководитель Школы анализа данных Яндекса, делится практическими рекомендациями по изучению языка, а также подборкой бесплатных ресурсов для тренировки.
Что нужно знать
Для того, чтобы научиться писать на С++ , обычно бывает достаточно знания любого языка программирования. Если такого опыта нет, то свой путь придется начать с изучения основных понятий: переменные, циклы, функции, условные операторы и так далее.
Базовые знания, которые позволят новичку приступить к проектам и началу карьеры:
- Базовые компоненты: создание итераторов, конструкторов, шаблонов. Для этого будет полезно изучить не только базовую библиотеку STL, но и другие, которыми пользуются разработчики, например, Boost.
- Структуры данных и алгоритмы: линейный поиск, двоичный поиск, быстрая сортировка, хеш-таблицы, списки, деревья.
- Многопоточность: важная концепция, которая применяется, когда есть несколько задач, работающих параллельно, и несколько доступных ядер процессора.
- Эффективный код: написание такого кода включает в себя тестирование и проверку на безопасность для определения проблем, которые могут возникнуть с производительностью. Нужно понимать, как их исправить, как оптимизировать поиск, использовать память, настраивать ограничения.
C чего начать знакомство с C++
Стратегия изучения частично зависит от профессионального бэкграунда разработчика. Но есть три универсальных совета, которые помогут как новичкам, так и более опытным специалистам.
1. Прокачивайте логику
Тем, кто изучает C++ на базе другого языка, освоить синтаксис будет намного легче, чем начинающим разработчикам: основные «кирпичи» те же, просто сформированы немного иначе. А вот новичкам на старте важно научиться трансформировать свои мысли в последовательность действий-команд, которую можно задать компьютеру при помощи операторов языка программирования.
Этот процесс включает два этапа:
- Тренировку алгоритмического мышления.
- Изучение синтаксиса языка.
Теорию и практику лучше осваивать параллельно — такой системный подход позволит сразу же применить абстрактные знания в решении задач, пусть и учебных. Из стартовых материалов подойдут руководства, например, «Язык программирования С++» от его создателя Б. Страуструпа, и видео на YouTube, которые можно дополнить различными тренажерами для развития алгоритмических навыков.
2. Совершайте ошибки
Этот совет подойдет для изучения любого языка программирования. И новичкам, и опытным специалистам важно помнить, что С++ — очень низкоуровневый и «опасный» язык. При его использовании легко совершить базовую ошибку, которую удастся выявить только тогда, когда сервис вместо 10-ти человек начнет использовать миллион. Еще про С++ говорят, что, используя его, легко “выстрелить себе в ногу”.
Во многих языках такие ошибки проявляются быстрее и скорее исправляются разработчиками, но за это нужно платить временем работы программы. Например, в Python встроенный интерпретатор еще по ходу исполнения упадет и скажет: «Происходит не то, что ожидалось, давайте прервемся. Вот что пошло не так.», а C++ не будет до последнего реагировать на неправильную работу – это связано с термином “неопределенное поведение”. Поэтому всем, кто программирует на C++, нужно набирать практику на множестве возможных ошибок. Это не гарантирует, что в процессе кодинга реального проекта разработчик не столкнется с проблемами, но снизит вероятность локальных и глобальных программных сбоев в будущем. С опытом и насмотренностью ошибки становятся более редкими, нестандартными и даже интересными. О самых нетривиальных случаях специалисты делают доклады и выступают с ними на конференциях или пишут статьи.
3. Пишите свой код и смотрите чужой
Программист должен знать не только, какие ошибки встречаются, но и понимать, как предотвратить их, а если они случились — уметь оперативно исправить. Все это невозможно без практики, поэтому важно набивать руку: часами писать код, а потом столько же читать чужой. Последнее научит мыслить в обратную сторону — от команд для компьютера к пониманию, чего же хотел добиться своими действиями другой разработчик.
Практиковаться лучше не только по книжкам, но и в реальных условиях, например, можно просматривать открытые репозитории проектов в github или использовать платформы вроде Codeforces и Codewars, где объединяются люди, которые интересуются быстрым и эффективным решением задач. Такие активности позволяют не только потренироваться в поиске решения, но и посмотреть, как с задачами справились другие. Если у платформы есть возможность проголосовать за понравившееся решение, то получаем классную возможность посмотреть, что другим специалистам в этой области нравится больше, что они считают более читаемым, компактным и быстрым.
Где еще набираться опыта и закреплять теорию
Помимо соревнований, практика может состоять из хорошо подобранных учебных задач или собственного пет-проекта, например, начать можно с калькулятора, конвертера валют, простой игры по типу «Змейки», «Сапера» или «Тетриса».
Ниже несколько ресурсов, которые помогут закрепить теорию и поупражняться в программировании:
- Хендбук Академии Яндекса по С++ — бесплатный онлайн-учебник для самостоятельного погружения в С++ для новичков, которые знакомы с основами информатики и владеют любым языком программирования на школьном уровне. Теория разбирается одновременно с тренировкой на практических задачах. Решения проверяются автоматически. А заниматься можно в своем темпе: проходить материал по порядку или выборочно по главам, чтобы освежить и закрепить конкретную тему.
- Hacking C++ — наглядный справочник с картинками и инфографикой. Здесь также есть подробное руководство по изучению языка для новичков.
- The C++ Asynchronous Framework — современный асинхронный фреймворк с открытым исходным кодом и богатым набором абстракций для быстрого и удобного создания микросервисов, сервисов и утилит.
- CodeRun — это онлайн-тренажёр с каталогом задач для разработчиков. Эксперты Яндекса и приглашённые спецы собрали задачи с Тренировок по алгоритмам от Яндекса, Yandex Cup и многих других мероприятий. Все задания разбиты по темам и уровням сложности.
- Комьюнити Stack Overflow — платформа, на которой собрана огромная коллекция вопросов и ответов по программированию. Участники сообщества активно делятся опытом с коллегами. Для тех, кто самостоятельно работает над своим первым проектом, такая помощь неоценима.
- Онлайн-документация по С++ — справочник на английском по языкам C, C++ и стандартным библиотекам с подробными примерами. Для пользователей, которые предпочитают учиться на русском, есть адаптированная версия сайта.
- Сайт Standard C++ Foundation — ресурс, на котором публикуются новости, обсуждение стандарта C++ для всех компиляторов и платформ, а также анонсы тематических конференций.
- Гайдлайны С++ Core Guidelines — open-source проект от создателя С++ Бьярне Страуструпа и эксперта по C++ Герба Саттера. На сайте публикуются рекомендации, которые помогают разобраться с синтаксисом языка и упростить процесс написания кода.
- Онлайн-компилятор Compiler Explorer — интерактивный инструмент, который позволяет набирать код в одном окне и сразу просматривать ассемблерный вывод в другом. Результатом проверки можно поделиться с друзьями и коллегами, отправив им ссылку.
- #SimpleCode — YouTube-канал о том, как программировать на разных языках, в том числе и на C++. Будет полезен разработчикам с любым бэкграундом.
- ProgrammingKnowledge — YouTube-канал для начинающих программистов. Здесь можно найти много пошаговых видеоуроков по разным языкам.
- Codeforces — платформа для создания, проведения и обсуждения соревнований по программированию с элементами соцсети.
- Сodewars — огромная подборка задач на более чем 20 языках программирования. На Сodewars можно обсудить задачи с другими игроками, а также посмотреть альтернативные решения.
21К открытий33К показов