div.main {margin-left: 20pt; margin-right: 20pt} М. Безверхов. vasilisk@nm.ru vasilisk@rbcmail.ru
Компонентное программирование.
Глава 1. Предтечи.
С того дня, когда программирование стало самостоятельной
сферой человеческой деятельности прошло уже более пятидесяти лет.
Сменилось не одно поколение вычислительных машин и обслуживающих их работу
программ. Человечество довольно однозначно поняло, что написание программ
– тяжкий труд. А труд, в странах, которые уважают свое состояние,
оплачивается. И чем квалифицированнее этот труд – тем больше...
Словом, идея программирования из компонент с экономической
точки зрения витала в воздухе ровно с тех пор, как программы стали
самостоятельным товаром и самостоятельной статьёй затрат. Но между
возвышенной мечтой и её приземлённой реализацией, обычно – дистанция
огромного размера. Всё дело в том, что программирование является
человеческой технологией. Т.е. способом производства, который не стоит на
месте, а соответствует уровню накопленных в обществе знаний, мощности
«средств производства», принятым производственным отношениям. И очень
долгое время все эти факторы не давали компонентному программированию уж
очень существенных экономических преимуществ – если в результате научных
разработок и получались программы, которые оказывались используемы
повторно и многократно, то организация их использования оказывалась
непомерно дорога. Если находилось экономически приемлемое решение, то
приемлемо оно было как раз за счёт не очень большой сложности входящих в
него компонент. Понадобилось открытие миру персонального компьютера, резко
понизившего квалификационные требования к человеку-оператору, сидящему за
ним, понадобилось увеличение аппаратной мощности компонент компьютера
позволившее не выжимать последние силы из каждого бита, понадобилось
открытие новых технологий программирования, позволявших добиться
невиданной дотоле скорости написания кода, понадобилось резкое возрастание
расходов на создание программного обеспечения, в разы превысивших расходы
на аппаратную часть, чтобы стало очевидно понятно – простой экстенсивный
путь создания программ есть путь экономического тупика.
Причина тупика очевидна – при сохранении тех же технологий
создания, распространения и использования программного обеспечения,
увеличения вычислительной мощности единицы и числа случаев применения
компьютеров в жизни весьма скоро наступает момент, когда подавляющее
большинство работников в мире должны будут составить программисты...
Технологии программирования старательно пытались избежать
этого тупика, двигаясь по многим направлениям. Движение от машинного кода
к ассемблерам, языкам высокого уровня и сложным средствам моделирования,
таким как С++, старалось предоставить возможность надёжного создания как
можно более длинных и объёмных программ. Тем самым достигалось снижение
стоимости одной машинной команды в разработке программы, что позволяло,
примитивно говоря, за те же деньги написать больше. При этом стоимость
снижалась отнюдь не линейно, а гораздо круче – компилятор языка высокого
уровня не просто генерировал больше команд, он допускал меньше ошибок, чем
человек, и мог произвести объёмную логическую проверку самого исходного
текста. Специализация и всё более строгая формализация языков разработки –
несколько другая ветвь того же направления. Оно исходило из того, что
приспособить человека к языку – значительно более дорогая операция, чем
сделать наоборот. Критерием, естественно, было то, что «стоимость одного
знака» написанного на «правильном языке» могла быть ниже, чем того же, но
написанного на языке «неправильном», с точки зрения конкретной задачи. И
здесь снижение стоимости было более, чем линейным, по тем же самым
причинам – чем ближе к специфике задачи конкретный язык, тем большую
проверку фактической правильности модели мог сделать компилятор.
Другим направлением движения явилось увеличение случаев
повторной используемости кода. Алгоритм, каким бы он ни был, в пригодной
для практического использования форме существует в виде реализации –
компьютерной программы. Это направление развивало программы, реализация
которых специально была сконструирована для многократного их использования
в составе других программных проектов. Примером результативности этого
направления развития может явиться хотя бы «стандартная библиотека
математических процедур». При всей очевидности такого подхода критерии
экономической успешности его отличались от критериев подхода первого – в
данном подходе стоимость разработки программы уже не была абсолютно
определяющим параметром. На разработку можно было затратить много средств,
но, заполучив в результате много пользователей, добиться очень хорошей для
пользователя «цены единицы» - система сбыта и распространения могла
начинать рассматривать программы как самостоятельный, индустриально
производимый товар.
Конечно, существовали и промежуточные подходы и любой
реальный программный проект использовал все возможные для него направления
развития. Но проблема всё равно оставалась – любой алгоритм X мог быть
сколь угодно хорошим и нужным, но его конкретная реализация не могла
устроить всех. Например, реализация алгоритма сортировки Х применительно к
целым числам была совершенно не нужна тем, кто намеревался сортировать
строки. Потенциальные пользователи стали «сгущаться» в целевые группы,
объединенные общей парадигмой использования компьютера, а внутри этих
групп стали выделяться «подгруппы» и «субкультуры». Дробление
останавливалось естественно – когда некая «группа пользователей» со своими
потребностями уже «не могла прокормить» соответствующую «группу
программистов».
Здесь-то и оказалось одно из узких мест, которое не смогли
разрешить традиционные технологии создания и распространения программ –
логические блоки, минимально достаточные «для прокормления» программистов,
оказывались все ещё очень большими и слишком общими, чтобы удовлетворить
интересы пользователей полностью. Оставался значительный пласт
пользовательских потребностей, за которые пользователи согласны были
платить, но который не мог быть «освоен» по сугубо технологическим
причинам. И уже одно это обстоятельство не могло не породить, в
конце-концов, новой технологии.
Вторым обстоятельством, вызвавшим к жизни новую технологию,
на мой взгляд, явилось синхронное бурное развитие вычислительных сетей и
организация «естественных распределенных вычислений» - вместо того, чтобы
как двадцать лет назад, покупать один очень мощный компьютер и затем
думать, как его загрузить, пользователь мог собрать конфигурацию
вычислительной системы из узлов, да ещё покупая их только по мере
надобности. Средства комплексирования компьютеров в сети стали
встраиваться в операционные системы, но для пользовательского программного
обеспечения, субстанции значительно более дорогой, чем аппаратура, такой
возможности ещё не было. Сами эти программные средства в лучшем случае
«могли работать в сети», но не использовали исключительных сетевых
возможностей аппаратной конфигурации. И уж очень редко программы можно
было «докупать по мере надобности» - вся необходимая функциональность, за
исключением очень редких и дорогих изысков, поставлялась в едином
комплекте. Это тоже было «болевой точкой», которую хотелось бы
нейтрализовать.
Словом, новая технология просто не могла не
появиться...
|