Про книжку
Хотя по работе у меня задачи разные, но для их решения не надо использовать сложные приёмы. Нам вполне достаточно Си++ стандарта 2003. Но годы идут, язык развивается, и надо быть подкованным с профессиональной точки зрения.
Данная книжка часто позиционируется как книжка "для начинающих". Это не так. Вам устроят прогон по таким дебрям, которые мало кто видел. Я в курсе многого, но я сидел с пухлой головой, пока во всём разбирался. И так и не разобрался. Если вы видели книжки для начинающих по Питону, например, то они обычно рассматривают базовые конструкции языка и несколько пакетов. Тут всё гораздо хуже. Вы не осилите эту книжку, если не знаете Си++ хотя бы "средне". И в этом заключается загвоздка. Какую книжку по Си++ советовать начинающим? Сейчас у меня нет ответа на этот вопрос. Если у вас есть идеи, сообщите, пожалуйста. Эта книжка хороша, но она для людей типа меня.
Авторы в книжке очень дотошны. Они указывают на множество нюансов как на месте, так и в виде перекрёстных ссылок. Огромное количество раз текст выглядит как "это правило действует за одним исключением, описанным на стр. 1015". Это делает книжку не только хорошим учебником, но и справочником. Но затрудняет её чтение подряд. Для тупых и читающих по диагонали в книжке есть другая фишка: повтор одной и той же мысли дважды. Сначала идёт описание важной вещи длиной в абзац, а потом идёт короткая врезка "На заметку", где то же самое написано одной фразой.
Примеры в книге более внятные, чем бывают обычно. Это не сложение двух чисел, не абстрактные классы A и B, а что-то более приближенное к реальности. По большей части авторы допиливают одну и ту же модель книжного магазина, с которой начали, модифицируя её с применением всё более новых средств языка. К сожалению, в особо сложных местах авторы всё-таки скатываются до классов A и B, а в проекте книжного магазина есть некоторые странности.
Интересным показался фокус внимания авторов. Я учил студентов Си++ в той степени, в которой знал сам. Но те вещи, которые я сам считал важными (система ввода-вывода, ромбовидное наследование) вынесены авторами в короткие главы, расположенные поближе к приложениям. Зато очень много внимания уделено, например, перегрузке функций и операций.
Невозможно рассказать Си++ за один семестр. Поэтому в любом случае придётся выбирать, что рассказывать. Я очень не уверен, что когда-нибудь буду опять учить студентов Си++. Но некоторые преподаватели у нас в институте тоже рассказывали, что попадание за кафедру оказывалось для них неожиданностью. Поэтому, делаю себе пометку. Если я буду учить детей Си++, то надо подумать внимательно, что действительно надо рассказывать, что нет, и в каком порядке всё это делать.
Немного про язык книжки и про перевод. Очень хорошо, что переводчики в скобках разместили оригинальные английские термины, потому что это облегчает дальнейший поиск информации и защищает от "остроумных" переводов. Мысли сформулированы хорошо, но к концу книжки (больше 1000 страниц!) переводчики явно устали, появилось больше ляпов. Тем не менее, эту книжку читать в переводе очень даже можно.
Теперь не про книжку, а про сам Си++.
Си -- очень маленький язык. Его можно знать досконально. Знать Си++, мне кажется, задача нереальная. И я узнал, что кроличья нора глубока, но так и не узнал, насколько. Потому что в книжке описаны вещи, касающиеся Си++ до версии 2011 года (Си++11). А у нас ещё 14, 17 и 20. Это ещё очень много всего.
На самом деле, Си++ это очень плохой язык. Он всегда старается сохранить обратную совместимость с Си, поэтому новые средства могут не помогать, если вы просто будете работать по старинке (например, умные указатели против обычных указателей; я никогда не использовал умные указатели...). Кроме того, с годами Си++ превращается в конгломерат по принципу "чего изволите". Всё новые библиотеки включаются в стандарт. И развитие идёт во всех направлениях.
Изначально, Си++ задумывался как язык для ООП с нулевым оверхедом. Но как раз ООП-часть языка, похоже, не развивается. Зато у нас теперь завезли функциональное программирование.
Отдельное моё фе системе вывода с cin/cout (той самой, которой я учил студентов). Её запись очень громоздка. При этом она не является более понятной, чем система printf/scranf. Я не пользуюсь этой системой, и вряд ли буду (и да, несмотря на это я учил ей студентов, потому что считал, что это важная часть Си++). Пишут, что в Си++20 завезли библиотеку форматного вывода, но она использует иной синтаксис, чем в Си. А зачем? Даёт это новые возможности? Становится использование проще? Пока не знаю, буду разбираться.
И тем не менее, несмотря на моё нытьё, я буду продолжать заниматься Си++. Это интересно.