Литература по С++

Стивен Прата. Язык программирования C++ (C++11). Лекции и упражненияСтивен Прата. Язык программирования C++ (C++11). Лекции и упражнения, 6-е издание — М.: Вильямс, 2012. — 1248 с.

Когда я учился такой книги, к сожалению, не было. Книга толстая, но читать ее интересно. Автор не является членом комитета стандартизации языка, а преподает в ВУЗе, поэтому написал не справочник, а учебник. Это лучший учебник по С++, который я видел. Прата собрал весь свой педагогический опыт и сделал упор именно на те аспекты, с которыми у студентов возникают проблемы (как ни странно, но у моих студентов те же самые проблемы, поэтому я рекомендую им эту книгу). Книга новая и в ней описывается новый стандарт. Специально под фичи С++11 выделено всего 50 страниц, но по ходу всей книги делаются небольшие отступления на эту тему.

Б. Страуструп Язык программирования С++Б. Страуструп Язык программирования С++. Специальное издание. Пер. с англ. — М.: Издательство Бином, 2011 г. — 1136 с.

Хорошая книга от автора языка. Текст книги сухой, хотя в ней есть примеры, советы по поводу «хорошего кода» и даже упражнения. Лично я, использую ее в качестве справочника — как учебник книга вряд ли может сравниться с произведением Прата.

Рецензия от другого, уважаемого мной программиста:

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

Если вы уже успели потратить свои деньги на приобретение этой книги, то будьте бдительны. Отнеситесь к ней как к справочнику возможностей языка C++ и не воспринимайте близко к сердцу советы, которые дает автор книги (за исключением банальных типа инкапсуляции данных).

У меня сложилось впечатление, что книга писалась в жутко укуренном состоянии. Совершенно никакой последовательности мысли. Напоминает письмо дяди Федора из Простоквашино. Читается тяжело и муторно, насквозь пронизана бессмысленными и никому не нужными лирическими отступлениями.

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

Диагноз
Данная книга категорически противопоказана неокрепшим умам. Если ее и стоит читать, то только тогда, когда вы научитесь безошибочно отделять плохие рекомендации от хороших. Чтение этой книги с целью получения новых знаний похоже на добычу золота из морской воды.

978-5-94074-990-5_270_369_5_80Мейерс С. Эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов. — М.: ДМК Пресс, 2014. — 294с.
meiers-effektivnoe-ispolzovanie-c-55-vernyhМейерс С. Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ. — М.: ДМК Пресс, 2006. — 300с.

Две книги Скотта Мейерса для углубленного изучения С++. Выполнены в виде сборников правил типа: «Никогда не вызывайте виртуальные функции в конструкторе или деструкторе». Правила касаются понимания концепций объектно-ориентированного программирования, вопросов управления памятью, обработки ошибок и эффективности кода. К правилами прилагается исчерпывающее объяснение. В очень небольшой части материал книг пересекается, но в целом, они дополняют друг друга. Начать изучение стоит с книги «35 рекомендаций» — она попроще.

Андрей Александреску. Современное проектирование на C++.Андрей Александреску. Современное проектирование на C++. Обобщенное программирование и прикладные шаблоны проектирования. Перевод с английского — Издательский дом «Вильямс», 2002 г. 336 с.

Отзыв от уважаемого мной программиста:

Если вы будете читать эту книгу впервые, то сначала у вас закипит мозг, после чего вы свалитесь со стула, а после того, как придете в себя, первой вашей мыслью будет фраза «Них#я себе, что можно на C++ вытворять!».

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

Книга рассказывает об основных паттернах проектирования с упором на их реализацию. Особый восторг вызывают фирменные метапрограммные рецепты господина Александреску.

Единственным, но в то же время практически незаметным недостатком, я считаю несколько недостаточное внимание, уделенное разделению предлагаемых подходов на хорошие и плохие. Однако, если ваш мозг будет в состоянии понять, о чем же именно рассказывает эта книга, то такое разделение вы сможете сделать самостоятельно без особого труда.

Герб Саттер, Андрей Александреску. Стандарты программирования на C++. 101 правило и рекомендация.Герб Саттер, Андрей Александреску. Стандарты программирования на C++. 101 правило и рекомендация. Перевод с английского — Издательский дом «Вильямс», 2005 г. 224 с.

Отзыв от уважаемого мной программиста:

На мой взгляд это одна из лучших книг (если не самая лучшая) из серии «C++ In-Depth». Коротко, просто и по делу. Ничего лишнего, ни одной плохой рекомендации. Создается ощущение, что читаешь некий доклад о том как нужно программировать, основанный на опыте всех программистов, полученном с момента создания языка C++, из которого тщательным образом было отобрано только самое лучшее и выкинута вся муть, которую выдумывают современные воспаленные мозги.

Остается добавить, что само название, «101 правило и рекомендация», это не просто бойкое маркетинговое название, выдуманное молодым маркетологом-энтузиастом. Книга действительно представляет собой сто одну коротенькую рекомендацию по программированию.

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

Элджер Дж. C++. Библиотека программиста: Пер. с англ. — СПб.: Питер, 2000. — 320 с.Элджер Дж. C++. Библиотека программиста: Пер. с англ. — СПб.: Питер, 2000. — 320 с.

Краткое содержание книги прекрасно описано в первой главе, не буду дублировать, перечислю лишь то, что привлекло внимание.

Первая часть посвящена языку С++, ее можно рассматривать как очень краткое, но глубокое введение в язык.
— во второй главе приведено очень поверхностное изложение тонкостей С++, а также множество коварных фрагментов кода, на которых можно проверить знаете ли вы язык в достаточном объеме чтобы читать дальше или нет.
— третья глава посвящена шаблонам (templates). Если вы до этого не сталкивались с ними — то по приведенному материалу сможете разобраться. Все, что там описано работает, но стоит учитывать, что книга писалась в 90х годах, сейчас возможности шаблонов гораздо шире.
— глава 4 посвящена обработке исключений, написана в том же стиле, что и третья. Можно использовать как полноценный учебник.

Во второй части книги рассказывается про умные указатели и итераторы. Очень подробно, про всякие разные. Поразительно, что по этой теме написано так много… Например, про умные указатели писал в своих книгах Майерс, но совсем с другой стороны. Наиболее понравилась глава 7 про «грани и другие мудрые указатели» и глава 9 «транзакции и гениальные указатели».

В части 3 речь идет о двойной диспетчеризации, производящих функциях и, опять же, умных (на этот раз «невидимых») указателях. Материал местами отдает академизмом, но все равно интересно.

В четвертой части речь идет о памяти — перегрузке операторов new и delete, при этом описывается несколько алгоритмов, которые могут улучшить работу с памятью в ваших программах, в том числе уплотнения памяти и сборки мусора. Мое личное мнение — все это интересно, но реализовать качественно эти алгоритмы слишком сложно и не совсем очевидны случаи когда стоит это делать. Так, например, недавно я публиковал аннотацию на доклад по похожей теме: https://vk.com/wall-105242702_701, в котором нечто подобное (не все) реализовано в malloc. Вероятно, в тех редких случаях, когда вас не устраивает стандартный malloc — можно использовать другую реализацию.

Резюме: книга интересная. Первая глава однозначно имеет практическую направленность. Остальная часть книги интересна, полезна для кругозора и местами на практике (например раздел по двойной диспетчеризации).