Модульность и интеграция
В мире рыночной конкуренции крупные поставщики программного обеспечения больше заботятся о своих доходах — а польза и удобство оцениваются в миллионах долларов, которые на этом можно сделать. В результате — гонка обновлений коммерческих программ, с добавлением новой функциональности не по необходимости, а лишь для того, чтобы успеть занять еще одну нишу. То, что исходно было простым и доступным, понемногу становится громоздким и неповоротливым, и пользователям все труднее добраться до тех нескольких основных операций, которые когда-то им пришлись по душе — поскольку интерфейс целиком заточен под новые «фишки» и все старье заметает под ковер, за ненадобностью.
Тут можно, конечно, начать возражать, что, дескать, сложные задачи требуют столь же сложных программ, и что мухобойность программных продуктов напрямую увязана с разнообразием и богатством возможностей... Что поделаешь — за гибкость и мощь надо платить. Кому-то, скажем, MS Office нужен исключительно в качестве печатной машинки с расширенными возможностями; для другого это средство создания презентаций; а кто-то вполне счастлив встроенными средствами интеграции с вебом. Большинство пользователей и понятия не имеют о написании скриптов — тогда как для разработчика приложений это предмет первой необходимости.
К сожалению, это путь быстро заводит в тупик. Всякая интегрированная среда интегрирована только внутри себя — и совсем не вяжется с другими подобными средами. В мире рыночной конкуренции иначе и быть не может, ибо ни один здравомыслящий производитель не станет выставлять на публику корпоративные технологии ради стопроцентной совместимости. Объективная необходимость заставляет-таки конкурентов садиться за стол переговоров — однако дело в самом благоприятном случае кончается лишь еще одним интеграторским решением, включая набор стандартных протоколов, в какой-то мере открытые форматы данных и некоторая общность принципов макропрограммирования. Все это связывает разные продукты чисто внешним образом, не оказывая особого влияния на исходные технологии.
А в идеале хотелось бы иметь такую среду, в которой работало бы любое приложение, независимо от изготовителя и возраста; пользователь тогда сам бы смог определять, что ему по жизни требуется и динамически подключать или отключать необходимые модули по мере надобности, работая в подвижной, ориентированной на текущие задачи конфигурации. В каждый момент под рукой оказываются только необходимые инструменты — подобно тому, как ненужные пункты меню скрываются в некоторых системах, с возможностью развертывания по требованию. И не нужно заставлять пользователя (или админа) танцевать с бубном всякий раз, когда вдруг приспичило задействовать новую фичу, — и потом молиться, чтобы подключение обошлось без последствий. Надо иметь возможность просто указать требуемую функциональность и подтвердить команду установки. А интеграция новых приложения с уже имеющимися и встраивании в привычный пользователю интерфейс — автоматически обеспечивается установщиком.
Да, конечно, информатика движется в этом направлении, и существуют механизмы фоновой загрузки и подключения новых модулей из единого хранилища — особенно для мобильных приложений. Однако полноценной интеграции, в общем-то, нет — поскольку каждое приложение просто разрабатывается в нескольких вариантах, под самые ходовые платформы. Каждая платформа при этом остается замкнутой в себе и не допускает чужеродных элементов.
Безусловно, с ростом вычислительных мощностей, каждый будет в состоянии установить на одном устройстве несколько виртуальных машин, связать их чем-то вроде локальной сети — и пожалуйста, запускайте любые приложения в их собственной виртуальной среде. Однако такое решение — чистая эклектика, и особой гибкостью не отличается. Особенно учитывая, что при этом пользователь должен учиться работать в разных операционных системах — вместо того, чтобы, наоборот, разные платформы объединить в индивидуально скомпонованной среде.
Некоторые платформы, в принципе, позволяют выстраивать оболочки с высокой степенью интеграции. Пожалуй, самый впечатляющий пример гибкости и удобства — Windows XP mode под Windows 7 (к сожалению, это уже вести с того света); в VMWare Workstation есть нечто подобное под названием unity mode — но, конечно, уровень интеграции уже не тот: это не расширение системы, а всего лишь надстройка. Понятно, что различие в форматах данных и системе ссылок никак не способствует универсальности подобных интеграторских решений. В идеале пользователь должен иметь возможность выращивать свою собственную операционную систему из независимых конструктивных блоков, не заморачиваясь вопросами совместимости.
Если по-простому, допустим, что мне нужна такая-то возможность из Windows, что-то мне больше нравится в Linux, отдельные фишки хотелось бы выдернуть из VAX VMS, а что-то, может быть, из AS/400, или из какой-то версии макинтоша либо того же андроида. В довесок мне бы еще основные инструменты фотошопа чуть подкрасить странностями GIMP, да еще скомпоновать текстовый процессор на базе MS Word + Scientific TeX, и чтобы все это было совместимо с PDF в обоих направлениях. Есть у меня такая возможность набрать только те функции, которые меня интересуют? На нынешний момент — ровно два раза! Если бы каждый компонент каждой компьютерной платформы (любого уровня) можно было бы отделить от остального и аккуратно приклеить к любому набору других модулей, каждый мог бы обрести систему мечты, в которой есть только то, что нужно — и ничего лишнего, да еще и в единообразном и под себя заточенном интерфейсе.
Понятно, что это на практике означает совершенно новый подход к разработке программного обеспечения. Прежде всего, функциональность следует отделить от реализации. А для этого нужен универсальный язык для представления пользовательских нужд. То есть, по-настоящему универсальный, а не просто принятый в качестве взятого с потолка стандарта. Чтобы можно было абсолютно новую парадигму, которая никому и в голову не могла бы прийти десяток лет назад, выразить на том же самом языке, а не изобретать нечто более подходящее. В этом смысле универсальный компьютерный язык будет сродни естественным языкам, которые многие века легко приспосабливаются к любым изменениям в культуре. Реализация требуемой функции предполагаем перевод с универсального языка на какой-либо из специализированных языков, удобных для данной конкретной разработки. Такой перевод заведомо неоднозначен, и приведет к разным реализациям — важно, чтобы требования пользователя при этом были соблюдены. В частности, разные компании могут как угодно использовать корпоративные технологии — но при этом снабдить свои продукты набором приспособлений, позволяющих разговаривать с другими приложениями на общем языке. Нечто вроде семейства динамически конфигурируемых виртуальных машин на базе единой платформы интеграции.
Элементы такого подхода понемногу проникают в умы программистов, чему немало способствует растущая популярность декларативных и функциональных языков. Можно вспомнить и о различных платформах Web-разработки, о системах управления контентом и т. п. — все это придает полезной гибкости индустриальному программированию. Встроенная в них возможность независимого параллельного использования разнородных средств — это прототип нового стиля в информатике. Для универсальности не хватает свободной трансляции из одной платформы в другую, в дополнение к собственно заимствованиям.
Разумеется, подлинная универсальность должна распространяться на все области деятельности, включая унификацию на уровне железа. Больное место слишком современных операционных систем — отсутствие драйверов для какого-нибудь периферийного старья, вроде звуковой или видеокарты, выпущенной бог знает кем уже несуществующим много лет назад. Когда Linux пробивал себе дорогу к массовому пользователю в качестве конкурента MS Windows, его пропагандисты пытались привлечь новых адептов громкими заявлениями о невиданной доселе совместимости с любыми железками; к сожалению, все это осталось не более чем рекламной уткой. Есть люди (вроде меня), которым дела нет до всяческой новизны, им хватает того, чем они пользовались десятилетиями — и только бы это не отнимали молодые и агрессивные. Это касается и софта, и оборудования — и у меня, допустим, вполне могут оказаться веские основания использовать железо десятилетней давности вместе с новейшим, супернавороченным. По-хорошему, нужен единый банк электронных и программных адаптеров, с гибкой иерархической организацией, обеспечивающей сохранение нашего культурного наследия при всех поворотах будущей технологической моды.
Итого: развитие информатики следовало бы нацелить на создание универсальной интеграционной платформы, позволяющей добиться абсолютной гибкости индивидуальных компьютерных систем. В компьютерном мире все должно сочетаться со всем, чтобы убрать любые препятствия для творчества. Это идеал модульности — но к этому же сводится и самое общее определение сознания. Кто знает? — быть может, подобная универсальность будет означать развитие компьютеров до уровня выше обычного автоматического интеллекта, к чему-то вроде еще одной формы разума?
|