Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

На чем и как

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #053, стр. 053-056-1


Разбираемся в теории: как правильно писать большую и качественную программу

Современные программные комплексы уже не программируются на одном языке, а представляют собой конгломерат гибридного типа. Правильный выбор технологии программирования очень важен. Могу сказать без преувеличения, что он определяет судьбу продукта, сроки реализации, трудоемкость разработки, расширяемость и т.д. Оставь священные войны "Pascal vs С" или "С vs Ассемблер". Перед нами стоит вполне конкретная задача - создать конкурентоспособный продукт, который должен иметь успех на рынке.

На чем писать?

Для многих основной язык разработки - это С, в "конституции" которого декларирована приближенность к аппаратуре (а значит, и высокая эффективность). Фактически это МЕГАассемблер, предоставляющий программисту полную свободу. Изначально ориентированный на чисто "хакерские" цели, С завоевал признание миллионов программистов. Где он только не используется: низкоуровневое и высокоуровневое системное программирование, встраиваемые системы, финансовые и научные расчеты, общее прикладное программирование etc. При всех присущих ему недостатках (сходи на SU.C-CPP, почитай Харона), это лучшее средство для выражения программистской мысли в наиболее естественной для него форме. Конструкции в стиле: x == (flag?sin:cos)(y) здесь вполне законны и являются нормой. В этом смысле С очень похож на спектрумовский Бейсик, везде, где это только возможно, допускающий подстановку выражений. Отсутствие встроенных средств для работы с массивами вкупе с доминирующей небрежностью проектирования приводит к многочисленным ошибкам переполнения (buffers overflow), а "демократичность" работы с указателями - к утечкам памяти. Писать сетевые приложения на С категорически не рекомендуется. Но все равно пишут. Отсюда берутся черви, атаки на удаленные системы и прочие коварства виртуального мира?

Сейчас структурное программирование считается достоянием истории. В моду вошел ООП. С++ завладел умами программистов. Объектно-ориентированный подход пропагандируется как единственно возможный способ программирования вообще, а на приверженцев классического С смотрят как на чудаков или недоучек. Прямо насилие какое-то получается! На самом деле преимущество ООП над процедурным программированием весьма спорно, и возложенные на него ожидания так и не оправдались. Ошибок не стало меньше, сроки разработки только возросли, удачных примеров повторного использования кода что-то не наблюдается, а требования к квалификации разработчиков взлетели до небес.

Но С++ поддерживает не одну, а целых три парадигмы программирования: структурное программирование в духе улучшенного С, абстрактные типы данных, позаимствованные из Ада ;), и, наконец, объектно-ориентированный язык в стиле Simula. Вот что говорит по этому поводу Бьерн Страуструп: "При создании программы всегда есть некоторое количество вариантов, но в большинстве языков выбор сделал за вас проектировщик языка. В случае С++ это не так: выбор за вами. Такая гибкость, естественно, не годится для тех, кто считает, что существует лишь один правильный способ действовать. Она может также отпугнуть начинающих пользователей и преподавателей, полагающих, что язык хорош, если его можно выучить за неделю. С++ к таким языкам не относится. Он был спроектирован как набор инструментов для профессионалов, и жаловаться на то, что в нем слишком много возможностей, значит уподобляться дилетанту, который, заглянув в чемоданчик обойщика, восклицает, что столько разных молоточков никому не понадобиться".

Содержание  Вперед на стр. 053-056-2