Расширяющаяся вселенная информатики
[1]
В. Е. Котов
Carnegie Mellon University, США
Ускоренное развитие вычислительной техники не имеет никаких пределов, кроме полного насыщения общества средствами хранения, передачи, обработки и воспроизведения информации.
А. П. Ершов «Предварительные соображения о лексиконе программирования»
Die Zukunft war fruher auch besser.
(В прошлом будущее было тоже лучше настоящего).
Курт Валентин (немецкий актер, 1860–1948)
Я часто задаю себе вопрос (и думаю, что не я один): если бы Андрей Петрович здравствовал сейчас, над чем бы он работал? как бы он работал? какое направление в сегодняшней информатике он считал бы наиболее актуальным и привлекательным для себя? что интересного впереди? Эти вопросы возникают прежде всего потому, что мощное, но степенное и плавное течение информатики 60-х—80-х годов на рубеже веков резко сменилось на бурный поток, стремительно разливающийся во всех (часто мало предсказуемых) направлениях. Мир информатики как бы взорвался и стал неудержимо и безгранично расширяться, появились совершенно новые, непредсказанные горизонты, начался пересмотр старых ценностей, границы информатики стали размываться, когда она вторглась в пределы других технологий (а последние проникли в информатику, обогащая и трансформируя ее). Профессор Деннис Цикритзис[2], известный своими популярными монографиями по информатике, одним названием своей статьи «Забыть прошлое, чтобы победить в будущем» [1] утверждает, что надо закрыть дверь в прошлое и начать все с чистого листа. Я не согласен с профессором Цикритзисом. Не надо забывать прошлое, надо, наоборот, хорошо помнить его, чтобы лучше понять, что есть сегодня действительно новое и что — хорошо забытое старое.
До недавнего времени принято было размечать прогресс в вычислительной технике и программировании поколениями — этакими зарубками, отмечающими ступени роста молодой, активно развивающейся индустрии. Зарубки были легко различимы, каждое новое поколение ЭВМ заметно разнилось от предыдущего архитектурой, производительностью и характером применения: Первое Поколение — вакуумные лампы и программирование прямо в коде; Второе Поколение — транзисторы и алгоритмические языки; Третье Поколение — интегральные схемы и операционные системы; и т. д. Автору довелось участвовать в исследовательском проекте, целью которого было создание отечественных машин и программного обеспечения Пятого Поколения. Это был наш ответ на японский вызов.
В начале 80-х годов японское правительство решило переломить установившуюся в стране (и успешную) практику копирования американских компьютеров и программ и заставить японских ученых и конструкторов внести свой вклад в развитие информатики. Самым творческим ее разделом в те времена законодатели мод от информатики считали Искусственный Интеллект, который в программировании появился в обличии языка Пролог и программирования в ограничениях (constraint programming). Поэтому идеологи проекта, не мудрствуя лукаво, объявили, что Пятое Поколение будет поколением машин Искусственного Интеллекта. Американцы сначала скептически отнеслись к идее инициировать свой проект Пятого Поколения, так как традиционно не доверяют правительственным инициативам в любой области, особенно в технике и бизнесе, считая такого сорта проекты нежизнеспособными в условиях антрепренерской, саморазвивающейся и саморегулируемой экономики (что и подтвердилось впоследствии). Но потом в США все-таки был организован консорциум, принять участие в котором могли все компьютерные компании, желающие истратить часть своих маркетинговых денег на то, чтобы пресса упоминала их как «идущих впереди». Японский проект и его дальние родственники, рождавшиеся с шумом и гамом как в США, так и в Европе, тихо скончались. Реальное Пятое Поколение — это персональные ЭВМ, рабочие станции, электронные таблицы (spreadsheets) и графический пользовательский интерфейс (GUI), полная АСУнизация предприятий всех уровней, сети ЭВМ (особенно, локальные) и на этом фоне — вымирающие динозавры информатики — суперЭВМ. Наконец, Шестым Поколением можно назвать все то, что мы имеем сейчас в области информационных технологий: WWW, мобильные компьютеры и почти полное слияние вычислительных систем, систем связи и мультимедиа.
Первые поколения сменяли предыдущие путем полной и принципиальной замены предшествующих технологий, как в элементной базе, так и в программировании. Последние же поколения вбирают в себя все, что наработано ранее (перерабатывая, естественно, применительно к новым технологиям), так что говорить о смене поколений уже не приходится. Информатика стала быстро расширяющимся миром все новых, часто довольно экзотических, на первый взгляд, продуктов, процессов, возможностей и потребностей. Она проникла практически во все современные индустрии, технологии и сферы жизни и стала в них катализатором революционных ускорений и перестроек; ее границы размываются (робототехника, биоинформатика, …), ее потенциал кажется неисчерпаемым. Так что говорить о поколениях уже не имеет смысла. Информатика стала неотъемлемой составляющей повседневной жизни, и часто смена поколений продуктов на информационном рынке происходит в течение месяцев. Об этом писал Андрей Петрович в 1985 году: «…ускоренное развитие вычислительной техники не имеет никаких пределов, кроме полного насыщения общества средствами хранения, передачи, обработки и воспроизведения информации …» [2]. Он не объяснил, почему нет пределов, но думаю, что он предвидел то огромное воздействие, которое вычислительная техника окажет на повышение производительности труда. Правильная экономика работает правильно. Как только внедрение информатики в США и других развитых странах достигло некоторого рубежа в темпах роста производительности, — шлюзы открылись и начала работать обратная положительная связь. Это произошло в США в начале 90-х годов и вызвало небывалый экономический подъем в этой стране, закончившийся, как и положено при рыночной экономике, спадом, болезненным, но не катастрофическим.
Этот процесс расширения естественно привлекает внимание к новым рубежам информатики, к ее «целинным землям», куда и устремляется сейчас новое поколение исследователей, разработчиков и предпринимателей. А алгоритмические языки программирования, трансляторы, операционные системы, центры коллективного пользования, схемы программ — все эти разделы информатики, в становление и развитие которых Андрей Петрович внес весомый вклад, — где они сейчас? остались позади? в архивных статьях и книгах по истории информатики? Нужны ли нынешним исследователям новых, неизведанных территорий информатики научные идеи и результаты того времени? И если да, то какие? Можно ли успешно использовать научную методологию школы А. П. Ершова сейчас, в ХХI веке, или она принадлежит своему времени и не воспроизводима в нынешних условиях?
На эти вопросы нет простого и универсального ответа. Я могу только рассуждать на эту тему, высказывать гипотезы, и то только со своих теперешних позиций, отстоящих и во времени, и в пространстве далеко от «эпохи отдела Ершова» в Вычислительном центре Сибирского отделения Академии наук СССР. И не буду говорить «за всю информатику», а только о том, что интересно мне и, как мне кажется, было бы интересно Андрею Петровичу.
Программирование. В настоящее время нет большого интереса и стимулов разрабатывать новые массовые языки программирования. Большинство трудящихся программистов чувствует себя вполне комфортно, используя языки С, С++, Visual Basic и Java. Интересно, что в статистике, приводимой А. П. в [2] и относящейся к началу 80-х годов, также доминируют всего четыре языка (ассемблеры, Фортран, Кобол, ПЛ/1), так что, по-видимому, мы вышли на плато в количестве массовых языков и «вавилонского столпотворения» в программировании не случилось и не предвидится.
Системное программное обеспечение становится невидимым миру, кроме тех случаев, когда до него добираются вирусы хакеров или проявляют себя скрытые ошибки. Но, как заметил Бьярне Строуструп[3], автор С++, «наша цивилизация зиждется на софтвере». Одновременно прикладные программисты уходят от языков программирования к интерфейсам прикладных программ — API (Application Program Interface) и языкам разметки (mark-up languages). XML — это вариант практического воплощения идеи лексикона программирования, предложенного Ершовым в [2] и «деловой прозы» из [3]. (Напомню, что «Лексикон программирования — это лингвистическая система с фразовой структурой, содержащая в себе формальную нотацию для выражения всех общезначимых конструкций, употребляемых при формулировании условий задачи, при синтезе и преобразовании программ» [2]. «Деловая проза… — это языковый носитель производственных отношений человека» [3].) Фактически это переход от программирования к общению с компьютером, а еще вернее — с информационно-вычислительной средой, доступной пользователю, поскольку он сейчас все больше использует свой персональный компьютер или сотовый телефон в качестве портала для доступа к информации, прикладным программам, к сервисам, находящимся в разных местах глобальных компьютерных сетей, в местах, часто этому пользователю неизвестных. Поэтому я сейчас предложил бы Андрею Петровичу переименовать «лексикон программирования» в «компьютерный лексикон», имея в виду, что ныне миллионы пользователей свободно общаются с компьютерами, не зная практически ничего о программировании. Массовый пользователь не программирует, а обращается к компьютерной сети за некоторым сервисом, ею предоставляемым (информационный запрос, бронирование билетов и гостиниц, деловые сделки, покупка товаров, и т. п.) и делает это не на языке программирования, а практически на языке предметной области. Перечитывая статью «Программирование — вторая грамотность» [4], я воспринимаю ее название как чисто метафорическое. Что же касается содержания статьи, то оно остается абсолютно актуальным, если заменить «…программировать будет уметь каждый. Это я и называю второй грамотностью» на «…общаться с компьютером будет уметь каждый. Это я и называю второй грамотностью». Андрей Петрович фактически писал о компьютерной грамотности, а не об умении писать код.
Кстати, школьная информатика, в том виде, как она начиналась в Новосибирске, экстраполировала тогдашний уровень и характер компьютеризации на будущее: число компьютеров будет бурно расти; пользователь должен был быть программистом; количество программистов должно расти почти экспоненциально; поэтому надо было заранее и массово готовить программистов со школьной скамьи. Судя по программе телеконференции «Информационные и коммуникационные технологии в общеобразовательной школе» (http://www.websib.ru/ites/2003/), тенденция изучать архитектуру ЭВМ и основы программирования сохранилась в российских школах. В то же время обязательного курса «Программирование» нет в американских школьных программах, как нет и курса вождения автомобиля, хотя каждый американский школьник умеет работать с компьютером (часто много лучше, чем его родители) и все старшеклассники водят автомобили. Это объясняется просто: там, где компьютеры стали таким же необходимым и массовым атрибутом жизни, как и автомобиль, и компьютеры, и программы для них производятся и используются так же, как и другие массовые продукты, — в виде, полностью готовом к эффективному применению. И обучение работе с компьютером происходит, в основном, не в классе, а дома, в общении с самим компьютером, или на улице, в общении со сверстниками.
Технология программирования. Статьи Андрея Петровича по технологии программирования, например [5], были тесно увязаны с задачами и возможностями того времени, когда они писались. Технология программирования тогда только создавалась и развивалась она не быстро, так как отбор полезных на практике концепций, механизмов и процессов производился самой практикой. Сейчас ясно, что общее направление и главные компоненты развития технологии были обозначены абсолютно правильно. Сменились только конкретные формулировки и приоритеты.
Редко какие полезные программные продукты изготовляются сейчас в одиночку или централизованно управляемыми, стабильными коллективами и в полностью завершенном виде. Программные системы рождаются в базовых конфигурациях, развиваются (если преждевременно не умирают), вбирают в себя все новые компоненты, наращивают свои возможности, стареют, омолаживаются, в общем, живут и эволюционируют. Объектно-ориентированное программирование, о необходимости которого постоянно говорили лидеры программирования (в том числе Андрей Петрович) начиная с начала 60-х годов (Симула), совершилось. Так что все больше программ не пишется с нуля, а собирается из готовых программных модулей и целых систем (сборочное программирование, как оно называлось ранее). Я прикинул, что в одном из моих совместных с НАСА проектов в Carnegie Mellon University мы разработали небольшим коллективом и в короткие сроки довольно большую систему, в которой наш код составляет всего проценты от общего объема кода, так как большинство ее компонентов, особенно вспомогательного, поддерживающего (но абсолютно необходимого для пользователя) характера, составляют готовые программные продукты, чаще всего распространяемые бесплатно.
Обстановки поддержки разработок прикладных систем для конечных пользователей позволяют специалистам в прикладных областях (непрограммистам) быстро создавать эффективные сложнейшие системы именно потому, что они напрямую делаются прикладными специалистами без потери информации и времени на общение с программистами-посредниками. (Интересный новый термин — естественные языки программирования. Это — не общение с ЭВМ на естественных языках, а «программирование», а более точно, — конструирование и отладка на лексиконе проблемной области.)
Сейчас технология программирования фокусируется не столько на повышении производительности программистов, сколько на надежности программ. Как уже отмечалось выше, современное общество зиждется на софтвере, который стал критическим компонентом на производстве, в коммерции, на транспорте, в космосе, в военном деле, повсюду. Крупные аварии в космосе, на транспорте и на автоматизированных производствах, вызванные ошибками в программах, привлекли внимание к этой проблеме, но настоящее дело начинается тогда, когда финансовые потери в массовом бизнесе достигают таких размеров, что их невозможно игнорировать. И это время пришло. Недавно автомобильный гигант «Фольксваген» объявил, что впервые большинство неполадок в новых марках их автомобилей произошло из-за ошибок во встроенных программах. Это сигнал к атаке на разгильдяйство в программировании. Формальные методы анализа и улучшения надежности программ не поспевают за их растущей сложностью, поэтому все больше надежд возлагается на эмпирические методы (хотя они и не вызывают доверия у части программистской публики, которая считает их почти черной магией). Я думаю, что комбинация формальных методов и эмпирик, реализуемых на тестовых стендах (как это делается в традиционной инженерии), позволяет всесторонне анализировать, улучшать и сертифицировать программы на всех этапах разработки и может быть подходящим решением.
Технология программирования ХХI века еще не стала по-настоящему инженерной технологией, как технология машиностроения или строительства, но она довольно быстро формируется, причем больше не в кабинетах ученых, а в софтверной промышленности, где отставание в технологии напрямую ведет к отставанию на рынке.
Теория программирования. Мне трудно сказать что-либо о современном состоянии теории программирования и, тем более, о перспективах ее развития. Единого и достаточно солидного потока работ я не наблюдаю, особенно в США. Когда-то она развивалась за счет внутренних стимулов, которые создавались путем выдвижения гипотез о том, что те или иные понятия, факты, алгоритмы будут полезны для понимания и усовершенствования программ и программирования. Но программирование сильно изменилось (о чем уже говорилось выше). Доказательное программирование по Дейкстре[4] — это слишком утонченные манеры для солдат армии программирования, работающих на программных конвейерах в Oracle и Microsoft.
Сравнительно монолитный континент теоретической информатики стал архипелагом: некоторые исследования ушли под воду, другие трансформировались в новые постановки, появились и совершенно новые задачи. Теория схем программ ушла, так как она не способна отразить всего многообразия и сложности современного программирования как на системном уровне, так и в приложениях. Формальная верификация трансформировалась: она фокусируется на тех задачах, где решения практически достижимы и наиболее важны (например, верификация протоколов), и на совершенствовании алгоритмов. Проверка моделей (model checking) — сейчас наиболее популярный подход к верификации в силу его простоты и ясности, а прежде всего потому, что он зарекомендовал себя неплохо в проектировании микросхем. Но все новые успехи в верификации быстро нивелируются очередным витком постоянно растущей сложности программ и систем. Среди новых и весьма актуальных задач теории программирования следует отметить все, что связано с безопасностью (security) программ.
Новое в информатике. Андрей Петрович как мало кто другой был нацелен на то, что в Америке называют The Next Big Thing (Следующий Революционный Скачок) в информатике. Он пытался предугадать, где пройдет следующая большая битва и где мы должны заранее подготовить позиции для атаки. Достаточно вспомнить, с какой энергией и воодушевлением он работал над пионерными для своего времени начинаниями: внедрение алгоритмических языков (система АЛЬФА была мостом из рукоделия кодирования в массовое программирование); создание одной из первых в стране систем разделения времени (АИСТ); программное обеспечение для первых советских персональных ЭВМ.
Последняя действительно большая вещь, влияние которой на все аспекты нашей жизни мы уже ощущаем, но глубину которого еще предстоит осмыслить, — это Интернет. В одном из недавних опросов молодежи в США был задан вопрос: «Потерю какой одной-единственной возможности Вы ощущали бы более всего?» Ответ большинства был: «Доступ к Интернету». Интернет — это фундамент, на котором еще только начинается строительство будущей информатики. Если попытаться охарактеризовать это будущую информатику одним словом, не вдаваясь в объяснения, я бы выбрал — вездесущая.
Какова же «дорожная карта» на пути к вездесущей информатике и какой будет следующая большая станция на этой карте? Единого мнения нет. Академические круги смотрят вдаль и вверх, поверх голов непосвященных, и делают упор на появление и быстрое внедрение революционных и экзотических концепций и технологий. Среди них — биоинформатика (та ее часть, что пытается строить сложные компьютерные системы, используя природу и биологию как источник вдохновения и подсказку) [6], нанотехнология [7], квантовые компьютеры [8] и семантический Интернет [9].
Прагматики и венчурные инвесторы смотрят ближе. Они ставят на сервис-ориентированные архитектуры [10], (автоматическое) управление бизнес-процессами, сплошную радиофикацию информатики, включая радиочастотную идентификацию (RFID) [11], и интегральные, глобальные широкополосные мультимедиа, которые заменят и книги, и телевидение, и кинотеатры, и компакт-диски, и DVD, вместе взятые.
Я думаю, что первые чересчур радикальны, а вторые — чересчур консервативны.
Сервис-ориентированные архитектуры уже становятся основой больших, (само)развивающихся систем, и свидетельство тому — сервлеты, введенные в Java-окружение [12]. RFID технически готовы к массовому внедрению, и проблема состоит в организационной неготовности (включая законодательство). Что касается мультимедиа, то «процесс пошел» (включая законодательство) и не видно каких-либо существенных барьеров на его пути.
Я считаю, что следующая большая вещь — это сплошная компьютеризация всех вещей, изделий и процессов и объединение их всех через встроенные процессоры, кoнтроллеры и серверы разных уровней в глобальные системы систем [13] по принципам, которые отрабатываются сейчас в упоминавшихся выше RFID, многоагентных (multi-agent) распределенных системах [14], робототехнике (включая коллективы автономных взаимодействующих роботов и смешанные команды — люди/роботы), сенсорных сетях [15] и в проектах типа Smart Dust в университете Беркли [16], в котором большое число миниатюрных интеллектуальных датчиков-роботов взаимодействуют друг с другом по радио, решая задачи мониторинга и управления сложными процессами в реальном времени. Все это, плюс непрерывно совершенствующаяся электроника и связь, плюс многое другое, над чем работают сейчас в университетских и промышленных лабораториях (всего не перечислишь), сплетается в вездесущую информатику уже недалекого будущего.
Нам, возможно, повезло жить в наиболее интересное в истории науки и техники время и работать в наиболее интересной области знаний, решать интересные задачи и общаться с интереснейшими людьми. Впереди — еще более интересные времена, и мне хочется пожелать всем нам той энергии, любознательности и мудрости, которые отличали Андрея Петровича Ершова, чтобы мы смогли успешно сделать то, чего он уже не сможет сделать.
Список литературы
- Tsichritzis D. Forget the Past to Win the Future// Communications of the
ACM. — 2001. — Vol. 44, N 3. — P. 100—101. - Ершов А. П. Предварительные соображения о лексиконе программирования// Избранные труды. — Новосибирск, 1994. — С. 395—406.
- Ершов А. П. К методологии построения диалоговых систем: Феномен деловой прозы// Избранные труды. — Новосибирск, 1994. — С. 314—330.
- Ершов А. П. Программирование — вторая грамотность// Избранные труды. — Новосибирск, 1994. — С. 32—40.
- Ершов А. П. Технология разработки систем программирования// Избранные труды. — Новосибирск, 1994. — С. 230—260.
- Bergeron B. Bioinformatics Computing. — Prentice Hall PTR, 2002. — 439 p.
- Ratner M. A., Ratner D. Nanotechnology: A Gentle Introduction to the Next Big Idea. — Prentice Hall PTR, 2002. — 208 p.
- Nielsen M. A., Chuang I. L. Quantum Computation and Quantum Information. — Cambridge University Press, 2000. — 676 p.
- Daconta M. C., Obrst L. J., Smith K. T. The Semantic Web: A Guide to the Future of XML, Web Services, and Knowledge Management. — Wiley Computer Publishing, 2003. — 312 p.
- Graupner S., Kotov V., Andrzejak A., Trinks H. Service-Centric Globally Distributed Computing// Special issue on Grid Computing of IEEE Internet Computing. — 2003. — July/August. — P. 36—43.
- Finkenzeller K. RFID Handbook: Fundamentals and Applications in Contactless Smart Cards and Identification. — John Wiley & Sons, 2003. — 446 p.
- Perry B. W. Java Servlet & JSP Cookbook — O'Reilly, 2003. — 704 p.
- Kotov V. Systems of Systems as Communicating Structures// Object-Oriented Technology and Computing Systems Re-Engineering/ Ed. by Zedan H., Cau A. — Horwood Publishing, Ltd., 1997. — P. 141—154.
- Ferber J. Multi-Agent Systems: An Introduction to Distributed Artificial Intelligence. — Addison-Wesley Professional, 1999. — 528 p.
- Raghavendra C. S., Sivalingam K. M., Znati T. F. Wireless Sensor Networks. — Kluwer Academic Publishers, 2004. — 342 p.
- Smart Dust: Mighty motes for medicine, manufacturing, the military and more. — ComputerWorld, March, 2003.
Примечания
[1] © В. Е. Котов, 2005 Статья написана специально для настоящего сборника.
[2] Деннис Цикритзис (р. 1943) — профессор, сотрудник Исследовательского центра информационных технологий в Германии. Упоминаемая статья опубликована на русском языке в журнале «Открытые системы», № 12, 2001.
[3] Бьярне Строуструп (р. 1950) — известный программист и ученый, создатель языка программирования C++ и автор книг «Язык программирования С++» и «Дизайн и эволюция C++». Возглавляет отдел исследований в области крупномасштабного программирования в компании AT&T.
[4] Эдсгер Дейкстра (1930—2002) — программист, один из основоположников современной вычислительной науки, член Королевской академии наук Нидерландов, профессор Эйндховенского технического университета, научный сотрудник корпорации Burroughs.
Из сборника «Андрей Петрович Ершов — ученый и человек». Новосибирск, 2006 г.
Перепечатываются с разрешения редакции.