Рецензия на книгу
«100 ошибок C++ и как их избежать»
yurembo
«Что нового можно сказать о C++? Оказывается, очень
много.» - из предисловия Джона Влиссидеса к книге «Современное проектирование
на C++» Андрея
Александреску, 2001.
25 лет спустя, можно выразиться
точно так же: C++ развивается,
появляются новые стандарты языка, новые версии компиляторов, разрабатывается великое
множество софта с его помощью, а на поддержание унаследованного C/C++-кода затрачивается неимоверное
количество человеко-лет.
Я изучаю C++ более 20 лет, и в связи с причинами, указанными выше, предела в его изучении не наблюдается. Следовательно, по нему будут появляться новые обучающие материалы. Признаться, редкая книга по C++ представляет для меня неподдельный интерес. Пройдены все талмуды.
Между тем летом в издательстве
«Питер» на русском языке была издана книга Рича Йонца «100 ошибок C++ и как их
избежать». После того, как я впервые пробежался по оглавлению, то решил, что
это крайне стоящая книга. А теперь, прочитав её, могу предложить пару рекомендаций
относительно нее. Она написана в стиле книг Скотта Майерса: «Эффективное
использование C++»,
«Наиболее эффективное использование C++», etc.
В них автор брал проблему или какую-то возможность языка и подробно её
описывал.
Так и тут, каждая ошибка
описывается по следующему алгоритму. Во-первых, для рассмотрения берется
распространенная или не очень ошибка программирования на C++, ведь помимо работы программистом
автор занимается преподавательской деятельностью в высшем учебном заведении и воочию
наблюдает, где люди совершают ошибки. Рассматривается проблема, для решения
которой написан код, где произошла ошибка. Во-вторых, описывается анализ
ошибочного кода. В-третьих, приводится рекомендуемое решение вместе с кодом.
В книге обсуждаются проблемы
старого подхода к изучению ООП, говорится о прежних указаниях, которые не
прошли проверку временем, и теперь считаются вредными. Обсуждаются святые пути
обучения ООП, со временем ставшие греховными.
Книга состоит из 12 глав, распределенные
на три части. Первая глава представляет собой введение в материал. Ошибки,
рассматриваемые в первой части связаны с неправильным использованием языка,
когда разработчик может улучшить код и подходы к программированию, применяя
современные возможности C++ и стандартную библиотеку шаблонов. Глава 2
посвящена классам и типам данных — с акцентом на проектирование классов и
использование умных указателей. В главе 3 автор знакомит читателя с подводными
камнями программирования в целом, а также с функциями языка, которые, возможно,
стоит применять чаще. Глава 4 описывает недавние изменения в языке C++ и
методы, облегчающие решение довольно распространенных задач.
Во второй части книги обсуждаются
ошибки, унаследованные современным C++ от языка C, с учетом его исторических
корней. Многие решения, рассмотренные в этой части, можно успешно адаптировать
к современным условиям. Глава 5 посвящена привычкам и практикам, которые по
инерции переходят из C в C++, несмотря на наличие более эффективных подходов.
Глава 6 описывает устаревшие практики, популярные на заре программирования на
C++, которые до сих пор сохраняются в некоторых современных кодовых базах.
Ошибки, приведенные в третьей
части, отражают проблемы, часто встречающиеся в унаследованных кодовых базах,
где разработчик не может применить современные методы. Некоторые из этих
проблем можно решить, а качество кода — повысить. Глава 7 расскажет о
правильном проектировании классов и связанных с этим проблемах устойчивости
классов. Глава 8 рассматривает дополнительные аспекты проектирования классов и
ошибки, которые могут неожиданно привести к архитектурным проблемам. Глава 9
описывает операции классов, которые при неверной реализации могут вызвать
трудности. Глава 10 посвящена обработке системных ресурсов и проблемам,
возникающим при неправильном управлении ими. Глава 11 анализирует сложности,
возникающие при использовании функций и параметров. В главе 12 обсуждаются
проблемы, характерные для классического C++, которые по-прежнему встречаются и
в современных кодовых базах.
Как итог данного поста, горячо
рекомендую к прочтению эту книгу каждому C++-программисту независимо от квалификации и решаемых задач,
знаний не бывает слишком много.
