Решён
С чего начать изучение программирования на C++?

Игорь Белоусов C/C++
8.2k
9

Учусь на первом курсе по направлению информатика. В следующем семестре начнется C++, хочу подготовиться заранее.

Опыт: немного писал на Python (скрипты, автоматизация, чуть-чуть Django). Указатели, ручное управление памятью, шаблоны, ООП на уровне C++ не трогал. Компилятор ни разу не настраивал.

Что хочу:

  • Нормальный путь с нуля до уровня "могу написать лабу и не умереть"
  • Какую IDE/компилятор ставить (Windows 11)
  • Книги или курсы (можно на английском)
  • Типичные грабли для тех кто приходит из Python

Заранее спасибо

Решение
111
Участник • 4 ответа

Дорожная карта для питонщика, который лезет в плюсы. Проходил это сам.

Фаза 1: Синтаксис (2-3 недели)

Книга: Стивен Прата "Язык программирования C++. Лекции и упражнения". Толстая, но написана для людей. Каждую главу заканчивай упражнениями, не пропускай.

Параллельно пиши код каждый день. Хотя бы 30 минут. Без практики C++ не выучить, это не Python где можно в REPL потыкаться.

Фаза 2: Указатели и память (2-3 недели)

Тут будет больно. В Python ты никогда не думал о том, где живет твоя переменная. В C++ это центральный вопрос.

Пойми разницу между стеком и кучей. Пойми что такое new/delete. Потом забудь про new/delete и учи smart pointers (unique_ptr, shared_ptr). Современный C++ (C++17/20) настоятельно рекомендует НЕ использовать голые указатели для владения памятью.

// Плохо (C-style)
int* arr = new int[100];
// ... забыл delete[] arr - утечка памяти

// Хорошо (современный C++)
auto arr = std::make_unique<int[]>(100);
// память освободится автоматически

Фаза 3: ООП (2-3 недели)

Ты знаешь ООП из Python, но в C++ все сложнее. Виртуальные деструкторы, множественное наследование, перегрузка операторов, правило трех/пяти. Тут Прата хорош, но можно добавить Мейерса "Эффективный C++" для понимания "почему" за каждым правилом.

Фаза 4: STL и шаблоны (2 недели)

vector, map, unordered_map, string, algorithm. Это твой хлеб. Шаблоны для начала достаточно уметь ИСПОЛЬЗОВАТЬ, писать свои шаблоны на первом курсе не потребуется.

Грабли питонщика:

  • Забываешь точку с запятой. Первые дни будешь забывать постоянно, потом привыкнешь.
  • Пишешь = вместо == в условиях. Компилятор предупредит, но не всегда.
  • Путаешь std::string и char*. Используй std::string, забудь что char* существует.
  • Не объявляешь типы. В Python x = 5 работает. В C++ нужно int x = 5;. Привыкай.
  • Компиляция. Ты привык что скрипт просто запускается. Тут цикл: написал - скомпилировал - исправил ошибки компиляции - скомпилировал - запустил - словил segfault - дебажишь.
Аватар Игорь Белоусов

Огонь ответ. Прата заказал, начинаю завтра. Про smart pointers вообще не слышал, хорошо что предупредил.

31
Эксперт • 3 ответа

Visual Studio Community (не VS Code, а полноценная студия). Ставишь, выбираешь компонент "Разработка классических приложений на C++", готово. Компилятор MSVC идет в комплекте, ничего отдельно настраивать не нужно.

18
Участник • 2 ответа

Зачем тебе C++ в 2026? Серьезный вопрос.

Если в универе заставляют - ладно, тогда Прата или Липпман "C++ Primer" и вперед. Но если ты выбираешь сам, посмотри на Rust. Та же ниша (системное программирование, высокая производительность), но без сегфолтов и утечек памяти, потому что borrow checker ловит эти ошибки на этапе компиляции.

C++ прекрасный язык с 40 годами legacy-багажа. Каждая новая редакция стандарта добавляет фичи, но старые костыли никуда не деваются. В итоге у тебя три способа сделать одно и то же, и два из них приведут к UB.

Но если универ, тогда да, деваться некуда. Удачи с указателями на указатели на массив указателей.

Аватар Сергей Гончаров

Человек спросил про C++, а ты ему Rust суешь. Каждый раз одна и та же песня в каждом треде про плюсы.

39
Участник • 2 ответа

Липпман, Лажойе, Му "C++ Primer" (5th edition). Не путать с "C++ Primer Plus" Праты, это другая книга.

Оба учебника хорошие, но Липпман более строгий и академичный. Прата более разжеванный. Для первокурсника наверное Прата удобнее.

После основ обязательно прочитай Мейерс "Effective Modern C++". Там про C++11/14, все актуально. Move-семантика, auto, лямбды, constexpr. Без этой книги будешь писать C++ как Java, и опытные разработчики будут плакать глядя на твой код.

Из курсов: на Stepik есть бесплатный курс от Computer Science Center "Программирование на языке C++". На русском, с задачами.

55
Участник • 2 ответа

Главный совет, который мне дали на работе и который я хотел бы получить в универе.

Не пиши на C++ как на Python. Это другая философия. В Python ты думаешь о данных и потоке выполнения. В C++ ты думаешь о памяти и времени жизни объектов. Каждый раз когда создаешь переменную, спрашивай себя: кто ей владеет? Когда она умрет? Что будет если кто то попытается к ней обратиться после смерти?

Звучит мрачно, но это буквально 80% багов в C++ это обращение к мертвым объектам и забытая память.

std::string& getGreeting() {
    std::string s = "hello";
    return s; // BAD: s умрет после выхода из функции
              // вызывающий код получит ссылку на труп
}

В Python такое невозможно. Сборщик мусора не даст объекту умереть пока на него кто то ссылается. В C++ нет сборщика мусора. Ты сам себе сборщик.

44
Эксперт • 5 ответов

Я преподаю C++ на первом курсе. Студенты после Python стабильно наступают на одни и те же грабли, перечислю самые частые:

  1. Передача по значению vs по ссылке. В Python все передается по ссылке на объект. В C++ по умолчанию все копируется. Передал vector<int> в функцию без & - скопировал миллион элементов. Привет тормоза.

  2. Индексация за пределы массива. Python кинет IndexError. C++ молча прочитает мусор из памяти или упадет с segfault. Никакого предупреждения.

  3. Необъявленные переменные. x = 5 в C++ не скомпилируется. Нужно int x = 5; или auto x = 5;.

  4. Сравнение строк. В Python "abc" == "abc" работает. В C "abc" == "abc" сравнивает АДРЕСА, а не содержимое. В C++ std::string все нормально, но если случайно используешь char*, попадешь в ловушку.

  5. Компиляция. Самое непривычное. Ты привык что скрипт просто запускается. Тут нужно скомпилировать, и компилятор выдаст 47 строк ошибок из за одной пропущенной точки с запятой. Не паникуй, читай ПЕРВУЮ ошибку, остальные обычно каскадные.

Удачи на курсе. C++ сложный, но когда разберешься, Python покажется игрушкой.

9
Участник • 1 ответ

Документация... Я понимаю что звучит скучно, но cppreference.com это единственный источник истины. Все книги устаревают, стандарт обновляется каждые три года.

А по сути, для первого курса хватит:

  1. Установи Visual Studio
  2. Напиши hello world
  3. Разберись с типами (int, double, char, bool, string)
  4. Массивы и циклы
  5. Функции
  6. Указатели (вот тут начнется боль)
  7. Классы (ООП)
  8. STL контейнеры (vector, map)

Все. Этого за глаза хватит на первый семестр. Шаблоны, метапрограммирование, move-семантика, SFINAE и прочий ужас подождут.

0
Эксперт • 4 ответа

у нас на первом курсе препод давал Шилдта, все выучились, нормальная книга. не слушай тех кто говорит что Шилдт плохой, для универа самое то

Аватар Наталья Миронова

Шилдт это анти-рекомендация. Книга полна ошибок и устаревших практик, Страуструп лично критиковал ее. Не надо советовать новичкам плохие источники.

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

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.