Одним из главных событий, приуроченных к этому юбилею, станет выход в марте издания под названием "Beyond Calculation: The Next Fifty Years of Computing" (По ту сторону вычислений: следующие пятьдесят лет развития компьютеров). Редакторы Питер Деннинг и Роберт Меткалф предложили почти двум десяткам первопроходцев этой отрасли и просто компетентных аналитиков поделится своими размышлениями с читателем. В сборнике рассматриваются научный, социальный и экономический аспекты продолжающейся революции в области вычислительных средств. В ожидании его выхода еженедельник Computerworld на протяжении четырех номеров помещал в разделе "In Depth" эксклюзивные выдержки из книги "Beyond Calculation". На этой неделе автором материалов, представленных в разделе, станет Ричард У. Хэмминг.

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

С уверенностью можно сказать, что в компьютер будет устанавливаться (и в таком виде попадать к пользователю) то, что сейчас мы даже не относим к области "программирования". Но это не решит "проблему программирования".

В качестве аналогии созданию ПО я часто привожу процесс написания романа. В обоих случаях речь идет об облечении мыслей в слова. Можно ли научить тому, как создать шедевр? Шекспир и Джейн Остин вообще не посещали курсов писательского мастерства, а кто хоть что-нибудь слышал о большинстве людей, усердно корпевших над различными "литературными упражнениями". Точно так же дело обстоит и с курсами по программированию: они способны всего лишь сделать из плохого программиста специалиста рангом повыше. Одного опыта (хотя опыт, конечно, необходим) недостаточно.

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

По последним сведениям, на протяжении многих лет процесс программирования каждый год "совершенствуется" на 4,5%, а это означает, что за последние 50 лет писать программы стало в 10 раз проще (сравните эту цифру с ростом быстродействия компьютеров - за тот же период этот показатель увеличился более чем в миллион раз).

Таким образом, пока в нашем распоряжении не окажется языков, которые будут помогать нам в осмыслении поставленной задачи и обдумывании предполагаемого алгоритма ее решения, сколь-либо значительного облегчения процесса программирования не произойдет. Это, конечно, противоречит регулярным сообщениям в прессе о повышении быстродействия: если бы сокращение времени работы действительно имело место, мы, вероятно, получали бы уже готовые, работающие программы еще до того, как возникла проблема.

Вполне вероятно, что о ежегодном росте мы регулярно будем узнавать в течение последующих 50 лет, но при этом "проблема программирования" останется нерешенной, несмотря на сообщения о великом прорыве в программировании или изобретении какой-либо панацеи.

Программирование может стать проще благодаря подходу нейронных сетей - можно просто написать базовую программу, моделирующую нейронную сеть; выбрать структуру, представляющуюся подходящей, и предоставить машине находить пути решения проблемы; при этом необходимость самому составлять подробную программу отпадает. Сколько существует других способов избежать программирования в широких областях его применения? Возможно, подобные методы неизбежно ограничены рамками сравнительно узких областей.

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

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

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

В ходе технологического прогресса могут всего лишь еще больше усовершенствоваться компьютеры и снизиться цены; при этом существенно новые открытия, предсказать которые просто невозможно, могут за один день почти свести на нет прежние достижения.

Наиболее значительные достижения в этой области обусловлены внешними факторами. Транзисторы были придуманы телефонной компанией для повышения качества собственных услуг. Метод определения возраста ископаемых с помощью углеродного анализа и другие подобные ему открытия были сделаны не экспертами-археологами, а физиками.

Раз мы не можем даже предположить, с какой стороны ждать принципиально новых разработок, значит мы не знаем, где их искать. Действительно, есть ли основания полагать, что в следующие 50 лет не произойдет никаких крупных изменений в самом восприятии наших проблем компьютерной науки? А если они произойдут, то кто их совершит? Скорее всего, это будут не сегодняшние эксперты.

Пока не вполне ясно также, на основании чего общество делает выбор в пользу компьютеров. Воззрения "упертых" программистов не согласуются со вкусами приверженцев ПК, обещающих с их помощью решить все проблемы. Большинство энтузиастов не может осознать, что простое предоставление информации, об истинности или ложности которой судить трудно, не приносит большой пользы. И предложение большого количества неорганизованной и плохо подобранной информации - тоже не выход из положения. Длинный список возможных вариантов, из которых пользователь должен сделать выбор, часто вызывает только раздражение.

Я изо всех сил пытался не описывать желаемого варианта развития, но это мне, естественно, не слишком удалось. Думаю тем не менее, что подошел к основным вопросам ближе, чем большинство предсказателей, говоривших о будущем. Время покажет...


Ричард Хэмминг проработал в компании AT&T Bell Laboratories 30 лет и создал большое количество проектов. Его часто называют отцом алгоритма коррекции ошибок, а за работы по этой теме в 1968 году он был награжден призом ассоциации АСМ "Turing Award". В его честь названа медаль, присуждаемая институтом IEEE - "Hamming Medal". Сейчас он - независимый автор и адьюнкт-профессор военно-морской школы Naval Postgraduate School (Монтеррей, шт. Калифорния).

Микропроцессор ENIAC

Решив достойно отметить пятидесятую годовщину ENIAC"а (того самого, с которого исчисляется компьютерный век), группа дипломников Пенсильванского университета во главе с докторами Ван дер Шпигелем и Кеттерером сотворила микроэлектронную версию этого чуда 20 века. Использовав, естественно, всю мощь современной электронной промышленности и достижения КМОП-технологии.

Была поставлена цель как можно точнее воспроизвести первоначальную архитектуру ENIAC, воссоздав связи и блоки оригинала. Вакуумные электронные лампы - основной "думающий" элемент компьютера - к сожалению, пришлось заменить транзисторами. Механические коммутаторы, обслуживающие порты передачи, декодеры и память, тоже пришлось реализовать на электронной основе. Десятичная арифметика ENIAC, в пользу которой был сделан выбор 50 лет назад не по тому, что создатели не знали двоичной системы исчисления, но потому, что двоичная реализация требовала больше ламп, была воспроизведена.

Программирование первого компьютера осуществлялось посредством кабелей, соединяющих блоки между собой. Для микроэлектронной копии было решено использовать программируемые коммутаторы, управление которыми осуществляется от внешних источников,

например с помощью персонального компьютера, на экране которого можно определить, какой "кабель" куда подключить, чтобы добиться соответствующего эффекта. Загрузка данных также осуществляется посредством персонального компьютера. Реализована графическая оболочка, которая воспроизводит мнемонику панели управления оригинала. Оператор может осуществить полный набор священнодействий, характерных для процесса инициализации ENIAC пятьдесят лет назад, подготовить данные, произвести расчет, получить данные... На экране ПК.

Разработанный чип полностью реализует функциональные возможности пракомпьютера и имеет тот же самый набор модулей, но размещенных не в небольшом строении, а на кристалле размером 8х8 мм - 20 аккумуляторов (устройств для промежуточного хранения данных), устройства инициализации и выполнения циклов, высокоскоростное устройство умножения, высокоскоростное устройство деления, модуль извлечения квадратного корня и таблицу функций. Устройство выполнено по 0,8-микронной технологии и содержит четверть миллиона транзисторов (авторы ENIAC такого количества активных элементов и представить, наверное, не могли).