Обзор книги The C++ Programming Language

4thEnglish

Данный труд, а именно его 4-е издание, написано в 2013 году Бьярном Страуструпом(Bjarne Straustrup). Я думаю, что сложно найти человека, пишущего на C++, который бы не слышал этого имени. Книги Страуструпа всегда мелькают среди рекомендаций новичкам, когда те спрашивают: “А что мне прочитать по C++?”. Хотя я и имел в наличии предыдущее издания сего труда я так и не смог его осилить в своё время(когда был новичком), потом не было времени/желания. Наконец, с публикацией нового стандарта, Страуструп обновил и свой, ставший уже классическим, труд. На этот раз я уже просто не мог пройти мимо и не прочитать его.

Что можно сказать о языке написания? Язык книги довольно сух и академичен, что несколько затрудняет прочтение книги от корки до корки. Не знаю, так ли это во всех книгах Страуструпа или же сухость языка данной книги вызвана тем фактом, что ему нужно было уместить по истине огромный материал в разумных рамках. Забегая вперёд хочется сказать, что на всём протяжении ~1300 страниц у меня ни разу не сложилось впечатления, что автор льёт воду, дабы увеличить объём. Наоборот,- всё чётко и по делу.

Более того, чтобы книга получилась вменяемого размера(книгу на 1500+ страниц читать весьма тяжело, во всех смыслах) автор решил отказаться от подробного описания глав в начале книги, поэтому в книге изложено только общее оглавление. Подробное оглавление можно посмотреть на сайте. Более того, в отличии от 3-го издания книга не содержит упражнений. Совсем. Если вам всё таки нужны упражнения, вы можете найти их, также, на сайте. Хотя, на мой взгляд, упражнения в книге по программированию излишни.

Как я уже говорил, The C++ Programming Language очень часто советуют новичкам, которые хотят познать C++. Меня всегда удивляли такие советы, ведь когда я был новичком Страуструпа, я так и не смог прочитать 3-е издание – слишком трудно было. Ну да ладно, может у меня просто мозгов не хватает, а у других всё по другому. Но выходит так, что автор сам не советует свою книгу новичкам. Давайте посмотрим, что есть автору сказать на эту тему:

This book is written assuming that the reader is a programmer.

Что означает: “Эта книга подразумевает, что читатель является программистом”. Именно так и никак иначе. Для новичка в программировании эта книга слишком сложна и может просто отпугнуть. Эта книга для тех, у кого за плечами весомый опыт в других языках или, ещё лучше, на C++(не хочется никого обижать, но опыт, скажем, в javascript и php тут вряд ли поможет). В начале книги автор довольно обильно использует части языка C++ и библиотеки, которые на тот момент читателю ещё не представлены. И это, как мне кажется, может создать некоторые затруднения при прочтении. Когда я читал эту книгу, я уже был знаком со всеми углами C++(в той или иной мере) и меня не покидало ощущение, что возможно ему не стоило в самом начале книги использовать те части, что будут рассмотрены позднее. В любом случае, если у вас туго идут первые главы(введение), то стоит сразу перейти к поэтапному описанию основного функционала языка, чтобы потом вернутся к введению и понять всё, что не было понято до этого. Ну да хватит страшилок, давайте перейдём к несомненным плюсам книги.

Книга  поделена на логические части, каждая из которых представляет читателю описание той или иной части языка или библиотеки. Нужно сказать, что каждая часть расписана весьма подробно и дотошно. Поэтому, если у читателя и могут остаться вопросы после прочтения, то их вряд ли будем много. На мой взгляд, данную книгу можно считать стандартом C++, адаптированным для тех, кто не хочет вникать в витиеватые пассажи самого стандарта. Это, в свою очередь, делает данный труд не просто великолепным учебником по C++, но и отличным справочником для C++ программиста любого уровня. Лично я, при прочтении, освежил многое из того, что уже забылось да и извлёк несколько новых для себя вещей. Хотя считал, что уж учебник по C++ меня вряд-ли чему новому научит(эх, самомнение).

В тексте, Страуструп, не разделяет C++ на то, что было до стандарта 11 года и после, что делает книгу более целостной. Никаких отсылок к прошлому или будущему – C++ есть такой какой он есть сейчас и другого не существует. Это, возможно, будет не очень удобно для тех, кто хотел быть узнать, что именно нового появилось. Тем не менее, на мой взгляд это правильно – нечего человека отвлекать прошлым. Именно поэтому, данную книгу нужно и можно рекомендовать только тем, кто может/хочет использовать компиляторы с полной(или хотя бы частичной) поддержкой (пред)последнего стандарта. Так как если человек до сих пор использует старый компилятор, то многое из этой книги у него работать не будет. Хуже того, оно может работать, но не так как описано в книге(одна новая модель памяти чего стоит).

“Постойте, но на дворе 2014 год и стандарт 14 года уже принят – эта книга устарела, не успев выйти!” – может сказать кто-то. На мой взгляд, это не так; C++14 привносит не так много изменений и все они более-менее косметического характера. Да, с ними было бы лучше, но тогда бы мы рисковали никогда не увидеть обновлённой книги Страуструпа, ведь стандарт теперь будет меняться куда чаще, чем это было раньше. Тем более, что в книге рассматриваются фундаментальные части C++, которые не изменены в C++14 ни на йоту.

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