эволюция КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #065, стр. 065-022-3 Программисты, одинакового хорошо владеющие двумя языками (С и С++), неоднократно замечали, что для 99% проектов 99% возможностей С++ просто не нужны! Взять хотя бы классический пример. Начинающие программисты убеждены, что форма записи «a = b + c» лучше, элегантнее и выразительнее, чем «a = add(b,c)». Однако это всего лишь заблуждение (по молодости и не такое случается). Первая запись скрывает логику программы, делая алгоритм неочевидным и заставляя программиста постоянно вспоминать, был или не был перегружен оператор сложения, какие побочные эффекты он имеет, как реализован и т.д. Стоп! Тут кто-то неожиданного говорит: «Необходимо программировать так, чтобы не было побочных эффектов». И как же можно запрограммировать?! Даже если нужно «сложить» всего две строки, дело уже не обходится без побочных эффектов, приходится выделять память, что реализуется разными путями, которые должны быть описаны в документации на перегруженный оператор сложения. Следовательно, удобство чисто внешнее, плюс в ряде случаев намного полезнее функция, которая не выделяет память, а берет ее из первой строки, что делает реализацию оператора «+» либо невозможной, либо нелогичной. Это совсем не призыв к отказу от плюсов, а призыв к осмотрительности, осмысленности и осторожности. Программирование — это инженерная дисциплина, а всякий инженер должен руководствоваться принципом целесообразности. Вот только один пример из личной жизни. Мы с другом пишем программу. — А давай здесь используем вот такую возможность. — А зачем? — Она сократит программу на пять строк и сделает ее более «наглядной». — А ты уверен, что другие компиляторы ее поддерживают? По мне, так лучше написать пять лишних строк сейчас и никогда потом не возвращаться к этому коду, чем править твой «элегантный» код при всяком переносе на другой компилятор, мучительно вспоминая, как он работает. Замечено, что код от программистов, не знакомых со стандартом, часто бывает более переносимым, чем код от тех, кто излазил его вдоль и поперек, горя желанием применить полученные знания на практике. Тем не менее без карты минного поля далеко не уйти, а без знания стандарта — ничего не запрограммировать. Знание пунктов стандарта и номеров статей уголовного кодекса придает программисту шарм профессиональной солидности, значительно упрощает трудоустройство, особенно на руководящие должности. Так что близкое знакомство со стандартом обещает быть отнюдь не бесполезным. |