Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумПаттерныАнтипаттерныТест-драйвЗаметкиВопрос-ответКнигорецензииСправочная

41. О предрассудках

Языковые техники, такие как приведение типов, множественное наследование, отношение дружбы, статические массивы, union-ы, ellipsis-функции, и так далее, сами по себе абсолютно ничего не значат, не имеют никакой смысловой нагрузки, не несут никакого предпочтительного или нежелательного характера. Сами по себе языковые техники бесцветны, безвкусны и монотонны. Будучи отдельно взятыми, языковые техники сами по себе абсолютно ничего не значат.
Наполнение смыслом, красками и эмоциями, происходит только тогда, когда языковые техники, объединяясь, и взаимодействуя между собой, образуют некоторую завершенную систему. Только после этого в отношении отдельно взятых элементов системы становятся уместны слова «хорошо» или «плохо».
Языковая техника не бывает плохой в общем смысле. Языковая техника может быть плохой только в данном конкретном случае. При этом даже если доля таких случаев составляет девяносто девять процентов от всех возможных применений конкретной техники, то это все равно не делает ее плохой в общем смысле. Языковая техника может быть плохой только в данном конкретном случае. Верно и обратное — техник, хороших в общем смысле, не существует. Программа не станет лучше, если просто так заменить наследование на шаблоны. Необходимо чтобы всегда присутствовало понимание происходящего. Использование любой техники, равно как и отказ от такого использования, всегда должно быть объективно обосновано.
Я думаю, что вам ни раз приходилось наблюдать, как на форумах или в блогах, люди, прыгая вокруг класса и тыча в него пальцем, орали: «Ааа!!! Множественное наследование! Множественное наследование — сакс!». При этом попробуйте спросить этих людей, чем же плохо множественное наследование в данном конкретном случае? Ничего более вразумительного нежели «множественное наследование — сакс» вы не услышите. Как бы сказала одна моя знакомая девочка, «Если ты такой умный, то не говори „множественное наследование — сакс“, если ты не знаешь что это обозначает».
К сожалению, мало кому удается избавиться от этих предрассудков и научиться самостоятельно думать собственной головой. Подобные предрассудки преследуют очень многих людей всю сознательную жизнь. Вот и сейчас какой-нибудь университетский идиот с профессорским званием, или же докладчик на презентации в какой-нибудь крупной аутсорсинговой компании рассказывает о том, что отношение дружбы в C++ это очень плохо и им никогда нельзя пользоваться.
Те, кто считают, что множественное наследование это всегда плохо, пусть расскажут это Андрею Александреску, предварительно ознакомившись со смарт-поинтерами из библиотеки Loki, управляемыми настройками-стратегиями. Те, кто считает, что union-ам не место в C++, пусть пообщаются с Doug Gregor-ом; он расскажет, почему union присутствует в реализации boost::function.
Как гласит старая пословица, «Просто так даже кошки…». В общем, даже кошки ничего не делают просто так. Даже если сам Саттер и Александреску вам скажет, что такая-то техника хороша или плоха, этого будет не достаточно чтобы принять какое-либо решение относительно ее использования. Прежде всего вы сами должны уметь находить аргументы в пользу того или иного решения.
Как рождаются предрассудки? Очень просто: «Я прочитал книгу, теперь я умный, буду всем тыкать пальцем. Подумать самому? Зачем? За меня уже подумал автор книги / статьи / поста (нужное подчеркнуть)».

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация