Исчерпывающий список книг для освоения C++

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

Для новичков

Без опыта в программировании

  • Программирование: принципы и практика в С++ (Бьёрн Страуструп) (обновлено для С++11/С++14) Введение в С++, написанное создателем этого языка. Хорошая книга, предполагающая, что у читателя нет никакого опыта в программировании, но полезная не только для новичков.

С опытом в программировании

  • Учебник для начинающих: С++ (Стэнли Липман, Джосе Ладжойе, Барбара Му) (обновлено для C++11) Тысяча страниц очень подробного введения в C++, которое детально покрывает буквально все аспекты языка в доступном формате. Пятое издание (выпущено 16 августа 2012-ого) обновлено для С++11. [Обзор]
  • Тур в С++ (Бьёрн Страуструп) «Тур» — это быстрый (примерно 180 страниц и 14 глав) обзор возможностей С++ и его стандартной библиотеки (стандарт С++11) на достаточно высоком уровне для программистов, которые уже знакомы с языком, или, по крайней мере, имеют значительный опыт в программировании. Эта книга — расширенная версия материала глав 2–5 из четвертого издания «Языка программирования С++».
  • Ускоренный С++ (Эндрю Кёниг и Барбара Му) Содержит в себе все то же самое, что и «Учебник для начинающих: С++», но короче в 4 раза. В основном это из-за того, что автор не пытается ввести читателя в программирование, а сразу учит С++ тех, кто пришел с других языков. Может быть немного сложна для понимания, но тем, кто сможет курс осилить, это еще и здорово сократит время изучения.
  • Думаем на С++ (Брюс Эккель) Два тома, доступные всем желающим. Здесь можно скачать первый и второй. К сожалению, они переполнены довольно тривиальными ошибками (например, они утверждают, что временные объекты обязательно const), и к тому же к ним нет официального списка поправок. Неофициальный список для третьего издания доступен здесь, но он больше не обновляется.

Лучшая практика

Подробное описание книг этого раздела приводится в нашем материале о бестселлерах Скотта Мэйерса.

  • Эффективный С++ (Скотт Мэйерс) Эта книга была написана как обязательная к прочтению для C++ программистов, и эта цель была достигнута. Ранние издания были нацелены на специалистов, пришедших с С, третье издание поменяло свой курс на мигрирующих с Java и подобных ей языков. Содержит около 50 легко запоминающихся правил, написанных и объясненных в доступной форме. [Обзор]
  • Эффективный и современный С++ (Скотт Мэйерс) Новая версия предыдущей книги, нацеленная на программистов, переходящих с C++03 на C++11 и C++14.
  • Эффективная STL (Скотт Мэйерс) Содержит в себе правила по эффективному использованию стандартной библиотеки C++. [Обзор]

Для продвинутых

  • Более эффективный С++ (Скотт Мэйерс) Еще больше правил и рекомендаций, чем в «Эффективный С++». Они не настолько важны, как описанные в первой книге, но их знание будет плюсом.
  • Исключительный С++ (Герб Саттер) Представляет из себя набор задачек, содержит подробное обсуждения управления ресурсами и безопасностью исключений в С++ с помощью идиомы «Получение ресурса есть инициализация» (англ. RAII) в добавок к глубокому покрытию множества тем, включая идиому pimpl, проверке имен, хорошему дизайну классов и модели памяти С++. [Обзор]
  • Еще более исключительный С++ (Герб Саттер) Рассматривает некоторые темы, не поднятые в предыдущей книге, в дополнение к обсуждению эффективного ООП в С++ и корректному использованию STL. [Обзор]
  • Исключительный стиль С++ (Герб Саттер) Обсуждает дженерик-программирование, оптимизацию и управление ресурсами. Эта книга — отличный пример того, как надо писать модульный код в С++, используя non-member функции и принцип единой ответственности. [Обзор]
  • Стандарты программирования на С++ (Герб Саттер и Андрей Александреску) «Стандарты» здесь — это не «сколько пробелов я должен ставить перед новой строчкой?», а советы по написанию кода, идиомы и чаще всего встречающиеся грабли, которые помогут вам писать корректный, понятный и эффективный код на С++. [Обзор]
  • Шаблоны С++: полное руководство (Дэвид Вандервуд и Николай Джосаттис) Это книга о шаблонах в том виде, в котором они существовали до С++11. Она покрывает все от самых начал до продвинутого шаблонного метапрограммирования, подробно объясняет, как работают шаблоны, обсуждает некоторые распространенные грабли. В приложениях несколько замечательных извлечений из правила одного определения (англ. ODR). Второе издание запланировано на 2016-ый. [Обзор]

Для профессионалов

  • Современный дизайн в С++ (Андрей Александреску) Книга по продвинутому обобщенному программированию. Описывает фундаментальные идиомы обобщенного программирования, показывая, сколько полезных паттернов (например, аллокаторы маленьких объектов, функторы, фабрики, посетители и мультиметоды) может быть реализовано эффективно, модулярно и исключительно средствами дженерик-программирования. [Обзор]
  • Шаблонное метапрограммирование в С++ (Дэвид Абрамс и Алексей Гуртовой)
  • Многопоточность в действии в С++ (Энтони Вильямс) Книга, рассказывающая о поддержке многопоточности в С++11. Включает в себя описания библиотеки потоков, atomics-библиотеки, модели памяти С++, блокировок и мьютексов (взаимных исключений) вместе с распространенными проблемами дизайна и дебага мультипоточных приложений.
  • Продвинутое метапрограммирование в С++ (Дэвид Ди Геннаро) Руководство, написанное до выхода С++11, фокусирующееся больше на практике, чем на теории. Содержит множество примеров кода, рассказывает о приемах, которые, без сомнения, полезно знать. Если вы сможете смириться с плохим оформлением, то читать эту книгу легче, чем Александреску, и, что спорно, почерпнете из нее больше. Даже профессиональные разработчики смогут почерпнуть отсюда что-то новое для себя.

Справочники для всех уровней

  • Язык программирования С++ (Бьёрн Страуструп) (обновлено для С++11) Классическое введение в С++, написанное автором этого языка. Легко читается и покрывает все аспекты технологии, начиная от самого языка и стандартной библиотеки и заканчивая парадигмами программирования и философией С++ (последние издания преодолели барьер в 1000 страниц). [Обзор] Четвертое издание (выпущенное в мае 2013-ого) покрывает и С++11.
  • С++: справочник по стандартной библиотеке (Николай Джосаттис) (обновлено для С++11) Введение и справочник по стадартной библиотеке С++. Второе издание (выпущенное 9 апреля 2012-ого) покрывает С++11. [Обзор]
  • Потоки и локали в С++ (Анжелика Лангер и Клаус Крефт) Если вы хотите знать все о потоках и локалях, то это та самая книга, которая содержит ответы на все ваши вопросы. [Обзор]

Справочники по С++11

  • Стандарт С++ ПОЛНЫЙ справочник по всему С++. Предназначен только для профессионалов, которые готовы потратить кучу времени и усилий на его изучение и понимание. Как обычно, первое издание было весьма дорогим (300 долларов США), но сейчас в электронной форме оно стоит 60 долларов.
  • Обзор нового С++ (С++11/С++14) (Скотт Мэйерс) Материалы презентации (слайды и заметки лектора) с трехдневного тренировочного курса, проведенного Скоттом Мэйерсом, который считается уважаемым писателем в данной сфере. И хотя количество поднятых тем мало, качество на высоте.

Классика / Устаревшее

Замечание: информация, содержащаяся в этих книгах, может быть устаревшей и уже не считаться лучшей практикой.

  • Дизайн и эволюция С++ (Бьёрн Страуструп) Если вы хотите знать, почему язык перед нами сейчас в таком виде, в каком он есть, то эта книга для вас.
  • Размышления о С++ (Эндрю Кёниг и Барбара Му) [Обзор]
  • Продвинутые стили программирования и идиомы в С++ (Джеймс Коплен) Предшественник движения «паттернов», описывает множество С++-специфичных идиом. Отличная книга, стоящая чтения, если у вас есть время на нее, но она уже довольно старая и содержит неактуальную информацию.
  • Дизайн больших проектов на С++ (Джон Лакос) Лакос объясняет то, как лучше разрабатывать и содержать очень большие проекты, написанные на С++. Была бы хорошей книгой, если бы не давно устарела. Она была написана еще до С++98 и не рассказывает о множестве возможностей, важных для разработки больших проектов. Если вам приходится работать над такими проектами, то вы, возможно, захотите ее прочитать. Новое издание ожидается в конце 2015.

Перевод статьи «The Definitive C++ Book Guide and List»