Подборка книг по C++ для любого уровня

1
27127

Хотите начать изучать C++, но не знаете с чего начать? Или подтянуть свои знания в С++? В статье приведен перечень полезных книг.

Начинающий

Введение, без опыта программирования

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

Введение, с опытом программирования

«C++ Primer»* (Стэнли Липпман, Жозе Лажуа и Барбара Э. Му) (обновлён для C++11) В 1к страниц умещается подробное введение в С++, которое охватывает почти всё в этом языке, в очень доступном формате и мельчайших подробностях. Пятое издание (опубликовано 16 августа 2012) охватывает С++11. [Обзор]

*Не путать с «C++ Primer Plus» (Стивен Прата) с менее удобным обзором.

«Обзор С++» (Бьёрн Страуструп) «Обзор» — это краткий (около 180 страниц и 14 глав) учебный обзор всего в стандартном С++ (язык и стандартная библиотека и использование С++11) на несколько более высоком уровне для людей, уже знакомых с С++ или, по крайней мере, имеющих опыт в программировании. Эта книга является расширенной версией материала, составляющего главы 2-5 четвёртого издания «Языка программировании С++».

«Accelerated C++» («Ускоренный С++») (Эндрю Кёниг и Барбара Му) Эта книга в основном охватывает те же темы, что и «C++ Primer», но по объёму занимает только четверть той книги. В значительной степени это так, потому что это не введение в программирование, а введение в С++ для людей, которые раньше программировали на каком-то другом языке. В этой книге более быстрый темп обучения, но для тех, кто сможет осилить его, эта книга окажется очень сжатым введением в язык. (Исторически, эта книга открыла новые возможности, став первой книгой для начинающих, в которой использовался современный подход к изучению языка.) [Обзор]

«Thinking in C++» («Мышление на С++») (Брюс Эккель) Два тома; Этот учебник, написанный в свободном стиле, послужить хорошим предисловием к более сложным книгам. Загрузить: том 1, том 2. К сожалению, с них встречается ряд мелких ошибок (например, утверждение, что временные переменные автоматически const), нет официального списка ошибок. Часть ошибок можно посмотреть здесь, но это, по-видимому, не поддерживается.

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

«Effective C++» («Эффективное использование C++») (Скотт Майерс). Эта книга была написана с целью стать второй лучшей книгой для программистов, пишущих на языке С, и ей это удалось. Ранние издания были больше ориентированы на программистов, работавших с языками С, в третьем издании это поменялось, и книга переориентировалась на тех, кто работает с языками типа Java. Книга представляет из себя 50 легких для запоминания основанных на опыте правил вместе с их обоснованием в очень доступной (и приятной) форме. Для С++11 и С++14 некоторые примеры и вопросы устарели, поэтому в этом случае «Effective Modern C++» («Эффективный и современный С++» предпочтительнее. [Обзор]

«Effective Modern C++» («Эффективный и современный С++») (Скотт Майерс). По сути это новая версия «Effective C++» («Эффективное использование C++»), ориентированная на С++ программистов, переходящих от С++03 к С++11 и С++14.

«Effective STL» («Эффестивное использование STL») (Скотт Майерс). Эта книга стремится стать частью стандартной библиотеки пользователей STL, как и «Effective C++» для языка в целом: она представляет основные правила вместе с их обоснованием. [Обзор]

Средний уровень

«More Effective C++» («Более эффективное использование C++») (Скотт Майерс). Ещё больше основанных на опыте More Exceptional C++правил, чем в «Effective C++». Они не такие важные, как те из первой книги, но всё-таки неплохо знать и их.

«Exceptional C++» («Решение сложных задач на С++») (Герб Саттер). Книга представлена в виде набора головоломок, это одно из лучших и всесторонних обсуждений надлежащего управления ресурсами и исключительной безопасности в С++ через RAII (получение ресурса есть инициализация), в дополнение к углублённому изучения таких вопросов, как идиомы pimpl, поиск имён, хорошее проектирование классов и модель памяти С++. [Обзор]

«More Exceptional C++» («Новые сложные задачи на C++») (Герб Саттер). Охватывает дополнительные темы безопасности, не затронутые в «Exceptional C++» в дополнение к обсуждению эффективного объектно-ориентированного программирования в C++ и правильного использования STL. [Обзор]

«Exceptional C++ Style» (Герб Саттер). В книге обсуждается общее программирование, оптимизация и управление ресурсами; в этой книге также хорошо описано, как писать модульный код на С++ с использованием функций, не являющихся членами класса, и принципом единой ответственности. [Обзор]

«C++ Coding Standards» («Стандарты программирования на С++») (Герб Саттер, Андрей Александреску). Выражение «стандарты программирования» здесь не означает «сколько пробелов я должен поставить в своём коде?». В этой книге содержится более ста лучших задач, идиом и распространенных ошибок, которые могут помочь вам написать правильный, понятный и эффективный код на С++. [Обзор]

«C++ Templates: The Complete Guide» («Шаблоны С++: полное руководство») (Дэвид Вандевурд и Николаи М. Джосаттис). Это книга о тех шаблонах, которые существовали до С++11. Она охватывает всё от самых основ до некоторых наиболее передовых шаблонов метапрограммирования и объясняет каждую деталь работы шаблонов (как саму идею, так и то, как она реализовывается), в ней обсуждаются многие общие ошибки. В книге содержится отличное обобщение правила одного определения (ODR) и разрешения совмещения в приложениях. Выход второго издания запланирован на 2016 год. [Обзор]

Продвинутый уровень

«Modern C++ Design» («Современное проектирование на С++») (Андрей Александреску). Новаторская книга об общих передовых методах программирования. В книге представлены темы проектирования, основанные на требованиях, списков типов и основные идиомы общего программирования, также объясняется, как много полезных образцов проектирования (включая малые распределители объектов, функторы, фабрики, посетителей и мультиметоды) может быть реализовано эффективно, модульно и только с использованием общего программирования. [Обзор]

«C++ Template Metaprogramming» («Шаблонное метапрограммирование на С++») (Дэвид Абрахамс и Алексей Гуртовой)

«C++ Concurrency In Action» («Параллельное программирование на С++ в действии») (Энтони Вилльямс). Книга освещает параллельное программирование на С++11, включая потоковые библиотеки, атомарные библиотеки, модель памяти С++, шлюзы и блокировки, а также вопросы проектирования и отладки многопоточных приложений.

«Advanced C++ Metaprogramming» («Продвинутое метапрограммирование на С++») (Дэвид Ди Дженнаро). В руководстве по методам шаблонного метапрограммирования на С++11 больше уделяется внимания практике, чем теории. Есть огромное количество отрывков из этой книги, некоторые из которых устарели, но, тем не менее, их полезно знать. Если вы сможете смириться с причудливым форматированием/редактированием, то вам будет легче читать эту книгу, чем книги Александреску, и, возможно, она будет более полезной. Для более опытных разработчиков есть возможность выудить что-нибудь из глубин С++ (шутка), ведь это, как правило, приходит с опытом.

Книги-справочники: все уровни

«The C++ Programming Language» («Язык программирования С++») (Бьёрн Страуструп) (обновлено для С++11). Классическое введение в С++, написанное его создателем. Написанная параллельно в классическим K&R, эта книга действительно очень похожа на него и охватывает почти всё от основного языка до стандартной библиотеки и парадигм программирования в философии языка. (Из-за этого последнее издание превысило отметку в 1000 страниц.) [Обзор] Четвёртое издание (опубликовано 19 мая 2013) охватывает С++11.

«C++ Standard Library Tutorial and Reference» («C++ Стандартная библиотека. Для профессионалов») (Николай Джосьютис) (обновлено для С++11). Введение и источники для стандартной библиотеки С++. Второе издание (опубликовано 9 апреля 2012) охватывает С++11. [Обзор]

«The C++ IO Streams and Locales» («IO потоки и области С++») (Анжелика Лангер и Клаус Крефт). Про эту книгу мало что можно сказать, за исключением того, что если вы хотите знать всё о потоках и областях, то это именно то, что поможет вам найти окончательные ответы. [Обзор]

Справочники для С++11:

«The C++ Standard (INCITS/ISO/IEC 14882-2011)» («Стандарт С++»). Эта книга является конечной инстанцией для всего, что является или не является С++. Однако, следует помнить, что она написана исключительно в качестве руководства по указанию источников для опытных пользователей, желающих потратить значительное время и усилия на её понимание. Как обычно, первое издание было довольно дорогим (свыше $300), но сейчас она опубликована в электронном виде за $60.

«Overview of the New C++ (C++11/14)» («Обзор нового С++») (только в pdf) (Скотт Майерс) (обновлено для C++1y/C++14). Здесь представлены репрезентационные материалы (слайды и записи некоторых лекций) трёхдневного курса, который проводил Скотт Майерс, который является многоуважаемым автором языка С++. Даже если список тем маленький, качество остаётся высоким.

Классика/старые издания

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

«The Design and Evolution of C++» («Дизайн и эволюция С++») (Бьёрн Страуструп). Если вы хотите знать, почему язык такой, какой он есть, то в этой книге вы найдёте ответы. В этой книге охвачены все вопросы до стандартизации С++.

«Ruminations on C++» («Размышления на С++») (Эндрю Кениг и Бабрара Бу) [Обзор]

«Advanced C++ Programming Styles and Idioms» («Программирование на С++») (Джеймс Коплиен). Предшественник движения шаблонов, книга содержит описания многих специфичных «идиом» С++. Конечно, это очень хорошая книга, возможно, её стоит прочитать, если вы хотите скоротать время, но она довольна старая и не соответствует современному С++.

«Large Scale C++ Software Design» («Крупномасштабная разработка программного обеспечения на С++») (Джон Лакос). Лакос объясняет методы работы с крупными проектами по разработке программного обеспечения на С++. Разумеется, эту книгу полезно читать, только если вы в курсе дела. Она была написана задолго до С++98, и в ней недостаёт многих вещей (например, пространства имён), важных для крупных проектов. Если вам нужно работать над большим проектом по разработке программного обеспечения на С++, вы можете прочитать эту книгу, однако вам стоит отнестись к ней с некоторым недоверием. Выход первого тома нового издания ожидается в 2015 году.

«Inside the C++ Object Model» («Внутри объектной модели С++») (Стэнли Липпман). Если вы хотите знать, как виртуальная компонентная функция обычно реализуется и как база объектов закладывается в память сценария с несколькими наследованиями, и как всё это влияет на производительность, то в этой книге вы найдёте подробное обсуждение таких тем.

Источник: Stack Overflow