В каждой программе имеется по крайней мере одна ошибка.
Норфэ Зуаг-Корб
Электронные вычислительные машины служат для запоминания, обработки и выдачи информации. Словом "информация" в дальнейшем нам придется часто оперировать, поэтому стоит пояснить, что в данном случае под ним понимается и как измерять информацию.
Начнем с нашей обычной позиционной десятичной системы счисления. Число 152 означает 1×100 + 5×10 + 2×1. За основание системы счисления у нас выбрано число десять. В машинах по ряду причин такое основание оказалось неудобным: в них пользуются основанием 2 (двоичной системой). Роль десятки в такой системе счисления играет число 2, сотни - число 4, тысячи - число 8 и т. д. Скажем, вместо числа 310* для машины нужно записать 1×2+ 1×1 или короче 11а 610 будет выглядеть как 1×4+ 1×2+ 0×1 или 110г Теперь вам ясно, что никакой опечатки в названии этой главы нет: ведь десятичное число 9 в двоичной системе и есть 1001 (910 = 10012).
* (Здесь и далее нижний индекс указывает основание системы счисления.)
Узнавать основу системы счисления помогают традиция и здравый смысл. Так испытательный срок Шехеразады, несомненно, продолжался 1001-ю ночь - ведь арабы пользовались десятичной системой и, кроме того, там можно проследить за перечислением. Но если бы Шехеразада развлекала правителя ацтеков, то возникло бы затруднение: ацтеки использовали двадцатичную систему, и у них 100120 день - это 800110, почти серебряная свадьба!
Современная ЭЦВМ состоит из управляющего устройства, или контроллера, арифметического устройства, или процессора, устройств памяти и устройств ввода-вывода информации.
Многим ЭЦВМ представляется в виде очень большого арифмометра, но такое представление далеко от реальности. ЭЦВМ имеет ряд качественных отличий от арифмометра. Прежде всего, ей нужно заранее задать всю программу вычислений: медлительность человека вывела бы ее из терпения, если бы он решился командовать каждым ее действием. Программа (что и как делать) вместе с информацией, необходимой для расчетов,
поступает в память машины. Память машины по принципу своей работы мало отличается от обычного магнитофона - она тоже имеет магнитную основу. Намагничивание определенного элемента означает 1, а его отсутствие - 0.
Память машины бывает двух видов: оперативная, к которой машина может обратиться (достать число) за миллионные доли секунды, и внешняя, время обращения к которой гораздо больше. Внешняя память реализуется на магнитных дисках (время обращения-тысячные доли секунды) и на магнитных лентах. Последняя - самая вместительная, она может содержать громадное количество информации, но чтобы найти эту информацию, иногда нужно больше минуты (вспомните, как вы перематываете ленту своего магнитофона в поисках нужной песни). Удобнее всего для расчетов оперативная память, но ее трудно сделать слишком вместительной. Поэтому объем оперативной памяти, не имеющей механических деталей и в силу этого очень скоростной - один из главных показателей качества машины.
Наконец, арифметическое устройство, где над вызванной информацией проделываются арифметические и логические операции, вот оно-то по функциям действительно близко к арифмометру, хотя его возможности существенно шире. Об устройствах вывода информации мы поговорим ниже.
Машинный век короток: меньше трех десятилетий существуют ЭЦВМ, а теперь пошло уже третье поколение счетных машин. И хотя еще трудятся для наших строителей "старушки" "Минск-22" и "Минск-32", М-220, "Урал-14" и другие машины второго поколения, уже ясно, что главные задачи создания систем АСУС и АСПОС лягут на "плечи" третьего поколения машин. Поэтому дальше мы поведем речь именно о них.
Но вернемся к информации, без которой нам не двинуться дальше. Информацию можно мерить в битах, то есть в двоичных разрядах (0 или 1 -это один бит информации), но бит - слишком малая доля информации, машине он, что говорится, на один зуб. Поэтому сейчас предпочитают измерять информацию в байтах. Байт составляет 8 битов, или, как мы уже видели выше, примерно два десятичных разряда. Уже сам переход на счет информации в байтах, состоявшийся недавно, ознаменовал собой некоторую унификацию: до последнего времени у нас в стране информацию измеряли в "словах", а это было неудобно. Например, для машины "Минск-22" слово составляло меньше 5 байтов, а для М-220 - около 6. И вообще одна из главных трудностей, отнимавшая много усилий программистов, состояла в том, что ЭЦВМ до последнего времени говорили на разных языках. От программы, вынесенной в эпиграф этого дня, любая ЭЦВМ, кроме "Минск-22", с недоумением отвернулась бы, но и она, в свою очередь, не обучена "иностранным языкам".
Автоматизация программирования составляла до последнего времени очень трудную задачу. Дело в том, что писать программы на языке каждой ЭЦВМ, или, как говорят, в ее кодах,- это очень дорого, утомительно и долго. И для того чтобы делать это на профессиональном уровне, не тратя попусту много своих и машинных сил на вылавливание ошибок, нужна ежедневная практика. Короче, это под силу лишь квалифицированным программистам. Вообще ошибки - это бич программиста. В одном фантастическом романе описан захва? Земли гигантским мыслящим облаком. Верим, может быть. Знаменитый ученый нашел способ общаться с облаком. Тоже верим. Он пошел к ЭЦВМ, составил сложную программу и стал по ней считать. В это поверить нельзя: научный гений должен был начать поиски ошибок. Но большинство людей, связанных с машинами, занимается программированием лишь время от времени, когда возникает необходимость. Как же им помочь?
Для этого были созданы системы автоматизации программирования. Самая распространенная из них в СССР - язык "Алгол-60" (ALGOL-6O). Это сокращение английских слов Algorithmic Language - алгоритмический язык. В чем идея алгоритмических языков?
Ясно, что живой разговорный человеческий язык машины научатся понимать еще нескоро. Но не бросалось ли вам в глаза, насколько убог язык математических текстов: умножим, подставим, если, то, получаем и т.д.? Ученые и инженеры нередко становились предметом насмешек за то, что они используют лишь малую толику русского, английского, китайского и любого прочего языка. Действительно, словарь Н. В. Гоголя несколько обширнее словаря П. Л. Чебышева, а словарь М. Фарадея уступает словарю Ч. Диккенса. Так что обучиться понимать Гоголя и Диккенса гораздо труднее и человеку, и машине. Постойте! А разве М. Фарадея машина поймет? Оказывается, поймет.
После кропотливых исследований в английском языке отобрали минимум слов, без знания которых невозможно передать математический текст. Их оказалось так мало, что вскоре эти слова стали использовать и в других странах. И для этого вовсе не нужно знать английский язык: всего 20 с небольшим английских слов - это куда ближе к словарю людоедки Эллочки, чем к словарю Шекспира. Из этих 20 английских слов можно составлять многие осмысленные фразы. Например, прочитав фразу на АЛГОЛе с переводом на русский язык:
if длина > 1×2 then стоимость = 22×50, ELSE стоимость: = 18×70) (если длина > 1,2, тогда стоимость = 22×50, иначе стоимость = 18,70), вы сразу поймете, что в зависимости от размера какого-то предмета его стоимость предлагается приравнять 22,50 или 18,70 (рублей или долларов - это уже неважно). Поймете даже в том случае, если эпиграф к этому дню вам ничего не говорит. Но самое удивительное то, что и любая вычислительная машина тоже поймет этот текст: это кусок программы на языке
АЛГОЛ. Конечно, машине нужно помочь понять; это сделает транслятор (то есть переводчик), специальная программа, составленная опытными программистами, которая переведет алгольный текст на собственный язык машины.
Транслятор очень сложен, но разбираться в нем тому, кто использует АЛГОЛ, нужно не больше, чем телезрителю в устройстве телевизора: знай себе три ручки, и довольно - машина тебя поймет.
Автоматизация программирования сразу сделала этот процесс доступным широкому кругу специалистов. Конечно, не следует думать, что, заучив 20 английских слов, вы сможете написать любую программу: чтобы упростить функции транслятора, пришлось наложить на тексты АЛГОЛа ряд ограничений, у АЛГОЛа жесткий синтаксис, а в пунктуации - не дай бог ошибиться! Но пройдя небольшой курс обучения, освоить АЛГОЛ нетрудно, и, что самое главное, навыки в обращении с ним не исчезают так быстро, как навыки программирования в кодах машины.
Появление языка АЛГОЛ и чуточку более многословного языка ФОРТРАН (в нем "целых" 37 слов!) практически решило задачу автоматизации программирования инженерных задач. Хуже с задачами информационными и управленческими. Там нужно часто хранить много словесной информации и сортировать ее по более сложным признакам, чем признак "больше" - "меньше". Скажем, для каких-то целей (допустим, самых лучших) нужен список сотрудников женского пола рождения 1950-1955 годов, не имеющих высшего образования. Такого рода задачи непросто решать с помощью языка АЛГОЛ - он для этого не приспособлен. То есть можно, конечно, как и пить чай из ракетки для пинг-понга, но трудно, очень трудно. Это потребовало создания специального языка, который был назван КОБОЛом (Common Business Oriented Lartguage), что означает "Общий язык, предназначенный для деловой деятельности". Он нашел применение в автоматизированных системах управления. Информация на КОБОЛе формируется в специальные наборы- файлы, что облегчает ее поиск и обработку. Но обогащение возможностей языка неизбежно вылилось в увеличение словаря: даже сокращенные варианты КОБОЛа содержат свыше 100 английских слов и выражений. КОБОЛ в известном смысле не достиг своей цели из-за трудности его изучения и трансляции программ. И уж, конечно, он никогда не сравнится с АЛГОЛом и ФОРТРАНОМ при решении инженерных задач. В последнее время распространяется также язык PL/1, который многие считают наиболее перспективным.
Для облегчения общения с машиной каждая подсистема систем АСУС и АСПОС должна иметь диалект для обращения к машине. Этот диалект приближается к обычному инженерному языку в данной области. А в целом все эти диалекты образуют языки систем. Вот как примерно должен выглядеть текст программы расчета и конструирования балки на диалекте подсистемы "Конструкция" системы АСПОС: "Запроектировать балку. Материал - железобетон, сталь 25ХГ2С, марка бетона 400; оптимизировать высоту и преднапряжение..." и т. д. Кроме того, машине нужно задать цифровые исходные данные: размер пролета, нагрузки в их сочетаниях, сортамент стали. Эти данные могут быть заданы с помощью языка "Вход", уже разработанного в ЦНИПИАССе. Очевидно, использование такого языка сильно упростит ввод в машину исходных данных для расчета.
Теперь перейдем к самой трудной части работы - техническому обеспечению диалога человека с машиной. В машинах второго поколения для того, чтобы ввести в машину информацию, требовалось пробить отверстия в перфокартах или перфоленте, проверить результаты, ввести карты или ленту в устройство ввода, и только тогда машина узнавала, что вы ей хотите сказать. Образно выражаясь, это был диалог глухонемых, к тому же плохо знающих грамоту. А нельзя ли устроить более живое общение? Для этого служат дисплеи. Дисплей ЕС-7064 представляет собой телевизионный экран, на который можно выводить графическую, буквенную и цифровую информацию и обозревать ее. Так, на дисплее может быть показан эскиз интересовавшей нас выше железобетонной балки и необходимые пояснения к нему. Пользуясь пультом дисплея и его небольшой буферной памятью (8×1024 байт), оператор может изменить масштаб изображения, перенести его в другое место, стереть. Но и это не самое главное достоинство дисплея.
Допустим, имеющаяся в машине программа нашла оптимальные параметры конструкции и представила ее графически. Все отлично, кроме одного маленького обстоятельства, без чего, к сожалению, процесс проектирования никак не обходится: конструкция наползает на размещенное под ней оборудование - ведь всего на свете в программе не учтешь. Что же делать? Писать новую программу? Но где гарантия, что не встретится еще какое-нибудь непредвиденное обстоятельство? Вот здесь как раз и помогает режим диалога человека с машиной. Оператор берет с пульта дисплея световое перо (или световой карандаш - название этого предмета на русском языке еще не установилось) и поправляет прямо на экране злополучную линию. Световое перо напоминает одновременно шариковую ручку, от которой тянется шнур, и малоприятную деталь бормашины. Информация, внесенная прямо на экран этим прибором, может по желанию оператора попасть в память ЭЦВМ и послужить основой перерасчета. На экране дисплея можно набрасывать целые эскизы и заставлять машину производить над ними расчеты -это куда удобнее, чем бегать набивать карты.
Но вот, наконец, дисплей показал эскизы и численные результаты, которые удовлетворяют оператора, а также приглашенных к дисплею экспертов-проектировщиков. Как теперь превратить эту информацию в чертежи? Для этого следует воспользоваться одним из устройств вывода из машины*. Их несколько.
* (Были попытки просто фотографировать экран дисплея, но, к сожалению, при этом не удалось добиться хорошего качества изображения: требования к чертежам строги.)
До сих пор для извлечения информации из машины чаще всего пользовались АЦПУ (алфавитно-цифровым печатающим устройством). Это очень быстрая электрическая пищущая машинка, которая может выдавать буквы, цифры и несложные изображения на широкой бумажной ленте. Излюбленное развлечение программистов в часы досуга - печатать с помощью АЦПУ изображения собачек и вообще персонажей мультфильмов; дисплей это развлечение сильно упрощает. К сожалению, качественные чертежи, которые удовлетворяли бы всем ГОСТам, на АЦПУ не получишь: вы не станете придираться к изображению собачки, если заметите, что она состоит из набора букв алфавита. Иное дело чертеж: считается (быть может, и без веских оснований), что линии на чертежах должны быть непрерывными и четкими.
Для этого можно воспользоваться механическими чертежниками, которые называют плоттерами, или графическими устройствами. Эти устройства бывают двух типов - планшетного и рулонного. Примером планшетного устройства служит новое устройство ЕС-7053, созданное в нашей стране. На его планшете помещается чертежный лист обычного формата. Вдоль листа перемещается в двух направлениях пишущий орган, который может проводить линии трех цветов и трех разных толщин, писать цифры и буквы со скоростью до 50 мм/с. Чертежи, вышедшие из этого устройства, составили бы честь самому опытному чертежнику - они идеальны.
Если неудобно закладывать листы - к вашим услугам чертежное устройство рулонного типа ЕС-7053. Оно способно изобразить все то же самое на бумажной ленте шириной 878 мм с краевой перфорацией. Если 'в устройстве планшетного типа бумага все время остается неподвижной, то в рулонном линии получаются за счет совместного движения пишущего органа и бумаги. Скорость этого устройства несколько выше - до 150 мм/с.
Графическое устройство вывода можно было бы прямо подключать к ЭЦВМ, но это нерационально: в сравнении с современными ЭЦВМ эти устройства все-таки слишком тихоходны. На сложный чертеж такому устройству требуется целый час, и занимать весь этот час машину было бы расточительством. Поэтому чертежные устройства работают автономно, используя выданную машиной бумажную перфоленту.
Разумеется, из-за своей медлительности чертежные устройства непригодны для диалога; их можно применять лишь для окончательного вывода выверенной с помощью дисплеев информации.
Все эти устройства уже существуют, и вы можете пощупать выданные с их помощью чертежи. Однако праздновать полную победу рано. Прошли те времена, когда выданный машиной чертеж вызывал у зрителей такой восторг, что они лишались голоса. Сейчас восторг еще сохранился, но он уже не мешает задавать вопросы. А один из этих вопросов: "Сколько стоит такой чертеж?" - пока еще очень неприятен для создателей графических устройств. С коммерческой точки зрения пока еще "старый способ лучше", но прогресс в этой области внушает известный оптимизм. Каково бы ни было современное соотношение стоимости чертежей, выполненных вручную и с помощью машины, надо учесть, что первая стоимость упрямо возрастает, а вторая столь же уверенно падает. И где-то эти линии неизбежно должны пересечься.
У нас уже несколько раз промелькнуло буквосочетание ЕС, которое не мешало бы расшифровать. Но сначала немного истории. Как уже говорилось, в недавнее время много усилий поглощало "разноязычие" всех ЭЦВМ, даже отечественных. Для каждой из них требовался свой набор программ, так называемое "математическое обеспечение". А поскольку это обеспечение становилось все более сложным и дорогим и устройства разных машин не допускали стыковки, решили в странах - членах СЭВ перейти к единой системе (ЕС) машин третьего поколения.
Одна из таких машин, ЕС-1020, уже два года выпускается серийно. Она разработана совместно СССР и Народной Республикой Болгарией. Ее быстродействие сравнительно невелико- 20 000 операций в секунду, зато она значительно (раз в пять) превосходит своих предшественниц с тем же быстродействием оперативной памятью - 256 000 байт. Кроме того, у этой машины есть дисковая память. Диски вращаются со скоростью 2400 оборотов в минуту, и чтобы найти в них нужную информацию и перенести в процессор машины, требуется всего 1 /10 000 доля секунды. На каждом диске помещается целых 7,25 Мбайт информации (Мбайт = 1024×1024 байт).
Но уже существуют образцы и более совершенных машин третьего поколения. Например, ЕС-1050 способна делать 500 000 умножений в секунду (с целыми числами она работает еще быстрее*. Объем ее оперативной памяти - до 1 Мбайт, а ведь есть еще и сменные диски!
* (Показатель "количество операций в секунду" используется сейчас в основном неспециалистами. Специалисты предпочитают говорить о том, сколько сложений, умножений и делений делает машина в секунду, так как все эти действия проделываются с разными скоростями. Скорость вычислений зависит также от форм представления чисел в машине, которых мы здесь не касаемся.)
Другой особенностью машин третьего поколения является их способность работать сразу с несколькими каналами ввода и вывода информации и с несколькими пультами управления. Если вы остановитесь у устройства перфокарточного ввода современной ЭВМ, вас сначала поразит скорость, с которой оно поглощает карты с информацией. Толстая колода карт ежесекундно тает на глазах, а на каждый из них можно записать по двенадцать чисел. Однако эта скорость ошеломительна лишь в сравнении с человеческими возможностями: машине, в которой счет идет на микросекунды, кажется, что информация в нее поступает невообразимо медленно. Но ведь пока информация не введена, машина должна стоять! Прежняя машина, добавим мы, машина второго поколения. В машинах третьего поколения всякие "тихоходные" устройства не снижают ее общего ритма работы: машина пропускает сразу несколько программ и в описанных случаях не теряет времени даром. Причем ей можно задавать несколько режимов работы с разными программами в соответствии с их важностью и спецификой.
Мы еще не успели привыкнуть к возможностям ЭЦВМ третьего поколения, а конструкторы уже говорят о ЭЦВМ четвертого поколения, возможности которых сказочны. Скажем, использование голографической лазерной памяти позволит хранить 4 килобайта информации на пластиночке размером в 1 мм2 и обращаться к этой информации за 1 микросекунду. К сожалению, этот краткий очерк мы вынуждены ограничить третьим поколением машин.
А как будут при этом развиваться взаимоотношения строителей с математикой? Это непростой вопрос и здесь не все ладно. До сих пор строителей учили в вузах и техникумах в основном дифференциальному и интегральному исчислению, которые, мягко говоря, не слишком нужны ни на строительных площадках, ни за чертежными столами. Не встретил их читатель и на страницах этой книги. Сейчас положение исправляется: в передовых вузах и техникумах академические интегралы все больше вытесняются линейным программированием, теорией вероятностей, теорией графов, наконец, просто программированием. Словом, вместо прежнего изящного, но малополезного классического багажа строители приобретают полезные орудия. Скажем, сейчас, если вы придете наниматься на работу в трест Оргтехстрой и объявите, что умеете интегрировать, вам в ответ лишь мягко улыбнутся и посоветуют зайти через недельку. Но если вы скажете, что владеете языком КОБОЛ, вас уже не выпустят из отдела кадров. А самое обидное это то, что выучить КОБОЛ ничуть не труднее, чем научиться интегрировать, на это тоже требуется порядка 100 ч.
Короче говоря, после ошибок и шатаний мы уже поняли, что из запасников современной математики может пригодиться строителю, а что - лишь дань традиции. Но беда в том, что, роясь в этих запасниках, мы часто не находим там нужных вещей. Вернемся для примера к задаче оптимального производственного планирования. Там, если вы помните, фигурировали ограничения по ресурсам. Эти зависимости должны выполняться с невысокой точностью - слишком условны входящие в них нормативы. Записывать математический знак """ (приблизительно равно) научились уже давно, а вот как его использовать в расчетах, до сих пор неясно. До сих пор математика служит символом жестких и четких связей между объектами, ее часто приводят в пример. А между тем гордиться тут нечем. Гораздо полезнее для дела было бы, если бы математика умела выражать такие понятия, как "желательно", "по возможности", в большинстве случаев", не прибегая при этом к громоздким вероятностным характеристикам. Но этому она только учится, причем учится у человека. Учится гибкости его мышления, его умению вычленять главное, но не упускать при этом и важные детали, устанавливать порой мягкие, едва заметные связи между явлениями и учитывать их при принятии решений. Короче говоря, учится мыслить по-человечески. Один из таких разделов новой математики и называется - "искусственный разум".