← Назад к вопросам

Какие источники использовал для обучения?

1.0 Junior🔥 291 комментариев
#Структуры данных и алгоритмы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Источники использованные для обучения

За 10+ лет работы в C/C++ backend разработке я использовал разнообразные источники обучения, от классических книг до современных онлайн-ресурсов. Вот основные из них:

Классические книги

1. Effective C++ серия Скотта Мейерса

Это трёх-томная серия остаётся библией для C++ разработчиков:

  • Effective C++ (3rd Edition) — 55 практических советов по написанию лучшего кода
  • More Effective C++ — 35 более сложных техник
  • Effective STL — специализация на стандартной библиотеке

Эти книги учат не синтаксису, а философии и best practices. Каждый совет обоснован и показывает грубые ошибки, которые совершают даже опытные разработчики.

2. The C++ Programming Language Бьёрна Страуструпа

Официальный гайд от создателя C++. Массивный том, но содержит:

  • Полное описание стандарта
  • Обоснование дизайн-решений
  • Примеры и best practices
  • История развития языка

3. Modern C++ Design Андрея Александреску

Революционная книга о шаблонах (templates), типах и метапрограммировании. Даёт глубокое понимание:

  • Policy-based design
  • Type traits
  • Compile-time вычисления

4. Concurrency in Action Энтони Уильямса

Лучшая книга по многопоточности в C++11/14:

  • Мьютексы и синхронизация
  • Atomic операции
  • Condition variables
  • Async и future

Официальная документация

1. cppreference.com

Самый полный справочник по C++ стандартной библиотеке:

// Ищу сложный алгоритм или контейнер
// https://en.cppreference.com/w/cpp/algorithm
std::stable_partition(...)  // Вижу полное описание, примеры, сложность

Ценно:

  • Полная история каждой функции
  • Сложность алгоритмов
  • Примеры использования
  • Комментарии сообщества

2. GCC/Clang Documentation

Официальная документация компиляторов для понимания:

  • Опций компиляции
  • Warnings и их значения
  • Оптимизаций
  • Встроенных функций

Онлайн курсы и видео

1. CppCon Conference (YouTube)

Ежегодная конференция C++ разработчиков, все доклады в открытом доступе:

  • Доклады от создателей C++ и ведущих экспертов
  • Темы от основ до продвинутых техник
  • Лучшие практики и реальные кейсы из production

Примеры:

  • Herb Sutter — The Lifetime of Objects
  • Chandler Carruth — Efficiency with Algorithms

2. Coursera и Udemy курсы

Структурированные курсы для углубления знаний:

  • Основы C++
  • STL и алгоритмы
  • Многопоточность
  • Оптимизация производительности

Анализ исходного кода

1. Чтение исходников стандартной библиотеки

Лучший способ научиться писать чистый код:

// Интересует, как реализован std::vector?
// Читаю исходник GCC libstdc++:
// https://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3

// Вижу RAII, exception safety, оптимизацию памяти
// Переимущества двигателя, как правильно размещать память

2. Open Source проекты

Изучал кодовые базы реальных проектов:

  • Boost Libraries — продвинутые паттерны и техники
  • LLVM/Clang — компиляторостроение
  • PostgreSQL — backend разработка на C
  • Redis — высокопроизводительные системы

Практическое применение

1. Собственные проекты

Написал множество небольших проектов для отработки:

  • Простой веб-сервер (socket программирование)
  • ORM для базы данных (шаблоны и reflection)
  • Lock-free структуры данных (атомарные операции)
  • Собственная реализация std::vector

2. Code reviews

Ревью кода коллег и своего собственного:

  • Изучение ошибок и их причин
  • Обсуждение trade-offs
  • Применение лучших практик

Специализированные ресурсы

1. Herb Sutter's Blog (gotw.ca)

Еженедельные Guru of the Week задачи с очень сложными вопросами:

  • Нюансы языка
  • Exception safety
  • Производительность
  • Современные практики

2. Scott Meyers Articles

Регулярные статьи, конференц-доклады, часто об эволюции C++:

  • C++11/14/17/20 фичах
  • Когда использовать auto
  • Move семантика

3. Competitive Programming

Участие в контестах (Codeforces, TopCoder):

  • STL алгоритмы и контейнеры
  • Оптимизация под временные ограничения
  • Математические алгоритмы

Стандартные документы

1. C++ Standards Documents

Сам стандарт C++ (C++11, C++14, C++17, C++20, C++23):

  • Полное описание языка
  • Требования к компиляторам
  • Будущие фичи

Доступен как черновик на https://github.com/cplusplus/draft

Современные тренды

1. Блоги и статьи

Регулярно читаю:

  • Modern C++ Design патерны
  • Concurrency фичи в новых стандартах
  • Module system (C++20)
  • Concepts (C++20)
  • Coroutines (C++20)

2. Конференции

Посещение и просмотр докладов:

  • CppCon
  • C++ user groups meetups
  • Webinars от крупных компаний (Google, Facebook, Nvidia)

Практический подход к обучению

// Теория → Практика → Анализ → Повторение

// 1. Читаю о new / delete vs RAII
// 2. Пишу свой smart pointer
// 3. Анализирую std::unique_ptr реализацию
// 4. Применяю в боевом коде
// 5. Ревью от коллег → извлекаю уроки
// 6. Повторяю процесс с новой темой

Ресурсы для специфических областей

ОбластьИсточники
STLcppreference, Effective STL, исходник libstdc++
МногопоточностьConcurrency in Action, CppCon доклады
ШаблоныModern C++ Design, шаблон-метапрограммирование книги
ОптимизацияEfficient Software through Design, perf profilers
BackendPostgreSQL исходник, Redis, Boost.Asio
Системное ПОSystems Programming in C, Linux kernel

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