Инструменты пользователя

Инструменты сайта


igor:istoria

Содержание

Нетрадиционный взгляд на историю вычислительной техники

Почему нетрадиционный?
Во-первых, обычно в книгах по истории вычислительной техники рассматриваются только собственно инженерные решения (в основном «железные», реже программные), а я в этой статье рассматриваю их в связке, во-первых, с уровнем развития других отраслей техники в соответствующее время, во-вторых, с уровнем развития научных теорий (поскольку никакое техническое устройство не может появиться раньше той науки, на основании которой оно строится), и в-третьих, с вопросами применения компьютеров и программ в практической человеческой деятельности, а применение - в связке с экономическими и политическими реалиями соответствующей эпохи.
Во-вторых, в книгах вся история делится по поколениям компьютеров соответственно элементной базе, на которой компьютеры строились: первое поколение - ламповое, второе - транзисторное и третье - микроэлектронное. Это неправильно с самого начала, поскольку ламповые машины уже были не первым поколением. Но в этой статье я намерен показать, что, помимо развития элементной базы, в нашей отрасли имели место и другие изменения, как революционные, так и эволюционные, зачастую гораздо более интересные, чем изменения в элементной базе. Изучение этих изменений подтолкнуло меня к делению истории на эпохи, аналогичные тем, которые имели место в общечеловеческой истории.
Эта статья первоначально была задумана для школьников, но, написав половину, я понял, что это не мой репертуар, и решил перепрофилировать статью в серьезное научное исследование. Если она еще не стала таковой сейчас, то может быть станет в будущем. Но история - это нечто большее чем просто воспоминания о тех годах, когда солнышко было ярче и трава зеленее. История мне видится прежде всего как анализ причинно-следственных связей между событиями. Если вам это кажется неинтересным, ваше право на этом остановиться и дальше не читать, а я продолжу.

До середины ХХ века - первобытная эпоха

Когда появился первый компьютер?
На этот вопрос нет однозначного ответа. Во-первых, чем глубже интересуешься техникой, тем больше ощущаешь, что мы плохо знаем даже историю 30-40-летней давности, не говоря уж про более давние времена. Во-вторых, «первый компьютер» не возник на пустом месте - он вырос из каких-то более старых устройств. И в-третьих, мы не определились твердо, что считать компьютером, а что нет.
Начнем с того, что всевозможные вычислительные устройства типа счетов с нанизанными на проволоку костяшками были известны с глубокой древности, но компьютерами они не могут называться даже с очень большой натяжкой.
Леонардо да Винчи около 1500 года предложил счетную машинку с колесами. В последующие века было создано множество моделей машин, которые содержали колеса с нанесенными на них цифрами и по сути были потомками машинки Леонардо да Винчи. В XVII веке немец В. Шиккард, француз Б. Паскаль, голландец Г. Лейбниц предложили свои образцы механических калькуляторов, способных выполнять арифметические действия с многоразрядными числами.
Сейчас я хочу подвести читателя к мысли, которая будет лейтмотивом всей этой статьи. Эта мысль кажется очевидной для экономически грамотного человека, но раньше ни в каких книгах и статьях по вычислительной технике мне не встречалась. Мысль такая: вычислительная техника не живет в каком-то своем, отдельном, замкнутом мирке - она существует в мире, населенном людьми. А людям свойственно совершать поступки, руководствуясь не хочуками-нехочуками, а коммерческим интересом. В истории человечества новая техника появлялась много раз, и каждый раз она появлялась там и тогда, где и когда совпадали два условия: у людей накапливался для этой техники значительный объем работы, и за эту работу они были готовы платить. Так в XIX веке пароходы и железные дороги появились потому, что лошади больше не справлялись с возросшим объемом торговых грузоперевозок. А в XX веке автомобили и самолеты появились потому, что уже пароходы и железные дороги не справлялись… Но мы сейчас говорим о XVII веке, когда люди ездили на лошадях, дрались на шпагах, мололи хлеб на водяных мельницах, а по морю ходили под парусами. 90% населения голубого шарика были совершенно неграмотны, стало быть считать не умели, но жили без этого спокойно и ни в какой вычислительной технике не ощущали нужды. И замысловатые машинки с множеством прецизионных металлических деталей смотрелись как курьезы и могли заинтересовать только таких же чудаков, как и их создатели. Мы увидим, что и позже уровень развития вычислительной техники и ее распространенность на планете прямо коррелируются с уровнем грамотности населения.
Компьютерный палеолит - эпоха, когда никакие вычислительные устройства не имели перспектив ни промышленного производства, ни промышленного применения. Эта эпоха продолжалась до 1820 г., пока Т. де Кальмар во Франции не наладил промышленный выпуск колесных вычислительных машин, получивших название арифмометров. Основной областью применения арифмометров до самого окончания их выпуска была и осталась бухгалтерия. Позже арифмометры стали строиться и в других странах. В нашей стране новейшая модель «Феликс» (с множеством модификаций) производилась миллионными тиражами с 1929 по 1978 гг на заводах в Курске и Пензе.
А вот любопытный экспонат петербургского Музея связи - счетно-суммирующая машина СДУ-138, датируемая серединой XX века. По большому счету, тот же арифмометр:
istoria-sdu138.jpg
Подобные машины (с возможностью вывода результатов на печать) строились во многих странах. Их изготовлением, кстати, занимались в том числе и знаменитые оружейные фирмы, например «Вальтер» и «Ремингтон».
Среди арифмометров были немногочисленные «умные» образцы, но большинство было попроще: они могли выполнять только сложение и вычитание.
В XVII веке была изобретена логарифмическая линейка - прибор, позволявший выполнять поначалу только умножение и деление, а чуть позже «научившийся» и многим другим действиям. У меня хранится логарифмическая линейка, на которой еще отец считал студенческие курсовики, и я ею даже изредка пользуюсь. Это обычная прямая линейка, а у отца была еще круглая, похожая на карманные часы - довольно редкий экземпляр даже для своего времени, но она у нас не сохранилась.
Логарифмическая линейка подкупает простотой устройства, карманной переносимостью и мгновенной готовностью к действию. Это прибор универсальный, но на этом же принципе позже были созданы специализированные приборы. На следующем фото - экспонат музея «Золотые ворота» во Владимире - авиационная штурманская линейка времен Великой Отечественной войны:
istoria-avia-sturm-linejka.jpg
В 1846 г. петербургский учитель музыки Куммер изобрел счислитель, названный впоследствии по фамилии автора. Счислитель Куммера представлял собой плоскую коробку величиной со школьный пенал, внутри которой имелись подвижные планки с нанесенными на них цифрами. В какой-то мере счислитель Куммера был родственником арифмометров, отличаясь от них тем, что вместо колес в нем были прямые планки. Такие приборы выпускались до второй половины XX века.
Арифмометр, как и счетные линейки, как и более современная машина - электронный калькулятор (изобретенный в 1971 г.), может производить одиночные арифметические действия по команде человека. Чтобы устройство могло претендовать на название «компьютер», оно должно обладать способностью автоматически выполнять последовательность действий (арифметических или иных), обеспечивающую решение некоторой задачи: одной (специализированный компьютер) или многих (универсальный компьютер).
В 80-е годы XIX века американец Г. Холлерит (в старых книгах может встретиться написание фамилии Голлерит) изобрел табулятор. По большому счету это шкаф с множеством счетчиков (первоначально 40, у следующих образцов могло быть по-разному), каждый из которых может увеличивать свое значение на единицу при замыкании электрической цепи. Носителем информации для табулятора служили картонные перфокарты наподобие тех, которые раньше использовались в жаккардовых ткацких станках. Перфокарта была разделена на позиции (числом таким же, как число счетчиков в табуляторе), и в каждой позиции можно было пробить отверстие. Когда перфокарта вводилась в табулятор, каждый из его счетчиков либо сохранял прежнее значение, либо плюсовал единицу, если соответствующее отверстие пробито.
Для чего была нужна такая машина? Табулятор был впервые применен в 1890-м году для обработки результатов переписи населения США. Сведения о каждом жителе страны записывались на перфокарту путем пробивки отверстий в нужных позициях перфокарты. Например для сведений об образовании могли отвести 4 позиции: «неграмотный», «начальное», «среднее» или «высшее». По завершении переписи все перфокарты были пропущены через табулятор, и каждый из счетчиков показал количество перфокарт, в которых имелось отверстие в соответствующей позиции, т. е. можно было увидеть прямо в цифрах, сколько в стране людей неграмотных, сколько с начальным образованием и т. д. В последующие десятилетия табулятор был усовершенствован, «научился» новым действиям. Подобные устройства выпускались до середины XX века, а в 1986 году на студенческой практике мне довелось видеть немецкий трофейный табулятор постройки, кажется, 1937 года: он стоял рядом с ЭВМ «Минск-32» и находился в повседневной эксплуатации!
Именно табуляторы были первой продукцией знаменитой американской фирмы IBM (International Business Machines, основана в 1911 г. как CTR, переименована в IBM в 1924 г.). Это были громоздкие, тяжелые (почти в тонну весом) агрегаты из нескольких тысяч деталей. При работе они издавали шум, напоминающий пулеметную стрельбу.
Табулятор представляет собой просто набор счетчиков, хотя и собранных в общем корпусе, но действующих по отдельности и выполняющих одну простейшую операцию: увеличение на 1. Компьютером такая машина считаться не может.
Вам, вероятно, знакомо слово тотализатор? В представлении советского/российского человека, читавшего романы английского писателя Дика Френсиса, это слово прочно ассоциируется с преступными играми на ипподроме. С играми, ради которых людей порой убивают… Но давайте попробуем разобраться беспристрастно, что представляет собой тотализатор с чисто технической точки зрения. А представляет он не что иное как машину, выполняющую операцию тотализации, т. е. подведения постатейных подытогов. Это гибрид табулятора и арифмометра, или несколько арифмометров в одном: каждый из них, кроме одного, суммирует вводимые в него числа, а один счетчик - последний - суммирует все, что введено в прибор. То есть мы для множества чисел (ставок разных игроков на разных лошадей) подсчитываем постатейные подытоги (ставку на каждую лошадь) и общий итог. Когда все ставки приняты, владелец тотализатора сопоставляет полученные итоги и вычисляет процент выигрыша, приходящийся на каждую ставку. Машина подобного типа существовала и вне ипподрома, называлась она счетно-аналитической машиной и использовалась в бухгалтерии для решения задачи аналитического учета (то, что у бухгалтеров называется аналитическим учетом, как раз типичная задача тотализации). В СССР первые такие машины (импортные) появились в 1925 г. А десятью годами позже в Москве был открыт Первый государственный завод счетно-аналитических машин. На нем с 1939 г. под маркой «Т-4» выпускались сальдирующие табуляторы конструкции В. Н. Рязанкина, способные не только складывать, но и вычитать (термины «табулятор» и «счетно-аналитическая машина» тогда уже стали практически синонимами). И еще один родственник табулятора и тотализатора - механический кассовый аппарат, предложенный в 1875 г. Такой аппарат, как на следующем фото слева (КИМ-3-СП), можно было увидеть в любом магазине на протяжении большей части XX века, а теперь - только в Музее связи. Правда, этот аппарат более поздний (1978 г.), но конструктивно он мало отличается от аппаратов конца XIX - начала XX в. Справа - кассовый аппарат «Онега-III» (1969 г.), предназначенный для использования на почте.
istoria-kassy.jpg
В нашей стране подобные кассовые аппараты использовались примерно до 90-х годов ХХ века, пока не были заменены электронными.
Табуляторы и арифмометры представляют собой цифровые устройства: каждая величина («переменная»), используемая при вычислении, имеет конечный ряд допустимых значений и не может принимать значения в промежутках между соседними значениями из ряда. В отличие от них логарифмическая линейка - устройство аналоговое: хотя на ней и нанесены деления, каждая переменная может принимать непрерывное множество значений от нуля до максимума.
Принципиально важно: любое цифровое устройство со времен Паскаля и Лейбница до наших дней и до неопределенно далекого будущего выполняет операции над большими числами ПОРАЗРЯДНО. Это обеспечивает абсолютно точный результат сложения, вычитания и умножения, а при всех других математических операциях позволяет получить результат с любым наперед заданным количеством верных цифр. Аналоговое устройство всегда дает результат с погрешностью.
Табулятор, арифмометр, тотализатор и кассовый аппарат - машины близкородственные, и для них вводится собирательный термин: протокомпьютеры (предки компьютеров). Эти машины выполняли лишь простейшие однообразные арифметические действия. Протокомпьютер может сложить хоть тысячу, хоть миллион показателей миллиардной величины каждый и не ошибиться при этом ни на копейку. Совсем даже неплохо, если вспомнить, какой процент населения в те годы имел начальное образование, допустим, в тех же США или в Российской империи! Но задачи эти соответствовали начальным классам школы. Задачи хотя бы на уровне 6-7 классов школы - со степенями и корнями, не говоря уж про логарифмы и тригонометрию, этим машинам были категорически не по зубам. Так что при научных и инженерных расчетах протокомпьютеры были слабым подспорьем, и использовались там, где их способности были достаточны: в статистике, бухгалтерии и в смежных отраслях. Хотя табуляторы и механические кассовые аппараты и дожили до конца средних веков (до 80-х годов XX века), эпоха протокомпьютеров продолжалась до 1910-х годов - для этой эпохи предлагается термин компьютерный мезолит.
В 20-е-50-е годы XIX века над созданием счетных машин работал английский математик Ч. Бэббидж. Он поставил амбициозную задачу построить «аналитическую машину» (не путать с машинами Холлерита и Рязанкина), которая могла бы выполнять арифметические действия по программе. Он только еще приступил к изготовлению деталей для машины, а его помощница (и вероятно единственная единомышленница) Ада Лавлейс уже составила для этой машины первую программу. Рассказ об этой программе кочует из книги в книгу, но… саму эту программу никто не видел, на каком языке она была написана - никто не знает (зато все знают, что Бэббидж никаких языков не создавал), работоспособность этой программы ничем не доказана…
Машина Бэббиджа явно опережала свое время. В эпоху, когда еще в помине не было никакой электротехники, механическая вычислительная машина должна была стать сложнейшим техническим изделием из всех, какие только могло вообразить человечество! На порядок сложнее любых пароходов и железных дорог! Построить такое чудо своими силами нечего было и думать. Время от времени Бэббиджу удавалось выбить какое-то финансирование из бюджета, но его вечно не хватало. Да и не очень-то охотно ему давали, зная его непостоянный характер. Он занимался разными науками, начинал и бросал, и опять начинал и опять бросал… Прожил долгую, полную событий жизнь и так и не увидел своего детища в работе. Непохоже, чтобы его это сильно угнетало. Он предвидел, что его наработки пригодятся лет через 50. В действительности же его научное наследие оказалось по-настоящему востребовано только на рубеже 30-х-40-х годов XX века: в 1938-1941 годах немец К. Цузе построил машины Z1, Z2 и Z3, используя теоретические наработки Бэббиджа и Буля (о котором чуть ниже), но на новой конструктивно-технологической базе с использованием электромагнитных реле. Если уж ставить вопрос о первом компьютере, то машины Цузе как раз и претендуют на это звание. Несколькими годами позже в США построен компьютер «Марк I», при проектировании которого также использовано наследие Бэббиджа.
Еще один персонаж, которого мы не должны забыть, - английский математик Джордж Буль. Никаких вычислительных устройств он не строил - он был чистым теоретиком. В 1847-1848 годах он опубликовал несколько научных трудов по логике, на основании которых сформировалось учение, названное в его честь: булева алгебра. В свое время булева алгебра осталась недооцененной, но через 100 лет, когда потребовались теоретические основы создания современных компьютеров, о ней вспомнили, а уж как вспомнили, так больше не забывали: современный компьютерный мир без нее немыслим, об ее пересмотре даже вопрос не ставится.

***

Если забить в Яндекс «последний советский паровоз», то вам хватит минуты, чтобы выяснить: это был П36-0251 (Коломенский завод, 1956 г.). Кстати сейчас этот паровоз находится в музее в Санкт-Петербурге, а в России немало таких паровозов имеется в разном состоянии, вплоть до полностью работоспособного. Информация, как видим, абсолютно ясная и исчерпывающая. Если же возвратиться к нашей теме, то здесь подобной ясности не будет и в помине. Когда и где был построен последний в мире (или в СССР) табулятор? Готового ответа нет, но сколько бы мы его ни искали, мы не будем иметь гарантии, что этот ответ окончательный.

Военные вычислительные устройства первой половины XX века

На первых русских линкорах, проектировавшихся около 1910-го года, впервые в нашей истории был внедрен принцип центрального управления стрельбой орудий главного калибра. Вообще-то приборы управления стрельбой были предложены петербургским часовым мастером Н. Гейслером еще в 90-е годы XIX века (фирма Гейслера строила также телеграфные аппараты). Комплекс Гейслера включал задающие приборы, установленные в боевой рубке, и принимающие приборы, расположенные непосредственно у орудий и соединенные проводами с задающими приборами. Органами отображения информации служили циферблаты со стрелками - ничего другого в те времена не было. Задача наводчика сводилась к тому, чтобы развернуть орудия до совмещения со стрелками выходных данных прибора. Сами же приборы по существу представляли собой сельсины. https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BB%D1%8C%D1%81%D0%B8%D0%BD
Такая система только передавала данные от командира к орудиям и первоначально не содержала каких-либо счетно-решающих элементов. По итогам русско-японской войны стало ясно, что система требует усовершенствования, и в 1911 г. такие усовершенствования были сделаны. Однако всем требованиям времени система Гейслера по-прежнему не удовлетворяла, так что в Англии были закуплены счетно-решающие приборы конструкции А. Поллена. Но что эти приборы собой представляли? Информация крайне скудная. Можно не сомневаться, что устройством ввода данных в этот прибор служил оптический дальномер, установленный на корабле в соответствующей надстройке. А что внутри прибора? Можно только догадываться.
Представим себе валик, закрепленный в подшипниках с возможностью поворота вокруг своей оси. Если валик не трогать, то он сохраняет угол поворота, т. е. представляет собой запоминающую ячейку, имитирующую некоторую величину, участвующую в расчетах. Эту величину можно сразу же отображать визуально, если снабдить валик стрелкой и шкалой. Если валик поворачивать с некоторой скоростью, то его угловое положение будет представлять интеграл скорости, и получаем простейший вычислительный элемент - интегратор. Представим, что на валик насажено колесико, но не круглое, а имеющее какую-то криволинейную форму, и к краю колесика прижимается рычаг. Угловое положение этого рычага однозначно связано с угловым положением вала, но связано не непосредственно, а по какой-то зависимости (возможно сложной), определяемой формой колесика - и получаем вычислительный элемент - функциональный преобразователь. Два валика, соединенные системой рычагов, представляют сумматор…
Несколькими годами раньше российский инженер Алексей Крылов изобрел дифференциальный интегратор - механическую вычислительную машину, также основанную на валиках, колесиках и рычажках и решающую дифференциальные уравнения (применялась при проектировании кораблей).
Примерно в то же самое время был построен эскадренный миноносец «Новик» - быстрейший корабль своего времени. Его главным оружием были не пушки, а торпеды, и для стрельбы ими был построен прибор центрального управления. Информации по этому прибору еще меньше. «Новик» был построен в единственном экземпляре, но почти сразу же было начато серийное строительство эсминцев, достаточно близких к нему. На них устанавливался торпедный прицел М-1 конструкции Михайлова, однако сейчас уже трудно понять, что он собой представлял: прибор управления или просто прицел. А на эсминцах последующих серий устанавливались приборы управления торпедной стрельбой (ПУТС), созданные петербургским филиалом шведской фирмы «Эриксон». Они оказались недостаточно надежны и к 1932 г. были заменены приборами ГАК-1, которые выпускались заводом «Электроприбор» N 212.
В 30-е-40-е годы двадцатого века строились эскадренные миноносцы проекта 7 и 7У - внуки «Новика». На них уже было три прибора управления стрельбой: для орудий главного калибра, для зенитных орудий и для торпед. На кораблях более поздней постройки - лидерах - ставились ПУТС итальянской фирмы «Галилео» образца 1928 г. Закупка приборов передового технического уровня за рубежом, с одной стороны, не дает отечественным ученым и инженерам расслабляться, а с другой стороны, обогащает их ценным опытом. Так что в целом это нормальная практика, только ею не следует злоупотреблять. И уж совершенно недопустимо навязывать инженерам бездумное «передирание» иностранных образцов вместо создания своих, более совершенных. На лидерах «Минск» и «Ленинград» уже во время Великой Отечественной войны ПУТС «Галилео» были заменены на отечественные «Мина-1», созданные тем же заводом «Электроприбор» еще в 1934 г.
Подробнее смотрите вот здесь: http://naukarus.com/iz-istorii-sozdaniya-priborov-upravleniya-torpednoy-strelboy-v-otechestvennom-flote
Прибор управления артиллерийским зенитным огнем (ПУАЗО) можно увидеть как в Артиллерийском музее, так и в Военно-морском, но эти экспонаты дают представление только о внешнем виде прибора:
istoria-puazo-2.jpg
А что там внутри? Развинчивать музейный экспонат нам, конечно, не позволят. Однако давайте сделаем небольшое умственное упражнение: прикинем, какой прибор сложнее - для стрельбы по кораблям или по самолетам?
Бой «корабль против корабля» идет в плоскости. Для нашего корабля нам нужны двумерные координаты X1 и Y1, скорость V1 и курс K1, для противника - аналогичный набор параметров X2, Y2, V2, K2. Если же мы ведем бой «корабль против самолета», то нам никуда не деться от использования всех тех же самых переменных, но нам потребуется еще одна координата - высота самолета, которую к тому же нужно как-то вычислить. Кроме того, поскольку скорость самолета гораздо больше скорости корабля, наш прибор должен обладать достаточным быстродействием, иначе его показания не будут успевать за реальной обстановкой. Очевидно, что ПУАЗО будет сложнее, чем прибор для стрельбы по кораблям.
Задача наведения торпеды гораздо проще: торпеда движется прямолинейно и равномерно, строго по горизонту, для нее не существует недолета или перелета. Чтобы попасть в цель, торпеде нужен единственный параметр - курс. Вычисление его - геометрическая задача для 7-8 классов школы. Поэтому самолетные и катерные торпедные прицелы не представляют собой ничего сложного. Совсем другое дело на подводной лодке. Лодочный прибор управления торпедной стрельбой (автомат торпедной стрельбы, в англоязычной литературе часто называемый торпедным директором) будет еще сложнее, чем корабельные артиллерийские приборы. В годы Второй мировой войны такие приборы весьма высокого технического уровня имелись в Германии и в США http://brummel.borda.ru/?1-10-0-00000030-000-0-0-1163166714. Чуть послабее - в Англии. А что у нас? Похоже, что ничего. Как такое может быть?
Очень хотелось бы изучать вычислительную технику, не отвлекаясь на пресловутую политоту. По возможности я буду действовать именно так, но это не наш сегодняшний случай. Если мы хотим понять, как развивалась советская вычислительная техника в 30-е-40-е годы XX века и, главное, ПОЧЕМУ она развивалась именно так, то придется вспоминать, в каком мире живем. После прихода Гитлера к власти в Германии (1933 г.) призрак войны уже не бродил по Европе - он по ней маршировал! А в СССР война уже шла - страшная война на уничтожение собственного народа. Только не говорите, что ничего такого не было. И инженеры, и ученые, и те, кто ими командовал, находились в очень двойственном положении. С одной стороны, «если завтра война, если завтра в поход», то войну не выиграть одной лишь трехлинейной винтовкой на брезентовом ремне: чтобы победить врагов на войне, нужно современное, высокотехнологичное оружие. Это вроде бы понимали все. С другой стороны, любая чисто инженерная идея могла кому-нибудь показаться антипартийной или вредительской. А могла не показаться - могла быть умышленно объявлена таковой. И тогда ее автору не сносить головы. Выходит, что успех того или иного инженерного проекта зависел от физического выживания его руководителя. Тем, кто создавал приборы для надводных кораблей, повезло чуть больше. Тем, кто создавал приборы для подводных лодок - чуть меньше. Во время войны за это «невезение» наши моряки заплатили страшную цену.
Так это было или не так, но факт, что конструирование ПУТС «Трап» было начато с запозданием. До начала войны приступить к серийному выпуску приборов не успели, и только во второй половине 1944 г. первые приборы этого типа поступили на вооружение, так что в реальных боях им уже не довелось участвовать. Лишь на немногих наших лодках в годы войны имелись английские ПУТС. На следующем снимке - автомат торпедной стрельбы на подводной лодке С-189, которая сейчас стоит в качестве музея в Санкт-Петербурге, но это прибор более поздний, послевоенный.
korabli_-_s189_-_avtomat_torpednoj_strelby.jpg
Могут ли эти приборы считаться компьютерами?
Американский моряк-подводник Дж. Инрайт в своей книге «Синано: потопление японского секретного суперавианосца» рассказывает об имевшемся на его лодке приборе управления торпедной стрельбой, и этот прибор он недвусмысленно называет компьютером. Но ведь Инрайт - моряк, а не специалист по вычислительной технике. Можем ли мы согласиться с его трактовкой? На этот вопрос мы опять-таки не сможем ответить, пока не определимся, что считать компьютером, а что нет.
Чтобы прибор мог считаться компьютером, он должен обладать, как минимум, одной из двух способностей: (а) выполнять не одну какую-то математическую операцию, как например арифмометр, а расчеты с множеством действий, когда результат какого-то действия используется в последующих действиях, т. е. реализовать алгоритм, и (б) решать задачу многократно для изменяющихся исходных данных. Прибор, о котором пишет Инрайт, обоим этим требованиям удовлетворяет…
Еще один аргумент «ЗА»: состояние устройств вывода описанных выше приборов неоднозначно зависит от входных данных на текущий момент: оно зависит также и от того, что было на входе раньше. Иными словами, эти приборы обладают памятью. Однако есть и аргумент «ПРОТИВ»: алгоритм, реализованный в этих приборах, целиком определяется их конструкцией и не может быть изменен, т. е. такие приборы не программируются.
Рассматривая приборы управления стрельбой первой половины и середины XX века, любой нормальный ученый-историк на этом поставил бы точку. Я ставлю не точку, а запятую. Прибор центральной наводки орудий выдавал на свой выход углы наводки по вертикали и горизонтали - во времена Первой мировой войны ни о чем другом думать не приходилось. На самом деле вычислить углы наводки - половина дела. Вторая половина дела состоит в том, чтобы развернуть многотонное орудие на нужные углы быстро и точно (от быстроты и точности зависит победа в бою!). Для решения этой задачи в середине XX века была разработана специальная физико-математическая дисциплина: теория следящих систем, или теория автоматического регулирования. Решающий вклад в эту науку внесли ученые из Великобритании. Когда же теория была создана, очевидно, не заставил себя ждать и прибор, основанный на этой теории, - пропорционально-интегрально-дифференциальный регулятор (ПИД-регулятор). Без ПИД-регуляторов немыслима современная промышленная автоматика (да и военная тоже). Правда, в современной технике мы редко видим ПИД-регулятор как отдельный прибор: сама функция ПИД-регулирования не так уж сложна и чаще всего возлагается на любой имеющийся поблизости компьютер. Принципиально важно: такой регулятор НЕ МОГ появиться раньше, чем была разработана теория. В нынешних учебных заведениях изучается принцип устройства и действия таких регуляторов (современных!), но ни в какой литературе мне не встречалось ни малейшее упоминание о том, где и когда такие приборы впервые использовались, как выглядели, кем строились… И уж подавно ни один историк военного кораблестроения ни слова не скажет о том, что корабль, оснащенный ПИД-регуляторами, имеет все шансы на победу в бою над противником, не имеющим таких регуляторов.
Я пишу о морских вычислительных приборах, поскольку с ними хоть как-то знаком. Свои вычислительные средства были и в авиации: штурманские приборы, бомбовые и стрелково-пушечные прицелы… Так получилось, что до середины XX века военная вычислительная техника развивалась бурно, а гражданская заметно от нее отставала.

***

Обычный ученый-историк предпочитает изучать письменные документы: они дают точное представление о датах и участниках событий. Если же письменных источников не хватает, прибегают к археологическим методам исследований: ищут и описывают вещественные следы исчезнувших цивилизаций. Сведения, которые дает археология, чаще всего приблизительны и вероятностны, но лучше так, чем совсем никак. И вот сейчас мы подходим к такой ситуации, что от приборов, которым всего-то лет 50 или чуть больше, не осталось никаких следов. Ни одного сохранившегося экземпляра, ни чертежей, ни эксплуатационной документации… Археологам легче найти золотое украшение двухтысячелетней давности, чем железку, которой пользовались наши отцы! Впрочем, найти железку - половина дела. Как минимум, находку нужно описать, но кто сможет это сделать? Как хотя бы называется инженерная специальность, носитель которой мог бы спроектировать автомат торпедной стрельбы? Представьте, что перед нами прибор из тысячи деталей, действующих на основании науки, которая уже много лет не преподается ни в каких учебных заведениях… А если уж мы говорим о приборах военного назначения, то хорошо бы описать приборы так, чтобы можно было разобраться, какой из них на войне более победителен. Авторы даже самых толковых книг по истории военных самолетов, кораблей, танков не любят писать о приборах: они сами недостаточно хорошо ориентируются в этих вопросах и того же ожидают от своих читателей.
В завершение темы: пост системы управления огнем 127-мм артиллерии американского авианосца «Хорнет», погибшего в ходе Второй мировой войны, на дне Тихого океана на глубине свыше 5 км:
https://pp.userapi.com/c845018/v845018292/1ab1bc/A8qGbo7tVqI.jpg
Вот так мы с вами прямо сейчас стоим у истоков новой науки - технологической археологии.

Водяные компьютеры

В 1936 году В. С. Лукьянов, основываясь на опыте уже упоминавшегося нами Крылова, создал гидравлический интегратор - специализированное устройство, решающее задачу интегрирования. Интегрирование (лат. накопление, объединение) - в простейшем случае нахождение интеграла от некоторой функции (чаще всего меняющейся от времени) - эта задача изучается в старших классах школы, но этим же термином называются и более сложные (университетского уровня) задачи - решение дифференциальных уравнений. В качестве рабочей субстанции в машине Лукьянова использовалась вода. Она двигалась по стеклянным трубкам, наполняла сосуды, так что весь процесс решения задачи можно было наблюдать зрительно. В течение без малого двух десятилетий Лукьянов работал над усовершенствованием своих интеграторов, каждая следующая модель была сложнее предыдущей и соответственно могла решать более сложные задачи. Использовались эти устройства чуть ли не до 1980-х годов. Сейчас два лукьяновских интегратора хранятся в Политехническом музее в Москве.
Иногда считают, что Лукьянов был единственным автором вычислительных устройств, использующих воду, но это не так: в 1949 году У. Филлипс в Новой Зеландии в гаражных условиях, из подручных материалов, вплоть до обломков старых самолетов, построил водяной компьютер MONIAC. Это было едва ли не первое вычислительное устройство, построенное как учебно-демонстрационное пособие специально для моделирования экономических процессов. MONIAC неплохо себя проявил, после чего было построено несколько серийных образцов, один из которых работоспособен до сих пор. Он находится в Кембриджском университете и ежегодно демонстрируется студентам.
https://ru.wikipedia.org/wiki/MONIAC
Описанные в этой и в предыдущей главах вычислительные устройства назовем собирательным термином эокомпьютеры («компьютеры рассвета»). От протокомпьютеров они отличаются тем, что могут решать задачи во много действий, т. е. выполнять алгоритм, да и действия, доступные им, выходят за рамки младшей школы: криволинейные функциональные преобразования (в том числе тригонометрия) - это старшие классы школы, а интегрирование - это уже высшая математика. До настоящих компьютеров им не хватает одного единственного пунктика: программирования. Программировалась они только конструктивно, т. е. программа встраивалась в прибор намертво и ее невозможно было сменить без коренной переделки аппаратуры. Эпоха промышленного выпуска эокомпьютеров, или компьютерный неолит, начинается в промежутке между русско-японской и Первой мировой войнами, т. е. где-то около 1910 года, и продолжается примерно до 1950-го года, когда на смену эокомпьютерам пришли настоящие компьютеры.

Криптография и криптоанализ как движущая сила компьютеростроения

Вы, вероятно, слышали про немецкую шифровальную машину «Энигма»? Может быть, видели один из фильмов с таким названием? Кстати, похожие машины были и у нас:
https://www.kv.by/content/335378-shifrovalnye-mashiny-kakie-analogi-enigma-sozdavali-v-sssr
https://web.archive.org/web/20131219014556/http://www.agentura.ru/press/about/jointprojects/inside-zi/sovietcryptoservice/
и у наших союзников по антигитлеровской коалиции («Тайпекс», Англия, 1937 г.), но, благодаря отсутствию установленных фактов «взлома» шифра противником, наши машины остались практически неизвестны широкой публике, а история раскрытия поляками, англичанами и американцами шифра «Энигмы» сделала этой машине большой посмертный пиар.
Сейчас я хочу немножко абстрагироваться от конкретных машин, взглянуть на ситуацию со следующего уровня высоты полета. В начале XX века, с развитием электрической связи и радиотехники, остро встала задача передавать сообщения так, чтобы они не стали известны противнику. Сам принцип радиосвязи не оставляет надежд на то, что ваши радиограммы не будут прослушаны. Остается единственный вариант: шифроваться (а для супостата единственный вариант - пытаться «расколоть» наши шифры). Криптография и криптоанализ - строгие математические дисциплины, но поскольку речь идет о победе государства в войне, то математика стала оружием. Оружием совершенно специфическим: взяв его в руки, горстка кабинетных храбрецов без гранат, без пушек останавливает танковые дивизии! Ничего удивительного, что подобные математические исследования неплохо финансировались. Еще в 20-е годы немалых успехов на этом поприще добилось польское «Бюро шифров». Потренировавшись на совсем слабых в то время советских шифрах, они поставили планку выше: решили расколоть «Энигму», и они это сделали.
Математическая криптография первой половины XX века шла по пути наименьшего сопротивления: создавала шифрсистемы с закрытым ключом. Смысл в том, что алгоритм шифрования либо вообще открытый, либо существует вероятность, что он станет известен врагу. Но для расшифровки наших посланий алгоритм знать недостаточно: нужен ключ, который известен только отправителю и получателю. Два субъекта, желающие установить связь друг с другом, предварительно должны обменяться ключами, и сделать это нужно так, чтобы ключ не попал в чужие руки. Пока субъектами были военные и государственные учреждения, такой подход всех устраивал. Но история имеет свойство повторяться. В начале XXI века задача установления засекреченной связи стояла уже перед простыми гражданами, для которых обмен закрытыми ключами был сопряжен с определенными трудностями, а то и вовсе невозможен. Ответом на эту задачу стали шифрсистемы с открытым ключом, но это уже совсем другая история.
Можно ли считать «Энигму» компьютером? По-моему, нет. В лучшем случае она тянет на специализированный гаждет. Зато машина «Бомба», которую англичане построили для раскрытия шифра «Энигмы», к компьютерам приближается вплотную. Когда же вместо «Энигмы» немцы построили более хитрую машину «Лоренц», англичане ответили им своим «Колоссусом» (1943 г.). В создании «Бомбы» участвовал математик Алан Тьюринг. «Бомба» была специализированным устройством, но, работая над ней, Тьюринг уже задумывался о том, что делать дальше, и выдвинул принципы построения универсальных машин: (1) машина должна иметь множество одинаковых запоминающих ячеек, (2) любая математическая операция может быть выполнена с данными из любых ячеек, (3) чтобы указать машине, какие операции нужно выполнять и над какими данными, пишется программа, которая не «ввинчивается» в машину намертво, а помещается опять-таки в запоминающие ячейки, где она может быть быстро и легко заменена без ущерба для «железа». Идейное наследие Тьюринга этим отнюдь не исчерпывается. В учебниках рассматривается машина Тьюринга - это математическая абстракция, которая никогда не воплощалась в металле и никогда не будет воплощаться, потому что менее эффективна, чем обычные компьютеры.
Как мы теперь видим, Тьюринг был не первый, кто додумался до теоретических принципов построения компьютера (за исключением того, что в машинах Цузе программа не хранилась в запоминающих ячейках, а читалась с перфоленты). Тьюринг был первым, кто заявил эти принципы вслух, и первым, кого услышали, в итоге получилось так, что он считается основоположником современной архитектуры компьютеров. В рамках принципов, выдвинутых Тьюрингом, были построены машины: в Англии - EDSAC (1949 г.), в США - ENIAC (строился в 1944-1946 гг., работал до 1955 г.) и EDVAC (1949 г.), которые уже без всякой натяжки могут считаться настоящими компьютерами.
Вот информация к размышлению по первым компьютерам:
https://habr.com/ru/company/it-grad/blog/488750/ Эти машины знаменуют собой конец первобытной эпохи и начало компьютерной цивилизации.

Характеристика эпохи

Первобытная эпоха в компьютерном мире продолжалась до середины XX века и характеризовалась следующим:
* Половина объема вычислений, производимых во всем мире с применением технических средств, приходилась на механические и электромеханические вычислительные устройства, выполняющие только одиночные или однообразно повторяющиеся операции под непрерывным управлением человека, а другая половина - на специализированные приборы, значительная часть которых работала по аналоговому принципу и не обеспечивала возможности сменить программу. Появление программируемых цифровых компьютеров ознаменовало собой первую смену исторических эпох (не путать с поколениями ЭВМ).
* Предлагаемый здесь термин «первобытная эпоха» отражает то обстоятельство, что в эту эпоху не существовало ни общей теории построения вычислительных машин, ни каких-либо единых стандартов их конструирования: каждый автор создавал свое детище с нуля, был вынужден вычерчивать отдельно каждую деталь. Все это сильно замедляло работу.
* Хотя к концу эпохи уже налаживалось серийное производство вычислительных устройств на заводах, основной движущей силой прогресса были одиночные гении-изобретатели, многие из которых остались непонятыми и непризнанными. Что же касается программирования, то его по сути не было, если не считать той самой первой программы, которую якобы составила Ада Лавлейс.

50-е-60-е годы ХХ века - эпоха древней компьютерной цивилизации

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

Советские цифровые ЭВМ 1950-х-1960-х годов

В нашей стране из-за потерь, причиненных войной, работы по созданию новой техники замедлились. Работа над малой электронно-счетной машиной - МЭСМ - была начата в конце 1948 года в Киевском институте электротехники АН УССР, а чуть позже в Энергетическом институте АН СССР (Москва) - над машиной М-1. В регулярную эксплуатацию обе машины были приняты почти одновременно - в декабре 1951 года. Так наши инженеры вступили в мировую «компьютерную гонку», в которой очень скоро достигли впечатляющих результатов. Нам не нужно было догонять Америку - Америка догоняла нас.
Оба проекта оказались успешными и получили дальнейшее развитие.
Семейство быстродействующих электронно-счетных машин - БЭСМ - было наследником МЭСМ и разрабатывалось Институтом точной механики и вычислительной техники АН СССР (ИТМ и ВТ, Москва) с 1953 г. Новейшая машина этого семейства - БЭСМ-6 - первой преодолела рубеж быстродействия 1 миллион операций в секунду и в первые годы своего существования (1968-1970) была быстрейшей в мире. Однако первой серийной машиной стала «Стрела» с быстродействием всего 2000 операций в секунду. Она спроектирована ЦКБ-245 в Москве и выпускалась в 1953-1956 г. (выпущено всего 8 штук, но МЭСМ и первые БЭСМ существовали в единственном экземпляре и, таким образом, должны считаться экспериментальными).
БЭСМ-6 не создавалась для рекордных гонок - это была обычная серийная машина, было изготовлено свыше 300 штук (выпускались до 1987 г., а последняя из них действовала на вертолетном заводе им. Миля до 1995 г.).
http://besm-6.ru/besm6.html
На основе М-1 разрабатывались машины М-2, М-3 и т. д. Документация на М-3 была передана в Ереванский научно-исследовательский институт математических машин (ЕрНИИММ), где на ее основе создавались ламповые ЭВМ «Арагац» и полупроводниковые - «Раздан» (1958-1965 гг.). Следующей вехой на пути ереванцев стала «Наири» (1962 г.). Это была простенькая машинка, на рекорды скорости она на первый взгляд не претендовала - рекорд был в другом. Если все предшествующие ЭВМ имели вид множества шкафов, занимающих большую комнату (скорее зал), то «Наири» была выполнена в виде письменного стола с двумя тумбами. Она занимала всего несколько квадратных метров в помещении, что соответствовало обычному рабочему месту инженера или ученого, и обслуживалась одним человеком… Это что же получается, первый в мире персональный компьютер?
Перед нами обложка технического описания ЭВМ «Наири» (описание, кстати, доступно в интернете). Рисунок дает представление о внешнем виде машины:
istoria-nairi.jpg
«Наири-3», созданная уже в 70-е годы, была построена на микросхемах эмиттерно-связной логики и считается первой оригинальной отечественной машиной третьего поколения (о поколениях ЭВМ, в традиционном понимании этого термина, поговорим чуть ниже).
Эстафету разработки советских персональных компьютеров подхватили в Киеве, в Институте кибернетики Академии наук УССР. Там еще в 1958 г. была начата разработка машин семейства «Проминь» (серийное производство с 1963 г.). Эта ЭВМ впервые в отечественной практике позволяла ввод данных с клавиатуры и вывод на однострочный индикатор, как в нынешних калькуляторах (по большому счету эта машина и была первым программируемым калькулятором). Следующим этапом стала МИР - Машина Инженерных Расчетов (1965 г.). На ней был реализован командный язык высокого уровня Алмир (АЛгоритмический язык для МИР), позволявший производить сложные математические и физические расчеты с минимумом трудозатрат на программирование. В этой машине были воплощены новые для того времени технические решения (некоторые из них были впоследствии забыты), позволявшие решать сложные численно-расчетные задачи практически с такой же скоростью, как на гораздо более мощных машинах. По сути, МИР и язык Алмир стали бабушкой и дедушкой нынешнего «Матлаба».
Советские персональные компьютеры 1960-х годов опережали свое время. Они не могли обеспечить экономических показателей, сравнимых с соответствующими показателями больших ЭВМ. Причин для этого много. Во-первых, существует фундаментальный общетехничесий закон: при прочих равных условиях более мощное изделие обычно более экономично, чем маломощное. Во-вторых, из-за недостаточного объема оперативной памяти эти машинки просто не могли решать многие задачи из тех, которые стояли на повестке дня. В-третьих, до появления МИР на этих машинах не удавалось использовать сколько-нибудь приличный компилятор, что затрудняло разработку программ. В-четвертых, вокруг каждого большого компьютера в те времена складывалась инфраструктура подготовки данных: решение о создании такой инфраструктуры автоматически влекло бы за собой решение о замене маленького компьютера большим, а без такой инфраструктуры машина не могла быть постоянно занята работой.
В городе Пенза на предприятии п/я 24 проектировались с 1955 г., а на заводе счетно-аналитических машин строились до 1975 г. ЭВМ семейства «Урал» https://isu.ru/ru/news/newsitem.html?action=show&id=832 https://1500py470.livejournal.com/359855.html Первые 4 машины были ламповыми, последующие - полупроводниковыми. Они интересны тем, что представляли именно семейство машин, программно совместимых между собой.
В Минске в конце 1950-х годов были одновременно построены Конструкторское бюро НИИЭВМ (СКБ) и завод ЭВМ им. Орджоникидзе. Создававшиеся там машины вполне логично получили название «Минск». Первая машина «Минск-1» (1959 г.) была построена на лампах, «Минск-2» и ее модификации - на полупроводниковых потенциально-импульсных логических элементах. «Минск-32» стала самой массовой отечественной ЭВМ (1968-1975 гг., выпущено 2889 шт.).
Там же, в Минске, в 1959-1964 гг. разрабатывались и выпускались примерно до 1972 г. ЭВМ «Весна» и «Снег» (последний представлял собой упрощенную «Весну»), но они выпускались малыми сериями (всего 19 и 20 шт. соответственно).
В 1958 г. в вычислительном центре N1 МО СССР была создана ЭВМ М-100, которая стала «Новиком» среди компьютеров - одной из быстрейших в мире для своего времени (100 тыс. операций в секунду), и навсегда осталась таковой среди ламповых ЭВМ. В этой машине, а отнюдь не в американском «Пентиуме» 1990-х годов, впервые были воплощены такие технические решения, как конвейерное выполнение операций, кэш-память («сверхоперативная память» по терминологии того времени) и оперативная память на кольцевых ферритовых сердечниках.
Мы пробежались «галопом по европам» по основным мозговым центрам союзкомпьютерпрома, упомянули те машины, которые имели словесные названия. Кроме них, было еще много машин, называвшихся буквой М с числовыми индексами, а в 60-е годы появляются машины военного назначения с цифробуквенными кодовыми названиями. Перечислять все выдающиеся советские ЭВМ было бы долго и скучно, мне гораздо интереснее разобраться, что откуда росло. С другой стороны, информация о технических характеристиках ЭВМ, местах и годах их разработки, количестве выпущенных машин и т. д. не представляет никакого секрета. Все это нетрудно найти в интернете. Вот несколько ссылок:
http://50.uginfo.sfedu.ru/technic.htm#m_220
https://www.kramola.info/vesti/protivostojanie/sovetskaja-vychislitelnaja-tehnika-istorija-vzleta-i-zabvenija
http://ru.uacomputing.com/stories/emerging-of-soviet-predecessors-of-personal-computers/
http://ru.pc-history.com/evm-mir-2.html
Попробуем представить, как происходила разработка этих замечательных машин. В разных научных и проектных организациях возникали творческие коллективы, вырабатывавшие новые проекты, зачастую в рекордно короткие сроки и при скудном финансировании. Коммунистическая партия, безосновательно претендовавшая на тотальный контроль над всеми процессами в стране, уследить за всеми просто не могла. Да и сама партия теперь была не та, что раньше. Обжегшись на войне, она пусть не сразу, но постепенно пересмотрела свои методы руководства, перестала рассматривать каждый болт через призму классовых интересов (иногда ложно понимаемых). Инженеры, ученые и руководители научных учреждений получили свободу, а там, где свобода, творческие идеи будут появляться как бы сами собой.
Разумеется, не все творческие идеи одинаково плодотворны. В качестве хрестоматийного примера - ЭВМ «Сетунь» (1959-1965 гг., выпущено 50 шт.) - единственная в мире ЭВМ, работавшая в троичной системе счисления. Все последующие машины работают исключительно в двоичной системе. То есть разработка оказалась тупиковой, однако никого за это не посадили и не расстреляли (после смерти Сталина (1953 г.) тюрьмы и расстрелы практически сошли на нет).
Однако, если мы хотим изучать историю серьезно, а не просто перечислять даты и факты, то мы должны понять, что такое счастливое положение дел не могло продолжаться бесконечно.
В нормальном капиталистическом обществе буржуй, кровопийца-эксплуататор - это прежде всего инвестор и организатор производства. Он дает людям ресурс N1, которого все хотят, но на всех не хватает, - рабочие места - и этим оправдывает свое существование. КПСС этих функций не имела и была, таким образом, не просто эксплуататорским, а чисто паразитическим классом. Однако на словах и на бумаге нужно было как-то объяснить народу, для чего Партия нужна, и была придумана формулировка: «КПСС - руководящая и направляющая сила общества». А уж если такие слова сказаны, их нужно было подтверждать делом, так что вмешательство КПСС во все дела в стране, вплоть до самых мелких, было неизбежно. Но одно дело стоять над душой, допустим, у сталевара и каждый день его пилить: «давай больше металла, давай еще больше металла», и совсем другое лезть в сложные инженерные вопросы, тем более в такой отрасли техники, которой каких-то 10 лет назад просто в помине не было. Тогдашние руководители коммунистической партии и советского государства, будучи сами людьми с весьма посредственным уровнем образования, на вычислительную технику и программирование смотрели косо и в лучшем случае терпели их присутствие рядом с собой, но не более того. И то, что произошло в конце 60-х годов XX века, рано или поздно должно было произойти.
В один прекрасный день нашлась умная голова, которая придумала использовать новейшие ЭВМ для прогнозирования экономического развития страны. И какие бы ни использовали методики прогнозирования, результаты получались неутешительные. Мы-то теперь видим, что безрадостные прогнозы сбылись, мы теперь даже можем понять глубинные причины этого… Но тогдашнее правительство и ЦК КПСС во главе с Политбюро ничего такого видеть-слышать не желали, и в итоге (в конце 1960-х годов) было принято преступное (на мой взгляд) решение о прекращении собственных разработок вычислительной техники и об использовании вместо них американских образцов. Это решение не было осуществлено полностью: страна нуждалась в собственных компьютерах военного назначения. А вот «на гражданке» место оригинальных русских машин заняли СМ-4 (американская PDP-11), болгарский ИЗОТ (американский VAX - потомок PDP-11 с увеличенной разрядностью), ЕС ЭВМ (американские IBM/360, 1964 г.). Новейшим представителем последнего семейства была ЕС-1060 - мне довелось иметь с ней дело во время обучения в институте. Эта машина занимала зал размером с 3 хороших трехкомнатных квартиры и потребляла электроэнергию, как троллейбус. По этим параметрам ЕС-1060 была близка к БЭСМ-6, но значительно уступала последней по боевым возможностям. К тому же эта машина была почти постоянно неисправна и работала буквально несколько часов в год. Другие «цельнотянутые из США» машины были ничуть не лучше. Но самое плохое было то, что к этим машинам было крайне скудное программное обеспечение, а то, что имелось, было низкого качества.
За названиями IBM/360 и PDP/11 стоят не какие-то конкретные машины, а проекты, или, в нашей тогдашней терминологии, - научно-исследовательские и опытно-конструкторские разработки (НИОКР). Целью этих работ было создание семейств машин, больших и малых соответственно, программно-совместимых в пределах своего семейства и выполненных на общей конструктивной базе, в отличие от советских ЭВМ того времени. Эти машины имели новую для 60-х годов элементную базу - микросхемы. Имея такое преимущество в «железных» технологиях, американцы, однако, до начала 70-х годов так и не смогли это преимущество полностью реализовать - построить компьютер, радикально превосходящий наши БЭСМ. Не будем наивными и не будем думать, что они из чисто благотворительных побуждений снабжали нас передовыми проектами. Рассматривая их машины с точки зрения архитектуры, мы найдем в них единственную передовую черту: байтовую организацию памяти, которая делала машину равно пригодной для решения как физико-математических, так и народнохозяйственных задач. Если допустить, что американцы знали о БЭСМ-6 (ну англичане-то знали, purquois pas американцам знать?), то приходим к очевидному выводу: они сознательно сливали нам устаревшие и бесперспективные разработки. Они при этом ничего не теряли, более того: получали какие-то копейки там, где уже не надеялись получить прибыль. Если же не ограничиваться только вычислительной техникой и посмотреть шире, то мы увидим, что делали они это далеко не в первый раз.
Несколько слов о ЕС ЭВМ. ЕС расшифровывается: Единая Серия. Предыдущие наши компьютеры, даже те, что имели сходные названия, не образовывали серий. Чаще всего они были несовместимы ни программно, ни хотя бы конструктивно: для каждой новой машины создавались заново все периферийные устройства и даже чисто конструктивные элементы вплоть до последней дверцы шкафа. Это замедляло проектирование и усложняло эксплуатацию. Очевидно назрела задача унификации: для всех машин сделать общий набор периферийных устройств, унифицированные модули оперативной памяти, которые можно было бы подключать по одному или несколько, и ряд процессоров, различающихся только количественно, но программно совместимых и выполненных в едином конструктивном стиле. Тогда, если ранее купленная машина перестанет вас удовлетворять, ее можно будет апгрейдить путем замены процессора или добавления памяти, как мы делаем сейчас с нашими настольными компьютерами. Идея, как мы видим, вполне здравая. Плоха была не идея - плоха была реализация: вместо того чтобы воплотить в новых процессорах все лучшее, что было наработано отечественными специалистами, использовали далеко не лучший американский образец.
Очень важный и интересный вопрос: разрядность древних ЭВМ. У современных машин разрядность принимает значение из ряда: 8, 16, 32 или 64, но так было не всегда. В 50-е годы представление о том, что разрядность должна быть равна целой степени двух, еще не сформировалась. В машинах 50-х годов вся информация была организована в виде машинных слов, длина которых (она же разрядность) была достаточна для представления числа с плавающей запятой. Так, например, «Стрела» имела машинное слово длиной 43 бит, из которых 35 - мантисса и 6 - порядок, а БЭСМ-6 - 48 бит. Ни шестнадцатиразрядных, ни тем более восьмиразрядных машин в те времена никто не строил: ведь машины были нужны для научных и инженерных расчетов, а такие расчеты требуют точности. Ячейки памяти имели размер машинного слова, а система команд процессора продумывалась так, чтобы каждая команда также вписывалась в машинное слово.
Смешной вопрос: а какова разрядность ЕС ЭВМ? Из десяти современных специалистов десять ответят: 32. Ответ неверный. Ширина выборки из оперативной памяти, она же разрядность машинного слова, действительно, была равна 32, но разрядность арифметико-логического устройства у первых машин серии могла быть 16 и даже 8. Но это не главное. Оперативная память этих машин имела байтовую организацию, так что чтение и запись в память могли производиться байтами, полусловами (2 байта - 16 бит) и словами (4 байта - 32 бит). Процессор же, помимо этого, мог обрабатывать и числа с плавающей запятой в формате двойного слова (8 байт - 64 бита). Такая структура памяти, удобная для решения как физико-математических, так и планово-экономических задач, унаследована всеми компьютерами последующих эпох.

Аналоговая техника во второй половине XX века

Мы говорим в основном про цифровую вычислительную технику, однако давайте вспомним и аналоговую. В середине XX века она отказалась от валиков, колесиков и рычажков, перешла полностью на электрический, а затем на электронный принцип действия. Это позволило во-первых, увеличить быстродействие, и во вторых, придать машинам способность к программированию (программирование чаще всего осуществлялось путем вставки проводов со штекерами в нужные гнезда на лицевой панели прибора). Но ценой ускорения работы стала возросшая погрешность вычислений. (Для несведущего в технике читателя последнее утверждение может показаться диким, но это действительно так).
В 50-е годы аналоговые и цифровые машины, выражаясь языком конного спорта, «шли ноздря в ноздрю»: цифровые машины хотя и обещали более быстрое решение сложных задач, но сами были громоздки и дороги. Даже самая «простая» цифровая машина тех времен занимала порядочных размеров комнату (скорее зал) и потребляла очень много энергии. В нашей стране было построено семейство аналоговых машин МН («модель нелинейная»): некоторые представители этого семейства были в настольном исполнении, размером как большой радиоприемник, и цена была такова, что позволяла выпускать эти машины в огромных количествах. Но ничто не могло помочь преодолеть главный недостаток аналоговых ЭВМ - их «умственную ограниченность». Аналоговая машина непригодна для решения народнохозяйственных задач, т. к. там нужно хранить множество показателей, причем хранить с абсолютной точностью. Операция сложения на аналоговой машине как-то получается, умножение ей уже дается с большим трудом, зато такая машина великолепно справляется с операциями дифференцирования и интегрирования. Поэтому аналоговые ЭВМ долго применялись для решения задач моделирования непрерывных процессов, таких как обтекание воздухом самолетного крыла или полет ракеты в околоземном пространстве. Решение таких задач на цифровых ЭВМ было поначалу сложно и дорого, главным образом из-за необходимости привлекать к работе программистов. Однако позже в области цифровых ЭВМ и их программирования имел место большой прогресс, и аналоговая техника стала терять рынок. К 1960-м годам доля аналоговых ЭВМ в общем объеме переработки информации стала уже ничтожно мала. Аналоговые машины еще строились, но во все меньших и меньших количествах. Строят их и сейчас, уже в единичных количествах, в основном в качестве лабораторных стендов для учебных заведений.

Три поколения цифровых электронных вычислительных машин

Электронные цифровые вычислительные машины первого поколения (1950-х годов) строились на электронных лампах. Они (и лампы, и машины) были громоздки и нежны и потребляли очень много электроэнергии. Так, например, «Стрела» потребляла мощность 150 кВт (как трамвай на полном ходу), из них ровно половина - 75 кВт - приходилась на вентиляторы, обеспечивавшие охлаждение машины. Это несколько странно, потому что у большинства других компьютеров доля энергозатрат на охлаждение гораздо меньше. Устанавливались они в специально оборудованных зданиях или помещениях - вычислительных центрах (ВЦ). Последняя ламповая машина - «Урал-4» - строилась на Пензенском заводе до 1964 г.
В 1947 г. был изобретен полупроводниковый прибор - транзистор, способный выполнять функции, аналогичные функциям электронных ламп, но более компактный, надежный и энергоэкономичный. Первые транзисторы (точечные) оказались неудовлетворительными, затем еще несколько лет потребовалось для налаживания массового производства транзисторов, и в итоге ближе к 1960 г. появились ЭВМ второго поколения (подчеркиваю: мы говорим о поколениях электронных цифровых машин, а не компьютеров вообще).
Во времена моей электронно-компьютерной молодости была книга «Введение в теорию транзисторов». Она была примечательна тем, как в ней подавался материал. Книга была разделена на две части: в первой все объяснялось чисто качественно, без каких-либо формул и расчетов, а во второй как бы все то же самое повторялось, но уже как строгая количественная теория. Ну а если физико-математическую теорию можно излагать «на пальцах», то почему бы не попробовать излагать в таком же стиле другую строгую количественную науку - экономику?
Электронные лампы были дороги в изготовлении, имели небольшой срок службы и ограниченное быстродействие, так что стоимость каждой вычислительной операции, произведенной с помощью ламп, была высока. Но денег стоит не только сам компьютер - определенных расходов потребует и его повседневная эксплуатация. Компьютер нужно установить в соответствующем здании, которое размещается на соответствующем земельном участке… Здание нужно обеспечить освещением, отоплением, охраной. Компьютер потребляет электроэнергию - это понятно всем, но еще нам потребуется бумага, перфокарты или то, что придет им на смену, и, извините за вульгарные технические подробности, спирт… Мало-мальски грамотному экономисту даже не потребуются подробные расчеты, чтобы прийти к очевидному решению: каков бы ни был наш бюджет, компьютеры нужно строить в минимальном количестве, но максимально мощные. В идеале - один-единственный компьютер, но такой, в котором каждая лампа работала бы с максимальной отдачей (в начале 50-х годов только так и поступали). Дробление бюджета на N компьютеров меньшей мощности привело бы к тому, что суммарный объем работы, которую эти компьютеры могут поднять за все время своей службы, уменьшится, не говоря уж о том, что какие-то задачи им будут просто не по зубам. Но это - в идеале. Штучное изготовление компьютеров не могло продолжаться бесконечно - рано или поздно нужно было переходить к серийному производству. Кстати в США первый серийный компьютер UNIVAC I строился в 1951-1958 гг. - почти одновременно с нашей «Стрелой» (построено 46 шт.). Сравним UNIVAC I со «Стрелой»: количество ламп 5200 (6200), потребляемая мощность 125 кВт (150), быстродействие 1900 операций в секунду (2000)… Похоже, не так ли? Сходные задачи приводят к сходным решениям. В разработке UNIVAC участвовала Грейс Хоппер - впоследствии (около 1959 г.) создательница языка программирования Кобол.
Применение транзисторов радикально снизило стоимость вычислительной операции, но переписывать начисто всю ту экономику, которой мы только что коснулись, было еще рано - это произойдет ближе к 70-м годам, с появлением микросхем и особенно больших микросхем. Тем не менее некоторые подвижки в этом направлении начались. Стало возможным разделение двух направлений развития вычислительной техники: с одной стороны, никто не отменял «больших» ЭВМ с новыми техническими возможностями, казавшимися немыслимыми всего несколько лет назад, и с другой стороны, был начат выпуск более простых малых ЭВМ (мини-ЭВМ), которые количественно и качественно не уступают большим ЭВМ предыдущего поколения, но при этом компактны и дешевы, так что их можно строить в больших количествах. Примерами малых ЭВМ являются рассмотренные выше «Наири», «Проминь» и МИР.
На следующих фото - платы (типовые элементы замены - ТЭЗ) советских транзисторных ЭВМ, датируемые 1969, 1981 и 1975 годами соответственно. Две последних, очевидно, были изготовлены как запчасти к машинам более раннего выпуска.

istoria-plata-dtl-rtl.jpg
Далее перед нами сфотографированная с большим увеличением структура модуля оперативной памяти («куба») на ферритовых кольцевых сердечниках. Для сравнения в верхней части снимка - сантиметровая линейка. Датировать этот модуль можно лишь приблизительно: 60-е-70-е годы XX века.

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

На земле, в небесах и на море

Оказывается, еще в 1950-е годы в нашей стране велись опытно-конструкторские работы по теме автоматизации управления поездами. Эти работы закончились неудачей, так что сейчас едва ли кто-либо о них помнит. О причинах неудач нам вряд ли расскажут, но нетрудно построить несколько рабочих версий.
Версия N1: тогдашняя элементная база не позволяла построить компьютер, который можно было бы установить на локомотив. Как мы уже знаем, электронные лампы были слишком хрупки. Даже в тепличных условиях вычислительного центра они часто перегорали, а неизбежная на любом транспортном средстве вибрация погубила бы их в первый же день. Транзисторы не были склонны к перегоранию, но у них были свои враги: скачки питающего напряжения и повышенная температура. В 50-е годы транзисторы были германиевые, они уже при +50оС чувствовали себя неуютно, в отличие от нынешних кремниевых, которые выдерживают и +100. Это гипотеза, лежащая на поверхности, но есть и еще. В то время не было достаточной научной базы. Такая база для «больших» компьютеров в то время еще только складывалась, а для управляющих машин не было практически ничего. И версия N3: у тогдашних руководителей наших железных дорого просто были другие серьезные вещи на уме. Эти вещи называются СЦБ: сигнализация, централизация и блокировка. Различные устройства для обеспечения безопасности движения поездов по дорогам в нашей стране появлялись практически с начала строительства железных дорог. В начале XX века, с развитием электротехники и аппаратуры связи, эта работа активизировалась, Великая Отечественная война ее замедлила, после войны нужно было наверстывать упущенное… К 70-м годам СЦБ на наших железных дорогах выросли в крупнейшую и сложнейшую в мире техническую систему производственного назначения. По интеллектуальному уровню эта система не имела равных в мире, но к вычислительной технике она не имеет отношения.
Так это было или не так, но сегодня ни одного поезда без машиниста мы в России не увидим - не только на обычной железной дороге, но и в метро, где, казалось бы, условия для автоматизации идеальные. А вот во Франции о наших неудачах не знали, так что парижское метро уже давно работает без машинистов.
Сказанное не означает, что наши железнодорожники поставили крест на любой компьютеризации. Однако следующий опыт применения ЭВМ на ЖД транспорте относится уже к 70-м годам - к этой теме я надеюсь вернуться, когда наша история дойдет до средних веков. А сейчас нам нужно не пропустить интересные события, развернувшиеся в рассматриваемую нами эпоху на другом участке фронта - в промышленности.
Основная промышленная машина - станок. Разновидностей станков на свете много, но все они имеют общие черты. В станке имеется рабочий орган - шпиндель с вращающимся валом: в токарном станке в шпиндель зажимается заготовка, в остальных станках - инструмент, например сверло или фреза. Также имеется система взаимно-перпендикулярных направляющих, обеспечивающая движение заготовки относительно инструмента по координатам. В простейшем случае движение осуществляется вручную, но это не значит, что до появления станков с ЧПУ все станочные работы производились вручную и никакой автоматизации не было. Практически с начала XX века на технологически передовых заводах имелись станки, способные выполнять операции без непосредственного участия человека:
* Агрегатный станок имел множество шпинделей, которые в процессе обработки детали совершали какое-то несложное движение, чаще всего просто вперед и назад. Типичная продукция такого станка - корпус дизельного двигателя с множеством одинаковых, регулярно расположенных отверстий для крепления к нему других частей двигателя. Перенастройка такого станка на выпуск других деталей могла вылиться в весьма трудоемкую работу, но на автомобильных или авиационных заводах это была обычная практика.
* Копировальный станок. В нем имеется копир - металлическая пластина, край которой имеет форму, соответствующую форме будущей детали. При обработке детали инструмент движется, повторяя форму этого края. Типичная продукция такого станка - корпус артиллерийского снаряда: он имеет форму как будто несложную, но криволинейную. Голыми руками такую форму, да еще и с требуемой точностью, не выдержать, а по копиру - запросто. Провести инструмент по копиру в простейшем случае можно вручную, но эту задачу совсем несложно и автоматизировать. Чтобы перестроить такой станок на выпуск другой детали, достаточно сменить копир, а это работа сводится к тому, чтобы отвинтить и завинтить пару болтов. То есть копир - своего рода программа, а копировальный станок может рассматриваться как станок с аналоговым программным управлением.
* Станок-автомат имеет револьверную головку с небольшим числом инструментов, например 6 или 8. При обработке очередной детали все инструменты вступают в работу поочередно, и каждый инструмент описывает цикл - простое движение по замкнутому прямоугольнику: подход к детали - обработка - отход - возврат в исходную точку. Типичная продукция такого станка - детали несложные, но изготавливаемые в массовом количестве, например болты. Такой станок программируется. Программа, написанная инженером-технологом на бумаге, представляет собой таблицу координат по паре для каждого инструмента. Рабочий-наладчик вводит эту программу в станок путем установки в нужное положение каких-то рукояток, упоров, концевых выключателей и т. д. Для выполнения программы в станке имеется несложная электрическая система, включающая и выключающая электромоторы перемещения инструмента.
* Станок с цикловым программным управлением похож на автомат и отличается тем, что инструмент может выполнять не один цикл движения, а много, и каждый цикл со своими координатами. Так можно изготовить деталь ступенчатой формы. Программа, имеющая вид пар чисел (координата подхода к детали и координата рабочего хода), набивается на перфоленту. Имеющийся в станке командный аппарат читает перфоленту команда за командой - последовательно от начала к концу, без перескоков и возвратов, и по каждой команде осуществляет движение инструмента на заданную координату. Командный аппарат может представлять собой несложную логическую схему, которую можно собрать на электромагнитных реле. Настоящий компьютер для этого необязателен, поэтому такие станки были обычны уже в середине XX века, когда компьютеры только начали появляться.
Однако в 60-е годы люди начали задумываться о создании станка, способного выполнять более сложные операции, например обработку деталей не ступеньками, а по прямой под произвольным углом к координатным осям, а в идеале и по окружности. Для решения этой задачи нужен уже полнопрофильный компьютер, и постепенно эта задача стала реальностью. Так появились станки с числовым программным управлением (ЧПУ), близкие к тем, которые используются и сейчас.
Прогресс не стоит на месте: транзисторы 60-х годов стали более надежными и экономичными, чем их «старшие братья» 50-х. Новая элементная база позволила сделать компьютер более прочным и «жизнестойким», так что стало возможно его эксплуатировать не только в условиях заводского цеха, но и на автомобиле, корабле или самолете. В отдельные классы выделились собственно вычислительные машины, получающие задачи и данные для их решения от людей и выдающие результаты для прочтения опять-таки людьми, и управляющие машины, которые, в отличие от вычислительных, напрямую, без посредничества человека, взаимодействуют с каким-то техническим оборудованием. Управляющие машины приходятся родными бабушками нашим нынешним микроконтроллерам. Разработка управляющей машины для народного хозяйства УМ-1-НХ была начата в ленинградском КБ-2 еще в 1958 г., т. е. практически сразу с началом массового промышленного выпуска отечественных транзисторов, а с 1963 г. эта машина выпускалась серийно на Электромеханическом заводе. Она имела настольное исполнение, содержала 8000 транзисторов (сравните с 6200 ламп в «Стреле», хотя обе эти машины содержали еще много других компонентов) и потребляла 150 Вт - ровно в тысячу раз меньше «Стрелы». К сожалению, сравнивать эти машины по производительности не получается: слишком разные задачи, разные условия эксплуатации.
На следующих фото - экспонаты петербургского Музея артиллерии, инженерных войск и войск связи - специализированные ЭВМ 9В53 и 9В51, предназначенные для наведения тактических баллистических ракет. Они датируются 60-ми годами XX века.
istoria-9v53-9v51.jpg
9В51 принята на вооружение в 1966 г., устанавливалась в автофургоне - кунге, но автофургон обеспечивал только транспортировку машины на позицию: работа машины была возможна только на стоянке. Машина двухадресная, с фиксированной запятой. Логическая часть этой ЭВМ была собрана на феррит-транзисторных ячейках, память (оперативная и постоянная) - на ферритовых сердечниках, ввод данных - с клавиатуры, вывод - на сегментный индикатор (как в калькуляторах, только крупнее) и на телетайп. http://www.phantom.sannata.ru/forum/index.php?t=13330&a=do_print
По 9В53 информации еще меньше, но по внешнему виду мы видим, что устройством вывода были неоновые цифровые индикаторы. Похожие индикаторы тогда ставились в корабельные навигационные компьютеры… и в автоматы для продажи билетов на электрички.
В 1980-е годы многие навигационные задачи на флоте и в авиации решались с помощью компактных и надежных бортовых компьютеров. В обиход вошел термин «авионика» - электроника для авиации. Дальнейшее разделение направлений развития привело к созданию микро-ЭВМ, которые, при некоторой ограниченности интеллектуальных возможностей, могли бы работать прямо в заводских цехах, взаимодействуя с установленным там оборудованием. Они стали предвестниками очередной смены исторических эпох.

Программирование в древние времена

Вот мы и подошли к вопросам, которые в большинстве книг и статей по истории вычислительной техники либо совсем не затрагиваются, либо рассматриваются очень поверхностно.
Рассматривая первобытные компьютерные времена, мы заметили, что никакого программирования тогда не существовало. Протокомпьютер или эокомпьютер, выезжая за ворота родного завода, уже нес внутри себя все, что было нужно для решения задачи. Люди так жили и к этому привыкли, кое-кто и до сих пор не избавился от этого стереотипа мышления. И вот нате вам здрассьте: новейший цифровой компьютер, который все называют не иначе как чудом техники, на поверку оказывается никчемной кучей железа - сам по себе он даже 2+2 сложить не может! Чтобы решить хоть какую-то задачу, нужна, оказывается, ПРОГРАММА. А что за программа, зачем и почему, где ее взять? (и кстати почём, если не секрет?)
Так неожиданно для всех возникла профессия программиста. Возникла как будто на пустом месте - и сразу в полный рост.
Элементной базой первых компьютеров были, как мы уже знаем, электромагнитные реле и электровакуумные лампы. Они не были придуманы на пустом месте - это были серийные промышленные изделия, использовавшиеся в аппаратуре связи. Стало быть, кто-то эти изделия создавал, и кто-то их применял. То есть первые компьютеростроители были обычными инженерами: электриками и электронщиками. А программистов среди них не было. Программирование не преподавалось в институтах, по нему не было книг. Между тем работа программиста требует специальных знаний, которые мало коррелируются с обычной математикой и практически совсем не коррелируются ни с электротехникой, ни с электроникой. Объем же этих знаний находится на пределе того, что доступно человеку с очень высоко развитым интеллектом! То есть программирование - самостоятельная профессия: ты можешь изучить целенаправленно именно эту профессию и работать в ней много лет, не нуждаясь ни в чем другом.
Теперь вспомним, что мы говорили выше о стоимости вычислительной операции в древние времена. Стояло требование: программа должна содержать как можно меньше операций, а профит (польза, прибыль) от каждой операции должен быть максимальным. Таков был категорический императив древнего программирования, который пережил и средние века. В новое время он был пересмотрен, но в ту эпоху, которую мы сейчас обсуждаем, любая попытка игнорировать или обойти этот императив ничем, кроме убытков, закончиться не могла. Мы-то, конечно, понимаем, что задача извлечь максимум профита из ограниченного ресурса никогда и нигде в мире не была слишком простой. Стало быть, и людей, способных эту задачу решать, никогда и нигде в мире не было слишком много. Отсюда очевидна необходимость налаживать профессиональный отбор и подготовку таких специалистов. А теперь прикиньте: допустим, летом 1951 года, предвидя запуск М-1 и МЭСМ, мы объявим прием абитуриентов по специальности «программирование» - к работе они приступят не раньше 1956-го года, а еще потребуется года три, чтобы понять, насколько они годны и насколько годна методика их подготовки… На дворе 1958 год - закончен выпуск «Стрелы», ей на смену пришли другие машины, притом много и разных…
Программирование в древности было мастерством на грани искусства. Программистов было мало, а для непрограммиста разработка программ представлялась чем-то совершенно запредельным.

Задачи и особенности применения ЭВМ

ЭВМ 1950-х годов были вычислительными машинами в полном буквальном смысле, т. е. решали задачи, связанные со сложными математическими и физическими расчетами, и по всем инженерным решениям были «заточены» под эти задачи: вспомним, что и ячейки памяти, и арифметико-логические устройства имели большую разрядность (40..52), обеспечивающую представление чисел с плавающей запятой.
Стоп-стоп, а как же бухгалтерия? Ведь еще в XIX веке именно она была самой компьютеризированной областью человеческой деятельности?
А никак. С того самого XIX века в бухгалтерии мало что изменилось. В крупных, технологически продвинутых конторах пользовались счетно-аналитическими машинами. Те, у кого «труба пониже и дым пожиже», арендовали счетно-аналитическую машину на машинносчетной станции, совершенно аналогично тому как колхозы не имели собственных тракторов, а арендовали их на машинно-тракторной станции. Для остальных выбор был между арифмометром и деревянными счётами. И такое положение дел сохранилось до 1980-х годов. В СССР профессия бухгалтера не была ни особо престижной, ни высокооплачиваемой. Работали там люди со средним образованием, порой даже неполным, и обеспечивать их настоящими компьютерами никому не казалось необходимым, так что в следующий раз мы про бухгалтерию вспомним только в главе «Новое время».
И только в 1960-е годы люди начали задумываться об использовании ЭВМ для решения задач в области экономики и управления производством, а еще чуть позже - и для других задач, в которых вычисления играли второстепенную роль.
Для большинства ученых, инженеров и студентов вычислительная техника была все еще совершенно недоступна и неизвестна. Для тех счастливчиков, у кого на работе или в учебном заведении имелись какие-то ЭВМ, основным режимом работы был пакетный: задачи, решаемые в интересах множества пользователей, объединялись в пакет, который решался последовательно от начала к концу. Чтобы обеспечить работу ЭВМ без простоев, нужно было к моменту запуска иметь все надлежащие данные в готовности. Подготовку данных целесообразно было производить параллельно с подготовкой самой машины, т. е. на отдельном устройстве. Занимались этим специальные работники - операторы подготовки данных - на специальных рабочих местах, оснащенных устройствами подготовки данных. Основным носителем данных для ввода в ЭВМ была перфокарта. УПД на перфокартах (не путать с перфоратором - устройством вывода данных из ЭВМ на перфокарты) представляло собой электромеханический прибор с клавиатурой наподобие пишущей машинки. При нажатии клавиши на перфокарте пробивались определенные отверстия. При этом оператор не видел результатов нажатия. Во избежание ошибок по завершении пробивки каждой перфокарты (обычно она содержала одну строку исходного текста программы) оператор должен был ввести строку еще раз, при этом пробивка не производилась, а производилась только сверка нажатых клавиш с данными, пробитыми на перфокарте. Если обнаруживалось несовпадение, то перфокарта исправлению не подлежала и браковалась, и весь процесс приходилось повторять заново (и не факт что с успешным результатом). По окончании подготовки всех данных колоду перфокарт из лотка УПД переносили на считыватель, подключенный непосредственно к ЭВМ. Когда машина была готова, ее запускали. Результаты расчетов выводились на принтер алфавитно-цифровое печатающее устройство (АЦПУ) и выкладывались в ящик, где пользователь мог их взять. С момента подачи заявки на вычисления до получения ответа могло пройти несколько дней.
На следующем фото - несколько перфокарт с текстом программы на языке Фортран и более прогрессивный носитель данных - перфолента:
istoria-perfokarta.jpg
Технология подготовки данных на перфокартах была весьма затратна, и в 60-е годы XX века для замены перфокарт были предложены более прогрессивные носители данных: магнитные ленты (МЛ) и магнитные диски (МД). Соответственно были созданы устройства подготовки данных на магнитных лентах (УПДМЛ) и на магнитных дисках (УПДМД). Оператор, работавший на этих устройствах, видел каждый введенный знак на экране непосредственно после ввода и мог исправлять ошибки по мере их обнаружения, что позволило сократить трудоемкость работы и уменьшить нервную нагрузку на работников.
По таким экономическим показателям, как объем, вес и стоимость носителя в пересчете на 1 байт информации, МД и МЛ были предпочтительны, тем более что они были многоразовые (в отличие от перфокарты, которая могла записываться только один раз). Было бы логично ожидать, что МЛ и МД быстро и полностью вытеснят перфокарты, но этого не произошло. С одной стороны, переоборудование ВЦ на новые носители требовало существенных капитальных затрат. С другой стороны, перфокарты представляли определенное удобство: внесение изменений в программу производилось путем изъятия, замены или вставки отдельных перфокарт, без переписывания всей программы. Аналогичная операция на МД или МЛ была сопряжена с определенными трудностями: на первоначальный текст приходилось писать патчи (англ. patch - лоскуток, заплатка, т. е. небольшой кусок текста, который нужно было наложить на определенное место изначального текста). Патчи записывались на МД или МЛ отдельно от основного текста, а операция их наложения была источником дополнительных ошибок. Технология наложения патчей применяется и сейчас, но только там, где это действительно необходимо.

Прикладные программы и операционные системы

В программировании немало вопросов, которые трудно понять и еще труднее объяснять. Но кажется я нащупал подход, который приближает нас к пониманию. Вообразим, что программа - живое существо, которое обитает в некоторой внешней среде. Чтобы организм мог жить, он, очевидно, должен быть приспособлен к той среде, в которой живет, но невозможно представить такой организм, который мог бы жить в любых условиях и мог бы приспособиться к любому их изменению.
Прикладная программа создается для решения какой-то жизненной, практической задачи. Применительно к эпохе, которую мы сейчас рассматриваем, - научной или инженерной, потому что других почти не было. Прикладная программа 1950-х годов предназначалась для конкретного компьютера и обитала в нем подобно раку-отшельнику в своей раковине: все, что надо, она вынуждена была делать своими вот этими клешнями, не надеясь на чью-либо помощь. Такой образ жизни не способствует быстрому умственному развитию: попросту говоря, прикладной программист был вынужден тратить много сил на всевозможные вспомогательные действия, прежде всего на ввод и вывод данных. Программы для микроконтроллеров - скетчи - и сейчас живут так. Но настоящие проблемы начинаются, когда старая «раковина» разваливается и «раку» приходится переселяться в новую. Это процесс непростой и небыстрый, и вообще не факт что с шансами на успех: при переносе программы со старого компьютера на новый что-то в программе наверняка потребуется переделать. Только что, в 40-е-50-е годы XX века, мы наблюдали переход от первобытности к цивилизации в компьютеростроении, а чуть позже, в 50-е-60-е годы, аналогичный процесс имел место в программировании. Люди пришли к пониманию, что вместо создания программ, с трудом приспосабливающихся к изменениям условий внешней среды, гораздо эффективнее будет создать для них искусственную среду обитания - «цивилизованную», более комфортную, чем «дикая природа». Такой средой стали операционные системы (ОС), но их становление не было одномоментным процессом.
На первых компьютерах каждая прикладная программа выполнялась от начала и до конца, после чего компьютер останавливался. Чтобы обеспечить эффективную эксплуатацию машины, в ее «экипаж» включались два человека: оператор, готовивший задачи (не путать с операторами подготовки данных) и инженер, который, нажимая соответствующие кнопки на инженерном пульте управления машины, заставлял ее загрузить и выполнить следующую задачу. На самых ранних компьютерах других вариантов работы просто не было. Однако, по мере того как промышленность осваивала изготовление ОЗУ увеличенной емкости, появилась идея отвести в памяти некоторый участок и разместить там определенные команды. Во время выполнения прикладной программы эти команды ждут своего часа и ничем себя не проявляют, но когда прикладная программа закончена, компьютер не останавливается: эти команды вступают в работу, обеспечивая в автоматическом режиме загрузку и запуск следующей задачи. Все это очень напоминает загрузчик-bootloader в нынешних устройствах на микроконтроллерах. По мере дальнейшего прогресса в технологии производства оперативной памяти загрузчик обрастал новыми функциями, в том числе направленными на обслуживание прикладной программы. Так из загрузчика постепенно выросли операционные системы.
Операционная система - программное изделие, обеспечивающее работоспособность компьютера и возможность выполнения на нем прикладных программ по командам пользователя или оператора. Сама она не решает никаких прикладных задач.
Операционная система древней эпохи являлась принадлежностью конкретного компьютера и могла рассматриваться как подставка-подкладка под прикладную программу, которая позволяет нашей зверюшке жить, ни в чем не нуждаясь: если требуется какое-то типовое вспомогательное действие, то прикладному программисту не нужно программировать его самому - он программирует лишь системный вызов, все остальное операционная система сделает как надо. Теперь, если мы создаем новый, более совершенный компьютер на замену старому, нам нет необходимости переделывать все имеющееся программное обеспечение: достаточно сделать новую операционную систему, в которой наши прикладные программы будут жить с комфортом, не подозревая о том, что компьютер уже другой.
Хотя первые операционные системы появились практически одновременно с первыми электронными цифровыми компьютерами, термин «операционная система» вошел в употребление не сразу. Например, на ЭВМ «Минск-32» (1968-1975 гг.) использовалось название «организующая система», а на БЭСМ-6 - «Диспетчер».
В 1960-е годы в области операционных систем имел место огромный прогресс. И хотя в техническом плане ОС конца древней эпохи еще сильно отличались от нынешних, идеология их уже приобрела ряд черт, близких к нынешним. В частности, сформировалось представление о том, что комплект поставки операционной системы должен включать следующие компоненты:
Ядро - это часть ОС, которая постоянно находится в оперативной памяти машины и обеспечивает две группы функций: общее управление процессом решения задач на машине и предоставление прикладным программам определенных услуг, прежде всего по вводу-выводу данных.
Оболочка во время решения прикладной задачи отдыхает, а по окончании прикладной программы вступает в работу, принимает от пользователя или оператора очередную команду и передает ее ядру для выполнения. Термин «оболочка» отражает тот факт, что команды оператора не принимаются ядром напрямую - ядро как бы скрыто под оболочкой.
Утилиты - программы, не имеющие прикладного назначения, а нужные для обслуживания компьютера. Как хороший моряк имеет на корабле запасные якоря, тросы, шлюпки и пластырь для заделки пробоин, как справный автомобилист возит с собой домкрат, насос, буксирный канат и бензошланг с «грушей», так и грамотный компьютерщик всегда имеет при себе «инструментальный чемоданчик» для устранения аварийных ситуаций и для оптимизации работы компьютера в повседневной обстановке. В отличие от ядра, которое бессменно-круглосуточно на посту, и от оболочки, которая постоянно в готовности вступить в работу, утилиты используются эпизодически и только по явной команде оператора.
Операционная система древней эпохи - однозадачная. Она загружает в компьютер прикладную программу и обеспечивает ее выполнение от начала до конца: пока программа не выполнена, следующую не начинаем. Около 1964 г. люди начали задумываться над темой, которая в англоязычной литературе называется мультипограммированием, а в русскоязычной - многозадачностью. Применительно к рассматриваемой эпохе вопрос стоял так: допустим, программа выполнила какие-то действия и ждет ввода новых данных, а пока их нет, сделать ничего нельзя - значит, чтобы процессор не простаивал, надо занять его чем-то другим. Однако эта идея могла быть воплощена в металл только с повсеместным внедрением накопителей на магнитных дисках, т. е. ближе к концу 1960-х годов. Многозадачные «Диспетчеры» БЭСМ-6, создававшиеся в 1967-1968 гг., как и сама машина, одной ногой стояли в древности, а другой - уже в средних веках. Примерно тогда же, с появлением мейнфреймов и терминалов, встал вопрос о создании операционных систем с разделением времени - это были уже по-настоящему многозадачные системы, но разговор о них пойдет уже в главе «Средние века».
В 50-е годы никакого взаимодействия между программами не предусматривалось. Если какие-то данные, выданные программой А, должны били использоваться программой Б, то максимум, на что можно было рассчитывать, это программе А вывести эти данные на перфокарты или перфоленту, а затем при исполнении программы Б вводить их. С появлением магнитных лент и дисков это проблема несколько упростилась, но людям потребовалось еще несколько лет, чтобы прийти к идее файловой системы, о которой чуть ниже (хотя, в принципе, это уже другая история).

Языки и технологии программирования

Когда появились первые ЭВМ и программирование только начиналось, программисты составляли непосредственно машинный код. Это так и называлось: программирование в кодах. Программа при такой технологии получалась практически нечитаемой для человека. Это казалось приемлемым, пока создается новая программа «с нуля». Однако по мере развития отрасли все чаще возникала необходимость что-то изменить в программе, написанной когда-то давно (и возможно, другим человеком). Очевидно, это была задача абсолютно нереальная. Так народ пришел к решению писать не сразу машинный код, а исходный текст, который может быть прочитан человеком и, с другой стороны, может быть преобразован в машинный код по известному алгоритму. Первоначально это преобразование приходилось делать вручную. Я еще застал те времена (1980-е годы), когда программирование для микропроцессора серии К580 (единственного доступного нам тогда настоящего микропроцессора) приходилось выполнять именно по такой первобытной технологии. Однако уже в 1950-е годы пришло понимание того, что это преобразование представляет собой абсолютно машинную работу и должно выполняться не человеком, а самим компьютером по программе, которую назвали транслятором (англ. translator - переводчик).
Программирование в кодах было дело хотя и нудное и трудоемкое, но имело важное преимущество: программист «держал в руках» каждую команду, что позволяло создавать продукт высокого качества: не допускать лишних действий, оптимизировать «тормозные» места, устранять аварийно-опасные участки… Чтобы не терять это преимущество, был создан способ передачи информации - язык, в котором каждая машинная команда представлена буквенно-цифровыми обозначениями, понятными человеку. Например add - сложить, mul - от слова multiply - умножить… В старых книгах можно встретить термин мнемокод (мнемонический, т. е. легко запоминающийся). Язык мнемокодов мог также называться «язык символического кодирования», «автокод» и др. Такие языки классифицируются как машинно-ориентированные языки, или языки низкого уровня. Их общая черта: программирование на них требует от программиста детального знания логической структуры («архитектуры») конкретной машины, на которой он работает. Использование такой программы на какой-то иной машине может быть сопряжено с определенными трудностями: как максимум, всю программу придется переписывать.
В 50-е-60-е годы язык низкого уровня для каждой новой машины создавался без каких-либо стандартов, так что для программиста попытка хотя бы просто прочитать программу, написанную кем-то для другой машины, могла оказаться непростым делом. К концу древней эпохи стали стихийно складываться представления о том, что команды, общие для разных компьютеров, нужно и записывать как-то единообразно. Примерно тогда же для программы, переводящей мнемокод в машинный язык, утвердилось название ассемблер (англ. assembler - сборщик), а язык мнемокодов соответственно стали называть языком ассемблера.
Правильно говорить: я программирую на языке ассемблера, но в обиходе чаще говорят просто: программирую на ассемблере.
Программирование на ассемблере сохраняет все преимущества программирования в кодах, но избавляет от основного недостатка: исходный текст на языке ассемблера хотя и выглядит ужасно сложно, но все же может быть прочитан человеком (а если можно прочитать, то отчего бы не попробовать написать?). И все-таки эта работа сложна и трудоемка, и доступна не всем. Отсюда появилась идея создать язык программирования высокого уровня. Задумавшись о создании таких языков, люди очень быстро пришли к пониманию, что такой язык, в противоположность языкам низкого уровня, не должен быть привязан к особенностям архитектуры какого-либо конкретного компьютера, т. е. должен быть абстракцией «компьютера вообще», языком межкомпьютерного общения. Такой язык должен обеспечивать программисту удобство решения некоторого широкого множества задач, отсюда возник термин проблемно-ориентированный язык. Транслятор с языка высокого уровня сейчас обычно называют компилятором, но этот термин утвердился в более поздние времена.
Подобные языки - Алгол и Фортран - появились уже в 50-е годы, затем в этой отрасли имело место достаточно долгое и сложное развитие.
Язык программирования Фортран (англ. FORmula TRANslation - перевод формул) создан фирмой ИБМ под руководством Джона Бэкуса в 1954 г. - он современник паровозов! Для программистов того времени он стал тем же, чем были первые крупносерийные тепловозы ТЭ3 для наших железнодорожников: он принес с собой комфорт и скорость, прежде всего за счет исключения самой грязной и утомительной работы, каковой на паровозе была работа кочегара, а в вычислительной технике написание машинных кодов. Программа на Фортране имела вид не кодов, а формул, которые любому программисту привычны по школьной и институтской математике. Примерно таких:

VES = OBJEM * PLOTNOST

Фортран превосходен как язык ученых, которые чаще всего сами не являются программистами, но ощущают потребность быстро создавать компактные программы для сложных числовых расчетов. Важная черта Фортрана: хотя запись формул в нем и отличается от принятой ранее в научных книгах и на занятиях в учебных заведениях, она ИНТЕРНАЦИОНАЛЬНА, т. е. освоение Фортрана не требует знания какого-либо конкретного человеческого языка, например английского.
Основной недостаток Фортрана - его непригодность для решения иных задач, кроме вычислений по формулам, поэтому сейчас он имеет ограниченное применение: главным образом там, где от программы требуются учебно-демонстрационные свойства. Будучи ПЕРВЫМ В ИСТОРИИ официально принятым на вооружение языком высокого уровня, Фортран жив и сейчас (последняя ревизия стандарта была в 2008 г.). За долгие годы на нем было написано множество программ математического назначения, которые хорошо отлажены, эффективны и доступны в виде исходных текстов - без преувеличения это достояние человечества!
Запись арифметических операций в виде формул привычна всем современным программистам и кажется настолько естественной, что ничего другого как будто и быть не может, а между тем альтернативные пути были, и если мы хотим быть хорошими историками, то нам никуда не деться от того, чтобы осветить и эту тему.
Знала ли уже знакомая нам Грейс Хоппер, работая в начале 1950-х годов на фирме «Ремингтон-Рэнд» над разработкой уже знакомого нам UNIVAC I, о разработке Фортрана? Очень возможно, что и не знала, а может быть и знала, но сомневалась в его перспективности, а может сознательно решила идти своим путем… Впрочем, есть еще одна гипотеза, пусть и маловероятная: она элементарно не додумалась до алгоритма трансляции формул в машинные коды, ведь полная научная теория, на основании которой такие задачи решаются, была проработана Бэкусом несколько позже, в начале 1960-х годов. Так это было или не так, но есть одна вещь, которую мы можем утверждать с большой уверенностью: будучи по натуре глубоким ученым, создавая свой Flow-Matic, она не рассчитывала на то, что ее творение сразу овладеет умами всего человечества. Flow-Matic стал «пробным шаром», остался практически неизвестным за пределами круга разработчиков и к нашему времени совершенно забыт. Однако его влияние на весь путь развития мирового программного искусства колоссально. Даже если бы Грейс Хоппер не создала больше ничего другого, ее вклад в это искусство превышал бы вклад любого из тех ученых и инженеров, которых мы будем вспоминать по ходу нашего исследования.
Во Flow-Matic арифметические операции записываются не формулами, а словесными выражениями. Примерно такими:

MULTIPLY OBJEM BY PLOTNOST GIVING VES

Вероятно в то время считалось, что подобная запись более читаема для работников финансово-экономической сферы, которые не дружат с математикой и физикой. Во всяком случае, такую трактовку мы видим в позднейших руководствах по программированию на языке Кобол. Мне, однако, сдается, что истинная подоплека здесь несколько другая: подобная запись хорошо «перекликается» не с Фортраном, а с тогдашними языками символического кодирования, которые в те времена только еще складывались. Иначе говоря, Хоппер не конструировала язык высокого уровня на чистом месте, а выращивала его из известного языка низкого уровня путем внесения изменений, направленных (а) на обеспечение кроссплатформенности и (б) на повышение читаемости.
Завершив работу над Flow-Matic, Хоппер на этом не остановилась, продолжила действия в выбранном направлении… Потом были Math-Matic, AIMACO и COMTRAN - от них практически не осталось следов, что неудивительно - все они были пробными, создавались в ходе поисков «пути истины», и вот в итоге к 1959 г. сформировался-таки второй получивший широкое признание язык программирования - Кобол (COBOL - Common Business-Oriented Language - всеобщий бизнес-ориентированный язык). В противоположность Фортрану, Кобол предназначен не для математиков и физиков, а для работников финансово-экономической сферы. В западном мире еще в 2000-е годы считалось, что на этом языке написано больше всего строк исходного текста (по некоторым данным порядка 250 млрд строк - много это или мало - как судить?). В СССР эта сфера всегда недооценивалась, так что Кобол у нас остался практически неизвестен.
Примерно в 1980-е годы Кобол стали считать устаревшим, с тех пор он не преподается в учебных заведениях… Но вот еще в качестве информации к размышлению на тему Кобола: https://skillbox.ru/media/code/cobol-zhiv/ https://zen.yandex.ru/media/habr/75letnii-programmist-osnoval-kompaniiu-po-obslujivaniiu-kompiuternyh-sistem-na-cobol-5de5fe9a5ba2b500adf0a001?&secdata=CL3P39jsLSABMIKAAQ%3D%3D
Технический прогресс никогда не задерживается на какой-либо ступени - он развивается согласно присущей ему логике, которую нам совсем не трудно понять. Время от времени в интересующей нас области техники появляется изделие (машина, инструмент..), ломающий все наши прежние представления о данной работе: как ТЭ3 в сравнении с паровозами, как Фортран и Кобол в сравнении с машинными кодами… Но когда это изделие вступает в повседневную эксплуатацию, мы начинаем замечать, что оно не лишено определенных недостатков, и испытываем труднопреодолимое желание эти недостатки исправить. Так революция сменяется эволюцией. Чуть позже, рассматривая языки программирования Паскаль и Си, мы увидим, что эта тенденция иногда нарушается. Но это будет другая история - история средних веков, а сейчас мы вернемся на рубеж 50-х-60-х годов XX века: в эти годы железнодорожники получили ТЭП60, а программисты Алгол.
Мои сверстники вспоминают ТЭП60 как самый красивый отечественный тепловоз (да и в мировом масштабе вероятно тоже), и хотя техническим изделиям красота отнюдь не чужда, но создавался он, конечно, не ради этого. Решение о его проектировании принято из соображений прежде всего экономических: с одной стороны, уменьшить эксплуатационные расходы, и с другой стороны - увеличить скорость. По этим показателям ТЭП60 опережал ТЭ3 на какие-то вроде бы ничтожные проценты, но тысячи таких локомотивов, год за годом бороздящие просторы огромной страны, обеспечили бы многомиллионную прибыль. Это понятно каждому, кто хоть раз в жизни вставлял бензозаправочный пистолет в бензобак автомобиля. Экономика Алгола не столь очевидна, но мы сможем ее понять, если поднимемся на более высокий уровень абстракции. Поэтому тепловозы мы сейчас оставим в покое (они нам нужны лишь для того, чтобы проиллюстрировать одну мысль: различные области техники развиваются по схожим законам), а разницу между Алголом и Фортраном рассмотрим более подробно.
Фортран в его классическом виде - бесструктурный язык. Для условных переходов в нем используется запись типа:

IF X<0 THEN GOTO 5

где 5 - метка оператора, к которому совершается переход. И оператор GOTO, и метка, на которую он нацелен, могут находиться в любом месте программы. Это не важно, если программа не очень большая. По мере разработки сложной программы множество условных переходов может создать нешуточную путаницу. На это почти сразу после массового внедрения Фортрана обратил внимание голландец Э. Дейкстра, ставший идейным вдохновителем разработки Алгола. Решение о начале разработки Алгола было принято в мае 1958 г. на конференции в федеральном техническом университете города Цюриха. В ней, в частности, участвовали Бэкус от имени Фортрана и Джозеф Уэгстен от Кобола. Разработка шла медленнее, чем хотелось бы, а потом еще трудности возникли с внедрением… В 1962 г. состоялась новая конференция, среди участников которой были уже и Дейкстра, и Никлаус Вирт - впоследствии (ближе к 1970 г.) создатель языка Паскаль, в котором были реализованы идеи Вирта, не принятые другими участниками. В общем, единодушия на обеих конференциях не было, и неудивительно, что разработка затянулась. Так постепенно оформился язык Алгол-68, который получил распространение на всем европейском континенте, включая СССР. В средние века Алгол-68 станет базовым языком МПВК «Эльбрус». А вот в США этот язык встретил серьезное противодействие со стороны ИБМ, которая активно продвигала свои разработки: сначала Фортран, а к концу 1960-х годов ПЛ-1.
В Алголе и ПЛ-1, в отличие от Фортрана, меток вообще нет, а условные переходы и циклы программируются в виде структур, содержащих то или иное количество блоков: условный переход возможен только по правилам структуры и только в пределах «своего» блока, а «далекие» переходы, создающие наибольшую опасность путаницы, отменены вообще как класс. Это позволяет сделать программу более логичной и ясной и, как следствие, несколько уменьшить трудоемкость разработки. Вроде бы мелочь, но если структурному принципу следует множество программистов, работающих год за годом, то экономический эффект может быть весьма значительным. Во что это выльется «в тугриках», никто не считал и считать не собирается, да это и непринципиально. Для нас принципиально то, что древние люди к таким вещам относились серьезно и принимали грамотные инженерные решения, не дожидаясь подсчета прибылей и убытков.
Заметим, что при программировании на бесструктурных языках типа Фортрана нам никто не запрещает придерживаться структурного принципа (в современных версиях языка введены даже соответствующие операторы). Но на Фортране это вопрос самодисциплины. В конечном счете - вопрос культуры каждого конкретного программиста. А на Алголе этот принцип возведен в ранг обязательного, поэтому все мало-мальски современные языки, начиная со средневекового Паскаля, построены на структурном принципе и таким образом являются потомками Алгола.
На смену Алголу был предложен ПЛ-1 (PL/1, 1964 г., фирма «ИБМ» в рамках проекта IBM/360), затем появилось множество других языков. «Иных уж нет, а те далече»…
Появление ПЛ-1 поначалу было принято программистами, мягко говоря, прохладно: они думали, что теперь их заставят все прежние программы переписывать на новый язык. Однако этот психологический барьер был преодолен, и новые языки стали создаваться один за другим, как новые сорта тюльпанов. Аналогия с тюльпанами особенно уместна потому, что большинство вновь создаваемых языков не представляло собой ничего принципиально нового. Вот и ПЛ-1 не стал новой ступенью эволюции по отношению к Алголу (а по каким, собственно, основаниям от него этого ожидали?) и сошел со сцены еще раньше своего прототипа. И поделом: с запозданием осознав преимущества Алгола, ИБМ, вместо того чтобы признать свою неправоту и скорректировать курс, затеяла разработку чисто конкурентного языка, не предлагавшего ничего нового в сравнении с прототипом. В средние века ИБМ повторит эту стратегическую ошибку: будет разрабатывать операционную систему ОС-2 (OS/2), которая была призвана заменить ДОС, по сути не предлагая ничего нового взамен…
Язык высокого уровня, в противоположность ассемблеру, всегда - математическая абстракция, описывающая некоторый «компьютер вообще». В нем нет (по крайней мере не должно быть) элементов, связанных с особенностями устройства какой-либо машины. Соответственно от программы, написанной на таком языке, мы ждем переносимости, или кроссплатформенности, т. е. возможности исполнять ее на любом компьютере, а не только на том, для которого она была изначально написана. На практике переносимость чаще всего бывает лишь частичной, т. к. не все компиляторы и не все операционные системы строго однозначно понимают все, что может быть записано в программе. Переносимость - чрезвычайно важное свойство программы, но оно не бесплатно: при написании программы на языке высокого уровня программист не может использовать тонкие возможности конкретного компьютера, так что программа выполняется медленнее и зачастую требует больше памяти, чем аналогичная программа на ассемблере.
Алгол, Кобол и Фортран знаменуют собой древнекомпьютерную цивилизацию. Вот я это написал и соображаю: не забыл ли чего? Очень похоже, что не забыл. Древние люди отнюдь не стремились к разнообразию языков. Более того: они были ПРОТИВ разнообразия, потому что у них были в жизни другие приоритеты. И если мы серьезные историки, то мы просто обязаны в этих приоритетах разобраться.
Во-первых, поскольку основные пользователи Фортрана - ученые, то Фортран для них - инструмент научного познания. В науке ни одно достижение не утверждается само собой: оно требует обсуждения, обоснования, доказательств. Соответственно программа должна быть написана так, чтобы была понятна коллегам-ученым. А поскольку большинство коллег - не профессиональные программисты (да еще и инглиш в школе не все хорошо учили, да и не всем его хорошо преподавали), изучение множества языков для них было бы совершенно непопутно. Нужен такой язык, чтобы один на всех, язык как средство международного общения. Фортран, будучи предельно простым для изучения (в сравнении с другими языками), этому требованию удовлетворял.
Во-вторых, в те времена каждый новый компьютер отличался от прежних. Такого привычного нам сейчас понятия, как аппаратная платформа, тогда просто не существовало! Запуск любой программы на «неродном» железе почти всегда был авантюрой с шансами фифти\фифти. А теперь вообразите, что еще и каждая новая программа написана на своем языке… Разрабатывать для каждого нового компьютера множество компиляторов было технически сложно и экономически нерентабельно. Поэтому, как только создавали новый компьютер, первым делом создавали для него компилятор Фортрана, и в большинстве случаев этого было достаточно.
Рассмотрим процесс решения задачи на древней ЭВМ. Перфокарты, заложенные в лоток считывателя, представляют собой поток данных. Поток представляет собой цепь данных, которая не имеет определенного конца и начала, не имеет длины, соответственно местонахождение каждого «звена» цепи может быть определено только относительно предыдущего и последующего звеньев, но не по его месту относительно начала потока. Все данные, содержащиеся в потоке, должны читаться последовательно, в том порядке, как они записаны, и каждый байт можно прочитать только один раз: если упустить его из оперативной памяти, то больше мы его не увидим. Если подготовлено несколько задач, которые нужно решить сегодня, то тексты программ включаются в поток последовательно, а исходные данные для решения каждой задачи либо вставляются прямо в текст программы, либо следуют за ним с соблюдением определенных формальностей. Операционная система читает текст программы и компилирует его. Результат компиляции - машинный код - размещается в оперативной памяти компьютера (больше его размещать, скорее всего, просто негде). По окончании компиляции программа сразу запускается на выполнение. Если какие-то данные нужно вводить, значит, ожидаем увидеть их во входном потоке именно сейчас. Когда задача решена, операционная система читает из входного потока следующие команды.
При решении научной или инженерной задачи программисту приходится использовать различные функции, например тригонометрические. Встретив в программе упоминание функции, компилятор, очевидно, должен включить в выполняемый код соответствующие команды, а где их взять? Компилятор древней эпохи всегда содержал «джентльменский набор» встроенных функций, которые были его неотъемлемой частью: их нельзя было ни перепрограммировать, ни добавить новые. У разных компиляторов набор встроенных функций мог быть более или менее богат, отсюда ошибочный стереотип мышления - сравнение языков по принципу «этот язык лучше, потому что у него больше встроенных функций». На самом деле, как мы понимаем, встроенные функции с языком непосредственной связи не имеют.
Если же встроенных функций не хватало, нужно было писать свою, и текст ее вставлять в текст программы. Такой подход в те времена был практически безальтернативен.
К чему я это все? К тому, что и операционные системы, и языки, и компиляторы 50-х годов XX века были жестко «завязаны» на потоковый ввод данных. В 60-е-70-е годы переход с перфокарт на магнитные ленты позволил несколько ускорить и удешевить процесс, но не изменил принципиально его логику: магнитная лента - тот же поток данных. Применение магнитных дисков позволило потоковый способ ввода данных заменить на блочный: теперь и текст программы, и исходные данные для ее решения можно было разместить в разных местах диска и читать тогда, когда они понадобятся. Разумная идея, однако, овладела умами человечества не сразу, а тогда, когда было предложено над блочным устройством (диском) надстроить следующий логический этаж - файловую систему: на магнитном диске данные записывать не как попало, а по определенным правилам. Все пространство диска делилось на области - файлы, снабженные именами и зарегистрированные под этими именами в каталоге. Чтобы прочитать/записать файл, ищем его имя в каталоге, находим соответствующие координаты отведенной под этот файл области диска и читаем, что находится в этой области. Так любая программа могла читать и записывать файлы, и прикладному программисту не нужно думать, как файлы хранятся на диске и как их читать или записывать - эту услугу ему обеспечивает операционная система. Впрочем, это уже другая история: история средних веков.
Программа, написанная «с чистого листа», не будет сразу работать как надо (а если она работает, значит в ней что-то неправильно). В программе всегда есть ошибки, которые нужно устранять. Эта работа называется отладкой и занимает в работе программиста гораздо больше времени, чем написание программы.
Ошибка в программе носит жаргонное название баг (англ. bug - жук, но чаще переводят: таракан), а отладка по-английски - debugging. Программистская пословица: «Свой ум - царь в голове, но у меня конституционная монархия: реальная власть принадлежит багам» - имеет место применительно как к людям, так к компьютерам и программам.
В древние времена отладка программы производилась путем пробных запусков («прогонов») программы и сравнения выходных даных с ожидаемыми. Ничего другого просто не было. После каждого прогона в программу приходилось вносить изменения. Программист, работающий в вычислительном центре, обычно по итогам прогона получал перфокарты с текстом программы на руки и мог вносить нужные изменения сам, обращаясь при необходимости к операторам подготовки данных. В остальных случаях приходилось писать новые заявки в вычислительный центр на выполнение работ. Каждый «выход на машину» занимал много часов, а то и дней, так что отладка могла затянуться.

***

Летом 1984 г. мы, студенты, закончившие первый курс, проходили практику на вычислительном центре ЛЭТИ. На ВЦ имелись 3 машины семейства ЕС. Построенные в 70-е-80-е годы, они, однако, представляют собой копию IBM/360, разработанной в 1960-е годы, и по всем инженерным решениям соответствуют древней эпохе. Мы, правда, этих машин так ни разу и не увидели: мы писали тексты программ на бумаге и сдавали их на ВЦ, а потом получали оттуда распечатки с ответами машины. За две недели нам предстояло выполнить 5 выходов на машину и продемонстрировать работоспособность программы на языке Фортран, написанной еще весной в рамках курсового проекта. Однако персонал вычислительного центра к своим обязанностям относился халатно, так что из-за ошибок операторов подготовки данных я за первые три выхода не получил вообще ничего. Преподаватель Тамара Ильинична только руками разводила. И лишь после пятого выхода я наконец увидел на распечатке… только текст своей программы, но без каких-либо выходных данных. У моих товарищей дела шли если лучше, то ненамного. Вычислительный центр, хотя это была целиком их вина, машинного времени нам больше не предоставил, да и срок практики подходил к концу, все хотели на каникулы (Тамара Ильинична не исключение). Практику продолжили уже не на ВЦ, а в лаборатории кафедры вычислительной техники. Там стояла машина СМ-4, но эта машина уже не древняя, а средневековая, так что рассказ о нашей практике на этом прерываю, чтобы продолжить его в следующей главе.

Характеристика эпохи

Эпоха древней компьютерной цивилизации пришлась на 50-е-60-е годы XX века. Отсчет этой эпохи я предлагаю начать с запуска М-1 и МЭСМ: два компьютера вступили в строй почти одновременно - это немало, если сосчитать, сколько всего было в мире до этого.
Древняя эпоха отличается тем, что программируемые цифровые вычислительные машины стали электронными (первоначально - ламповыми), стали выпускаться на заводах серийно и начали вытеснять протокомпьютеры и эокомпьютеры, как электромеханические, так и электронные аналоговые. Введенный мною термин «цивилизация» наверняка вызовет возражения у читателей, особенно у тех, кто интересуется «настоящей» историей. Я настаиваю на этом термине, потому что в рассматриваемую эпоху в СССР, США и Великобритании, а чуть позже и в других странах, сформировалась компьютерно-программная промышленность, движущей силой развития которой были уже не энтузиасты-одиночки, работавшие в гаражно-коленочных условиях, а инженерные коллективы, вооруженные научными теориями и имеющие серьезную финансовую поддержку. Несмотря на это, компьютеров было мало, и доступ к ним был ресурсом, т. е. чем-то таким, чего все хотели, но на всех не хватало.

70-е-80-е годы ХХ века - компьютерные средние века

С появлением транзисторов стремление проектировщиков ЭВМ создать небольшое, недорогое и энергоэкономичное изделие не только не остановилось - наоборот, оно еще усилилось. В 1960-е годы была изобретена интегральная микросхема - устройство размером с транзистор (порядка 1 см), содержащее несколько десятков транзисторов и представляющее собой целый блок, реализующий некоторую операцию по обработке данных. В наше время уже никого не удивляют микросхемы с миллионами транзисторов. Важнейшее свойство микросхемы состоит в том, что входящие в ее состав транзисторы и соединения между ними не монтируются один за другим, а печатаются подобно гравюре все сразу, так что затраты времени на их создание не зависят от их количества. Микроэлектронная технология (основанная на микросхемах) позволила радикально улучшить все основные параметры компьютеров: уменьшить размеры, вес и стоимость, уменьшить потребление электроэнергии и как следствие - облегчить тепловой режим машины, увеличить быстродействие. Так появились ЭВМ третьего поколения, к которому относятся и вся наша нынешняя вычислительная техника. Однако новое поколение само по себе не означало смены исторических эпох: прогресс в деле миниатюризации элементов ЭВМ был и раньше, и позже. Смену исторических эпох я увязываю не с микросхемами, а с внедрением в повседневную практику диалогового режима общения пользователей с ЭВМ.
Термин «средние века» у человека далекого от настоящей истории ассоциируется с рыцарскими междоусобицами и религиозным мракобесием… Наши, компьютерные средние века совершенно другие: это период колоссального расцвета и развития. По итогам этого периода компьютерный и особенно программный мир приобрели в значительной мере тот вид, который привычен нам сейчас.

Терминалы, мейнфреймы, серверы и клиенты

Идея диалогового режима работы пользователя с ЭВМ состоит в том, чтобы не готовить все программы и данные заранее перед запуском машины, а вводить все в уже работающую машину и через короткое время (порядка секунд) получать от нее ответ. Тогда операция подготовки данных станет не нужна.
В 70-е годы XX века появились видеотерминалы, обеспечивавшие работу пользователя с ЭВМ в диалоговом режиме. Терминал (абонентский пункт) - оборудованное рабочее место пользователя, установленное, как правило, за пределами машинного зала, но соединенное с компьютером проводами типа телефонных или телеграфных. В принципе, абонентские пункты, которые можно было установить на значительном расстоянии от ЭВМ, были и раньше: в качестве терминалов использовались электрические пишущие машинки, телетайпы и буквопечатающие телеграфные аппараты, примерно такие, как следующие экспонаты петербургского Музея связи:
istoria-terminal-1.jpg
istoria-soviet-teletypes.jpg
Однако повсеместное внедрение терминалов сдерживалось двумя факторами. Во-первых, для работы ЭВМ с терминалами были нужны многопользовательские операционные системы разделения времени (ОСРВ) или системы виртуальных машин (СВМ): они имелись далеко не везде, да и качество «крякнутых» американских программ, и квалификация тогдашних сисадминов (воспитанных на этих программах!) оставляли желать лучшего. Во-вторых, чтобы пользователи могли плодотворно работать в диалоговом режиме, необходима многочасовая непрерывная работа самой ЭВМ, что тоже удавалось не всегда. Так, например, в Ленинградском Электротехническом институте (ЛЭТИ) в 80-е годы XX века имелся вычислительный центр, оснащенный ЭВМ ЕС-1060, и к нему было подключено несколько терминальных классов, но они не могли по существу эксплуатироваться именно из-за постоянной неготовности ЭВМ. В результате практически до 1988 года студенческие курсовые проекты по программированию приходилось выполнять в пакетном режиме с использованием перфокарт.
Принцип обслуживания множества пользователей (абонентов) одной машиной в диалоговом режиме жив и сегодня и носит название мейнфрейм (англ. mainframe). Этим же словом называется и сама машина. Близкое по смыслу слово - сервер - компьютер (или программа), смысл существования которого сводится к выполнению команд, поступающих с других компьютеров. Различие между этими понятиями довольно тонкое. Принцип мейнфрейма привлекателен прежде всего экономически: он позволяет сосредоточить финансы и людские силы на одном компьютере и тем самым придать последнему максимально богатые технические возможности, которые становятся доступны каждому из абонентов. Абонент подключается к мейнфрейму на коммерческих условиях и решает свои задачи, независимо от того чем занимаются другие абоненты. Мейнфрейм работает по принципу разделения времени. Для него не существует понятия перегрузки: сколько бы ни было пользователей, все они обязательно будут обслужены. Но раньше других получит свои результаты тот, кто пишет быстро работающие программы. А тот, кто пишет программы тяп-ляп, вынужден будет сидеть какое-то время перед пустым экраном, и это очень мудро. Сервер, как правило, обеспечивает централизованное хранение данных или выполнение каких-то операций с целью обеспечить совместную работу множества пользователей. Механизма разделения времени на сервере может не быть, но тогда, если вдруг один или несколько пользователей зададут серверу бОльший объем работы, чем он может выполнить, то сервер может «упасть», т. е. вообще перестать реагировать на запросы пользователей.
Рабочее место, соединенное с мейнфреймом или сервером, называется клиентом. В современном компьютерном мире под этим словом чаще подразумевается не машина, а программа, образ действия которой состоит в том, чтобы не решать сложную задачу своими силами, а послать соответствующую команду на другой компьютер, и полученный от него ответ предъявить пользователю. Интернет-браузер, например, представляет собой не что иное как WEB-клиент. Вам может встретиться выражение тонкий клиент - это устройство (или опять-таки программа), полностью зависимое от мейнфрейма, не способное работать автономно. Видеотерминалы 70-х годов, как и телетайпы и пишущие машинки более ранней эпохи, - типичные тонкие клиенты.
Рабочая станция, в отличие от клиента и сервера, - компьютер, выполняющий работу по команде пользователя, сидящего непосредственно за этим самым компьютером. Очевидно, что все наши настольные компьютеры и ноутбуки представляют собой рабочие станции.
Хорошим примером средневековой клиент-серверной системы является АСУ «Экспресс-1», внедренная на Московском железнодорожном узле в 1972-1974 г. с целью автоматизации продажи пассажирских билетов на поезда. Серверная часть АСУ была построена на ЭВМ «Маршрут-1», которые создавались в ЕрНИИММ на основе машины «Раздан-3». Рабочие места кассиров были оборудованы видеомониторами и принтерами. Аналогичная система «Сирена» на основе машины М-3000 примерно в те же годы была создана для продажи билетов на самолеты. В 1982 г. начато развертывание системы «Экспресс-2», серверная часть которой строилась на ЕС ЭВМ. В 1986-1987 гг. мы с женой ездили к родственникам в город Киров: билеты из Ленинграда в Киров мы приобретали уже через «Экспресс-2», и по виду они уже были близки к нынешним, а билеты из Кирова в Ленинград покупали обычным порядком, и выглядели они традиционно для того времени: маленькие, толстые и твердые. Система «Экспресс-2» работала до 2005 г., пока не была заменена на «Экспресс-3». В Японии подобные системы «Марс-1»..«Марс-202» строились начиная с 1960 г. https://studfile.net/preview/4553098/

Суперкомпьютеры и многопроцессорные комплексы

В предыдущей главе мы рассмотрели ЭВМ БЭСМ-6 как серийную машину, одну из быстрейших в мире в конце 1960-х годов. Кстати, куратор музея вычислительной техники в Блетчли Парк (Великобритания) Д. Свейд называл БЭСМ-6 суперкомпьютером https://www.kramola.info/vesti/protivostojanie/sovetskaja-vychislitelnaja-tehnika-istorija-vzleta-i-zabvenija. К сожалению, эта машина оказалась «лебединой песней» советского компьютерстроя. В 1970-е годы расстановка сил в мировой компьютерной гонке начала меняться: Великобритания, еще недавно внесшая такой большой вклад в становление компьютерной отрасли, практически «сошла с дистанции», но и соотношение сил между СССР и США уже не было прежним. Рассматривая американское компьютеростроение древней эпохи, я просто не нахожу сколько-нибудь выдающихся образцов… Но вот в начале 1970-х годов Сеймур Крей затеял амбициозный проект по созданию суперкомпьютера, который был назван по фамилии создателя. Первый такой компьютер был построен в 1974 году, и в последующие десятилетия Крей построил несколько машин, каждая следующая их которых была мощнее и совершеннее предыдущих.
Для чего нужны суперкомпьютеры? Уж точно не для студенческих курсовиков, и уж точно не для игр и офисных дел. Хотя машины Крея и не претендовали на серийное производство, а были «формулой 1» среди компьютеров, все-таки строились они не для рекордных гонок, а для решения вполне боевых задач. Создание таких машин финансируется различными конторами (государственными, а в США и частными) для решения задач в их интересах. Военным супермашины нужны для расчета траекторий ракет и для «взлома» вражеских шифров, ученым-географам для прогнозирования погоды и поиска нефти и газа, ученым-биологам для анализа белков, инженерам - для расчета прочности сложных сооружений… На самом деле таких задач довольно много, я здесь упомянул лишь те, которые больше «бросаются в глаза». И давайте отметим, что суперкомпьютер, в отличие от серийных машин 1970-х годов, - машина чисто вычислительная, притом часто «заточенная» под какие-то специфические задачи. Соответственно и программное обеспечение таких компьютеров существенно отличалось от серийных. Операционной системы здесь может вообще не быть, или она может быть совсем примитивной, как загрузчик-bootloader в нынешних микроконтроллерах.
Насколько я понимаю, большого секрета из разработок Крея никто не делал. Во всяком случае, сам факт существования этого проекта был известен в СССР, были известны и некоторые особенности устройства суперкомпьютера. Но что могла наша страна противопоставить Крею?
Чтобы на этот вопрос ответить, нам придется вернуться к мысли о том, что компьютеры живут не в своем обособленном мирке, а в мире, населенном людьми, в мире, где действующими факторами являются политика и экономика. Надо представлять себе, что такое коммунистическая идеология, что такое социалистическое плановое хозяйство. В СССР было немало талантливых инженеров, но руководили всем не они, а функционеры Коммунистической партии. От них вышестоящее начальство требовало выполнения и перевыполнения плана, а для этого надо было наращивать серийное производство. Разработка суперкомпьютеров этому только мешала - это во-первых. Во-вторых, из одной инженерной идеи машину не построишь: чтобы идею воплотить в металл, нужны опытно-конструкторские разработки, а они требуют денег, а денег на такие разработки в 1970-е годы, в отличие от 1950-х, уже не было. В-третьих, кто будет этими разработками руководить? Искать в своей стране гения-индивидуала, который будет двигать дело вперед, используя свой ум и свои личные деловые качества, примерно как Крей в США или как в свое время И. В. Курчатов в советской атомной энергетике? Но можно ли допустить, чтобы такой крупный и важный проект «висел» на личных и деловых качествах отдельного человека? В капиталистических странах это обычное дело, но в СССР это было немыслимо. Сегодня мы позволим ему руководить проектом, завтра он потребует себе права самостоятельно набирать работников и договариваться с ними насчет зарплаты, а послезавтра он скажет, что ему не нужна коммунистическая партия как руководящая и направляющая сила… А если весь проект не приведи Господь закончится успешно, то он скажет, что он сам теперь может быть кому угодно руководящей и направляющей силой? Это было бы крушение устоев социализма.
Однако было бы неправомерно говорить, что после БЭСМ-6 в нашей стране совсем не велись разработки машин сверхвысокой производительности. Задачи-то стояли, их нужно было решать, и их решали, просто подход был другой, типично социалистический: вместо того чтобы строить один супермощный процессор, построим многопроцессорный вычислительный комплекс (МПВК). Такие комплексы были созданы: «Эльбрус» и ПС-2000 (1972-1980 г.). «Эльбрус-1» имел быстродействие, по разным данным, 12..15 миллионов операций в секунду, а «Эльбрус-2» (1977-1985 г.) - уже 125 миллионов. Эти машины строились серийно, а вот «Эльбрус-3» (1986-1994 г., 500 миллионов операций в секунду) остался в единственном экземпляре. До меня не доходила информация о том, чтобы нечто подобное строилось в средние века в других странах - похоже, что это полностью оригинальная отечественная технология. На какое-то время она была забыта, но что собой представляют нынешние многоядерные «Пентиумы»? Очевидно, они - прямые потомки МПВК. Ничего удивительного: Владимир Пентковский, от фамилии которого и происходит название «Пентиум», ранее участвовал как раз в создании «Эльбрусов».
Почему я рассматриваю суперкомпьютеры как элемент следующей исторической эпохи? Потому что они вызвали определенный пересмотр взглядов на архитектуру компьютеров (или скорее возникли по итогам такого пересмотра). Все прежние вычислительные устройства - от древнеримского абака до БЭСМ-6 - реализовали классический подход к обработке данных: строго последовательно число за числом, операция за операцией. Такого подхода и до сегодняшнего дня никто не отменял, но в 70-е годы на горизонте вырисовались задачи, для которых такой подход малоэффективен. Для решения этих задач Крей предложил конвейерное выполнение операций, а наши специалисты - распараллеливание вычислений на несколько процессорных ядер. Какой из этих подходов эффективнее? На этот вопрос трудно ответить, потому что рубль и доллар - вещи несравнимые. Это мы говорим о суперкомпьютерах средних веков. В 80-е годы все технические резервы для построения сверхбыстродействующего процессора оказались исчерпаны, поэтому суперкомпьютеры последующей эпохи - обязательно многоядерные.
В предыдущей главе мы обсудили разрядность древних компьютеров. Около 1970 г., по опыту проектирования и эксплуатации множества машин, сложилось представление о том, что хороший мейнфрейм должен быть 32-разрядным, а машина попроще может быть и 16-разрядной. Раньше таких машин никто не строил, но теперь задачи изменились. Это мы говорим о разрядности целых чисел или дробных с фиксированной запятой. Число с плавающей запятой в том и в другом случае занимало два машинных слова, т. е. 64 или 32 разряда соответственно. 32-разрядные расчеты с плавающей запятой дают приемлемую точность для многих прикладных задач, к тому же машины с разрядностью 16(32) решают множество задач с несложными расчетами или совсем не численные. А вот суперкомпьютер, как машина специально для сложных вычислений, работает только с плавающей запятой и должен иметь разрядность 64. Так начала формироваться современная «шкала разрядности».

Микропроцессоры, калькуляторы и персональные компьютеры

Только что мы обсудили мейнфреймы и суперкомпьютеры как стратегическую ударную силу средневекового компьютерного мира. Они были идеологическими наследниками компьютеров древней цивилизации. Теперь перенесемся на противоположный полюс: рассмотрим самые маленькие и простые вычислительные устройства, которые, собственно, только в эту эпоху и появились.
Почему я считаю микропроцессоры явлением очередной исторической эпохи? Потому что их появление стало возможным после пересмотра всей нашей экономики. Я имею в виду как экономику компьютеростроительной промышленности, так и экономику предприятий-эксплуатантов. Как мы видели выше, люди древних веков стремились наращивать техническое совершенство машин, пусть даже и в ущерб их количеству, а изготовление и эксплуатация маленьких компьютеров были нерентабельны. Но в 70-е годы, с появлением больших микросхем, стоимость компьютеров упала в сравнении с 50-ми годами в тысячи раз, а эксплуатационные расходы - в миллионы (а некоторые статьи расходов исчезли совсем, например перфокарты). С другой стороны, уже не вызывало возражений создание совсем примитивной машинки, которая никого не удовлетворила бы в древние времена: да, многие задачи такой машинке будут не по зубам, но ведь большие компьютеры и суперкомпьютеры в 70-е годы уже в основном покрывали потребность человечества в решении сложных задач с точными расчетами.
Первый микропроцессор 4004 был создан фирмой «Интел» (США) около 1970 г. По совокупности тактико-технических характеристик он был сравним с ENIACом, однако такие «умственные способности» в 70-е годы воспринимались уже как крайне ограниченные. Соответственно, он имел и ограниченную область применения, например в светофорах. Этот микропроцессор имел совершенно непривычную разрядность: 4 и, похоже, навсегда остался единственным в мире серийным представителем четырехразрядных процессоров.
Эра микропроцессоров по-настоящему начинается с 1974 г., когда эта же фирма выпустила восьмиразрядный микропроцессор 8080 (в нашей стране выпускался клон под марками К580ИК80 или К580ВМ80). Именно этот микропроцессор стал первым практически пригодным для создания полнопрофильного домашнего компьютера, который можно было использовать для обучения программированию (на студенческом уровне и даже выше), для подготовки текстовых деловых документов и для несложных игр. Идея такого компьютера кажется очевидным продолжением идеи видеотерминала, но в 1974 г. видеотерминалы как таковые только начали появляться, и нынешняя концепция персонального компьютера с монитором и клавиатурой еще не сложилась. Я вам скажу больше: это в нашем нынешнем представлении микропроцессор создается с целью построить маленький и дешевый компьютер для использования в качестве персонального, а в ту эпоху, которую мы сейчас рассматриваем, у людей были другие приоритеты. Мейнфреймы с видеотерминалами покрывали потребность людей в вычислительных ресурсах на рабочем месте с гораздо большим успехом, чем «персоналки», по той простой причине, что на мейнфрейме можно реализовать такие функции, которые для тогдашней «персоналки» немыслимы в принципе (да, эти функции придется делить на энное число пользователей, но это все равно лучше, чем совсем ничего). Микропроцессор же виделся как новая элементная база прежде всего для управляющих машин и промышленной автоматики. Поэтому самый первый серийный компьютер на базе микропроцессора 8080 - Альтаир 8800 https://vk.com/@myironcomp-komputer-bez-kotorogo-ne-bylo-by-microsoft-i-apple - был похож не на привычный нам теперь персональный компьютер, а на привычный нам в 70-е годы процессор обычной мини-ЭВМ. У него не было не то что экрана, но даже однострочного многоразрядного индикатора, как в калькуляторах или в тактических ракетных компьютерах, рассмотренных в главе «На земле, в небесах и на море». Идея подключить к нему клавиатуру и видеомонитор пришла чуть позже. Автором этой идеи считается Стив Возняк (тот самый, который в порядке развития этой идеи построил первый массовый персональный компьютер «Эппл 1»). Именно «Альтаир» стал той машиной, на которой начинали программировать Билл Гейтс и Пол Аллен.
Еще через 2 года фирма «Зилог» выпустила легендарный Z80, на основе которого фирма «Синклер» изготавливала, вероятно, самый удачный и самый массовый домашний компьютер - ZX Spectrum (1982 г.). По сути Z80 представлял собой не что иное как слегка доработанный 8080 с расширенной системой команд. В 1983 г. появился первый портативный компьютер TRS-80 Model 100 с 8-строчным экраном, 32кБ ПЗУ и 8..32кБ оперативной памяти, способный работать от батареек или аккумулятора. https://oldcomputers.net/trs100.html А в январе 1984 г. появилась еще одна легенда - «Эппл Макинтош». Компьютеры этой марки строились сначала на 16-разрядных процессорах фирмы «Моторола», последующие модели этого семейства - на 32-разрядных процессорах фирмы «ИБМ», а позже «Интел».
Вот еще немного пищи для размышлений на тему персональных компьютеров: https://habr.com/ru/company/cloud4y/blog/571014/
Компьютеры на базе 8080 и Z80 открыли эру восьмиразрядных машин, которых всего-то 10 лет назад никто и вообразить не мог. Такой компьютер, разумеется, мог производить и точные расчеты, но только за счет т. н. «длинной арифметики», или программной эмуляции арифметических операций с большими числами (в т. ч. и с плавающей запятой). Если же учесть, что тактовая частота таких процессоров достигала 4 МГц, то быстродействие получалось как будто совсем неплохое, где-то на уровне ЕС-1020 или «Минск-32»! Но процессор - лишь одна из составных частей компьютера, а причина недостаточности «умственных способностей» компьютера может скрываться в других его частях или в том, как они взаимодействуют. Нормальный процессор для обращения к ячейкам памяти использует адрес длиной в одно или два машинных слова: идеально - одно, на крайняк соглашаемся на два. Если исхитриться, можно, конечно, и больше, но грамотные инженеры не любят «объездных дорог». Мы сейчас говорим о восьмиразрядном процессоре - значит, адрес длиной в одно машинное слово позволяет обращаться к 256 ячейкам - это безобразно мало. Эта проблема решается через использование спаренных регистров, таких как H и L в процессорах 8080, как DPTR в микроконтроллерах MCS48..51. Адрес в два машинных слова позволяет адресовать 64К ячеек - для домашней игрушки это сойдет, для несложной промышленной управляющей машинки вполне туды-сюды, но для профессиональной работы на уровне 80-х годов этого уже недостаточно. Поэтому, чтобы построить профессиональный персональный компьютер, все та же фирма «Интел» в 1978 г. выпустила 16-разрядный микропроцессор 8086. Он имел замысловатую систему сегментации памяти, благодаря которой мог обращаться к ячейкам с 20-разрядными адресами, т. е. мог работать с памятью емкостью до 1МБ. Это был прорыв, но поначалу этот процессор был встречен специалистами прохладно: казался чересчур переусложненным. На основе этого процессора фирма ИБМ в 1981 г. построила персональный компьютер, получивший незатейливое название IBM PC, т. е. просто «персональный компьютер от международных деловых машин». Этот компьютер, что называется, получил хороший рынок. Выпуск таких процессоров и таких компьютеров давно прекращен, но современные настольные компьютеры и ноутбуки являются потомками PC и Intel 8086 в четвертом или пятом поколении.
Компьютеры IBM PC, как и следующее поколение - PC/XT - не были чем-то революционным. Да, у них была необычно большая для персональных машин емкость памяти, и был цветной монитор, но машины с такими особенностями были и раньше - просто до поры-до времени они были дороговаты. Но общую тенденцию к удешевлению техники никто не отменял, значит такой компьютер по такой цене рано или поздно должен был появиться. Он и появился - один из многих. Убойной фишкой был не сам компьютер, а его программное обеспечение. Основой его была операционная система MS DOS, которая представляла собой великолепный компромисс между функциональностью и сложностью. К тому же она была снабжена подробной и доходчивой документацией, и это не считая «художественных» книг, по которым, даже без документации, можно было изучить ее принципы действия. Никогда в истории - ни до того, ни после - не было операционной системы, которая была бы так хорошо приспособлена для программирования. Прикладные программы для DOS разрабатывались множеством фирм в мире, но и любой грамотный пользователь мог подобрать подходящую для себя среду разработки и создавать программы по своим потребностям. Век DOS оказался недолог (начало разработки в 1981 г., массовое распространение - около 1988 г., начало заката - 1996 г., а последние компьютеры с DOS эксплуатировались примерно до 2002 г.) Ее боевые возможности не успевали за бурным развитием железа, но DOS успела дать мощный толчок развитию мирового программистского искусства и оказала огромное влияние на путь развития этого искусства на десятилетия вперед.
В 1980-е годы в США уже имелись персональные компьютеры (ПК), по своим вычислительным возможностям близкие к нашим СМ и ЕС (а порой и превосходящие их), и продавались они по цене легкового автомобиля, т. е. были доступны представителям среднего класса. В других странах подобная техника не производилась, на поставки ПК из США в СССР было наложено эмбарго, а советские разработки в этой области в то время уже существенно отставали от американских. Хуже всего то, что персональный компьютер для любого советского предприятия был «социальной нагрузкой», а не основной продукцией, поэтому наращивать их выпуск никто и не стремился, «и даже планов таких не было». Отставание в области «железа» могло бы быть не такой большой проблемой, если бы его компенсировать опережающим развитием программирования, но этого тоже не произошло.
Во-первых, хотя счет моделей советских персональных компьютеров идет на десятки (и это едва ли не больше, чем в США), выпускались они мизерными тиражами и не имели программной совместимости даже друг с другом, не говоря уж про иностранные образцы. Разработка сколько-нибудь богатого «джентльменского набора» программ в таких условиях не может быть дешевой в принципе. Если же учесть, что в СССР не могло быть коммерческой разработки ПО, то станет понятно, почему ситуация зашла в тупик.
Во-вторых, профессия программиста плохо вписывалась в социалистические принципы ведения хозяйства. Эти принципы требовали привлекать к работе большое количество людей с равной, и притом очень маленькой, зарплатой. Однако серьезное программирование - дело в значительной степени индивидуальное, мастерство на грани искусства. И давайте смотреть правде в глаза: любой высококлассный программист - человек со своими багами («тараканами») в голове… В капиталистических странах, при частнособственнической организации народного хозяйства эти тараканы никому не мешают, а в СССР программист всегда был белой вороной среди других специалистов.
В-третьих, программистов просто физически не хватало, а те немногие, что были, в основном имели такой уровень подготовки, который позволял в лучшем случае «передирать» американские программы. СССР уже много лет как прекратил существование, но советский менталитет в области компьютеров и программирования отнюдь не изжит, и последствия этого мы будем ощущать на своих шкурах еще долго.
Хотя персональные компьютеры и появились в начале 80-х, их эпоха, которую мы назовем новым компьютерным временем, наступила не сразу. Пока такие компьютеры выпускались только в США, Европе и СССР, их было мало, они были недешевы, и погоды они не делали. Эпоха персональных компьютеров настанет тогда, когда американские компании перенесут свое производство в страны Азии, где многочисленные и крайне низкооплачиваемые рабочие начнут штамповать компьютеры миллионными тиражами.
Компьютерное средневековье не началось в один день, и заканчивалось оно тоже постепенно. Если в США и других индустриально развитых странах предвестниками новой эпохи были «персоналки», то в СССР - программируемые калькуляторы. Первые такие машины - 15-ВСМ-5 и Электроника Д3-28 - были спроектированы в 1977-1979 гг. и выпускались в 80-е годы. Эти машины были прямыми потомками МИР, отличаясь от нее тем, что имели режим калькулятора, позволявший решать самые простые задачи в ручном режиме, не прибегая к программированию. Таким образом, они были промежуточной ступенью эволюции между МИР и следующим поколением калькуляторов, выпускавшимся во второй половине 1980-х годов. На таких машинах мы учились программировать на первом курсе института (1983 г.) - затем они были заменены на СМ-4 с видеотерминалами.
15-ВСМ-5 и Д3-28 были довольно большие, размером почти как нынешний настольный системный блок, очень тяжелые и уж точно недешевые. Если бы кто-то захотел убрать из такой машины все, что было связано с программированием, то получился бы в чистом виде калькулятор, но выигрыш в размерах, весе и стоимости оказался бы невелик - такой калькулятор был бы мало кому нужен (тем не менее, такие калькуляторы под маркой «Вега» выпускались в небольшом количестве еще в начале 60-х годов). Поэтому миниатюризация машин этого класса осуществлялась не за счет «отсекания лишнего», а за счет совершенствования элементной базы: вместо сотен простейших логических микросхем поставить одну большую. Так в первой половине 80-х годов появились миниатюрные программируемые калькуляторы (на следующем фото - калькулятор МК-52):

Это довольно интересные для своего времени приборы: хотя и называют их калькуляторами, по сути это - простенькие персональные компьютеры, в умелых руках они могли проявить впечатляющие способности. И, в отличие от настоящих персоналок, цена такой машинки была раз в 100 меньше цены автомобиля: такая «игрушка» была по карману даже студенту, живущему на одну стипендию. Студентам технических специальностей при разработке курсовых проектов приходилось производить много сложных расчетов - больше, чем представителю какого-либо другого слоя общества! И программируемый калькулятор был в этом деле большим подспорьем (я бы сказал: бОльшим подспорьем, чем нынешние компьютеры для нынешней молодежи!). В отличие от больших машин, калькуляторы МК-52, МК-54, МК-62, МК-90 не были «слизнуты» с американских аналогов, а представляли собой полностью оригинальный отечественный продукт. И очень важно: при всех внешних различиях эти калькуляторы были программно-совместимы. Поэтому с программным обеспечением для калькуляторов дело обстояло гораздо лучше, чем с софтом для «персоналок». Ведь такие программы всегда небольшие, в пределах сотни команд, так что текст программы можно просто вставить в книгу или даже в журнальную статью. Так пользователи программируемых калькуляторов могли делиться программами друг с другом.
Мы рассмотрели программируемые калькуляторы, но надо не забыть и простые. В представлении обычного человека программируемый калькулятор является усовершенствованным вариантом простого - на самом деле все с точностью до наоборот. Как мы только что выяснили, наши программируемые калькуляторы выросли не из простых калькуляторов, а из полнопрофильных компьютеров, каковым является МИР. А простой калькулятор появился уже позже, когда прогресс в производстве микросхем позволил сделать его очень дешевым. В нашей стране практически одновременно с 15-ВСМ-5 (в конце 1970-х годов) разрабатывалась серия микросхем К145, на основе которой и были построены наши первые простые калькуляторы. На следующем фото - «начинка» советского калькулятора:
istoria-calculator-3.jpg
Этот экземпляр, доставшийся мне в состоянии, типичном для археологических находок (c'est la vie, придется привыкать), датируется 1992-1993 г., но представляет собой абсолютно серийное изделие, выпускавшееся массовым тиражом с начала 80-х годов. Мы видим микросхему К145ВХ1, многоразрядный вакуумно-люминесцентный индикатор ИВ-27М и клавиши - никаких дополнительных электронных компонентов в калькуляторе нет.
Программируемые калькуляторы не следует рассматривать как суррогатные персональные компьютеры: это два совершенно разных класса приборов. Калькулятор предназначен только для сложных численных расчетов, стало быть его покупатель - человек, систематически занимающийся такими расчетами. Персональный компьютер, помимо чисто вычислительных, владеет операциями по обработке других типов данных (прежде всего символьных) и чаще всего используется для решения задач с несложными расчетами (бухгалтерия) или вообще не связанных с расчетами (подготовка текстовых документов), а в наше время 90% всех компьютеров, продаваемых и покупаемых в мире, используется чисто для развлечений.

Компьютер, который учится играть

И кстати о развлечениях. Еще одно явление, характерное для позднего средневековья и предвещавшее очередную смену эпох, - это компьютерные игры. До 1970-го года ЭВМ использовались исключительно для дела, играть на компьютере было совершенно немыслимо. Однако общая тенденция к удешевлению компьютеров привела к тому, что сначала появились игровые программы, которые могли эксплуатироваться на различных компьютерах, а чуть позже - и специальные игровые компьютеры (игровые приставки, игровые консоли), ни для каких деловых задач не предназначенные. Первые игровые приставки не имели характерной для компьютеров архитектуры с процессором и адресуемыми ячейками памяти, но такие устройства обеспечивали одну какую-то игру, в лучшем случае несколько (с переключателем). Примером такой приставки является очередной экспонат Музея связи - приставка «Палестра-02» (г. Львов, 1980 г.):
istoria-palestra-02.jpg
Постепенно проектировщики пришли к мысли, что игровая приставка должна стать похожа на компьютер. Кстати, в нашей стране, вероятно, еще в 1978 г. была выпущена микросхема К145ИК17 - специализированный микропроцессор, реализовавший несколько простейших игр и позволявший построить игровую приставку с минимальным количеством дополнительных элементов. На основе этой микросхемы выпускалась приставка «Турнир».
От настоящего компьютера игровые приставки отличались тем, что не имели монитора, а использовали в качестве устройства отображения информации обычный телевизор. А в качестве носителя программы - картриджи, не похожие ни на какие устройства для настоящих компьютеров, и магнитофонные кассеты, вставлявшиеся в обычный магнитофон. Впрочем, это уже более поздние изобретения, приставки 1980-х годов чаще всего имели только встроенные игры. К 1980-му году в мире выпускалось уже несколько моделей игровых компьютеров, цена которых была в несколько раз меньше цены делового персонального компьютера. В нашей стране такая техника стала более-менее обычной только в последнем десятилетии XX века.
В эпоху, когда не было нынешних сетевых технологий, приобрести программы (как деловые, так и игровые) было непросто. Их приходилось покупать на картриджах или вводить вручную из кодовых таблиц, публиковавшихся в журналах. Существовал и такой экзотический способ: специальные радиостанции время от времени передавали программы в эфир, чтобы их можно было записать на магнитофонные кассеты. В 1970-е годы появились гибкие магнитные диски - дискеты. Первые дискеты имели диаметр 8 дюймов (203 мм) и помещались в конверт из специальной плотной бумаги. В конверте имелось отверстие для вала, приводящего дискету во вращение, и прорезь для магнитных головок, выполнявших чтение и запись данных. Дискеты 80-х годов имели почти такое же устройство, но меньший размер: 51/4 дюйма (133 мм), а еще более поздние - 3.5 дюйма. Эти дискеты уже имели твердый пластмассовый корпус, а прорезь для головок имела сдвижную металлическую крышку для защиты от пыли. Сейчас дискеты - уже антиквариат. Их основной недостаток: малейшие посторонние частицы, попадая на рабочую поверхность дискеты, приводили к невозможности прочитать записанные данные.
Дискеты сразу же получили широкое распространение на персональных деловых компьютерах, а на игровых они применялись редко. На следующем фото - дискеты всех трех поколений (фото с просторов интернета):
istoria-diskettes.jpg
Лишь около 1990 года вошли в обиход ныне хорошо нам знакомые CD-диски, которые первоначально предназначались только для записи музыки, но чуть позже их приспособили и для записи компьютерных файлов, в т. ч. программ.
Хотя игровые приставки и появились в 70-е годы, но их было мало, и погоды они не делали. Мы же договорились смену исторических эпох увязывать не с появлением новых инженерных решений (что происходит каждый день), а с пересмотром определенных «истин», которые вчера казались всем азбучными и прописными. В 70-е годы одной из таких истин было и осталось то, что компьютер - вещь чисто делового назначения, а в 80-е годы пересмотр этого положения только намечался. Поэтому первые игровые приставки не были фактором нового времени - они были только его предвестником. Чуть позже, обсуждая новое компьютерное время, мы к этой теме вернемся.
Появление микропроцессоров, ПК и игровых компьютеров привело в 70-е-80-е годы XX века к разделению еще недавно единой компьютеростроительной промышленности на несколько отраслей, каждая из которых работала в своем сегменте рынка: «большие» компьютеры, «малые», персональные, игровые приставки, калькуляторы… И эти отрасли теперь конкурировали между собой, поскольку у покупателя теперь был выбор машин на любой вкус и кошелек.

Специализированные и проблемно-ориентированные компьютеры

Как мы помним, компьютеры первобытной эпохи были сплошь специализированными, а первые компьютеры, претендующие на универсальность, ознаменовали собой смену эпох. Конструктора 1950-х годов ни про какую специализацию слышать не хотели, и для этого у них были вполне серьезные аргументы (мы их рассмотрели в главе «Три поколения ЭВМ»). Однако в 60-е годы, с появлением транзисторных ЭВМ, наметилась противоположная тенденция, а к 70-м годам произошел очередной пересмотр взглядов: специализированные компьютеры снова стали полноправными членами семейства, и этот пересмотр я считаю одним из признаков новой эпохи.
На подводной лодке С-189 можно увидеть специализированную цифровую машину «Клейстер-Н»:
korabli_-_s189_-_scvm_klejster.jpg
На этой лодке эта машина неродная: она датируется концом 1970-х годов, тогда как сама лодка построена в 1950-е. По сути «Клейстер-Н» - это калькулятор, предназначенный в основном для штурманских вычислений. «Клейстер» - ближайший родственник 15-ВСМ-5, о которой мы уже говорили.
В 70-е годы в нашей стране построена серия ракетных крейсеров проекта 1164 (в интернете чаще всего можно встретить «Москву» - бывшую «Славу», увы, погибшую 14 апреля 2022 г.). На этих кораблях был установлен централизованный вычислительный комплекс, который у моряков получил название БИУС - боевая информационно-управляющая система. «Сердцем» БИУС является ЦВМ «Атака» (строилась серийно на НПО «Агат» в 1976-1990 г., построено 255 шт.). БИУС могла решать несколько десятков типовых задач: как по управлению кораблем, так и по наведению оружия. Круг задач, которые должны были решаться на этой машине, был четко оговорен к началу ее проектирования, поэтому создатели БИУС «заточили» свое изделие под эти задачи, трезво сознавая, что попытка приспособить машину для решения «неродных» задач может оказаться неудачной. Компьютер, проектируемый по такому принципу, называется специализированным. Для древней эпохи такие компьютеры были совершенно нехарактерны, а средневековье отмечено их появлением и развитием. С тех давних времен и до наших дней бортовые компьютеры на кораблях и самолетах - всегда специализированные, хотя в наше время они на 3/4 и более собираются из деталей от универсальных компьютеров.
Семейство корабельных ЭВМ «Карат» еще даже более интересно, чем «Атака». Разработка была начата еще в 1963 г. в Киевском НИИ радиоэлектроники, но шла небыстро, т. к. требование создать максимально компактную, экономичную и при этом быстродействующую машину было на пределе того, что позволяла тогдашняя элементная база. «Карат» остается едва ли не единственным представителем ЭВМ на больших гибридных микросхемах (нечто похожее было в первых американских IBM/360, но сейчас уже трудно сказать, насколько они были сходны или различны). Машины были 24-разрядные с фиксированной запятой и имели весьма высокое для своего времени быстродействие: позднейшие представители семейства достигали 2.5 миллионов операций в секунду.
Характерная черта средневековых бортовых компьютеров - их программное обеспечение. Операционной системы как таковой в них нет. Вместо ОС может быть небольшая программа - диспетчер, функции которой сводятся к запуску прикладных программ на выполнение по команде пользователя. Все программы, нужные для работы, не хранятся на перфокартах и т. п., а записываются в постоянное запоминающее устройство (ПЗУ), емкость которого (так уж по жизни сложилось) обычно в 4..16 раз больше емкости ОЗУ. Ни редакторов, ни компиляторов, ни линковщиков на таких компьютерах не бывает, так что разработка программ может производиться только на инструментальной машине, также как для нынешних микроконтроллеров. Средневековые ПЗУ выполнялись на ферритовых сердечниках, и установка новой программы выполнялась вручную путем продевания длинного тонкого провода в отверстия сердечников. Внешне эта работа напоминала шитьё, и с тех пор для этой операции закрепился термин «прошивка». В наше время соответствующая работа производится чисто электрическими методами, легко и быстро, а в то время это была очень трудоемкая работа, и возможна она была только в заводских условиях.
Размещение программ в ПЗУ, во-первых, гарантирует сохранность программ, и во-вторых, исключает потери времени на загрузку программ в память (на обычных компьютерах при каждом включении, а также после устранения сбоя, производится загрузка ОС, которая может занимать несколько минут). Так обеспечивается готовность машины решать любую задачу немедленно, как только в этом возникнет необходимость.
На берегу, на гражданской службе более типична несколько другая ситуация: круг задач, которые предстоит решать на компьютере, не определен как исчерпывающий список. Разработчик такого компьютера вынужден «пройти между Сциллой и Харибдой»: сосредоточить максимум усилий на нужных задачах и в то же время обеспечить приспосабливаемость машины к решению новых задач, которые могут появиться в будущем. Такой компьютер называется проблемно-ориентированным. Малые ЭВМ серии СМ, которые строились в нашей стране в 70-е годы, как и их американские прототипы, относятся к проблемно-ориентированным: они могут решать много разных задач, однако есть такие задачи, которые им не под силу. Структура программного обеспечения проблемно-ориентированных машин практически такая же, как и у «больших», и включает операционную систему и инструментарий для разработки программ.
Вот еще кое-какая информация к размышлению на тему СМ ЭВМ:
https://habr.com/ru/company/dataart/blog/484124/
https://habr.com/ru/company/dataart/blog/488274/
Специализированные компьютеры для гражданского применения в средние века тоже существовали: они применялись в промышленных роботах, станках с ЧПУ и автоматизированных системах управления технологическими процессами.
Я пишу в основном о корабельных ЭВМ, поскольку с ними знаком. На самом деле «Атака» была не первой такой машиной, а ведь были ЭВМ и самолетные, и наземные.

Программирование в средние века

Изучая древнюю компьютерную цивилизацию, мы произнесли фразу: «кто имел хороший компьютер, тот имел наше все». С наступлением средних веков ситуация стала меняться. Выпуск транзисторов и микросхем привел к тому, что компьютеров стало много. Задач для них тоже меньше не стало. Но связующим звеном между Задачей и Компьютером была и остается Программа. Кто имел хорошую программу, тот имел наше все, а кто программы не имел, тот был обречен оставаться лузером. Теперь так (и так осталось до наших дней, и в обозримом будущем вряд ли изменится).

Задачи

В средние века наметилось разделение некогда единой профессии программиста на несколько специальностей.
Прежде всего, размежевались системные программисты и прикладные. Важнейшее различие между ними в том, что в прикладном программировании господствовали языки высокого уровня, тогда как системное ПО разрабатывалось преимущественно на языках ассемблера. Но и в лагере прикладных программистов единства тоже больше не было.
Выше мы уже неоднократно отмечали, что весь древний компьютерный мир, как «железный», так и программный, был «заточен» под сложные физико-математические задачи. Однако ничто не вечно под луной - в 60-е годы ситуация начала меняться. В средние века Большая Математика была уже в основном перемолота, но на смену ей пришла Большая Экономика (что в значительной мере было предопределено появлением языка Кобол, созданного, как мы помним, в 1959 г.). Под этим термином я подразумеваю не только экономическую науку (хотя там тоже есть над чем голову поломать), но вообще весь комплекс задач по управлению народным хозяйством: складской и управленческий учет, планирование и управление производством, логистику и, конечно, бухгалтерию, куда же без нее, родимой?
Мы говорим о типичных для того времени прикладных задачах, но никто не отменял инженерных задач, осталось и некоторое количество научных. Про последние, собственно, сейчас уже трудно сказать, стало ли их меньше: очевидно, что с увеличением общемирового объема вычислительных работ доля науки в этом объеме мало-помалу устремилась к нулю. Под инженерными мы понимаем, с одной стороны, расчетные задачи, близкие к научным (в этой отрасли программирования мало что изменилось по сравнению с древними веками), и с другой стороны, задачи, близкие к экономическим: разработка различной документации, например технологической (на заводах) или сметной (на стройках).
Задачи Большой Экономики отличаются от физико-математических тем, что здесь не бывает сложных алгоритмов. По большому счету основная масса экономических задач сводится к выборке подмножества показателей из некоторого множества и суммированию соответствующих величин. Это операция тотализации, которая еще в первобытные времена успешно решалась с помощью счетно-аналитических машин. Однако отсутствие алгоритма отнюдь не упрощает работу программиста - скорее наоборот. Программы древней эпохи обычно довольно компактны. Грубо говоря, древний программист 360 дней в году размышлял над моделями и методами, а 25 декабря садился-таки за компьютер, и к новому году его размышления воплощались в пару страниц на Фортране или Алголе. Новые задачи часто требовали написания программ непривычно большого объема. Разработка таких программ всегда дело долгое и хлопотное. Однако давайте задумаемся, из каких источников эта работа может финансироваться.
В древние времена программные разработки проводились не сами по себе - обычно они были частью какого-то, как мы теперь сказали бы, приоритетного национального проекта: атомного, космического, оборонного… Деньги на такие проекты не то чтобы никто не считал - считали, конечно, но деньги так или иначе находились. Теперь же заказчиками разработок были частные фирмы, у которых денег в принципе не бесконечно, но даже то, что есть, невозможно вкладывать только в программирование. Скажем иначе: программирование НЕ МОЖЕТ стоить дороже, чем та задача, которую решаем. Что же получается? Объем работы программистам добавили, а денег стало меньше?
Эти «ножницы цен» компенсировались частично за счет налаженной системы подготовки специалистов, а частично за счет коммерческой разработки программ. Разумеется, настоящая коммерческая разработка была возможна только в капиталистических странах. В СССР нечто подобное пытались создать, но получалось не очень удачно.
Как виделась смена задач с точки зрения одного отдельно взятого программиста? Как снижение привлекательности профессии сразу по всем статьям: моральным («тут тебе не в космос лететь»), интеллектуальным («не тот уровень высоты полета») и материальным.
Так в средние века, в отличие от древней эпохи, программирование постепенно перестало быть искусством, стало больше похоже на обычную инженерную деятельность. Это обусловлено, во первых, появлением множества языков программирования, так что каждый, кто хотел стать программистом, мог выбрать язык на свой вкус и кошелек. С другой стороны, в США и Англии была создана система профессионального обучения программистов. В СССР такую систему тоже пытались создать, но идеологическая зашоренность мешала, так что качество подготовки программистов оставляло желать лучшего. Я говорю сейчас именно о системе подготовки специалистов, а не об отдельных личностях, которые стали компьютерными гениями помимо этой системы (хорошо если не вопреки ей).

Операционные системы средних веков

Выше мы говорили о новых, нетипичных для древней эпохи прикладных задачах, а сейчас остановимся на операционных системах. В этой главе рассмотрим ОС крупных компьютеров - мейнфреймов.
В области операционных систем имел место очень большой прогресс, который, однако, имел изнаночную сторону: операционные системы стали слишком сложны, их разработка стала чрезвычайно трудоемкой, а изучение их студентами-программистами и переучивание действующих программистов на новые ОС отнимало неоправданно много сил и времени.
Рассматривая ОС средних веков, мы подходим к теме виртуализации. Сам этот термин довольно сложен для объяснения. Вероятно можно сказать так: виртуализация - это технологические приемы работы программиста, имеющие цель по максимуму абстрагироваться от конкретного «железа», на котором программа эксплуатируется, и тем самым максимально расширить множество компьютеров, для которых эта программа была бы пригодна… Но ведь древний Фортран имел по существу ту же самую цель - никто же его инструментом виртуализации не считает…
Выше мы уже употребили термин «системы виртуальных машин» - настала пора хоть немного разобраться, что это такое. Сформулируем так: виртуальная машина (ВМ) - это машина, которой нет, но функции ее выполняются. Это программный инструмент в составе операционной системы, который придается в помощь каждой прикладной программе с целью преодоления ограничений, накладываемых реальной машиной. Это оболочка (контейнер), изолирующий «свою» прикладную программу от всего внешнего мира, как программного, так и железячного, и эмулирующий (воспроизводящий) «целевую платформу» (компьютер, которого у нас нет, но который мы хотели бы иметь) на имеющемся компьютере («хост-платформе»). Системные вызовы прикладной программы воспринимаются виртуальной машиной и при необходимости передаются операционной системе, так что прикладная программа живет в виртуальной машине не как рак-отшельник в раковине, а скорее как морская свинка в клетке, ни в чем не нуждаясь, никому не мешая и ничего не зная о том, что происходит за стенами клетки.
В древнюю эпоху, когда программы на компьютере исполнялись одна за другой, проблема обеспечения «уживаемости» множества прикладных программ на одной машине не стояла. Когда же она возникла, виртуальные машины стали одним из вариантов решения этой проблемы. Если прикладная программа делает что-то не то, то последствия ее действий не выходят за пределы «своей» виртуальной машины, так что она не может серьезно навредить.
Идея виртуальных машин позволяет решить проблему переносимости программ с компьютера на компьютер на новом уровне. Представим, что у нас имеется игровая программа, созданная когда-то раньше для эксплуатации на игровой приставке, а теперь мы хотим эксплуатировать ее на обычном компьютере. Теперь мы можем категорически отказаться от переделки самой программы: максимум, что нам грозит, - это написать новый контейнер, но это придется делать, только если не найдем подходящий готовый. Правда, эта задача хорошо решается при условии, что обе «платформы» снабжены хорошей документацией, а это в нашем мире, к сожалению, бывает не всегда. Так появилась идея создать СВМ - операционную систему, в которой прикладная программа обязательно помещается в контейнер и живет только в нем. Стало быть, все, что нужно для плодотворной работы прикладному программисту, - это справочник по тем услугам (сервисам), которые предоставляет контейнер, а программисту, пишущему контейнер, - справочники по системным вызовам обеих ОС. Но ведь контейнер обычно проще, чем большая прикладная программа или чем ОС, да и необходимость в его разработке возникает не так часто, поэтому программистов, разрабатывающих контейнеры, может быть немного, и основные людские силы можно сосредоточить на разработке прикладных программ, что мы и хотим.
Сказанное не означает, что виртуализация нужна только для запуска программ на «чужом» железе. Она уместна и в том случае, если хост-платформа и целевая платформа различаются чисто количественно, например емкостью оперативной памяти.
Виртуальную память определим подобно тому, как мы выше определили виртуальную машину: это память, которой нет, но функции ее выполняются. Виртуальная память - важнейший элемент виртуальной машины. Настолько важнейший, что оправдывает существование даже такой ВМ, которая ничего иного не обеспечивает. Представим, что у нас есть модельный ряд машин с емкостью оперативной памяти от 8КБ (ЕС-1010) до 8МБ (ЕС-1060), а нам поставили задачу обработать массив размером 64МБ. Без виртуальной памяти эта задача не может быть решена ни на одной из имеющихся машин, но на ЕС есть СВМ, которая позволяет нам писать программы, вообще не задумываясь о том, сколько памяти будет на той машине, на которой эта программа будет работать - и, с другой стороны, нашу программу можно будет эксплуатировать на любой машине, поддерживающей СВМ, причем эксплуатировать с максимальной эффективностью, с использованием всей памяти, которую машина готова нам предоставить, и без необходимости что-либо менять в прикладной программе или в ОС.
По аналогии с виртуальной памятью нетрудно разобраться, что такое виртуальные периферийные устройства. Средневековые ЭВМ чаще всего имели множество однотипных периферийных устройств, например 8 накопителей на магнитных дисках. Который из них будет отведен для нашей задачи? Прикладному программисту было бы крайне желательно работать, не задумываясь над такими вопросами. А в идеале - писать программу так, чтобы устройство ввода-вывода при эксплуатации программы можно было бы переназначить, не переделывая саму программу… Забегая вперед, скажу, что в ОС нового времени, например в DOS и GNU/Linux, имеются механизмы стандартного ввода и стандартного вывода - по большому счету это то же самое, что виртуальные устройства.
Очевидно, операционные системы виртуальных машин обещают определенное удобство, но мы должны понимать, что любое удобство в этом мире не бесплатно: СВМ требует определенного времени на выполнение своих обязанностей, поэтому множество прикладных программ в СВМ будет выполняться медленнее (иногда значительно медленнее), чем на реальной машине без СВМ. В древние века, когда машин было мало и их быстродействие оставляло желать лучшего, такие идеи не имели шансов на признание. В средние века они оказались востребованы, а в последующие десятилетия стали практически обязательными.
Мы употребляем СВМ как нарицательный технический термин, но это слово (в такой же расшифровке) употреблялось и как собственное имя операционной системы, которая эксплуатировалась на уже знакомых нам машинах ЕС. Как и сами ЕС, и почти все программное обеспечение для них, СВМ не была оригинальной советской разработкой - была скопирована с американской VM (1972 г).
Операционная система средних веков - многозадачная, т. е. она может обеспечивать решение нескольких независимых задач (возможно в интересах разных пользователей) так, что со стороны кажется, как будто они решаются одновременно. Мы-то понимаем, что действительно одновременное решение нескольких задач возможно только на современном многоядерном процессоре. Максимум, что могла делать средневековая машина, - это быстро переключаться с одной задачи на другую, но сам факт, что операционная система «знает» о наличии нескольких задач, - уже революция в технике операционных систем.
Операционная система средних веков обязательно имеет поддержку файловой системы (чаще всего какой-то одной своей).

Технология и языки программирования

То, что было рассказано в предыдущей главе про язык ассемблера, остается в силе и в средние века, и в новое время, и (с оговорками) даже сейчас. Остановлюсь более подробно на языках высокого уровня, потому что здесь на рубеже 60-х-70-х годов XX века имела место ревизия «незыблемых истин» в технологии программирования. Предпосылки для этой ревизии возникли с массовым внедрением магнитных дисков, файловых систем, видеотерминалов и диалогового режима. Следствием этого стал отказ от потокового ввода данных. Теперь программист при написании программы с процедурами и функциями уже не был вынужден предъявлять для компиляции полный текст программы со всеми процедурами и функциями. Теперь он мог (а) хранить тексты подпрограмм в отдельных файлах и в тексте программы давать лишь ссылку на эти файлы (оператор include во всех современных языках программирования) или (б) компилировать подпрограммы отдельно от основной программы, сохраняя результат в объектных файлах (.obj) и компоновать выполняемый код из объектных файлов основной программы и подпрограмм.
Для компоновки выполняемого кода (загрузочного модуля, загрузочного файла) использовалась специальная служебная программа, которая в разное время и в разных местах могла называться сборщиком, загрузчиком, редактором связей или построителем задачи. В операционной системе UNIX эта программа называлась link, и с тех пор для такой программы используется термин линкер или линковщик. Это типично средневековая программа.
Чем средневековый компилятор отличается от древнего?
Во-первых, если древний компилятор выдавал сразу машинный код, готовый к загрузке и исполнению, то средневековый компилятор давал объектный код, требующий линковки.
Во-вторых, средневековый компилятор не имеет встроенных функций. Фирма, разрабатывающая такой компилятор, поставляет его на рынок, конечно, не «голышом», а в комплекте с достаточно богатым набором уже скомпилированных типовых процедур на самые разные случаи жизни, но эти процедуры более не являются встроенными - программист может делать с ними что угодно, как со своими. Собственно, для него теперь вообще нет разницы, откуда взялась та или иная подпрограмма: сам он ее написал, или получил у коллег, или приобрел на стороне. Так у программиста формируется библиотека подпрограмм, которая имеет самостоятельную ценность, не привязанную к какому-либо компилятору. Соответственно теперь большой проект может разрабатываться коллективом программистов, возможно даже использующих разные компиляторы и даже разные языки.
Для поддержания библиотеки в рабочем состоянии используется служебная программа - библиотекарь. В юниксоидных системах эта программа называется lib.
Что же касается исходных данных для решения задачи, то теперь можно было (а) заготовить их в виде отдельного файла или (б) вводить по мере потребности в них, в ответ на запрос машины. Вставка исходных данных прямо в текст программы, практиковавшаяся в древние времена, стала бессмысленной, сейчас так уже никто не делает. Файловый принцип организации данных на дисках стал универсальным инструментом для обеспечения совместной работы нескольких программ при решении смежных задач. Теперь программное обеспечение чаще всего выпускается не в виде отдельных программ, каждая из которых решает свою задачу, а в виде программных пакетов, каждый из которых обеспечивает целый комплекс задач, оставляя пользователю свободу замены любой отдельной программы на что-то более новое или просто другое.
С появлением понятия библиотеки произошло размежевание таких понятий, как язык программирования, система программирования, инструментальные средства программирования. Если в древнюю эпоху программист работал на некотором языке и этим определялся весь его стиль работы (а кто-то и до сих пор так думает), то начиная со средних веков язык уже не значит ничего. Способность программиста решать то или иное множество задач с той или иной эффективностью теперь определяется, прежде всего, теми библиотеками, которые он имеет, и в какой-то мере теми программными инструментами, которыми пользуется.
С другой стороны, применение линковщиков изменило наши взгляды на подпрограммы вообще. Если раньше любая подпрограмма рассматривалась только как принадлежность какой-то одной прикладной программы, то теперь она приобрела самостоятельную ценность. Библиотеки подпрограмм стали ПРОДУКТОМ, и зародилась (а в новое время вошла в полную силу) целая отрасль программирования, поставляющая на рынок не готовые прикладные программы, а полуфабрикаты (называемые платформами или фреймворками), на основе которых программисты «на местах» строили свои изделия. Программирование с использованием фреймворков менее трудоемко, чем без них, и доступно программисту не очень высокой квалификации. Это конечно хорошо, но никакое хорошо в нашем мире не бесплатно: возрастает «ресурсоемкость» готовых программ.
В предыдущей главе мы обсудили Алгол как структурный язык и Фортран как бесструктурный. Именно по причине бесструктурности Фортран оказался тупиковой ветвью эволюции, а на место Алгола пришли его потомки.
В конце 60-х - начале 70-х годов Н. Вирт из Швейцарской высшей технической школы Цюриха (ETHZ) создал язык Паскаль, в котором воплотился многолетний опыт эксплуатации Алгола. Вирт не планировал революции в программировании - он хотел создать хороший учебно-боевой язык, и с этой задачей он справился блестяще. Новый язык содержал все полезное, что было в его прототипах, и многое, чего в них не хватало, но не прощал «лишних вольностей». Его правила строги и прозрачны, поэтому изучение Паскаля по плечу даже школьнику, а освоив его однажды, вы сможете работать на нем всю жизнь, не испытывая нужды ни в чем другом. Исходя из этого я рассматриваю Паскаль как очередную маленькую эволюционную ступень по отношению к Алголу.
Для нас чрезвычайно важен вопрос производительности труда программиста. В то время, о котором мы сейчас говорим, вопрос о создании новой технологии программирования, существенно более производительной, чем технология Фортрана и Алгола, по идее, уже должен был витать в атмосфере… но до меня не доходила информация о том, что этот вопрос кто-то хотя бы заявил вслух. Паскаль, по сравнению с Алголом, обещал некоторую прибавку производительности за счет более ясных правил (что исключает мелкую, но досадную путаницу, которая каждый день тормозит работу программиста). Эта прибавка, однако, не могла сыграть существенной роли. В итоге Паскалю просто не повезло: он не вписался в какой-либо глобальный проект, не стал официальным языком крупного программного консорциума… Когда толпа закричала: «долой!», не нашлось желающих его защищать, и он оказался заброшен и забыт.
Следующей работой Н. Вирта стал язык Модула-2, в котором Вирт воплотил идею модульного программирования: весь «багаж», наработанный программистами, предлагалось разделить на модули, каждый из которых содержит «тематическую подборку» процедур и функций, а при написании новой программы просто указывать, какую процедуру (функцию) из какого модуля использовать. Идея модульного программирования чрезвычайно полезна, но внедрять ее в один какой-то язык, а тем более создавать новый язык специально ради этого, - это оказалось ошибкой. Такие полезные фичи целесообразно создавать вне привязки к какому-либо языку, операционной системе и т. д. Таким образом, язык Модула-2 не представлял собой ничего революционного по сравнению с Паскалем, и неудивительно, что он не получил большого признания.
Паскаль - не единственный потомок Алгола: даже если считать только мало-мальски жизнеспособные, то все равно получится довольно много. Остановлюсь на языке Ада. Он был создан в 1979-1980 годах в США и сразу стал стандартным языком в Пентагоне и НАСА. Предполагалось, что он станет общемировым, но этого не произошло: даже в гражданских ведомствах США он не нашел признания. В России этот язык практически неизвестен, хотя книжка (переводная с английского, разумеется) мне в руки попадалась.
Языки, которые мы рассмотрели выше, назовем классическими языками высокого уровня. При всех внешних различиях они имеют много общего. Во-первых, они вписываются в категорический императив программирования и, соответственно, обеспечивают максимально возможную (максимально технически достижимую!) скорость выполнения операций. По этому параметру они лишь ненамного уступают языкам ассемблера. Во-вторых, эти языки создавались не с бухты-барахты, а по итогам серьезных научных изысканий. Язык Ада знаменует собой закат эпохи классических языков. Конечно, потом будет еще микропроцессорно-микроконтроллерный язык ST, который и по внешнему виду, и по техническим параметрам безусловно принадлежит к классическим. И языки командных оболочек UNIX-подобных операционных систем тоже могут быть отнесены к классическим, пусть и с некоторыми оговорками. Но после Ады в эволюции языков начался большой поворот, который, похоже, не завершился и до настоящего времени.
Сейчас я хочу акцентировать внимание читателя вот на чем: и Вирт, и Дейкстра, и Грейс Хоппер были учеными отнюдь не шуточного уровня, и их коллеги из Пентагона, НАСА и «ИБМ» тоже были не лыком шиты. Новые языки они придумывали не с бухты-барахты, а по итогам тщательного осмысления опыта эксплуатации языков-прототипов, от которых они отталкивались. Научная мысль обладает свойством воспроизводимости: мало-мальски глубокий специалист, не читавший научных трудов Вирта, может восстановить ход его мыслей, просто сравнивая Паскаль с Алголом. С другими языками ситуация в основном аналогична, но в совершенно иных обстоятельствах родился язык C (Си).
Ходит легенда, что этот язык был создан на основе более старого языка B (Би), но с последним произошло именно то, о чем мы говорили в самом начале нашего исследования: от него не осталось никаких следов (да пОлно, был ли он вообще?). Зато при мало-мальски тщательном рассмотрении очевидно сходство языка Си с другим древним языком, который хотя и выведен уже давно из эксплуатации, но специалистам все же известен - я имею в виду Алгол. Однако, рассматривая различия между Си и Алголом, мы едва ли сможем понять логику людей, создававших Си (особенно если допустить, что они были знакомы с Паскалем, что вообще-то не факт).
Си - не что иное как основательно испорченный Алгол. Кто его испортил? - Дэннис Ритчи и его команда, которая в конце 1960-х годов в гаражно-коленочных условиях создавала компьютер VAX и операционную систему UNIX. У них не было не только нормального экранного монитора, но даже и нормального принтера. Был телетайп - буквопечатающий телеграфный аппарат, который теперь можно увидеть разве что в музее:
istoria-teletype.jpg
(на этом фото телетайп - советский, а у них был, конечно, американский, но в общем примерно такой). Он выводил данные на узкую бумажную ленту: катушка с лентой видна на правой стенке телетайпа. Ленты вечно не хватало, и была она недешева, значит приходилось экономить. И вот Ритчи решил придумать такой язык, чтобы каждое действие записывалось максимально коротко. В качестве прототипа выбрали Алгол, что в общем-то вполне логично. Нос вытащили - хвост увяз: исходный текст стал трудно читаемым, а это не замедлило сказаться на трудоемкости разработки больших программ. Акцентирую внимание на том, что Ритчи и его храбрые ребята не были глубокими учеными, как создатели Фортрана и Алгола - они были просто практикующими программистами. Профессионалами, как мы бы сказали сейчас. Никаких революций они не планировали и на мировое господство не претендовали - им был нужен всего лишь инструмент, обеспечивавший решение задачи здесь и сейчас, и они его получили. Ни об экономической эффективности этого инструмента, ни о грамотности заложенных в него инженерных решений они не задумывались в принципе. А потом, когда их разработка «пошла» и люди обзавелись мониторами, оказалось, что на новоизобретенном языке написано уже очень много, и возврат к настоящему Алголу сочли нецелесообразным. Так началось триумфальное шествие языка Cи по планете и ее окрестностям. Последующий результат этого шествия оказался, в общем-то, закономерным и предсказуемым. Считать его в тугриках я, извините, пас. Мне достаточно того, что дело пахнет не миллионами и не миллиардами, а чем-то гораздо большим.
В древние века программист на Фортране или Алголе работал чаще всего один, и затрачивал на создание программы энное количество человеко-лет в пределах времени существования этих языков. Это теоретически. На практике сроки разработки программ исчислялись сплошь и рядом не годами, а месяцами. Я имею в виду именно написание и отладку текста программы, научная подготовка сюда не включается. Да, древние программы были небольшие. Сейчас объемы исходных текстов программ увеличились многократно, но тогда хотелось бы иметь инструмент, обеспечивающий соответствующее повышение производительности труда. Чтобы разработка таких программ укладывалась в сроки, близкие к тем, к которым мы привыкли в древности. В языке Си многие видели такой инструмент… совершенно необосновано. Сколько человеко-лет надо, чтобы разработать планово-управленческую программу на уровне 80-х-90-х годов? Сто? Тысячу? А сколько человеко-лет затрачено на разработку операционных систем UNIX, BSD и Linux в сумме? Миллионы. Но тогда получается, что по важнейшему экономическому показателю, каковым является трудоемкость разработки программ, Си не опережает свой прототип, а уступает ему. Революция наоборот.
В последующие годы из языка Cи выросло целое семейство языков, как универсальных (C++, C#), так и специализированных (PHP, Java/JavaScript). Языки этого семейства в основном используются сейчас, так что говорить о новой или новейшей эпохе применительно к языкам программирования не приходится.
Итак, повторяю еще раз: чудес от языка Си ждали не те, кто его создавал, - ждет нынешняя программирующая молодежь. Как любят говорить поэты или просто авторы книг по психологии: если очень хочешь чуда, а оно долго не происходит, - значит когда-нибудь оно обязательно произойдет… (или еще вариант: если очень хочешь чуда, а оно долго не происходит, - сделай чудо сам). Я, однако, не поэт и не психолог - я суровый технарь, и отвечаю на это так: если очень хочешь чуда, а оно долго не происходит, то на свет появляются мифы.
Про язык Си часто говорят, что он дает очень быстрый машинный код, значительно более быстрый, чем дают другие языки. Что мы вкладываем в слово «значительно»? На 10%? На 20? Никаких исследований на эту тему никто не поводил. Это миф, который рассказывают и слушают люди, не готовые разобраться в подлинных причинно-следственных связях между явлениями. Язык Си принципиально ничем не отличается от Паскаля и более того - от Алгола. Более быстрый код дает не язык как таковой, а компилятор. Почему? - Элементарно: компилятор Алгола в 50-е годы создавали с нуля, с чистого листа, а компилятор языка С в 70-е годы разрабатывался с опорой на 15-летний опыт эксплуатации Алгола и ПЛ-1 (да и Фортрана тоже). А раз так, то было бы вполне логично ожидать, что он будет на четверть или даже на треть быстрее.
Еще один миф: язык Си якобы приближен к архитектуре компьютера. КАКОГО компьютера? Разных архитектур очень много - к какой из них этот язык ближе всего? И вопрос номер следующий: если Си - язык высокого уровня, то правильно ли в принципе приближать его к архитектуре какого-либо компьютера? По идее, такой язык должен быть абстракцией, которая к разным компьютерам подходила бы в равной степени.

Статическая и оверлейная линковка

Выше мы рассмотрели линковщик как новую (в сравнении с древней эпохой) служебную программу, собирающую загрузочный файл из множества объектных файлов, выданных компилятором. В простейшем случае линковщик помещает в загрузочный файл основную программу со всеми нужными подпрограммами - это статическая линковка. В средние века наряду со статической была уже освоена оверлейная линковка: весь программный код делился на сравнительно небольшой основной загрузочный модуль и несколько оверлейных модулей. При запуске программы на выполнение основной загрузочный модуль загружался в оперативную память, и ему сразу передавалось управление, а оверлейные модули подгружались только тогда, когда нужно было выполнить содержащиеся в них подпрограммы. Разумеется, вопрос о том, какие части программы включить в основной загрузочный модуль и какие в оверлеи, мог решить только программист: «программист решил - линковщик сделал». Оверлейная линковка позволяла (1) уменьшить затраты времени на загрузку программы в оперативную память и (2) эксплуатировать большую и сложную программу на машине с ограниченной емкостью памяти (пусть хотя бы ценой некоторой «задумчивости» при выполнении некоторых операций), но не спасала от того, что разные программы на половину или больше состоят из одних и тех же деталей: каждый оверлейный модуль принадлежал какой-то одной программе. Отсюда вытекает очевидная идея «обобществить» оверлейные модули, но эта идея - более поздняя. Мы ее коснемся в главе «новое время».

Компиляторы и интерпретаторы

Мы рассмотрели компиляционную технологию программирования как наследие древнекомпьютерной цивилизации, дожившее с некоторыми изменениями до нашего времени. В 60-е-70-е годы XX века имело место разделение некогда единой технологии программирования на два «рукава»: компиляционный и интерпретационный. В 1964 г. был придуман Бэйсик, и так вышло, что именно он, а не Паскаль и не Си, стал королем средневековых языков.
Программисты моего поколения вспоминают Бэйсик как кошмар, хотя, если вдуматься, в нем не было ничего такого ужасного. Возвращаюсь к мысли о том, что программа - техническое изделие, а техническим изделиям отнюдь не чужды понятия о красоте. У нас был старый верный Фортран: брутальный, как швейцарский электровоз, и крепкий, как ледокол «Красин». Его раздербанили на запчасти, 80% деталей слегка перекрасили, чтобы создать видимость обновления, еще 10% допилили напильником на коленке для обеспечения работы в режиме интерпретации, и добавили множество подпорок, подставок и подкладок, обеспечивающих работу на абонентских терминалах. Какой же красоты можно было ожидать от такого изделия?
Мы договорились изучать историю серьезно, а история учит, что все новое в этом мире не возникает просто так: если какая-то вещь появилась, значит она кому-то для чего-то была нужна. Кому и для чего был нужен Бэйсик? Ответ на этот вопрос кроется в названии языка: BASIC - Beginners All-purpose Symbolic Instruction Code - многоцелевой символический командный код для начинающих. То есть Бэйсик не рассматривался как боевой язык - только как учебный, да не просто учебный, а для студентов младших курсов. В те времена еще господствовали перфокарточные технологии. Они были более-менее приемлемы для практикующих программистов, но крайне неудобны для обучения: даже совсем простую программу из 10 строк невозможно было отладить за время одного учебного занятия. Нужен был диалоговый режим. Телетайпы тогда уже существовали, но мейнфреймы, к которым их можно было бы подключить, если и были, то были большой редкостью. Да и не всякий вычислительный центр предоставил бы машинное время первоклашкам-промакашкам. Еще были маленькие машины в калибре нашей «Наири» - диалоговый режим они могли обеспечить, но полнопрофильный компилятор типа Фортрана или Алгола они бы не потянули. Если же из языка выкинуть по максимуму все то, что изучается на старших курсах, то транслятор можно «укоротить» до 4 КБайт, а то и меньше… Вот вам и решение.
Чем жертвовали создатели Бэйсика и ради чего? Боевыми возможностями языка? Но поскольку язык для начального обучения, то это не считается. То, что язык получился кривой и некрасивый, - это хуже, потому что отрицательно влияет на интеллектуальное становление будущих специалистов. Уже знакомый нам Э. Дейкстра, известный как своими научными трудами, так и весьма резкими высказываниями в адрес оппонентов, писал про Бэйсик: «Этот язык калечит мозг, преподавание его - преступление» (хотя по другим источникам, это было написано про Кобол, но в данном случае это не суть: применительно к Бэйсику это по-любому справедливо). Зато получили первый в истории диалоговый язык, и он же был первым широко распространенным интерпретационным языком. Компиляторы Фортрана, Алгола и других языков преобразовывали исходный текст программы в машинный код, который затем запускался на выполнение. Бэйсик работает иначе. Интерпретатор просматривает исходный текст строка за строкой и сам выполняет описанные в строке действия. Поскольку каждую строку приходится обрабатывать отдельно, выполнение всей программы происходит намного медленнее, чем выполнение машинного кода, зато отпадает необходимость в компиляции как отдельном этапе работы. Что лучше? Если бы что-то было лучше, все поступали бы только так. Большая и сложная программа, особенно если она обрабатывает большие массивы данных, гораздо эффективнее выполняется с участием компилятора. Но в ряде случаев, особенно при выполнении учебных заданий, выполнение программы «на лету», без компиляции, может быть даже быстрее. И еще одно преимущество интерпретатора: поскольку он не вырабатывает никакого машинного кода, а выполняет все действия сам, неправильно написанная прикладная программа ничего не может испортить. Впрочем, в те годы это преимущество никому не казалось существенным.
Поскольку интерпретатор не порождает машинного кода, автор программы, написанной на Бэйсике, может передавать ее другим лицам ТОЛЬКО в виде исходного кода. Это с какой-то стороны хорошо, а с какой-то плохо (это кому как!) - ну не бывает на свете идеальных инженерных решений. Безусловно хорошо то, что такая программа может быть запущена на любом компьютере, на котором имеется соответствующий интерпретатор. В какой-то мере интерпретатор Бэйсика (и любого другого языка из тех, что появились позже) может рассматриваться как виртуальная машина - доступная владельцу мелкого компьютера альтернатива СВМ больших мейнфреймов. В предыдущей главе мы отметили, что разработчики древних компьютеров первым делом оснащали свои детища компилятором Фортрана - точно так же в средние века разработчики 16-разрядных мини-ЭВМ (PDP-11, они же СМ-3, СМ-4) оснащали свои операционные системы интерпретатором Бэйсика, хотя для таких машин он уже должен был считаться устаревшим. А разработчики восьмиразрядных домашне-игровых компьютеров своей жизни без Бэйсика не мыслили, потому что написать для такой слабой машины мало-мальски приличный компилятор было весьма непростой задачей, стоимость которой свела бы к нулю всю привлекательность таких машинок. А на советских ПК обычно вообще никакого другого программного обеспечения не было. Более серьезные программисты не жаловали Бэйсик, считали его суррогатной технологией. Однако в средние века проблема суррогатных технологий не ощущалась так остро, поэтому к ней я надеюсь вернуться, когда наша история дойдет до нового времени.
На замену Бэйсику был придуман Фокал, но он не обещал ни чудес, ни революций и в итоге оказался мертворожденным. Несмотря на критику, которой Бэйсик подвергался с «молодости», он пережил несколько реинкарнаций. Однако будущего у него нет.

Немного воспоминаний и размышлений

В предыдущей главе я рассказывал вам про свою студенческую практику, но не закончил этот рассказ - теперь, как и обещал, продолжу.
Итак, после 5 безрезультатных выходов на вычислительный центр практика продолжилась на СМ-4. Эта машина хотя и называется малой (мини-ЭВМ), в те годы (да и позже) часто использовалась как маленький мейнфрейм. В данном случае к ней были подключены видеотерминалы 15ИЭ-00-13. Сама машина была копией американской PDP-11 от фирмы «Диджитал Эквипмент Корпорейшн» (DEC), а операционная система RSX-11M - даже не копия, а в чистом виде ворованый американский продукт. В те годы наши специалисты, бывавшие в командировках в США, чемоданами вывозили оттуда альбомы с чертежами компьютеров и магнитные ленты с программным обеспечением. Американцы не могли этого не видеть, но смотрели на это спокойно: для них было бы гораздо более неприятно, если бы наши инженеры создавали собственные изделия, которые могли бы опережать американские (а такого от них, по опыту древних времен, можно было ожидать!).
Прогон программы на СМ-4 проходил в 4 этапа: создание\изменение текста программы (команда EDI), компиляция (команда FOR), линковка (команда TKB) и запуск на выполнение (команда RUN). Все это делалось в диалоговом режиме, а поскольку все действия, кроме изменения программы, происходили практически мгновенно, за одну учебную «пару» можно было сделать множество прогонов, так что я со своей программой справился за время в пределах одного рабочего дня.
Исходный текст программы в RSX-11M хранился на магнитном диске в виде файла. Для внесения в него поправок имелась служебная программа - диалоговый редактор EDI. Он выдавал текст программы на экран построчно и предлагал выбор: оставить строку как есть, удалить, исправить ее или вставить новые строки. Как нам известно теперь, в EDI имелась команда, позволявшая заменить любую часть строки (один или более символов) на какие-то другие символы, но наши преподаватели ничего об этом не знали, так что нам оставалось только, если строка нам чем-то не нравится, переписывать ее целиком. Разумеется, никто не гарантировал, что, исправив одну ошибку, мы не внесем другую. Если вдуматься, то станет ясно, что EDI был спроектирован с расчетом не на видеотерминалы, а на пишущие машинки или телетайпы.
Далее выполнялась компиляция, по итогам которой формировался объектный файл. Далее нужно было выполнить команду TKB, смысл которой нам никто не пояснял. На самом деле TKB - обыкновенный линковщик. И, как положено линковщику, он мог компоновать выполняемую программу из нескольких объектных файлов, каждый из которых мог содержать, например, одну какую-то подпрограмму. Но этого нам тоже никто не объяснил, так что мы, как в древнюю эпоху, составляли текст программы со всеми подпрограммами в виде одного файла. Далее программу запускали на выполнение. Как мы теперь знаем, в RSX-11M имелись отладочные средства, позволявшие в процессе выполнения программы отслеживать результат каждой операции и при необходимости останавливать процесс. Но этого наши преподаватели опять-таки не знали… Ну а если преподаватели не знают такого количества простых фишек, то какого уровня специалисты могли вырасти из тех студентов?
Годом позже мы выполняли лабораторные работы на машине СМ-3 с операционной системой «Бэйсик-Рафос». Педагогическое решение переходить с Фортрана на Бэйсик довольно сомнительно: если уж так любите Бэйсик, то логичнее поступить наоборот (мое личное мнение: студентам, претендующим на профессионализм, Бэйсик вообще не нужен). Однако несколько слов о «Рафосе». Строго говоря, в свете того, что мы говорили выше про Бэйсик, - это не настоящая операционная система, а типичная для тех лет виртуальная бэйсик-машина. Ни компилятора, ни линковщика там, естественно, не было: мы же знаем, что Бэйсик - интерпретационный язык. Однако в «Рафосе» не было и специальной программы-редактора. В Бэйсике строки программы полагается нумеровать, но рекомендуется не последовательными числами, а с большими интервалами, например через 10 или через 100. Если какая-то строка нам не нравится, просто вводим ее заново с тем же номером. Новые строки снабжаем такими номерами, чтобы они попали в нужное место программы… Очевидно, что «Рафос» также приспособлен для работы с печатающими терминалами, но тогда получается, что это очень старая система, которая опоздала появиться на свет.
Обе умомянутые ОС - и RSX-11M, и «Бэйсик-Рафос» - поддерживали файловую систему на магнитных дисках и обеспечивали работу множества пользователей в режиме разделения времени.
На следующем курсе мы снова работали на СМ-4 и RSX-11M, но теперь мы пользовались полноэкранным редактором TED. Принцип работы полноэкранного редактора очевиден: он выдает текст на экран не построчно, а большим куском, и на экране имеется курсор, который можно гонять туда-сюда, подводя его к любому нужному нам месту текста. Символы можно вставлять, изменять и удалять непосредственно в месте их нахождения и сразу видеть текст с внесенными в него изменениями. До настоящего времени все без исключения программисты пользуются полноэкранными редакторами, и в будущем никакой альтернативы не предвидится. Полноэкранный редактор невозможно эксплуатировать на печатающих терминалах - он предназначен только для видеотерминалов и таким образом рассматривается как примета компьютерных средних веков.
Текстовый редактор - один из важнейших инструментов в работе программиста, наряду с компиляторами и линковщиком. Термин «редактор» возник давно, но окончательно утвердился примерно в 70-е-80-е годы. Так, например, на ЭВМ «Минск-32» соответствующая программа называлась корректором, что кстати ближе по смыслу.
Редактор, компилятор и линковщик составляют минимальный инструментарий программиста для разработки новых программ на месте их применения. Для установки на машину программ, приобретаемых на стороне, каких-либо специальных средств в ту эпоху не было: установка сводилась к простому копированию файлов.

***

В 80-е годы (в те самые годы, на которые пришлась моя студенческая молодость) дела в отечественной компьютерно-программной отрасли были уже настолько плохи, что нужно было что-то делать. Это вроде бы было очевидно всем, но что КОНКРЕТНО НУЖНО было делать, и более того: что МОЖНО БЫЛО В ПРИНЦИПЕ сделать? Этого никто не знал. Между тем деградационный процесс, как домовый гриб, опутал длинными серыми щупальцами все величественное здание Мировой Социалистической Системы: от промышленного фундамента до краснозвездных идеологических шпилей. Теперь мы, жители XXI века, можем дать этому процессу точное научное название: БАНКРОТСТВО. Проще говоря, народ и государство хотели жить красиво, имея в виду нечто большее чем лозунги на кумаче и многометровые портреты Ленина на зданиях. Но для такой красивой жизни нужно много денег, а где их взять? - Очевидно, выйти на мировой рынок с высококачественным товаром, который кто-то захочет купить. Компьютеры и особенно программы могли бы стать идеальными товарами 80-х годов, да и до нашего времени таковыми остались. Но изготовить такой товар - это сложно, а думать о сложном в жизни в 80-е годы, в отличие от 50-х, никто не хотел. Открытие грандиозных нефтегазовых месторождений в Тюменской области создало иллюзию: вот он, товар, который позволит наконец досыта накормить весь 220-миллионный народ! Компьютеры и программы стали вдруг никому не нужны.

Характеристика эпохи

Компьютерные средние века наступили около 1970 года. Эта дата приблизительна. С одной стороны, многие технические решения (как «железячные», так и программные), знаменующие эту эпоху, появились в 60-е годы. С другой стороны, значительная часть человечества жила в древности, а то и в первобытности, чуть ли не до 1990-х годов. Характерные черты этого исторического периода:
* Выражаясь философским языком, имело место отрицание отрицания: то, что в древнюю эпоху виделось как шаг назад, к первобытности, я имею в виду возрождение специализированных компьютеров как класса, теперь воспринималось как прогресс.
* И еще одно отрицание отрицания: с одной стороны, дальнейший рост компьютерной промышленности, выполняющей государственные заказы (в том числе военные) и, с другой стороны, подключение к общему делу частных фирм, в т. ч. мелких, производящих компьютеры и особенно программы за свой счет, поставляющих их на открытый рынок и живущих на полной самоокупаемости без какой-либо государственной поддержки. Примером такой компании является ныне всемирно известный «Микрософт», который начинался в 1975 г. с двух работников: Б. Гейтса и П. Аллена. Разумеется, в СССР таких частных фирм быть не могло, и это предопределило последующее отставание нашей страны от США.
* ЭВМ появились во многих научно-исследовательских и учебных заведениях и на технологически развитых заводах, где они все чаще использовались для решения ранее несвойственных им задач, прежде всего в области экономики. Компьютер постепенно перестает быть чисто вычислительной машиной в том строгом смысле, как это понималось в древнюю эпоху: доля численных расчетов в общем объеме работы мирового компьютерного парка сокращается, а увеличивается объем работы с непривычной информацией, например символьной: хранение и обработка текстов, таблиц, баз данных; поиск, выборка, упорядочение… Все эти операции типичны для народно-хозяйственных задач (бухгалтерских и планово-экономических), а также для инженерных, таких как например патентные исследования.
* Диалоговый режим работы пользователей без многочасового ожидания, без перфокарт, а порой и без печати данных на бумагу, стал преобладающим.
* Появляются достаточно надежные компьютеры, которые могут работать хоть сутками напролет без ухода и присмотра, причем в жестких условиях внешней среды. Такие компьютеры могут иметь ограниченные вычислительные возможности и при этом проворачивать значительные объемы работы, а минимизация обслуживающего персонала позволяет еще более повысить экономический эффект от их применения.

Последнее десятилетие XX века - новое компьютерное время

В 1989 году эмбарго на поставку персональных компьютеров в СССР было отменено, и компьютеры IBM PC/AT (следующее поколение после PC/XT) стали знакомы многим в нашей стране. Этот год я считаю годом очередного перелома эпох: закончилось средневековье, наступило новое время. Оно характеризуется массовым внедрением в нашу жизнь персональных компьютеров. Такой компьютер занимал немного места, умеренно потреблял электроэнергию и, главное, мог работать сутки напролет без всякого ремонта и наладки. За сутки на таком компьютере можно было поднять такой объем работы, над которым весь вычислительный центр ЛЭТИ трудился бы год! (это теоретически). И таким компьютером можно было оснастить рабочее место практически каждого ученого или инженера. Иными словами, доступ человека к компьютеру перестал быть ресурсом. Правда, покупка такого компьютера для домашнего пользования стала возможна лишь через несколько лет, году примерно в 1993-м.
Бурный рост производства персональных компьютеров частными фирмами и перенос значительной части этого производства из США в страны юго-восточной Азии привел к постепенному самоустранению американского государства от компьютерных дел. Вслед за США вынуждены были пойти и другие, и постсоветская Россия не могла оставаться исключением. Однако в России так и не были созданы (и даже до настоящего времени) возможности для частного бизнеса, в результате наша компьютерно-программная промышленность, и без того уже изрядно пострадавшая от некомпетентных решений высшего государственного руководства, не выдержала конкуренции с американскими «друзьями» и была окончательно добита.
Новое время небогато на революционные решения в области компьютерного «железа», поэтому в этой главе мы уделим основное внимание программной стороне дела.
Мы говорим: «персональный компьютер», но что это были за компьютеры? Основная масса ПК в то время изготавливалась на Тайване и в Сингапуре по американской технологии. Некоторое количество компьютеров производилось в Европе, но их было немного, стоили они дороже, и в нашу страну почти не попадали. Торговых марок компьютеров было очень много, но архитектура и основные параметры были практически одинаковы: это PC/AT на процессорах 80286 от фирмы «Интел» с тактовой частотой 12 МГц и емкостью оперативной памяти от 640 кБайт до 2 МБайт. Процессор 80286 (или по-простому 286) был следующим поколением после 8086, и соответственно компьютер PC/AT - следующим поколением после PC/XT. Многие компьютеры комплектовались сопроцессорами, которые обеспечивали арифметику с плавающей точкой, с разрядностью 32 или 64, а некоторые - даже 80, но сам процессор остался 16-разрядным. 80286 предлагал несколько новшеств: защищенный режим (который, правда, так и не нашел применения в тогдашних операционных системах) и возможность адресации бОльших пространств памяти по сравнению с предшественником. Это мы говорим о годах с 1989 примерно по 1993, а позже стали появляться компьютеры на 32-разрядных процессорах 80386 и 80486, которые очевидно являлись следующим поколением по отношению к 80286. Такие же процессоры, очень похожие на интеловские, выпускались также фирмой «АМД». Многие из них также имели арифметические сопроцессоры. Обычный компьютер представлял собой настольный системный блок в виде ящика размером примерно 40х40х10 см, к которому подключались клавиатура и монитор. Существовали портативные компьютеры - ноутбуки
istoria-notebook-1.jpg
(на этом фото экспонат Музея связи - «Тошиба Т1600», Япония, около 1990 г.), а также настольные компьютеры типа «моноблок» (в них вся компьютерная «начинка» встроена в корпус монитора, что характерно для продукции фирмы «Эппл»), но в нашей стране практически до конца XX века они были редкостью.
Как видим, персональный компьютер нового времени радикально отличается от средневекового. Если средневековый ПК был маленькой и дешевой машинкой с ограниченным кругом решаемых задач, то ПК нового времени приобрел все основные архитектурные черты, ранее свойственные мейнфреймам, а по быстродействию даже превосходил их. По цене же такой компьютер быстро сравнялся с ПК прежнего поколения. Неудивительно, что «эйтишки» быстро захватили весь компьютерный рынок, вытеснив с него как мейнфреймы, так и восьмиразрядные машины. Спираль истории завершила круг: деление компьютеров на большие и малые, наметившееся на исходе древней эпохи и достигшее апогея в средние века, сошло на нет: теперь все устройства, называемые компьютерами, были «большими», а малыми остались микропроцессоры и микроконтроллеры - наследники УМ-1-НХ. Термин «управляющая машина» постепенно вышел из употребления, уступив место термину «промышленная автоматика». Впрочем, это различие - не более чем просто терминология.
С другой стороны, выражение «промышленная автоматика» не следует понимать буквально: машины, подразумеваемые под этим названием, работали не только на заводах. Железнодорожная СЦБ, корабельные БИУС, авионика - все это близкородственные отрасли. И микропроцессорная «начинка» тогдашних телевизоров, DVD-плееров, аппаратуры сотовой связи - это все, по большому счету, та же самая техника, в отличие от нынешней, которая гораздо ближе к «большим» компьютерам, чем к малым.
Однако вернемся к персональным компьютерам 90-х годов. Эволюция процессоров шла по пути усложнения, что не могло не отразиться и на их цене, и на энергопотреблении. А последнее не могло не отразиться на температурном режиме процессора. Если 486-й процессор еще мог работать при естественном охлаждении, то следующее поколение - «Пентиум» - уже не обходилось без вентилятора. Усложнялось и программирование компьютеров, и все эти обстоятельства не давали покоя конкурентам «Интела» - они в противовес интеловской архитектуре разрабатывали свои процессоры, свободные от рассмотренных здесь недостатков. В те века уже был известен принцип RISC - Reduced Instruction Set Computer - компьютер с сокращенной системой команд. Фокус RISC отнюдь не сводится к экономии бумаги при печати мануала по системе команд: такие процессоры дешевле, потребляют меньше энергии и соответственно меньше греются, и при этом работают зачастую быстрее обычных процессоров со сложной системой команд. Однако во времена операционной системы ДОС в мире было наработано огромное количество программ для компьютеров на интеловских процессорах, и хотя ДОС давно уже выведена из эксплуатации, эти программы до нашего времени позволяют процессорам «Интел»/«АМД» не только преодолевать конкурентное давление, но и развиваться дальше.
Еще несколько слов про ДОС. Выше мы отмечали, что в древнюю эпоху как пользователь, так и программист общались с компьютером через посредника - оператора подготовки данных, а в средние века преобладающим способом общения стал диалог через видеотерминал. Суть диалогового режима в том, что человек набирает на клавиатуре команды в виде цифробуквенных последовательностей, иногда напоминающих обычные человеческие слова. Каждую команду нужно было «разжевать и в рот компьютеру положить». Новое время - новые порядки: ДОС предлагала полноэкранный режим взаимодействия человека с машиной. Теперь, чтобы запустить некоторую прикладную программу, оператор вызывал на экран меню и с помощью клавиш со стрелками (нам всем эти клавиши, конечно, хорошо знакомы) навести подсветку меню на название нужной программы. Эту операцию можно было делать руками, а мозг при этом был занят решаемой задачей и не отвлекался на мелочи - безусловно, такая работа более плодотворна и менее утомительна, чем диалог. Итак, если в древние века пользователь общался с машиной в основном через посредничество оператора подготовки данных, а в средние века преобладал диалоговый режим, то новое компьютерное время - это эпоха общения пользователя с компьютером на языке меню, клавиш «Вверх-вниз» и манипуляторов типа мыши и джойстика.

Компьютерные игры и игровые компьютеры в новое время

Уменьшение стоимости компьютеров и расширение их промышленного выпуска в разных странах (а не только в США, как раньше) привело к пересмотру взглядов на компьютерные игры. Выше, обсуждая компьютерные игры в средние века, я обещал рассказать о пересмотре незыблемых истин - настала пора выполнить это обещание.
На рубеже 80-х-90-х годов XX века переоценка ценностей имела место сразу по двум направлениям. Во-первых, стало реальностью создание полнопрофильного компьютера, достаточно дешевого и при этом жизнестойкого настолько, чтобы его можно было доверить ребенку и не плакать, если ребенок его сломает. Во-вторых, проектирование и изготовление таких компьютеров уже не воспринималось людьми как девиантное поведение взрослых дядек - это была нормальная инженерная деятельность. А самые прозорливые умы предвидели, что из этого может вырасти большая индустрия, которая по прибыли и прибыльности может соперничать с производством деловых компьютеров (впрочем это уже другая история - история новейшего времени). 90-е годы отмечены бурным ростом этой индустрии.

Компьютер в торговле, бухгалтерии и экономике

Когда мы слышим слово «бухгалтерия», то представляем что-то запредельно сложное. На самом деле сложность сводится к тому, что нужно составлять отчетные документы согласно государственным нормативным актам, которые написаны очень криво и путано, да к тому же постояно меняются. Если же мы знаем, как составить тот или иной бухгалтерский документ, то ничего сложного в этом уже не будет. К тому же составлением отчетности бухгалтеру приходится заниматься в основном в конце очередного отчетного периода (года, квартала…). Остальное время бухгалтер занят повседневным учетом, суть которого в регистрации и суммировании большого количества численных показателей. Получается, что бухгалтерия - очень легкая работа с точки зрения компьютера, а значит и с точки зрения программиста, пишущего программы согласно техническому заданию, составленному для него заказчиком.
С появлением в конце XIX века механического кассового аппарата, арифмометра и табулятора торговля и бухгалтерия (короче: сфера бизнеса) получили высокую степень компьютеризации, достаточную для этих отраслей человеческой деятельности. После этого прошло без малого столетие, в течение которого в этой сфере не произошло сколько-нибудь значительных перемен.
Первые цифровые компьютеры были очень дороги - во много раз дороже табуляторов, не говоря уж про более простую технику. А значит, дорого было и решение задач на них. На решение важнейших научных и инженерных задач деньги находились, а вот с бухгалтерией и экономикой было сложнее. Грубо говоря, решение задачи не могло стоить больше, чем сама задача, иначе контора останется в убытке. Но по мере развития техники цена компьютеров снижалась, а их способность решать задачи того или иного класса повышалась - рано или поздно эти показатели должны были встретиться, и в 60-е годы (не в последнюю очередь с появлением языка Кобол) они встретились: использование компьютеров для решения бизнес-задач стало ВЫГОДНО. Это в капиталистических странах. В СССР положение было иное.
Проектировщики отечественных ЭВМ, разумеется, не могли не задумываться над применением своих машин для решения экономических и планово-управленческих задач, но испытывали противодействие со стороны всевозможного партийно-хозяйственного начальства. Сейчас нам снова придется вспоминать, в каком мире живем. В капиталистическом мире любой руководитель (завода, лаборатории, института, цеха, отдела…) сознает свою обязанность принимать экономически взвешенные решения. Иначе фирма понесет убытки, которые ощутит на своей шкуре каждый: от генерального директора до уборщицы. В социалистической экономике таких понятий, как прибыль или убытки, просто не было. Убыточность всегда и во всем была позором социализма, ее пытались прятать, но она органически свойственна социалистическому строю: прятать ее было как-то возможно, а устранить - нет. С одной стороны, мы не можем требовать прибыльности от хозяйствующих субъектов, которые несвободны в принятии решений (а дать им свободу - значит отказаться от коренных принципов социализма). С другой стороны, директор прибыльного предприятия неизбежно начнет требовать такой свободы для себя. И с третьей стороны, сам факт существования прибыльных предприятий ставит под вопрос профессиональную компетентность тех партийных функционеров, которые «сверху» навязывают предприятиям экономические решения. Так что какие-либо экономические расчеты на компьютере были бессмысленны, потому что сегодня ты что-то сосчитаешь, а завтра придет ценное указание из райкома или обкома - и придется все делать как начальство велело (а начальству тоже совершенно непопутно, чтобы его решения сверяли с каким-то там компьютером)…
Сказанное не означает, что дорога к применению ЭВМ в экономике была перекрыта полностью и категорически.
Около 1990 года, с крушением социализма и поворотом России к капитализму, ситуация резко изменилась. Сошлись в одно время в одном месте несколько факторов. Во-первых, появление огромного количества частных фирм, на каждой из которых нужен был как минимум бухгалтер, а возможно и экономист. Во-вторых, усиление контроля государственных финансовых органов за этими фирмами и как следствие - усложнение отчетности. Профессии бухгалтера и экономиста внезапно стали престижными и неплохо оплачиваемыми. В-третьих, развал множества заводов и институтов привел к высвобождению тысяч ученых и инженеров, которые были вынуждены выбирать себе новую профессию, по большому счету, между охранником и бухгалтером: другого им не предлагали (да и сейчас не предлагают). И в четвертых, поступление на рынок дешевых персональных компьютеров разной степени профессионализма. Ничего удивительного, что 90-е годы XX века в России отмечены бумом бухгалтерских программ. Сколько таких программ было создано, теперь уже не сосчитать, но их качество было где-то между низким и весьма низким: программисты, уровень подготовки которых и без того оставлял желать лучшего (а серьезный программист в бухгалтерию не пойдет), работали в спешке и при крайне скудном финансировании. Приличный бухгалтер был вынужден иметь на своем компьютере 3-4 разных программы, каждая из которых более-менее справляется с решением какой-то одной задачи, а единой для всех, общепризнанной бухгалтерской программы как не было, так и нет. Если совсем строго, надо говорить не о нескольких программах, а о соответствующем количестве рабочих мест, потому что программы часто были несовместимы по входным и выходным данным, и все первичные бухгалтерские документы приходилось вводить в каждую программу отдельно. Впрочем, бухгалтера против этого ничего не имели, потому что престиж профессии во многом держался на трудоемкости и путанности задач. Я пишу о бухгалтерских задачах и программах, но то же самое справедливо и для экономики, с оговоркой, что ни одной сколько-нибудь хорошей экономической программы я так и не увидел. А вот с программированием планово-управленческих задач дело было совсем плохо: на фоне бухгалтерского бума про эту область просто забыли.
Развитие микропроцессорной техники радикально изменило наши взгляды на кассовый аппарат. Механические кассовые аппараты, которые мы обсудили еще в главе «Первобытная эпоха», почти без изменений (если не считать внешнего вида) дожили до 90-х годов, и вот теперь им на смену пришли электронные кассы - по сути, специализированные компьютеры.
На следующих фото - очередные экспонаты петербургского Музея связи - электронные кассовые аппараты 90-х годов XX века «Онега-ЭКМ» и «ОКА-300 М-1» (1992 г.). С датировкой «Онеги» имеется неясность: в музейной аннотации видим середину XX века, что, конечно, очень неточно. Я бы сказал: последняя четверть XX века. Такие кассы использовались в основном (или только?) на почте, благодаря чему мы и можем их увидеть в Музее связи.
istoria-el-kassy.jpg

Компьютерные сети: локальные и глобальные

Идея объединить несколько компьютеров для совместной работы едва ли не так же стара, как и сами ЭВМ. Еще в 60-е годы сформировались понятия многомашинной вычислительной системы и вычислительной сети. Многомашинная система состоит из компьютеров, расположенных рядом, так что передача данных между ними не представляет проблемы. Сеть состоит из компьютеров, расположенных на значительном удалении друг от друга, так что приходится искать способы передачи большого количества данных на расстояние. Для обмена информацией между компьютерами в то время, которое мы сейчас рассматриваем, использовался исключительно электрический принцип, тот же, что в телефоне и телеграфе: носителем информации служили импульсы электрического напряжения и тока, распространяющиеся по металлическим проводам (неизменяющийся во времени ток информации не несет). Этот принцип казался естественным, потому что задолго до появления первых компьютеров был освоен инженерами-связистами и промышленными предприятиями, выпускавшими провода и аппаратуру. Однако этому принципу свойствен фундаментальный недостаток: информацию можно передавать быстро, но недалеко, а если нужно преодолевать большое расстояние, то темп передачи данных придется ограничивать. Это ограничение, повторяю, фундаментально, т. е. его невозможно преодолеть: его можно только принять как факт и научиться с этим жить. И люди приняли и научились: были разработаны различные провода и приемопередающие приборы (адаптеры) для локальных сетей с дальностью действия порядка сотен метров (что соответствует территории завода, университета и т. д.) и для дальнемагистральных сетей с дальностью до тысяч километров. Однако до 1980-го года все эти разработки практически не выходили за пределы научных лабораторий.
В 80-е годы XX века началось постепенное внедрение локальных сетей в финансовых учреждениях и крупнейших магазинах. На промышленных предприятиях дело обстояло несколько хуже. Дело даже не в том, что сетевые кабели и адаптеры были до поры-до времени дороговаты. Сеть для компьютеров - то же, что телефон для людей: она полезна тогда, когда один из субъектов готов отдать информацию, а другой - получить ее. Представим себе, как происходит обмен данными на заводе. Конструктор разрабатывает чертеж, помещает его в файл и передает технологу. Тот разрабатывает технологическую документацию, передает ее в цех и в плановое бюро. Там формируют требование на склад об отпуске необходимых для работы материалов. Со склада данные о том, что отпущено и что получено, передаются в бухгалтерию…
Гладко было на бумаге, да забыли про овраги. Каждый из упомянутых специалистов работает со своими программами, а создатели этих программ вовсе не позаботились о том, чтобы данные можно было передавать куда-либо. Причем это не недоработка, это принципиальная позиция большинства разработчиков программного обеспечения. Людям, далеким от программирования, такая позиция кажется чуждой и дикой, но мало-мальски бывалые компьютерщики знают, что la vie именно c'est.
Основная технология локальных сетей с 90-х годов до нашего времени и в обозримом будущем - Ethernet (Р. Меткалф, фирма «Ксерокс», 1973-1976 гг). Первоначально предлагалось несколько компьютеров соединять одним длинным куском коаксиального кабеля, похожего на тот, что используется в телевизионных антенных «стояках» многоэтажных домов. Каждый новый компьютер добавлялся к сети без резки кабеля и без пайки: использовалось приспособление «вампир», которое, прокалывая изоляцию кабеля, контактировало с его жилой. Преимущество в том, что новый компьютер можно было подключить, не прерывая ни на секунду работу имеющейся сети. Однако этот кабель довольно толстый, жесткий и неудобен в повседневном обращении («толстый ethernet»). Потом стали использовать более тонкий кабель («тонкий ethernet»), а в 90-е годы на смену ему пришел более простой, дешевый и удобный кабель типа «витая пара» - практически такой, какой нам привычен сейчас. Монтаж такого кабеля требует определенной ловкости рук, но трудоемкость его минимальна, благодаря чему Ethernet вытеснил другие широко использовавшиеся до этого технологии Token Ring и Arcnet. В России до этого локальные сети практически не строились, так что ни «толстый», ни «тонкий» ethernet, ни Arcnet у нас не имели сколько-нибудь заметного распространения, и даже специалисты старшего поколения знают о них в лучшем случае понаслышке.
Что же касается сетей дальнего действия, то в этой сфере единства технологий не было. Использовались кабели, достаточно близкие (или полностью идентичные) тем, которые применялись в междугородной телефонной связи: коаксиальные или четырехпроводные (пример последних - советский МКСАШП), аппаратуру же каждый производитель строил на свой вкус.
Мы говорим о 90-х годах XX века - именно тогда начала формироваться мировая сетевая инфраструктура (попросту Сеть), которую иногда отождествляют с интернетом, но это неправильно. Сеть - это джунгли, в которых обитает достаточно разнообразная фауна. Интернет - только одна из форм сетевой жизни, просто он легче других поддается одомашниванию и поэтому известен широкому кругу людей. К тому же так получилось, что именно интернету Сеть в значительной мере обязана тем обликом, который она имеет сегодня. Но даже если бы интернет не был изобретен, Сеть все равно была бы полезна, и она должна была появиться - и она появилась.
Рассмотрим, какие еще области применения имеет глобальная Сеть.
* Дистанционное выполнение команд на компьютерах, в частности дистанционное обслуживание компьютеров системными администраторами.
* Файлообмен, или централизованный доступ к файлохранилищам.
* Цифровое телевидение, радиовещание и видеонаблюдение.
* Компьютеризированные платежные системы.
* Электронная почта. В представлении большинства почта ассоциируется только с письмами, на самом деле почта - более широкое понятие. Кроме писем, сюда же следует вписать объявления и новостные рассылки, правда эти функции электронной почты не получили такого развития и распространения, как служба писем.
* Службы мгновенных сообщений (мессенджеры).
* Цифровая телефония (IP-телефония).
* Ну и, конечно, интернет, о котором поговорим отдельно чуть ниже.
Мировая Сеть не имеет какого-либо единого начальника или хозяина. Она обслуживается крупными компаниями - провайдерами и суперпровайдерами. Они строят датацентры - «сортировочные станции» и соединяются друг с другом кабелями. В те времена использовались кабели, по конструкции близкие к телефонным, хорошо освоенным промышленностью. Для потребителя (абонента) существовала т. н. проблема последней мили. Попросту говоря, вы можете жить на расстоянии одной мили от ближайшего провайдера, но прокладка специального кабеля на такое как бы небольшое расстояние - дело весьма дорогое, а в городе это может оказаться вообще нереальным из-за множества различных подземных сооружений. Если абонент - банк, деловой центр или офис крупной фирмы, нуждающийся в получении или передаче больших объемов информации и готовый за это платить, то эта проблема как-то решается. А вот для простого горожанина, не говоря уж про сельского жителя, такие расходы неподъемны. В таком крупном, технологически продвинутом городе как Санкт-Петербург, например, еще в 2003 г. было довольно много домов, где не было технической возможности для подключения к Сети.
Наиболее распространенным решением проблемы последней мили в новое время была технология dial-up, суть которой в использовании существующих телефонных линий. Если в квартире установлен телефон, значит имеется пара проводов, идущая от него к телефонной станции. Эти провода используются только во время телефонного разговора, а когда разговор не ведется, их можно использовать для передачи данных. Необходимо приобрести специальный прибор - модем - для сопряжения компьютера с телефонной сетью, заключить договор с телефонной компанией об услуге передачи данных и купить скретч-карту оплаты услуг провайдера. Затем нужно дозвониться до провайдера, который, собственно, будет вам эти данные поставлять (телефонная станция, скорее всего, провайдером не является), ввести с помощью специальной программы скретч-код с карты - и тогда, возможно, удастся соединиться с Сетью. Оплачивались такие услуги, как правило, повременно. А сколько данных вы успеете отправить или получить - это зависит от качества телефонных проводов, которое чаще всего где-то между плохим и очень плохим. Скачивание фильма могло занять целую ночь. Такой технологией в Санкт-Петербурге я пользовался еще в 2007 г., но вскоре после этого переход телефонных станций на «цифру» положил конец применению dial-up.
На следующем фото - небольшая коллекция модемов разных эпох. Самый дальний от нас - внешний dial-up модем, датируемый приблизительно 1990 г., справа - встраиваемый:

В крупных городах использовалась (а сейчас еще много где используется, но в основном в провинции) более совершенная технология - ADSL. Она тоже предполагает использование телефонных проводов, но только если они достаточно высокого качества. ADSL позволяет вести телефонный разговор и одновременно передавать данные. Для осуществления этой технологии необходимо иметь два модема: один у абонента, другой - на телефонной станции. В 90-е годы обычно предлагалось модемы не покупать, а арендовать у телефонной компании.
На предыдущем фото ADSL-модем слева внизу.

Интернет в новое время

Следует заметить, что интернет оказался одним из позднейших по времени появления среди перечисленных выше принципов эксплуатации Сети. В нашей стране года до 1995-го он казался почти фантастикой, а широкое распространение получил где-то после 2005-го года.
Слово internet в значении «межсетевой» появилось раньше, чем стало употребляться в нынешнем значении. Internet Protocol (IP) - одно из важнейших изобретений, благодаря которому компьютерный мир стал таким, каким мы его знаем сейчас.
Протокол - совокупность правил или рекомендаций, обеспечивающих взаимопонимание между двумя субъектами, желающими обмениваться информацией.
Internet Protocol (1981 г., В. Серф и Р.-Э. Кан) обеспечивает возможность маршрутизации - целенаправленной доставки информации «из пункта А в пункт Б» в сети с миллионами или миллиардами абонентов кратчайшим путем, с объездом препятствий, если таковые возникнут, но без захода в такие места Сети, где абонента Б заведомо не может быть. Этот протокол используется всеми «формами сетевой жизни», которые мы перечислили выше. Без него нынешнее существование Сети было бы немыслимо, поэтому Серфа и Кана называют отцами интернета.
Однако вернемся к интернету в привычном нам значении этого слова. В представлении грамотного компьютерщика это слово отождествляется со всемирной паутиной - World-Wide Web, WWW. Концепцию WWW предложил в 1989 г. Тим Бернерс-Ли, работавший в Европейском совете по ядерным исследованиям и в ЦЕРНе. WWW первоначально виделась как всемирное хранилище документов, каждый из которых может храниться на одном из множества компьютеров, включенных в Сеть, причем пользователь может просматривать любой документ, не задумываясь о том, где документ реально хранится. Для этого в документ, помимо собственно текста (возможно с иллюстрациями), могут вставляться ссылки на любые части этого же или другого документа. Пользователь, увидев ссылку, которая ему покажется интересной, просто нажимает на эту ссылку и получает нужный документ в открытом виде. Технически это осуществляется так: все документы оформляются в виде гипертекста по определенным правилам, образующим язык разметки гипертекста - Hyper Text Markup Language - HTML, а по Сети гипертекст передается с использованием протокола передачи гипертекста - Hyper Text Transfer Protocol - HTTP. Таким образом, формула интернета: WWW=HTML+HTTP применима с точностью, достаточной на нашем сегодняшнем уровне понимания.
HTTP представляет собой клиент-серверный протокол, т. е. два субъекта, общающиеся между собой по этому протоколу, играют несимметричные роли: один из них выступает клиентом, другой - сервером. Значение этих слов мы разобрали выше, в главе «компьютерные средние века». В качестве HTTP-клиента (WEB-клиента) выступает специальная программа, называемая также браузером (англ. browser). Предшественником браузеров является программа «Энквайр», разработанная Бернерсом-Ли для собственных нужд, а первый настоящий браузер под названием World-Wide Web был создан также при его участии в 1990-1991 г. В 1995 г. фирма «Микрософт» начала разработку своего браузера «Internet Explorer», который в течение ряда лет являлся наиболее распространенным в мире и по сей день остается эталоном, на который ориентируются разработчики других браузеров.
Итак, интернет 90-х годов XX века представлял собой не что иное как всемирную библиотеку и/или архив. Предполагалось, что в нем будет содержаться информация преимущественно научно-технического порядка. О том, что в виде гипертекста можно представить эротику и порнографию, политическую и религиозную пропаганду, и просто пустую болтовню, сразу как-то не подумали, а в итоге интернет быстро утратил свою былую серьезность… Но сейчас хотелось бы остановиться на другом вопросе. Каждый HTML-документ («страница») представал перед пользователем строго в том виде, в котором он был заготовлен заранее. Подготовкой документа занимался специальный работник - WEB-дизайнер или WEB-верстальщик. Такой принцип подготовки данных («контента») получил название статического. Первое время он был единственным, но на рубеже XX-XXI веков получил распространение динамический контент, но это уже другая история - история новейшего интернетного времени.

Вирусы, хакеры и первые вопросы информационной безопасности

Первый компьютерный вирус появился еще в начале 80-х годов, но, как это всегда и бывает, его мало кто принимал всерьез, пока в 1986-1989 годах не прошли первые серьезные эпидемии. Таким образом, эпоха вирусов совпала с новым компьютерным временем.
Как работает компьютерный вирус?
Это программа, которая имеет (для маскировки или даже реально) какие-то полезные функции, но при запуске на выполнение она просматривает другие имеющиеся на данном компьютере программы и присоединяет к ним часть своего кода - заражает их, так что зараженная программа сама становится вирусом и приобретает способность заражать другие программы. Так вирус размножается до тех пор, пока все программы не будут заражены (отсюда, собственно, и название «вирус»). Если зараженную программу скопировать на другой компьютер и там запустить на выполнение, то она начнет заражать другие. Так возникает эпидемия, при которой тысячи или миллионы компьютеров по всему миру могут оказаться заражены.
Что дальше? Сейчас известно множество вирусов, которые не наносят никакого реального вреда. Они лишь обозначают свое присутствие на компьютере, тревожат пользователя. Могут забивать диски «мусором», подтормаживать компьютер… Но это сейчас. Вирусы 90-х годов чаще всего были гораздо более зловредны: они могли стирать файлы или искажать их содержимое, «завешивать» компьютер и даже физически разрушать жесткие диски, и неудивительно, что страх перед вирусами засел в памяти человечества так же крепко, как когда-то страх перед чумой, оспой или проказой.
Принципиально важно: (а) вирус заражает не любые файлы, а только выполняемые программы; (б) заражение происходит только тогда, когда зараженная программа запущена на выполнение. Вирус не живет сам по себе (поэтому он именно вирус, а не микроб, бацилла или амеба), и «подцепить» его можно только вместе с некоторой программой. Порядочный поставщик программ не допустит заражения, но велик соблазн приобрести подешевле (или совсем бесплатно) программу из непроверенного источника - такая программа может оказаться зараженной. Отсюда вытекают элементарные правила компьютерной гигиены, очевидные для нас сейчас. Но в 90-е годы XX века эти правила были для людей новостью. Хотя, с другой стороны, вирусы не страшны тому, кто регулярно делает резервные копии всех нужных файлов (а положа руку на сердце: вы это делаете???)
Как «лечить» зараженный вирусом компьютер? Если вирус - программа, то и лекарство - тоже программа. Антивирус просматривает выполняемые файлы, определяет, имеется ли в них зараза, и удаляет вирус. Принципиально возможно написание такой программы, которая уничтожает все вирусы, известные ее разработчику на момент выпуска программы на рынок. Однако существуют также варианты, пусть и не 100%-ные, обнаруживать и удалять вирусы, которые при разработке антивируса не были известны, хотя это гораздо сложнее. Можно попытаться проанализировать, что именно делает данная программа: может ли она просматривать каталоги файлов? Производить запись в выполняемые файлы? Или вообще в файлы, которые не относятся к решаемой задаче? По этим признакам можно хотя бы отличить «добропорядочную» программу от подозрительной.
Первая коммерческая антивирусная программа - Norton Antivirus - появилась в 1990 году. Заметим, что слово Norton в названии этой и многих других программ к имени авторитетного в те годы программиста Питера Нортона имеет весьма косвенное отношение, на самом деле эти программы выпускались фирмой «Симантек».
Появление компьютерных вирусов вызвало к жизни целую новую отрасль программирования - разработку антивирусов. И эта отрасль очень быстро выросла в индустрию, в которой вращаются колоссальные деньги. Ничего удивительного: сами пишем вирус, сами к нему создаем антивирус.
Создание антивирусных программ - практическая, инженерная работа. Но по мере того как вирусы усложнялись, инженерная работа по борьбе с ними обросла теоретической базой, так что на рубеже XX - XXI веков информационная безопасность стала НАУКОЙ. В рамках этой статьи мы эту науку рассматривать не будем, даже на уровне азов. Ограничимся тем, что борьба с компьютерными врагами имеет много параллелей с любыми боевыми действиями, в какой бы среде они ни проходили.

Операционные системы нового времени

В главе «Компьютерные средние века» мы рассмотрели DOS: появившись в конце 80-х годов вместе с компьютером PC/XT, эта система обозначила конец средних веков и наступление нового времени.
Аббревиатура DOS расшифровывается просто как дисковая операционная система - такое же название раньше носила ОС для мейнфреймов ИБМ-360 (наши ЕС). Однако мы говорим «DOS» - подразумевает не один, а целых три продукта, почти одинаковых внешне, но совершенно независимых внутренне. Это DR DOS от фирмы «Диджитал Ресёрч», PC DOS от «ИБМ» и MS DOS от «Микрософт». Так было в начале 90-х годов. Однако «Диджитал Ресёрч» в 1991 была куплена фирмой «Новелл», затем вся разработка «пошла по рукам», но новые версии уже не получали сколько-нибудь заметного распространения. В нашей стране DR DOS версий после 3 практически неизвестны. «ИБМ» решила создать свою ОС под маркой OS/2, но век ее оказался недолог, и поделом: эта система не обещала ничего революционного по отношению к DOS, а такие чисто конкурентные разработки чаще всего бывают нежизнеспособны. В России предпринимались попытки внедрения OS/2, но без особого успеха. Так «Микрософт» оказался монопольным владельцем DOS.
В 1985 г. была начата разработка Windows. Первая версия этой системы - 3.0 (1990 г.) - была не операционной системой, а графической оболочкой для DOS. Она не была пионерским продуктом - была аналогом системы X-Window в UNIX. Как мы уже говорили, DOS была очень хорошо приспособлена для программирования, а использование Windows ни коим образом не препятствовало созданию и эксплуатации DOSовских программ. Затем были выпущены версии Windows 95 и 98 (цифры соответствуют году выпуска). Они уже не использовали DOS и были полностью самостоятельными ОС, и в них ранее созданные DOSовские программы большей частью могли работать (возможно с какими-то ограничениями), но возможности для разработки новых программ были резко ограничены. Эти ОС использовали файловую систему FAT, к тому времени хорошо освоенную программистами, - ту же, что и в DOS. Windows 95 и особенно 98 быстро завоевали большую популярность у пользователей, да и у программистов тоже, и стали самыми распространенными операционными системами для ПК, а разработка DOS к тому времени была уже свернута.
Следующим гениальным маркетинговым шагом было создание Windows NT со своей файловой системой NTFS, которая практически не имела документации для программистов и была несовместима с прежней, а все прежние языки, компиляторы и прочий программистский инструментарий оказались неприменимы. А поскольку большинство пользователей ПК, соблазнившись новыми фичами Windows 98, уже отказались от DOS и были неготовы к ней возвращаться, получилось так, что «Микрософт» поставил весь компьютерно-программный мир перед фактом: самодеятельное программирование стало практически невозможным. Так фирма, которую каких-то 10 лет назад никто не знал и всерьез не принимал, в одно прекрасное утро проснулась не просто локомотивом мирового программирования, а мировым программным монополистом. Приобретение программ для пользователей (как «домашних», так и корпоративных) стало чрезвычайно дорогим, а в ряде случаев просто нереальным (я говорю, например, об экономическом и производственно-управленческом сегменте рынка). Ничего удивительного, что эта фирма очень быстро стала одной из крупнейших мировых корпораций (не только компьютерных, а вообще), а ее глава Б. Гейтс с тех пор не опускается ниже второго места в списке богатейших людей мира.
Такое положение дел, разумеется, нравилось в мире далеко не всем, а что делать-то? C'est la vie: тот, кто сильнее, диктует всем свои представления о жизни. Преодолеть диктат «Микрософта» можно было только одним способом: разработкой новой ОС, причем такой, которая превосходила бы Windows по своим боевым возможностям. И главное: новая ОС должна предлагать принципиально новые технологии программирования, которые сделали бы разработку программ дешевле. Очевидно, разработка такой ОС требовала бы огромного объема опытно-конструкторских работ и многомиллиардного финансирования. Но кто мог бы создать такую систему? Очевидно, нужен человек с выдающимися деловыми, волевыми и интеллектуальными качествами, а таких людей в мире никогда не было слишком много. А из тех, которые есть, под номером 1 кто? - смейтесь если смешно: Б. Гейтс. Соответственно 99.99% людей в мире ничего противопоставить «Микрософту» не могут, и им остается только мириться с имеющимся положением вещей.
Тем не менее люди, не желающие принимать Windows как нечто от бога, в мире все-таки нашлись, а альтернатива «виндам» появилась еще раньше самих «виндов». В 1983 г. Р. Столлман (Массачусетский технологический институт, США) открыл проект GNU, или, иными словами, фонд свободного программного обеспечения. Столлман не был революционером в программистских технологиях: все, что он хотел, - это сделать программное обеспечение бесплатным. В рамках проекта GNU разрабатывалась операционная система GNU/Hurd, аналогичная средневековой ОС UNIX. Последняя еще недавно была одним из общепризнанных эталонов для программистов. К 1991 GNU/Hurd была в основном создана - ей не хватало только ядра (ядро Hurd не завершено до сих пор). А в 1991 Линус Торвальдс (Хельсинки) начал разработку собственного ядра, которое было названо Linux и, в отличие от Hurd, быстро обрело жизнеспособность. Так появилась операционная система GNU/Linux (так ее следует правильно называть), из которой к настоящему времени выросло целое семейство ОС, называемых дистрибутивами: Gentoo, Debian, Mint, Ubuntu, RedHat, Slackware, AltLinux и многие другие. Подробнее смотрите вот здесь:
https://losst.ru/istoriya-sozdaniya-linux
Linux привлекателен для программистов прежде всего своей бесплатностью. Если к вам нагрянут правоохранительные органы на предмет нарушения вами авторских прав на программное обеспечение и обнаружат у вас Linux, то им придется успокоиться: предъявить вам будет нечего. После громкого уголовного дела против пермского учителя Поносова (2007-2008 г.) это, согласитесь, немаловажный аргумент. Сравнение «линей» с «виндами» по техническим параметрам дает результат, близкий к фифти\фифти. Линукс потребляет чуть-чуть меньше памяти, работает чуть-чуть быстрее… Аргументы в пользу линукса на этом не исчерпываются. В линуксах имеется терминал, очень удобный для обслуживания компьютера системным администратором; настройка многих программ осуществляется путем написания конфигурационных файлов… Как этим всем пользоваться, смотрите, например, мои статьи:
Udev и его применение для монтирования файловой системы
Pppd и его применение для "мобилизации" интернета в Linux
Я в жизни сделал не менее трех попыток наладить простейшую локальную сеть под Windows, но у меня так ничего и не получилось, зато очень легко и быстро все пошло после того как я пересел на Linux. С тех пор я твердо уверен, что обучать студентов сетевым технологиям следует только в среде Linux, и это мнение полностью созвучно позиции системных администраторов, работающих в дата-центрах и вообще везде, где есть сколько-нибудь серьезные локальные сети. В то же время Windows практически безальтернативны для игр (а мы уже знаем, что большинство персональных компьютеров в мире используется именно для игр) и мелкоофисных дел. Типичная картина: в офисе фирмы сервер на линуксах, а рабочие места пользователей - на Windows. А поскольку рабочих мест всегда бывает больше, чем серверов, то неудивительно, что примерно 90% всех компьютеров в мире оснащены «виндами». Это мы говорим о компьютерах, за которыми работают пользователи. Если же посмотреть на компьютеры, работающие без участия людей, то здесь соотношение прямо противоположное.
Сопоставлять Windows и Linux можно еще очень долго, но я сейчас остановлюсь на том, что эти системы существуют и будут существовать в единстве и борьбе еще долго. Так появившиеся в середине XIX века пароходы в течение целого века сосуществовали и соперничали с парусниками, пока в их взаимоотношения не вмешался Дизель (это быль, и в ней намек - добрым молодцам и красным девицам урок).
Заметим, что Linux - не единственный идейный наследник UNIX. Подобных операционных систем в 90-е годы и в начале XXI века было создано очень много - вероятно десятки. Но наибольшее распространение наряду с линуксами получили ОС семейства BSD от Университета Беркли (разрабатывалась в 1978-1994 гг., после чего ей на смену пришла бесплатная OpenBSD), и коммерческая MacOS от фирмы «Эппл». Все они - из США. Эти системы очень похожи: кто освоил MacOS, тот легко перейдет на Linux, и наоборот, и BSD аналогично.
Заканчивая разговор об операционных системах нового времени, я хотел бы обратить внимание читателей вот на какой аспект. Ни Столлман, ни Торвальдс не были бунтарями или новаторами. Они только хотели сделать программное обеспечение доступным для всех, и они это сделали, но не ставили перед собой амбициозных задач типа перелома исторических эпох - они шли в кильватере UNIX. Так идеология операционной системы, разрабатывавшаяся еще в 70-е годы XX века, оказалась законсервирована в новых изделиях. Чуть позже мы будем рассматривать новейшее компьютерное время, практически совпадающее с XXI веком, но в области операционных систем никакого новейшего времени мы не наблюдаем, и в главе «Новейшее компьютерное время» разговора об операционных системах не будет.

Программирование в новое время

Рассматривая программирование в древние времена, мы заметили, что компьютеры имели мало оперативной памяти, из-за чего программист должен был писать программу так, чтобы количество команд в ней было минимальным, а польза от каждой команды - максимальной. Это требование никак невозможно было обойти, поэтому мы назвали его категорическим императивом программирования. Компьютеры средних веков имели гораздо больше оперативной памяти и прощали некоторую избыточность команд, но мечта программистов о райской жизни на земле не сбылась (в очередной раз, и можно не сомневаться - не в последний): средневековые задачи требовали программ большого объема. В новое время компьютеров стало реально много, задач для них - тоже, так что объем работ для программистов еще прибавился. Как решить проблему нехватки рабочих рук в программировании? С наших сегодняшних позиций просматриваются следующие варианты:
* Разработка новых технологий, повышающих производительность труда программистов. Если продолжить нашу аналогию с паровозами, то на железнодорожном транспорте прогрессивной технологией является электрификация дорог: электровоз, по размерам и весу сходный с паровозом, может иметь бОльшую мощность, а значит везти бОльший груз… А что у нас? Похоже, что ничего. Вопрос о создании прогрессивных технологий на смену старому верному Алголу никогда и никем даже не ставился, а если вопрос не ставить, то и ответа на него ждать не приходится (еще раз акцентирую внимание на том, что язык Си прогрессивной технологией по отношению к Алголу не является).
* Наращивание количества учебных мест в институтах, готовящих программистов. Решение вроде бы очевидное, но есть подводный камень: сколько бы мы ни создавали учебных мест, на них будут приходить люди, при всем достаточном IQ не обладающие нужными деловыми качествами. Вложить в них профессиональные знания не проблема, а вот научить их самостоятельно разрабатывать качественный продукт - к этому институтские преподаватели не готовы в принципе, потому что настроены на науку, а не на воспитательную работу (в других профессиях, как рабочих, так и инженерных, деловые качества не играют такой важной роли, как у нас).
* Коммерческая (и некоммерческая) разработка программ: хотя пользователей очень много, среди них совсем немного таких, которые решают какие-то свои, совершенно индивидуальные задачи. У большинства пользователей задачи абсолютно типовые.
* «Программирование без программирования»: создать сейчас такую программу, с помощью которой конечный пользователь впоследствии мог бы решать новые задачи, не прибегая к услугам программиста.
* Вовлечь в разработку программ людей, не обладающих высокой профессиональной подготовкой, путем разработки «суррогатных» технологий программирования, совершенно немыслимых в предыдущие исторические эпохи.

Задачи, языки и технологии программирования

В новое время программирование как единая профессия, по большому счету, перестало существовать. Вместо одной мы получили множество профессий, для каждой из которых характерны свои инструменты и свои приемы работы, зачастую настолько различные, что переход из одной области программирования в другую может оказаться весьма затруднительным.
Программирование мелкокаменное и крупнокаменное. В обиходе камнем называют процессор, а мелко - по-гречески микро, так что мелкокаменная техника - это микропроцессоры и микроконтроллеры, и мелкокаменное программирование соответственно.
Мелкокаменное программирование в новое время - последний значительный оплот программистов-ассемблерщиков. При всех моих лично-субъективных симпатиях к ассемблеру, должен сказать, что применять его для микропроцессоров и микроконтроллеров - идея не очень удачная по ряду причин. Во-первых, мелкокаменная техника эксплуатируется в заводских цехах и иных подобных местах, и было бы идеально, если бы ее там обслуживали не программисты, а специалисты по соответствующему технологическому оборудованию - слесаря КИПиА (контрольно-измерительных приборов и автоматики) или даже просто электрики. Эти профессии относятся к рабочим, а не к инженерным. Изучение хотя бы основ программирования для этих людей достаточно обременительно (а ассемблер - это отнюдь не основы, это высший пилотаж!). Во-вторых, ассемблер - машинно-зависимый язык, так что в случае замены машины переложение старой программы на новую машину может оказаться весьма непростой задачей. Создать для киповцев и электриков специальный, притом машино-независимый, язык - идея очевидно вполне здравая… Но чтобы здравая идея получила столь же здравое воплощение в металл, нужны соответствующие научные исследования и опытно-конструкторские разработки, а вот тут у кого-то что-то не сконтачилось. Международная электротехническая комиссия (МЭК), вместо того чтобы разрабатывать стандарт мелкокаменного языка (а разработка стандартов - ее непосредственная трудовая функция), слепила его из того, что было, а потом, как это обычно и бывает в жизни, «что было, то и полюбила»: в стандарт вошли не один, а целых 5 языков (мы их рассмотрим чуть подробнее в главе «Микроконтроллеры»). Они появились стихийно в разное время в разных странах, каждый из них (при всей несомненной пользе) имел свои кривоватости и шероховатости, а когда 5 языков попытались объединить в нечто целое, эти шероховатости никуда не исчезли - наоборот, проявились еще сильнее. Неудивительно, что до конца нового времени МЭКовские языки так и не составили сколько-нибудь серьезной альтернативы ассемблеру. И даже в новейшую эпоху, когда все программирующее человечество уже послало ассемблеру последний прощальный поцелуй, МЭКовские языки так и не заняли преобладающего положения на рынке, уступив место языку Си.
Про технологии крупнокаменного программирования буквально пара слов. Новое время отмечено окончательным отказом как от древних технологий, основанных на потоковом вводе данных, так и от средневековых, ориентированных на использование телетайпов и пишущих машинок. На языках остановимся более подробно, но чуть ниже.
Программирование системное и прикладное. В главе «Компьютерные средние века» мы рассмотрели целый ряд языков и отметили, что с тех пор и до наших дней в этой области не произошло революционных изменений. Сказанное не означает, что никаких событий вообще не произошло.
В 90-е годы XX века имела место коренная ревизия языкового «арсенала». Если языком N1 в древности был Фортран, а в средние века Бэйсик, то к началу нового времени из всех ранее известных языков остался, по большому счету, только Си. Подчеркиваю: по большому счету, потому что Кобол, Ада и даже Фортран никуда не исчезали, просто их доля в общем объеме разработок программного обеспечения значительно уменьшилась, а ПЛ-1, Паскаль и много других языков практически вышли из употребления.
В чем секрет долгожительства тех или иных языков?
Выгляните в окно, посмотрите на улицу. Среди автомобилей, которые по улице едут, каждый второй - классические «Жигули». Которые, кстати, уже много лет как сняты с производства. А «Ладу-Калину» вы вряд ли сейчас увидите, хотя она выпускалась гораздо позже. Язык программирования - техническое устройство, промышленное изделие. Точно так же, как автомобиль. Техническое устройство может жить долго или не очень в зависимости от того, насколько толково оно сделано, насколько полезно в жизни… Ну и, конечно, нельзя сбрасывать со счетов вопрос о том, в какие руки устройство попало.
Если отбросить мифы вроде тех, которые мы обсудили в главе «Компьютерные средние века», то получаем: Фортран - язык математиков и физиков, Ада - язык авиации и космонавтики, Си - язык разработчиков юниксоидных операционных систем. На этих языках написано программное обеспечение в миллионы или миллиарды строк. Переписывать это все на какой-то другой язык - колоссальная работа. Кто будет этим заниматься, и на какие шиши? Отсюда очевидный вывод: перечисленные языки будут существовать, как минимум, до тех пор, пока будут нужны написанные на них программы, то есть еще очень долго. А тюльпаны… Что тюльпаны? Как расцвели, так и завяли.
В системном программировании в новое время язык ассемблера еще применялся, но его доля в общем объеме работы быстро сходит на нет. Используется он в основном там, где приходится плотно работать с «железом»: при программировании драйверов, кодеков, прошивок. В остальных областях системного программирования первенство захватывает язык Си. Программисты нового времени его считают языком низкого уровня.
Что касается прикладного программирования, то многообразие задач влечет за собой многообразие инструмента для их решения, в том числе и языков. Так что процесс выращивания новых сортов тюльпанов отнюдь не остановился - он развернулся с новой силой. В этом практически никто не видит ничего плохого, многие даже радуются. На самом деле такое «разнообразие» влечет целый ряд негативных последствий.
Во-первых, оно затрудняет взаимопонимание между программистами, а значит и сотрудничество.
Во-вторых, в мире, где уйма нерешенных задач, люди тратят тысячи человеко-лет на изобретение языков, от которых ждут непонятно каких чудес. А тем временем другие люди тратят нерационально (а то и вовсе теряют) миллионы человеко-лет, пытаясь применить какой-нибудь новомодный язык для решения задач, для которых он, как ПОТОМ выясняется, совершенно не предназначен и не приспособлен.
Впрочем, язык Си и в прикладном программировании используется достаточно широко.

***

В новое время, да и сейчас, обычна такая ситуация, когда программист приходит устраиваться на работу, и ему говорят: нам требуется 5-летний опыт работы на таком-то языке… А потом оказывается, что этот язык изобретен 2 года назад! Спросите такого работодателя, почему он выбрал именно этот язык - и он с апломбом в голосе ответит: «у нас передовая фирма, мы хотим быть на острие технического прогресса!» (это очень похоже на то, как мои одноклассники, вступая в Комсомол, писали заявления по типовой форме: «хочу быть в передовом отряде советской молодежи»). За этой фразой скрывается нежелание и неспособность просчитывать экономическую эффективность принимаемых управленческих решений. Совершенно ясно, что работа на такой фирме ничего, кроме убытков, не принесет.
Очень интересно читать в интернете прогнозы о том, сколько будет языков и сколько программистов через энное количество лет. В том, что количество языков будет расти, все предсказатели абсолютно единодушны. А вот в прогнозах количества программистов единодушия нет и в помине. Что же получается? Скоро каждый программист будет работать на своем языке, притом не на одном???

Динамическая линковка и динамически подгружаемые библиотеки

В главе «Средние века» мы рассмотрели два подхода к линковке: статический и оверлейный - и отметили, что от оверлейной линковки всего один шаг до идеи сделать все оверлейные модули общими для всех программ, которым могут потребоваться те или иные типовые подпрограммы. Это и есть принцип динамической линковки, который появился в новое время и сразу получил заслуженную популярность. Если вы пользователь Windows, зайдите в папки с системными файлами - там вы увидите множество файлов с расширением .dll. Это расшифровывается как Dynamically Loadable Libraries или Dynamically Linkable Libraries - динамически подгружаемые или динамически линкуемые библиотеки. А в линуксах практически все библиотеки изначально создаются как динамически линкуемые.

О парадигмах программирования

Если бы программиста 80-х годов спросили, в какой парадигме он программирует, он даже не понял бы вопроса. В то время ни о каких парадигмах просто не думали, потому что существовала единственная: процедурно-ориентированное программирование. Издавна люди привыкли решать разнообразные жизненные задачи через выполнение процедур - действий, которые должны выполняться в определенной последовательности. Варка каши или проводка судна из порта А в порт Б, вычисление квадратного корня или точение детали из заготовки на токарном станке, маневры с вагонами на станции или подготовка выстрела из артиллерийского орудия… И сколько люди производили подобные работы, столько же они писали различные руководства или наставления, в которых нужные действия перечислялись строка за строкой в предположении, что исполнитель будет выполнять их в том порядке, как они записаны. Ничего удивительного, что и первые компьютеры работали по этому же принципу, и первые программы писались так и только так. Однако в 80-е-90-е годы люди начали задумываться: а нельзя ли программировать как-то по-другому?
Чтобы понять, можно ли по-другому, еще чуть-чуть углубимся в тему, как мы бы сейчас сказали, процедурно-ориентированного программирования.
Традиционное, или процедурно-ориентированное, программирование привычно и естественно, потому что так запрограммирован человеческий мозг. Мозг абсолютно универсален: он способен находить, пусть не сразу, решение любой новой задачи. Как бы ни был написан исходный текст программы на языке высокого уровня, в конечном счете он будет скомпилирован в машинный код, написанный в процедурно-ориентированной парадигме. Если этот код декомпилировать, то получим текст программы, также написанный в процедурно-ориентированной парадигме. Или скажем иначе: какова бы ни была задача, она либо может быть запрограммирована в процедурно-ориентированном стиле, либо не может быть запрограммирована совсем.
Традиционное программирование описывает действия исходя из того, что «если все правильно делать, то все правильно и получится». Функционально-ориентированное программирование исходит из того, что смысл любых действий - в выдаче того или иного результата, который зависит от имеющихся исходных данных. А зависимость на языке математики - функция. Если она сложная, то ее раскладывают на множество более простых. Так образуется исходный текст программы, который описывает, как промежуточные результаты вычислений зависят друг от друга.
Представим, что конечный результат решения задачи описывается функцией f0(x,y), где x и y образуются как результаты других функций: x=f1(a), y=f2(b), где a и b - исходные данные. Функции f1 и f2 взамно независимы, и их тексты в программе могут быть расположены произвольным образом. И выполняться они могут в любом порядке: сначала f1, затем f2 или наоборот. Что это нам дает? Как будто ничего, да? Фокус начинается с того, что они могут вычисляться одновременно. А вот это уже очень важно и интересно, если у нас многоядерный компьютер.
Функционально-ориентированное программирование привлекательно для решения достаточно широкого множества задач, но его универсальность - вопрос, как минимум, дискуссионный. В теории все хорошо, но жива теория, а древо жизни пышно увядает. Попробуйте запрограммировать в таком стиле задачу упорядочения большого массива. Если у вас вообще что-то получится, то программа будет чрезвычайно громоздкой и бестолковой. Если же перед вами положить распечатки двух таких программ, созданных по разным алгоритмам (а чудес на свете не бывает - от описания алгоритмов вам по-любому никуда не деться!), то разобраться, какой алгоритм лучше, будет совершенно нереально. В то же время распечатка процедуры упорядочения занимает полстраницы, и понять ее принцип, оценить преимущества и недостатки будет обычной работой даже для начинающего программиста (упорядочение - алгоритм N2 из тех, которые хороший профессор преподает своим студентам, считая N1 извлечение квадратного корня).
О функциональном программировании начали говорить достаточно давно: когда именно, сейчас уже вряд ли можно установить с точностью, и какого-то одного определенного автора ФОП также не назвать. Во всяком случае, язык программирования РЕФАЛ, реализовавший идеи функционального программирования, создавался еще в 1966 г., причем это была оригинальная отечественная разработка (ее автор В. Турчин). До самых последних годов эта парадигма мало кем принималась всерьез. Примером современного языка, реализующего функционально-ориентированную парадигму, является Хаскель. Он создавался большим коллективом разработчиков еще около 1990 г. на основе языка Миранда (Д. Тёрнер, 1985 г., сейчас этот язык в России не в ходу), но в моду вошел по-настоящему только во втором десятилетии XXI в.
Следующая парадигма, характерная для нового компьютерного времени, - это объектно-ориентированное программирование. ООП - это не какой-то новый язык - соответствующие элементы можно внедрить в любой имеющийся язык, например в Паскаль. Я, правда, так и не слышал, чтобы кто-то где-то проворачивал сколько-нибудь значительные проекты на объектно-ориентированном Паскале, но что такой вариант Паскаля существовал (Turbo Pascal 7.0 от фирмы «Борланд») - это факт.
В чем суть ООП и какого профита от него ожидают? В книгах на эти вопросы отвечают не очень внятно, поэтому попробую изложить «на пальцах». Традиционная («процедурно-ориентированная») парадигма программирования, как мы только что обсудили, предполагает описание действий, которые должны быть произведены над данными. Но теперь появились такие задачи, порядок действий для решения которых не может быть определен однозначно. Неплохой пример - игра, в которой вы сражаетесь с врагами. Если враг один (как, например, в шахматах, ведь каждая фигура не действует сама по себе - она подчинена замыслу игрока), то процесс обдумывания очередного хода можно представить как единый алгоритм. Если же врагов много, то каждый из них совершает свои действия в ответ на ваши, а вы совершаете действия в ответ. Враги могут появляться и исчезать, их количество может меняться… Игровая программа должна, очевидно, «присматривать» за всеми врагами поочередно, и за вами тоже. Описать все это как единый алгоритм может быть весьма затруднительно, а главное: даже если это удастся, программа получится громоздкой и путаной, а вот это как раз то, чего ни один нормальный программист не любит. Написать ее, допустим, возможно, а внести какие-то изменения в ранее написанную программу и ничего при этом не сломать - это уж совсем вряд ли. Вот здесь-то и видится ООП как решение. При ООП, как в общем-то ясно из названия, программист описывает не действия, а объекты. Для каждого объекта он дает описание, что объект собой представляет, и перечисляет действия («методы»), которые объект может совершать и которые могут совершаться над ним. Как построить программу, чтобы она вовремя «обслуживала» все объекты, - этим занимается компилятор, программисту можно об этом не задумываться. Важно: ООП, как впрочем и ФОП, - это только подход к записи алгоритма и не более того. Стало быть, (1) ни ФОП, ни ООП не обещают красивой жизни тем из нас, кто не хочет обременять себя алгоритмизацией, и (2) машинный код, полученный после компиляции такой программы, будет не так уж сильно отличаться от традиционного. В частности, в нем будут присутствовать все команды, нужные для того, чтобы программа вовремя «вспоминала» про каждый из имеющихся объектов, хотя программист и не указывал этих команд явно. Поэтому не следует ждать от ООП чудес типа уменьшения объема программы в разы или ускорения ее работы - более вероятно как раз наоборот. Все преимущества ФОП и ООП проявляется только на этапе разработки программы, и только в том случае, когда применение этих парадигм действительно оправдано. А вот когда оно оправдано - это один из самых сложных и острых вопросов нынешнего программирования.
Мы рассмотрели две новых парадигмы. На самом деле, как это всегда и бывает, появление даже одной новой парадигмы повлекло за собой лавинообразный рост, так что теперь их десятки, и отнюдь не все в равной степени толковы. И можно не сомневаться, что они будут появляться и исчезать, подобно языкам. Описывать их все - это я оставляю историкам будущих веков.

Реляционные СУБД

Слово база у нас ассоциируется с предприятием или учреждением, на которое мы можем обращаться с целью получить некоторый товар (например овощная база, металлобаза…). Соответственно база данных (БД) - хранилище данных, на которое пользователи могут посылать запросы и получать в ответ данные для своей работы. Более ранний термин - банк данных, но сейчас он уже практически вышел из употребления.
Мне попадались книги по реляционным БД, но термин «реляционная» там объясняется невнятно. Английское слово relation переводят обычно как «отношение», но такой перевод не приближает нас к пониманию, а наоборот, еще больше путает. Все встает на свои места, если это слово перевести не как отношение, а как родство: реляционная БД описывает «родственные» объекты. Вспомним про наши тепловозы: они отличаются значениями мощности, скорости и т. д., но любой локомотив может быть охарактеризован именно такими параметрами. А таких параметров, как толщина брони или калибр пушки, у локомотивов нет в принципе: такие параметры есть у танков. То есть все локомотивы «родственны» между собой, а все танки - между собой, но локомотивы не родственны танкам (если, конечно, мы не говорим про танк-паровозы… вот здесь хочется поставить смайлик, но правилами этого сайта смайлики не приветствуются). Стало быть, реляционная БД может быть представлена в виде таблицы с множеством однотипных строк («записей»): каждая строка характеризует один объект (действие, событие…), каждая колонка - параметр, применимый ко всем объектам, а каждая ячейка хранит значение соответствующего параметра для данного объекта.
Программный инструментарий для обслуживания БД называют системой управления базой данных - СУБД.
Первые реляционные СУБД появились еще в 60-е годы, но до поры-до времени они оставались явлением локального порядка, не стоящим того, чтобы посвящать им отдельную главу. В средние века, с появлением множества задач из области Большой Экономики, люди начали понимать, что СУБД, и в первую очередь реляционные СУБД, являются весьма удачным инструментом для решения большинства таких задач. В 1980 г. фирма «Эштон-Тейт» выпустила программу с незатейливым названием DBase II. Затем появились DBase III (1986 г.), DBase IV - по большому счету это были усовершенствованные версии того же продукта.
Программы семейства DBase строились по принципу швейцарского армейского ножа: такая программа содержала набор инструментов для решения достаточно широкого множества типовых задач, так или иначе связанных с реляционными базами данных. Базу можно было просматривать, редактировать, добавлять в нее новые записи, делать выборки, выводить их на экран и печать в виде документов установленного образца… Все это делалось с помощью цифробуквенных команд, близких к тем, которые использовались в операционной системы ДОС. Для пользователя, который с ДОС не дружил, был придуман «Ассистент»: вместо того, чтобы вводить команду буквами, можно было выбрать нужные действия из меню. При этом в нижней строке экрана отображалась соответствующая команда в текстовом виде, т. е. пользователь мог формировать команду с помощью «Ассистента» и одновременно изучать ее текстовое представление. Все команды, поданные пользователем, регистрировались в «Истории команд». Историю можно было просмотреть и нужную команду выполнить еще раз, возможно с какими-то вариациями. Отсюда вытекает следующая очевидная идея: выбрать не одну, а несколько команд, записать их в отдельный файл - скрипт - и потом запускать скрипт на выполнение. Ну и следующая идея: скрипт скомпилировать и использовать в дальнейшем как обычную программу.
Важно, что, имея в руках такой инструмент, задачи мог решать непосредственно тот человек, который в решении заинтересован, - конечный пользователь. Он по определению не программист, так что о его программистской квалификации вопрос вообще не ставится. С другой стороны, пользователь, обладающий соответствующими способностями, мог такую квалификацию нарабатывать «без отрыва от производства». Ясно, что программы такого типа оказались чрезвычайно удачны, и популярность, которую они приобрели в 90-е годы, была вполне заслуженной.
По образцу программ семейства DBase фирма «Фокс Софтвэр» выпустила несколько версий программы FoxPro, а фирма «Нантукет Корпорейшн» в 1985 г. - интерпретатор-компилятор языка, практически совпадающего с языком семейства DBase, под маркой «Клиппер». В 90-е годы языки семейства DBase/FoxPro/Clipper приобрели все черты, присущие «взрослым» языкам программирования. Их век оказался недолог (на рубеже нового и новейшего времени все они постепенно вышли из употребления), но, с учетом того что за предшествующие 20-30 лет в области языков не было практически никакого прогресса, эти языки успели оказать большое влияние на всю эволюцию программирования, так что в значительной мере благодаря им программный мир приобрел тот облик, который нам привычен сейчас.

Суррогатные технологии в программировании

История учит, что новые технические решения в мире крайне редко появляются просто так, с бухты-барахты. Если какая-то технология появилась и нам кажется, что она никому не нужна, - скорее всего, мы либо чего-то не знаем, либо не придали должного значения. Смысл суррогатных технологий в том, чтобы вовлечь в программирование людей, не обладающих достаточно высокой квалификацией.
Можно ли назвать суррогатной технологией программные продукты семейства DBase/FoxPro/Clipper, которые мы рассмотрели чуть выше? Если строго следовать букве определения, то нет: ведь они имели первоначальную цель вовлечь в программирование не низкоквалифицированных программистов, а конечных пользователей, которые имеют тот или иной уровень квалификации в своей предметной области, а программистами не являются.
Сейчас хочу заострить внимание на тонком моменте. Та или иная технология может с самого начала создаваться как суррогатная, но так бывает не всегда. В качестве примера противоположной ситуации рассмотрим старый верный Бэйсик. Первоначально он создавался как инструмент для начального обучения программированию, и в этом качестве он был вполне адекватен как уровню развития «железа» 60-х годов XX века, так и тем задачам, которые на него возлагались. Но в 80-е годы даже в советских учебных заведениях уже были машины СМ-4 с видеотерминалами. Такие машины спокойно «переваривали» любой настоящий язык программирования, такой как Алгол, Паскаль или даже Си. Проблема в том, что наши преподы про Алгол и Паскаль знали в лучшем случае понаслышке, а про Си не знали совсем (я свое первое руководство по языку Си прочитал уже после окончания института). И системные администраторы, обслуживавшие эти машины, - аналогично. Учить студентов серьезному программированию от них никто не требовал, вот они и ехали по накатанной колее. Иначе говоря, Бэйсик стал суррогатной технологией постольку, поскольку его стали навязывать людям, которые в нем не нуждались и имели все необходимое для использования более серьезных технологий. Так было у нас, но похоже, что в США ситуация была ненамного лучше, потому что фирмы «Микрософт» и «Борланд» в 80-е годы выпустили на рынок интегрированные среды разработки программ (QuickBasic, он же QBasic, и TurboBasic соответственно) на основе языка Бэйсик. Впрочем, эти продукты были все-таки скорее учебными. Однако даже с натяжкой нельзя назвать учебным инструмент, который та же фирма «Микрософт» уже в 90-е годы внедрила в свой пакет Microsoft Office. Называлась эта штука Visual Basic. Он-то и стал первой по-настоящему суррогатной технологией, получившей большой рынок.
Чтобы оценить это явление по шкале «хорошо - плохо», мы должны принять во внимание два постулата. Во-первых, в нашей жизни бывают ситуации, когда суррогат реально необходим. И ленинградский хлеб из опилок и отрубей с огнем и кровью пополам был нужен… в свое время и в своем месте. Но потом, когда блокада была прорвана и враг отступил от города, от суррогата нужно было отказываться - и хлеб начали выпекать из пшеницы, как, собственно, и принято у нормальных людей.
Во-вторых, в каждой работе, в каждой профессии есть Мастера, а есть халтурщики-шабашники. И есть, как правило, некая средняя прослойка, причем чаще всего она - самая многочисленная. Для чего вообще нужны Мастера, ведь их работа стоит обычно дороже, чем работа шабашников, и даже середнячков? Есть на свете экономика. Пресволочнейшая штуковина: существует - и ни в зуб ногой! (слова В. Маяковского, первоначально сказанные про поэзию, ну а я приведу их здесь). В экономике есть моменты, которые на первый взгляд кажутся чудом или хуже того - абсурдом. Один из таких моментов как раз и состоит в том, что, хотя Мастер непосредственно за свою работу просит большую плату, конечный результат его работы приносит бОльшую прибыль (напоминаю: прибыль - цель и смысл любой финансово-хозяйственной деятельности, осуществляемой людьми). Как такое может быть? - Элементарно: Мастер на то и Мастер, что он знает, как сделать свое дело с максимально прибыльным результатом, а работники более низкого уровня либо этого не знают, либо сознательно пренебрегают. Но большинство заказчиков (неважно, о какой работе речь - о работе плотника, допустим, или сантехника, или программиста) хочет подешевле… «А Балда стоит и приговаривает с укоризной: не гонялся бы ты, поп, за дешевизной» (это уже не Маяковский, это Пушкин). Ничем другим Мастера свое существование оправдать не могут, но ничего другого им и не требуется. Но если это так, то что же получается: работа халтурщика всегда влечет за собой убытки для заказчика? С другой стороны, умные люди говорят: «Я не настолько богат, чтобы покупать дешевые вещи». Резюмируем: суррогатные технологии нужны для того, чтобы вовлечь в программирование низкоквалифицированных работников ценой (а) увеличения сроков и трудоемкости работ, (б) снижением качества конечного продукта и (в) снижением прибыли Заказчика при эксплуатации этого продукта. Плохо в этих технологиях не то, что они вообще существуют, а то, что их роль и место в мировом процессе разработки ПО неадекватно оценивается большинством населения. Кто-то считает их передовыми и навязывает их программистам нормального уровня, которые обладают необходимыми знаниями и качествами для работы по нормальным технологиям.
В свете того, что мы только что обсудили, пробежимся еще раз по эволюции языков программирования. В самом древнем языке - Фортране - использовался статический принцип распределения памяти: каждая переменная, участвующая в расчетах, занимала свою, раз и навсегда отведенную ей ячейку памяти. Даже если на каком-то этапе вычислений переменная оказывалась не нужна, ячейка оставалась закреплена за ней и ни для каких иных целей не использовалась. С точки зрения чистой экономики это выглядит не очень рационально, но реальная жизнь и реальная техника не всегда укладывается в рамки чистой экономики.
В языке следующего поколения - Алголе - каждая переменная описывалась в той или иной структуре (а вся программа - тоже структура!), так что две переменных, принадлежащих непересекающимся структурам, могли жить в одной ячейке памяти. Принципиально важно то, что Алгол, как и Фортран, - компиляционный язык, и назначение ячеек памяти переменным решается на этапе компиляции, так что при каждом последующем выполнении программы каждая переменная размещалась всегда в одной и той же ячейке: отдельной или «коммунальной», но всегда в одной и той же. Это квазистатический принцип распределенмя памяти - оригинальное и интересное техническое решение, однако большой экономии памяти оно в реальной жизни не обеспечило, и в языках-потомках Алгола оно не было повторено.
В 60-е годы был создан Бэйсик - в нем та или иная переменная «образуется» по мере присвоения ей значения. Но, однажды образовавшись, переменная занимала отведенную ей ячейку до окончания работы программы. Таким образом, единственный шанс сэкономить память был в том, что некоторая переменная может вообще не образоваться. Очевидно, в реальной жизни такое бывает нечасто. Если программа используется многократно, то при каждом запуске программы та или иная переменная может, вообще говоря, «вселяться» в разные ячейки памяти - это динамический принцип распределения памяти.
Языки семейства DBase/FoxPro/Clipper, будучи следующим после Бэйсика поколением интерпретационных языков, унаследовали от него принцип расперделения памяти, но в них был введен оператор dispose, позволяющий программисту явно указывать, какие переменные больше не нужны, с тем чтобы освободить ячейки для чего-то другого. Проблема в том, что программист может этот оператор использовать, а может и не использовать, и в последнем случае никакой экономии памяти не получится. Очевидно, что разработчики этих языков рассчитывали на то, что имеют дело с достаточно аккуратным программистом, каковых на свете не так уж много. В язык нынешнего поколения - Python - внедрен «автоматический сборщик мусора». Это процедура, которая после выполнения каждой команды просматривает всю нижележащую часть программы на предмет того, что вдруг какие-то переменные становятся не нужны. Эта процедура занимает львиную долю машинного времени, используемого для работы программы. А ради чего все это? - Исключительно ради того, чтобы программист мог не задумываться об освобождении памяти. А много ли раздумий нужно нормальному программисту, чтобы вовремя освобождать память? Ясно, что Python - суррогатная технология, облегчающая (на копейки) жизнь программисту ценой многократного увеличения времени выполнения программы. На самом деле все современные интерпретационные языки в той или иной мере этим грешат, и отсюда у меня к вам всем вопрос: так ли в самом деле необходим Питон программисту, знающему хотя бы Си?
Суррогатные технологии - примета нового и особенно новейшего компьютерного времени, поскольку стали возможны с появлением многочисленных компьютеров с большим быстродействием и большой емкостью оперативной памяти. В древности и в средние века, пока вычислительные ресурсы были дефицитом, такие технологии не имели шансов на признание.

Еще немного воспоминаний и размышлений

В предыдущей главе я рассказывал о практических и лабораторных работах в институте и размышлял о том, какого уровня специалистов этот институт мог выпускать. Теперь скажу так: уровень специалистов соответствовал тому уровню трудоустройства, который экономика позднего развитого социализма («застоя») могла нам предложить.
1989 год, который я называю годом наступления нового компьютерного времени в СССР, был также и годом окончания моего обучения.
Во время обучения мы, разумеется, не могли не задумываться о том, что будет ПОСЛЕ. Я пытался узнать, где в СССР велись серьезные разработки вычислительной техники… Молчание было мне ответом. За все 5 лет единственный раз к нам на занятия приходил представитель организации - потенциального работодателя (это было НПО «Красная Заря», то самое, которое в 20-е-30-е годы создавало корабельные приборы управления стрельбой). Приходить-то он приходил, но то, что он рассказывал, не произвело на меня впечатления. Когда же пришло время распределения, члены комиссии нас с наивным видом спрашивали, знаем ли мы, где предстоит работать, и очень удивлялись, что мы не знаем. В итоге нас распихали кого куда. На работе предстояло либо ничегонеделание, либо бесконечные поездки на картошку… Только одна девушка попала в лаборанты по обслуживанию старых СМ-4, да еще одна не сразу устроилась программистом, но на такую зарплату, что назвать это престижным трудоустройством никак не получается.
Нас с женой занесло в северную лесную глушь, где вдали от любопытных иностранных глаз и ушей обитала испытательная база одного оборонного НИИ. Наш программируемый калькулятор МК-54 на два месяца стал мощнейшим вычислительным средством на базе, но так продолжалось недолго. Нам привезли вычислительный комплекс «Изот» с несколькими видеотерминалами… и три или четыре «персоналки» IBM PC/AT-286-12 марки «Сантана», в просторечии «эйтишки» (была еще другая обзывалка, более смешная, но здесь ее приводить не буду), которые распределили по одной в разные научно-исследовательские секторы.
«Изот» - это практически американский VAX (разработка середины 1970-х годов) - машина средневековая, стало быть к 1989 году безнадежно устаревшая, а «эйтишка» - стопроцентный символ нового компьютерного времени. Ничего удивительного, что эти невзрачные «коробки из-под ботинок» опережали «Изот» во всем. Я же хочу акцентировать внимание на том, что они могли неограниченно долго работать, не нуждаясь ни в каком уходе и присмотре. Вполне логично, что все вычислительные работы были перенесены на них, а «Изот» так и простоял 4 года ни разу не включенный, пока не отправился в металлолом.
Был у нас в коллективе старенький Виктор Михайлович. Увидев «персоналку», он с энтузиазмом приступил к изучению программирования, очень быстро его освоил и стал выполнять свои расчеты на компьютере. Жил он так: вставал в 7.55, не позавтракав, бежал на работу, набирал команду на клавиатуре, спокойно шел домой досыпать и завтракать, а перед обедом снова появлялся на работе - там как раз начинали вырисовываться результаты расчета (слово «вырисовывались» я употребляю в буквальном смысле - они отображались графически, что для нас всех было новостью). Ну а что такого? Солдат спит - служба идет!
На чем Михалыч программировал? На Бэйсике - это я помню отчетливо. К сожалению, в данной ситуации это нам ничего не говорит, потому что на «коробках из-под ботинок» было множество систем программирования, использовавших язык Бэйсик: GW-Basic, QuickBasic и QBasic от фирмы «Микрософт», TurboBasic от фирмы «Борланд»… Все они имели те или иные различия, как в пользовательском интерфейсе, так и в языке. Если GW-Basic еще имел какие-то параллели с «Рафосом» (хотя тоже с поправками на технические возможности персональных компьютеров и ДОС), то другие системы уже были настоящими интегрированными средами разработки программ (Integrated Development Environment - IDE). Выбор для них языка Бэйсик был явно не очень удачным и должен рассматриваться как дань традиции (ведь все эти программные инструменты создавались во второй половине 80-х годов, когда Бэйсик был языком N1 и лишь немногие это оспаривали). В те же годы фирма «Борланд» выпустила TurboPascal - практически ту же самую IDE, перенастроенную на более перспективный для того времени язык Паскаль. Я чуть позже опробовал TurboBasic, очень быстро понял, что это не мой уровень, и перешел на TurboPascal, с которым не расставался несколько лет, пока не открыл для себя TurboAssembler той же фирмы.

Характеристика эпохи

Отсчет нового компьютерного времени я предлагаю начать с 1989 г., когда начались массовые поставки персональных компьютеров в СССР. Для наших соотечественников это означало: «забудь все, чему учился раньше - теперь все будет по-другому». Для всего остального мира импорт готовых машин в нашу страну (именно готовых, товарных машин, а не технологий и даже не промышленных образцов) означал выбытие СССР из ряда мировых компьютерных держав. Если же вспомнить, что еще раньше этот ряд покинула Великобритания, то мы поймем, что Соединенные Штаты стали более чем просто лидером - абсолютным законодателем мировой компьютерной моды.
Отличие новой эпохи от предыдущей охарактеризуем в двух словах: новое компьютерное время - это время персональных компьютеров и сетей.

Начало XXI века - новейшее компьютерное время

Очередная смена исторических эпох произошла не одномоментно, а растянулась на период с 1995 по 2005 годы, зато она шла синхронно практически во всех странах мира. И Россия не стала исключением, хотя и не вносила в дело никакого активного вклада.
На следующем фото продукция фирмы «Эппл»: два почти одинаковых ноутбука (выпускались под маркой iBook G3 в 1999-2006 гг., один из них с дополнительной клавиатурой), справа - настольный компьютер-моноблок, слева - более поздний моноблок с плоским экраном.
istoria-apples.jpg
(снимок сделан на фестивале «Chaos Construction» в Санкт-Петербурге в 2017 г.)
Новейшее время небогато на принципиально новые технические решения ни в архитектуре и конструкции компьютеров, ни в программировании: революционные изменения произошли в наших взглядах на применение компьютеров в жизни. Этим изменениям будет посвящена большая часть этой главы, но сейчас все-таки несколько слов о «железе» рубежа веков. В течение десятилетия, которое мы только что обозначили, практически все компьютеры на 286-х-486-х процессорах были списаны, им на смену пришли компьютеры на процессорах «Пентиум1» - «Пентиум4» от «Интел» и близких к ним процессорах от «АМД». Они, как и предшественники, были 32-разрядными, а идеи 64-разрядных процессоров, а также многоядерных, только еще намечались. Первый серийный 64-разрядный процессор «Athlon64» был выпущен фирмой «АМД» в 2003 г., так что новейшая компьютерная эпоха - практически эпоха 64-разрядных компьютеров.
Рассматривая технологию решения задач на компьютере, мы увидели, что эта технология менялась от эпохи к эпохе. В древние времена пользователь общался с компьютером через посредничество оператора подготовки данных. В средние века преобладающим стал диалог, для которого нужна цифробуквенная клавиатура (в принципе, возможно, даже без переключения заглавных и строчных букв). В новое время пользователь подавал компьютеру команды путем выбора нужного действия из меню - для этого клавиатура должна иметь клавиши со стрелками (и еще одну архиважную клавишу ESCAPE, которая как бы ничего не делает, но без нее не обойтись!). И наконец в новейшее время основным органом управления стала мышь (изобретенная, кстати, еще в 1968 году). Подчеркиваю: мы говорим о работе пользователя. Системные администраторы до наших дней не мыслят своей работы без диалога.

Компьютерные игры и игровые компьютеры в новейшее время

Выше мы говорили о том, что в средние века компьютерные игры были редкостью и воспринимались большинством людей как безобразие, а в новое время они стали нормой. Тем не менее игровой компьютер нового времени - по большому счету суррогат, сделанный так, чтобы только был максимально дешев. С наступлением новейшего времени пересмотр взглядов на «игрушки» продолжился. В один прекрасный момент люди перестали считать крамолой мысль о том, что игровой компьютер может быть технически совершеннее, чем деловой. А значит, и дороже. Это касается как «железа», так и программного обеспечения. В результате в нынешних магазинах мы чисто делового ноутбука просто не найдем. Уж если его искать, то не в магазине, а на рынке бэушной техники. Там нам предложат какой-нибудь ИБМ, Делл или Компак года этак 1999-го за 3-5 тысяч рублей: толстый, черный, тяжелый, с матовым экраном… С таким ноутом и сейчас не стыдно явиться на серьезное совещание к генеральному директору фирмы, и никто не будет спрашивать, сколько у вас ядер и сколько гигов оперативки! Современные же компьютеры стоят 10-20, а то и 40 тысяч, но, изучая их технические особенности, мы приходим к выводу, что это типично развлекательные компьютеры, что, в общем-то, недвусмысленно написано на их мо… пардон, на лицевых панелях.
Изменение взглядов на технические параметры игровых и деловых компьютеров не могло не сказаться и на соотношении сил в соответствующих отраслях индустрии. Если в древние времена игровых компьютеров никто не строил, в средние века игровое компьютеростроение было пасынком делового, а в новое время «пасынок» вырос и стал вполне самостоятельным, то в новейшее время игровой компьютерпром практически полностью подмял под себя деловой. Даже фирмы, традиционно выпускавшие деловые компьютеры (хотя бы та же IBM - International Business Machines - «международные машины для дела»), понемногу стали переориентироваться на игровые (или скажем более обобщенно: развлекательные) машины.

Электронный цифровой документооборот

Современную жизнь невозможно представить без множества деловых документов, которые издаются гражданами и организациями для предъявления друг другу. До самого недавнего времени все документы представлялись на бумаге, и вот буквально сейчас мы наблюдаем одно из явлений новейшего компьютерного времени: всеобщий переход на безбумажный электронный документооборот. То есть вместо того чтобы писать документ от руки или на пишущей машинке и затем везти его к месту назначения на транспорте, мы готовим документ как файл и отсылаем его получателю по проводам. Вот, например, еще в прошлом, 2017-м году мне выдали полис ОСАГО в традиционном виде - на бумажном бланке с элементами защиты от подделок, а в нынешнем, 2018-м, полис печатается просто на листе офисной бумаги.
Эта идея кажется абсолютно разумной, но как получателю убедиться, что документ подлинный?
Для этого придуман механизм электронной цифровой подписи (ЭЦП). Само понятие «электронная цифровая подпись» было впервые предложено еще в 1976 году У. Диффи и М. Хеллманом, но они всего лишь предполагали, что такой механизм может существовать. Первый практический алгоритм ЭЦП был предложен в 1977 г., но, как это почти всегда и бывает, он оказался несовершенен и всеобщего признания не получил.
Как работает ЭЦП? В подробности математических алгоритмов вдаваться не будем, ограничимся общим представлением.
Допустим, имеется лицо (человек или организация), издающее документ. Этому лицу соответствуют два ключа: закрытый (приватный) и открытый (публичный). Чтобы подписать документ, производятся определенные математические операции с текстом документа и закрытым ключом, в результате образуется цифровой код - документ с подписью. Чтобы нам убедиться, что подпись принадлежит именно тому лицу, которое указано как автор документа, мы производим нужные математические операции и ожидаем получить открытый ключ лица, издавшего документ. Если результат наших действий совпадает с открытым ключом, документ считается действительным.
Принципиально важно: вся математика, на которой основана электронная подпись, не является секретом, она абсолютно открыта, и более того: она описана в документах, имеющих правовую силу. То есть предусмотренные там действия мы можем выполнить, не нуждаясь в какой-либо программе, составленной для нас той или иной фирмой: программу мы вправе написать сами, а то и вовсе ничего не программировать, а выполнить действия вручную.
Теперь вообразим, что мы преступники и хотим подделать документ с чьей-то ЭЦП. Как это осуществить? Элементарно: нужно выполнить все те же действия, которые выполняет настоящий автор документа. Только один нюанс: для того чтобы все эти действия выполнить с точностью, нужен закрытый ключ того лица, за которое мы хотим себя выдать. А этот ключ потому и называется закрытым или приватным, что известен только этому лицу и должен держаться в секрете. И вот тут мы подходим к важному моменту. Поскольку и подписание документа, и проверка подлинности подписи - строгие математические действия, то получается, что открытый и закрытый ключи не могут назначаться произвольно - они математически взаимосвязаны. Стало быть, принципиально невозможно придумать такой алгоритм ЭЦП, при котором злоумышленник не мог бы вычислить закрытый ключ, зная открытый. Использование ЭЦП основано не на невозможности ее подделки, а на том, что вычисление закрытого ключа по открытому требует очень больших вычислительных ресурсов. Попросту говоря, на суперкомпьютере, который мы обсуждали в предыдущей главе, такое вычисление займет много лет, и за это время подделка документа станет уже неактуальна, а на обычном компьютере такие вычисления вообще нереальны - компьютер просто не проживет столько.
Электронный документооборот без ЭЦП немыслим, но, к сожалению, не во всех государственных учреждениях это понимают, поэтому в реальной жизни мы можем столкнуться с суррогатными системами документооборота, в которых ЭЦП не применяется, так что документ может быть подделан. Ваш покорный слуга в свое время поимел из-за этого большие неприятности.

Компьютеризированные расчетно-платежные системы

Когда мы говорим о компьютеризированных расчетно-платежных системах, первое, что приходит на ум непрофессиональному читателю, - это банковские карты, однако это неправильно: карты - это только верхушка айсберга.
Первые банковские карты появились еще в 50-е годы XX века в США и других экономически передовых странах, но, как это всегда и бывает, до поры-до времени они были экзотикой. Массовому распространению карт препятствовала высокая стоимость как самих карт, так и оборудования для их чтения, а также трудности подключения к компьютерным сетям в большинстве мест, где люди хотели бы такими картами пользоваться (магазины, автозаправочные станции…). Мировой компьютерной Сети в те времена еще не было, не было единого стандарта конструкции карт, не было согласия между банками по поводу построения единой расчетно-платежной системы. С годами, однако, эти мешающие факторы были постепенно преодолены.
В СССР ничего подобного, разумеется, быть не могло.
Как работает банковская карта?
Прежде всего оговоримся, что карта, точно так же как использовавшаяся ранее чековая книжка, - не кошелек, деньги хранятся не в ней. Они хранятся в банке, на нашем банковском счете. Соответственно потеря карты не означает потери денег, а попадание карты в руки постороннего человека, вообще говоря, не гарантирует ему возможности присвоить наши деньги. Это очень важно, потому что если мы держим наличные деньги в кошельке и кошелек достается постороннему человеку, то и с самим кошельком, и с его содержимым нам придется распрощаться. Если же мы хотим расплатиться, допустим, за бензин на автозаправке, то мы вставляем карту в имеющийся там считыватель, он читает имеющуюся на карте информацию о нашем счете и посылает в банк (он называется эмитентом карты) запрос о возможности произвести такой платеж. Чтобы посторонний человек не мог воспользоваться нашей картой, необходимо ввести персональный код идентификации - Personal Identification Code - PIN. Он на самой карте не хранится (в противном случае похититель карты имел бы возможность его узнать). PIN-код передается в банк в зашифрованном виде и там сравнивается с кодом, хранящимся в базе данных. Если имеется совпадение, банковский сервер отправляет на считыватель ответ о подтверждении оплаты. С нашего счета списывается соответствующая сумма и переводится на счет автозаправки… Вот тут-то, собственно, и начинается самое интересное.
Выше я уже говорил, что банковские карты - верхушка айсберга. Все было бы просто, если бы автозаправка, на которой мы расплачиваемся, была бы клиентом того же банка, что и мы - тогда деньги, списанные с нашего счета, можно было бы сразу же перевести на счет заправки. В реальной жизни так бывает далеко не всегда. Стало быть, нужен межбанковский перевод. Пока не было всемирной компьютерной Сети, да и первое время после ее появления, перевод денег из одного банка в другой не мог быть выполнен никак иначе, чем путем написания специального документа (авизо) на бумаге и доставки его в другой банк на транспорте. Это было долго, трудоемко и открывало возможности для мошенничества.
В 1973 г. 248 банков из 19 стран учредили корпоративное сообщество для межбанковской передачи информации и совершения платежей - SWIFT. Россия подключилась к этой системе только в 2014 г.
Именно система электронных межбанковских переводов и является тем айсбергом, верхушкой которого являются банковские карты.
Автор этих строк впервые испробовал банковскую карту в 2003 г.: до этого я не доверял подобным вещам, но пришлось завести карту, чтобы на нее работодатель переводил мне зарплату. Воспользоваться картой в те годы можно было, по большому счету, единственным образом: снимать наличные в банкомате (а за это банк-эмитент взимал нехилую комиссию!). В магазинах считыватели карт были еще экзотикой, на автозаправках они были, но работали через пень-колоду. Еще в 2017 г. я попал в трудную ситуацию: на последних каплях бензина в баке объездил полгорода в поисках заправки, на которой можно было бы расплатиться картой. Однако в 2018 г. подобные ситуации стали уже не правилом, а исключением.
С появлением всемирной Сети и переводом всех межбанковских платежей на электронные безбумажные технологии отношение народных масс к безналичным платежам изменилось радикально. Причем теперь банковская карта как таковая может быть даже не нужна.
Как уже говорилось, карта нужна для быстрого и безошибочного ввода данных банковского счета в платежную систему, все остальное в ней - второстепенно. Карта не нужна, если платежные реквизиты можно ввести каким-то иным образом, например с клавиатуры компьютера. Отсюда вытекает идея «личного кабинета»: это ваша страничка на сайте банка, зайдя на которую, вы получаете доступ к своему банковскому счету и можете, не отходя от кассы компьютера, совершать платежи за квартиру, телефон, электроэнергию и т. д. Или вообще переводить деньги кому надо. Разумеется, нужна какая-то защита личного кабинета от постороннего доступа. В простейшем случае это обычный пароль, такой же, как на многих других сайтах. В технологически развитых банках личный кабинет имеет дополнительную ступень защиты от постороннего вмешательства: когда вы хотите произвести платеж (перевод), вам на сотовый телефон присылают код, который нужно ввести в компьютер. Этот код одноразовый, да к тому же действителен в течение короткого времени. Такая система хороша там, где сотовая связь работает устойчиво.
Личный кабинет, даже с описанной выше дополнительной ступенью защиты, все-таки не может считаться 100% защищенным и поэтому хорош для простого человека, оперирующего не очень большими денежными суммами. Для более серьезных операций существует система «банк-клиент» с электронной подписью. Практически это осуществляется так: закрытый ключ электронной подписи хранится на специальной USB-флэшке, которая по внешнему виду ничем не примечательна (посторонний человек, случайно ею завладевший, не сразу догадается, что здесь ключ ЭЦП). Если вы хотите совершить платеж, нужно флэшку вставить в компьютер, и установленная на компьютере программа отправит в банк платежное поручение, заверенное вашей подписью. После этого флэшку из компьютера следует извлечь - тем самым мы не оставляем злоумышленникам шанса получить доступ к нашему банковскому счету.

Микроконтроллеры

Микроконтроллер технически во многом похож на микропроцессор, но и различия между ними имеются, а эра микроконтроллеров, которую мы с вами наблюдаем прямо сейчас, не совпала с эрой микропроцессоров. Поэтому сегодня пишу о них отдельно.
Чтобы понять, чем отличается микроконтроллер от микропроцессора, нам надо понять, что микропроцессор - это процессор, его роль и место в компьютерном «железе» полностью соответствует роли и месту обычного процессора. Его выводы образуют типичный интерфейс процессора с шиной адреса и шиной данных, так чтобы к нему можно было подсоединить оперативную память и периферийные устройства. Современный микроконтроллер строится по принципу SoC, что можно перевести как Storage on Chip или System on Chip - память на чипе или система на чипе. Смысл в том, что микроконтроллер как микросхема представляет собой не процессор, а всю машину с оперативной памятью и периферийными устройствами. Соответственно все шины у него внутри, а большинство выводов микросхемы имеют двойную функцию: каждый вывод относится к определенному периферийному устройству, либо может быть использован просто как порт ввода-вывода, на который можно выводить нужные нам логические значения или читать значения, поступающие с каких-то внешних устройств. В принципе, эти порты можно использовать и для подключения оперативной памяти, но в наше время это уже не имеет смысла.
Первый патент на микроконтроллер был выдан еще в 1971 г., то есть чисто технически микроконтроллер не может рассматриваться как изобретение новейшего времени. Однако тогда никаких серийных изделий по этому патенту не выпускалось. В 1976 г. фирма «Интел» выпустила микросхему 8048, которая в русскоязычной литературе получила название «однокристальная микро-ЭВМ» (термин «микроконтроллер» вошел в обиход гораздо позже). В 1980 г. на смену 8048 пришла более продвинутая машина 8051, выпускающаяся до настоящего времени несколькими разными фирмами под общим названием MCS51 (если вы скажете просто «51-е семейство», то кому надо, тот вас поймет).
Если кто-то упрекнет меня в том, что моя любовь к 51-му семейству имеет под собой некоторую лично-субъективную подоплеку, то это правда, но это не вся правда. Если бы только этим все ограничивалось, то я бы удержался от слишком длинного рассказа о нем. Следующая порция правды состоит в том, что этой маленькой и простенькой машинке суждено было сыграть историческую роль не сравнимую с ее техническими характеристиками.
Появление 8048 и 8051 стало знаковым событием в компьютерном мире, но эпохи все-таки не сделало. Мы употребляем слова «эпоха» или «эра», когда меняются наши представления о том, что хорошо и что плохо. Инженеры древней эпохи и средних веков, имея тот или иной бюджет, в рамках этого бюджета создавали максимально мощную машину, на которой можно решать тяжелые (ну или хоть сколько-нибудь тяжелые) задачи. Строить заведомо слабый компьютер для решения совсем простых задач типа переключения программ в телевизоре с помощью пульта дистанционного управления они считали ниже своего достоинства, тем более что значительных доходов эта работа до поры-до времени не обещала. В конце XX века общая тенденция к уменьшению стоимости микросхем привела к тому, что массовое изготовление примитивных машинок постепенно выросло в индустрию, в финансовом плане не менее привлекательную, чем производство полнопрофильных компьютеров. Но для того чтобы эпоха микроконтроллеров состоялась, должны были сойтись в одном месте несколько факторов, которых 51-му семейству как раз и не хватало:
* Эти устройства были все-таки гораздо ближе к микропроцессорам, чем к микроконтроллерам. У них было очень мало встроенной памяти и периферийных устройств. Чтобы построить что-то похожее на компьютер, к ним нужно было подключать внешние компоненты, а это невозможно было сделать без определенных промежуточных элементов-микросхем, так что вся система получалась довольно сложной и уж точно недешевой (что, кстати, хорошо видно на иллюстрации, которая будет чуть ниже).
* Память для программ была либо однократно электрически программируемая, либо с ультрафиолетовым стиранием. Чтобы в нее что-то записать, микросхему нужно было вставить в специальное устройство - программатор, и уж только потом вставлять запрограммированный микроконтроллер в устройство, которым он должен управлять.
* Архитектура процессорного ядра 51-го семейства образовалась в результате попытки, как говорит один мой товарищ, «впихнуть невпихуемое»: построить недорогую 8-разрядную машину с системой команд по образцу «больших» компьютеров. Это при том, что в те века уже был известен принцип RISC, и было понятно, что маленький компьютер должен быть обязательно RISC (а сейчас уже и «большие» компьютеры имеют в своей основе RISC).
Снова возвращаюсь к мысли, что разные отрасли техники развиваются по схожим законам.
Читатель ждет очередного рассказа о тепловозах? «Ну что ж, лови его скорей» (по А. С. Пушкину).
Что представляет собой тепловоз ТУ2? Узкоколейный тепловоз - один из первых, создававшихся еще в 1950-е годы. Каким должен быть правильный узкоколейный тепловоз, в то время еще никто не знал - эти знания появятся позже, ПО ИТОГАМ опыта эксплуатации ТУ2. Но если узкоколейный паровоз представлял собой уменьшеную и упрощенную копию нормального паровоза, то почему бы и тепловоз не создать в рамках этой же «философии»? В результате машина получилась переусложненная, переутяжеленная и в общем не очень эффективная. Неудивительно, что сейчас таких локомотивов никто не строит.
Что собой представляет детская железная дорога? Это ведь не компания для пассажирских перевозок - это прежде всего учебное заведение, цель которого - подготовка кадров для железных дорог. Кадров прежде всего для БОЛЬШИХ железных дорог, а уж во вторую очередь для узкоколейных. На детской железной дороге есть почти все, что и на «взрослой», кроме разве что электровозов, но все - в уменьшенном и упрощенном виде. Для детских железных дорог сейчас строятся современные тепловозы: ТУ6, ТУ7, ТУ10. Они по многим параметрам опережают ТУ2, но они совершенно иначе устроены и поэтому малопригодны в качестве учебных… А ТУ2 даже чисто внешне кажется уменьшенной копией вполне «взрослого» тепловоза М62, но главное: внутренняя техническая «начинка» у них пусть не одинаковая, но принципиально сходная.
Аналогия с 51-м семейством тут полная. MCS51, как и ТУ2, создавался на переломе эпох и на стрелке двух направлений развития компьютеров: больших и малых. В его архитектуре много архаичных черт, свойственных большим компьютерам предыдущего поколения. Неудивительно, что современные микроконтроллеры чаще всего оказываются лучше приспособлены для решения свойственных им задач. Но PIC, AVR и STM, подобно ТУ6, ТУ7 и ТУ10, - прежде всего машины для работы. Они хороши для обучения молодежи, которой предстоит работать на ТАКИХ ЖЕ машинах, но той молодежи, которой предстоит работа на «взрослых» компьютерах, они могут дать немного. Старый верный MCS51 мог бы стать превосходным учебно-лабораторным стендом - уменьшенной и упрощенной моделью КОМПЬЮТЕРА ВООБЩЕ, которая позволит студентам не просто вообразить, а «подержать в руках» основные элементы и процессы, имеющие место в любом компьютере, как в большом, так и в маленьком. Конечно, при наличии соответствующего преподавателя и «методичек» по проведению лабораторных работ.
В 1995-1997 гг. норвежцы Альф Боген и Вегард Воллен придумали архитектуру 8-разрядного процессорного ядра, которое назвали AVR - Alf and Vergard RISC - компьютер Альфа и Вегарда с сокращенной системой команд. Эта архитектура оказалась весьма кстати фирме «Атмел», которая совместила процессорное ядро AVR с собственной разработкой - флэш-памятью. Так было выпущено семейство однокристальных микро-ЭВМ (в современной терминологии - микроконтроллеров) AT90S «Classic», включавшее несколько микросхем с практически одинаковым микропроцессорным ядром, но с разным объемом памяти и с разным набором периферии на кристалле. Изюминкой этих машин была флэш-память значительного объема с большим количеством циклов перезаписи. Для флэш-памяти отдельная операция стирания ранее записанной программы не нужна, а для «заливки» новой программы не нужно микроконтроллер вынимать из системы и вставлять в программатор: программирование производится внутрисхемно. Сейчас семейство «Classic» уже не производится, но производятся близкие к нему семейства ATtiny и ATmega.
На следующих фото - продукция фирмы «Атмел», так сказать, в естественной среде обитания. Слева плата отечественного кассового аппарата. Две одинаковых, самых больших микросхемы на ней - микроконтроллеры семейства MCS51. Справа - плата какого-то непонятного устройства под названием «коммутатор». Видны микроконтроллеры семейства AVR Classic AT90S2313 и AT90S8515 (последний в несколько необычном амплуа - с внешней оперативной памятью М5М5256ВР). Датируются они предположительно 2001 годом.
ASCII
Микроконтроллеры от «Атмел», в свою очередь, оказались находкой для итальянца Массимо Банци, который около 2005 г. затеял проект «Ардуино» https://www.drive2.ru/b/2520138/. Смысл этого проекта в том, чтобы производить недорогие отладочные платы с микроконтроллерами, отличающиеся от всех прежде известных пониженным «порогом вхождения». Попросту говоря, если раньше с микроконтроллерами могли работать только инженеры или в лучшем случае студенты старших курсов соответствующих специальностей, то «Ардуино» по плечу даже школьнику. Так, собственно, и началась эпоха микроконтроллеров.
Так она началась, а что дальше? Дурной пример оказался, как обычно и бывает, заразительным. Фирма «Микрочип» производит микроконтроллеры PIC10/12/16/18/24/32 с разрядностью 8, 16 и 32, фирма «СТ Микроэлектроникс» - микроконтроллеры STM8 и STM32… На основе микроконтроллеров ATtiny и ATmega выпускаются, помимо «Ардуин», отладочные платы Smart Evolution Module (SEM), на STM32 - платы Nucleo… Не буду перечислять всех - их очень много, и каждый год появляются новые.
У читателя может создаться впечатление, что все микроконтроллеры - черепашки-микролитражки. Это не так: флагманский продукт линейки Atmel AVR - Atmega2560 - по совокупности тактико-технических характеристик близок к 8086 и далеко превосходит ZX Spectrum, а STM32F4 соответствует большому мейнфрейму 80-х годов, при цене всего в несколько долларов! Именно такая цена и сделала микроконтроллеры массовым продуктом, доступным не только профессиональным инженерам-проектировщикам, но и любителям, и даже школьникам, изучающим электронику и программирование.
Дальше - больше. Если можно построить компьютер величиной со спичечный коробок с процессором, по своим вычислительным возможностям равным «Пентиуму» 90-х годов, то почему бы не вставить туда еще более мощный, по-настоящему современный процессор, может быть даже и многоядерный? Так в 2011 г. англичанин Д. Брэбен создал на основе процессора фирмы «Броадком» (архитектура ARM Cortex) одноплатный микрокомпьютер Raspberry Pi, после чего не заставили себя ждать Orange Pi, Odroid, а недавно и Onion Omega с процессором в архитектуре MIPS… https://vk.com/@-184953913-spisok-interesnyh-odnopalatnyh-komputerov-o-kotoryh-vozmozhn?ref=group_block
Граница между микроконтроллерами и микрокомпьютерами постепенно размывается. Я, однако, все же предлагаю ее обозначить. Микрокомпьютер - это компьютер: он рассчитан на длительную эксплуатацию, в ходе которой ему предстоит многократно и попеременно решать множество разных задач, круг которых не оговорен при разработке компьютера. Для этого он оснащается операционной системой, имеющей функцию установки программ, приобретаемых на стороне, а иногда и инструментами для разработки программ на месте (чаще всего ставится какая-то линуксоидная система вплоть до Debian10). Микроконтроллер рассчитан на то, что в течение всего срока жизни будет решать каую-то одну задачу, так что операционных систем на микроконтроллерах не бывает.
Сейчас несколько отвлечемся, чтобы устранить досадную неточность в терминологии.
Как мы только что выяснили, микроконтроллер - это микросхема:
istoria-microshemy.jpg
Промышленный логический контроллер (ПЛК) - потомок УМ-НХ, которую мы рассмотрели еще в главе «Древнекомпьютерная цивилизация». Он строится на основе такой микросхемы, но, кроме нее, содержит:
* Печатную плату с электронными элементами («обвязкой»), обеспечивающей сопряжение микроконтроллера с оборудованием, которым он управляет, и защищающей микроконтроллер от превышения допустимых значений тока и напряжения;
* Корпус, часто имеющий ту или иную защиту от пыли, влаги и т. д., иногда изготавливаемый из толстого металла, снабженный выступами, пазами и отверстиями для крепления на стандартном электрическом щите или в шкафу (стативе);
* Разъемы (интерфейсы) для подключения стандартных датчиков и исполнительных механизмов.
Неудивительно, что промышленный контроллер может стоить на уровне офисного компьютера или больше, даже если значительно уступает последнему по вычислительным ресурсам. Хотя сейчас уже не редкость промышленный контроллер (например марки Wiren Board) на процессоре Cortex A7, который по вычислительным ресурсам сравним с домашне-офисными компьютерами не самых последних выпусков.
Программирование промышленных контроллеров - отдельная наука со своими языками и технологиями. Правда, в последние годы, с началом массового распространения ардуиноподобной техники, в эту отрасль пришло огромное количество любителей-самодельщиков с довольно-таки слабой профессиональной подготовкой в области программирования. Они знают единственный язык - C++ и программируют на нем. Недостатки этого языка - тема для отдельной статьи. К сожалению, ни студенты, изучающие этот язык, ни профессора, которые их учат, не хотят задумываться о глобальных вопросах, а авторы книг предпочитают писать то, что понравится большинству читателей. Зато люди, которые налаживают и обслуживают «взрослую» промышленную автоматику, понимают это отлично и поэтому предпочитают другие языки. По большому счету языки для ПЛК - это даже не языки, а технологии программирования, суть которых в том, что программист описывает не действия для решения задачи, а саму задачу, причем описывает не словами, а путем составления схем на экране в графическом режиме.
* LD (Ladder Diagram - язык релейных диаграмм, или релейно-контактных схем) разработан еще в 1970-е годы фирмами «Модикон» и «Аллен Брэдли». Он привычен и понятен рабочему - заводскому слесарю КИПиА (контрольно-измерительных приборов и автоматики), железнодорожному СЦБшнику и даже просто мало-мальски грамотному электрику. Программа на LD выглядит как принципиальная электрическая схема, где, например, функция «логическое И» изображается в виде последовательно соединенных контактных пар.
* FBD (Function Block Diagram - язык функциональных блок-диаграмм) близок инженеру - электронщику и схемотехнику, хотя в принципе доступен и специалисту без высшего образования. Программа на FBD больше похожа на структурную схему. В этом языке, как и в LD, нет ни подпрограмм, ни циклов, ни условных переходов, так что для работы на нем специальная программистская подготовка не требуется.
* SFC (Sequential Function Chart - «язык последовательного функционирования», или язык карт состояний): программа на нем представляет собой диаграмму состояний и переходов, понятную инженеру-технологу.
Мы-то, конечно, понимаем, что все эти диаграммы и схемы представляют собой только визуальное отображение программы, сама же программа формируется в памяти компьютера как текст, близкий к текстам обычных программ и компилируемый подобно им.
Упомянутые здесь языки созданы еще в 60-е-70-е годы в разных странах (например, FBD и SFC - во Франции), а в 1979-1982 гг. они были стандартизированы Международной Электротехнической Комиссией (МЭК), после чего их в обиходе стали называть просто: МЭКовские языки. Эти языки и технологии понятны людям, работающим с промышленной автоматикой, но для «нормальных» программистов они - абсолютно темный лес. Поэтому в стандарты МЭК были внедрены и текстовые алгоритмические языки, близкие к тем, которые используются на обычных компьютерах: IL (Instruction List - «список команд») - ассемблеро-подобный язык, однако абстрактный, т. е. не привязанный к архитектуре какого-либо процессора, ST (Structured Text - «структурированный текст») - чем-то похож на Паскаль, чем-то на современный Фортран.
Сам контроллер чаще всего не имеет ни операционной системы, ни редакторов, ни компиляторов, а иногда вообще не имеет устройств для взаимодействия с человеком (у военных такой компьютер называется счетно-решающим прибором, в отличие от настоящего компьютера, имеющего клавиатуру и экран или что-то заменяющее их). Разработка программ ведется на обычном компьютере (который в этой ситуации называется инструментальной машиной) с использованием кросс-компилятора или кросс-ассемблера, а готовая программа - прошивка - «заливается» в ПЛК с помощью программатора, который может быть отдельным устройством либо встроенным в ПЛК. Отладка программ, конечно, может осуществляться путем пробных прогонов, но наиболее серьезные специалисты используют кросс-отладчики - программы, работающие на обычном компьютере и воспроизводящие в деталях поведение микроконтроллера. То есть, если программист компьютера работает непосредственно на том компьютере, для которого он разрабатывает программу, то программист микроконтроллера или ПЛК может всю работу - от первых замыслов до полной готовности - выполнять на персональном компьютере, даже вообще не имея в руках того устройства, для которого программирует.
Аббревиатуру ПЛК иногда расшифровывают как программируемый логический контроллер, и здесь возникает путаница с промышленным логическим контроллером. Эти два устройства могут быть сходны по собственному внешнему виду и даже по внешнему виду технической «начинки», которая у них внутри, но логика работы у них совершенно разная. Промышленный контроллер по сути своей - типичный компьютер с процессором и с множеством одинаковых адресуемых ячеек памяти, обрабатывающий информацию путем последовательного выполнения действий по программе. Программируемый логический контроллер построен на основе программируемой логической интегральной схемы (ПЛИС), с которой его также часто путают. ПЛИС - это не компьютер, не процессор и не микроконтроллер - это детский конструктор «Сделай сам», из которого можно собрать что угодно. Если очень хочется, можно собрать и процессор, и компьютер, но практически это не имеет смысла. На основе ПЛИС собирают специализированные логические схемы для решения задач, для которых классические микроконтроллеры недостаточно эффективны. Основной язык программирования ПЛИС - Verilog.
Для всех микроконтроллеров типична гарвардская архитектура с двумя отдельными запоминающими устройствами: для программ и для данных. Память данных - обычная оперативная память, а память программ - долговременная, в качестве которой чаще всего используется флэш-память. Кроме того, у многих микроконтроллеров (в частности, у всех выпускающихся сейчас AVR) имеется и долговременная память данных - EEPROM. Этим микроконтроллеры отличаются от обычных компьютеров, для которых типична принстонская архитектура, она же неймановская, с одним ОЗУ, в котором место для программы и для данных выделяется по потребностям решаемой задачи. Такое решение продиктовано тем, что микроконтроллер обычно всю жизнь решает какую-то одну задачу, так что потребность в памяти можно предсказать на этапе проектирования, тогда как обычный компьютер решает множество задач, в т. ч. таких, которые не были заранее известны, так что ячейки памяти для программ и для данных распределяются по потребности в пределах емкости одного устройства.

Цифровые технологии записи и воспроизведении звука

До последнего десятилетия XX века для записи и воспроизведении звука использовались два вида носителей: виниловые грампластинки и магнитные ленты. Общий принцип их действия: звуковое давление преобразуется в электрическое напряжение, а последнее - в глубину канавки на пластинке или в намагниченность рабочего слоя ленты, а при воспроизведении производится обратное преобразование. Мгновенное значение звукового давления меняется непрерывно в известных пределах, и каждому значению звукового давления соответствует значение параметра записи. В свете того, что мы говорили выше про аналоговые и цифровые устройства, можем сказать: звукозапись на грампластинки и магнитные ленты - аналоговая технология. Проблема в том, что аналоговое преобразование одной величины в другую не может быть осуществлено со 100% точностью: неизбежны те или иные искажения. Это ладно, это мелочь. Гораздо хуже то, что пластинки имеют еще склонность к постепенной деградации при каждом проигрывании. А магнитные ленты портятся даже и просто при длительном хранении.
Желание сохранить музыку навечно и с высоким качеством приводит к идее цифровой записи: на диск, пленку или иной носитель записывать не физическую величину, аналогичную звуковому давлению, а ее значение в цифрах. Однако ни пластинки, ни обычные магнитные ленты не позволяли на носителе приемлемых размеров и стоимости разместить сколько-нибудь приемлемое количество информации, ведь для представления одной минуты музыки требуется порядка 10 МБайт. Стала очевидна необходимость разработки какой-то принципиально новой технологии.
В 1980 году компании «Филипс» и «Сони» предложили запись звука на лазерный оптический диск. На таком диске запись осуществлялась по спиральной дорожке, почти как на грампластинках. Только ширина этой дорожки во много раз меньше, чем на грампластинке, а длину, соответственно, можно сделать во столько же раз больше. Запись выполнялась по принципу импульсно-кодовой модуляции, которая, впрочем, цифровой технологией может считаться с некоторой натяжкой (я бы сказал что это промежуточная ступень эволюции между аналоговой техникой и настоящей цифровой). Чуть позже была предложена очевидная идея использовать компакт-диск для записи файлов, и накопители на компакт-дисках (дисководы) стали использоваться как периферийные устройства для персональных компьютеров.
Перед нами очередные экспонаты петербургского Музея связи - портативные плееры: слева - кассетные, справа - дисковые.
istoria-players.jpg
В 1991 году появился стандарт MP3, позволявший «сжать» цифровую звукозапись, т. е. на носителе известной емкости разместить данные, воспроизведение которых даст время звучания в несколько раз больше по сравнению с записью без сжатия. Собственно процесс сжатия сводится к определенному математическому преобразованию данных, полученных при оцифровке звука, а при воспроизведении звука необходимо произвести обратные преобразования. И если обычная запись звука на диск (и соответствующее воспроизведение) производится с помощью сравнительно несложных логических устройств, то сжатие - алгоритм, для выполнения которого нужен полнопрофильный компьютер. С другой стороны, при создании стандарта MP3 сразу подразумевалось хранение записей в виде файлов, а возможно и обработка звуков на компьютере. Формат файла MP3 предусматривает размещение прямо в файле, помимо собственно звукозаписи, так называемых тегов (англ. tag), содержащих название произведения, сведения об авторе, исполнителе и т. д., а также картинку - «обложку альбома». У любителя музыки коллекция может содержать сотни или тысячи записей, значит надо как-то организовать их систематизированное хранение.
В середине последнего десятилетия XX века персональные компьютеры стали комплектоваться звуковыми картами, которые в сочетании с CD-дисководами сделали компьютер превосходным инструментом (скорее даже набором инструментов) для записи, обработки, систематизированного хранения и проигрывания звукозаписей. Однако наряду с такими инструментами хотелось бы иметь что-то компактное, переносное, пусть и с более простыми функциями.
Музыкальный плеер рубежа XX - XXI веков по размеру соответствовал компакт-диску: чаще всего он имел форму, близкую к круглой, диаметр около 14 см при толщине порядка 3 см, а время звучания обычного диска - чуть больше часа (MP3 диск - несколько часов, но для этого был нужен специальный MP3 плеер). Таким образом, по массогабаритным характеристикам, по времени звучания носителя и даже по расходу батареек такой плеер приблизительно соответствовал плееру на магнитных кассетах, который был нам привычен с 70-х годов. Однако поначалу цифровой плеер был гораздо дороже кассетного. За что люди платили? - за значительно возросшее качество звучания. Кто любит слушать музыку, тот поймет.
Автомобили 90-х годов практически всегда комплектовались радиоприемниками или магнитолами, причем кассетные магнитолы встречались практически так же часто, как и дисковые, а были и совмещенные. В 2003 году мы с начальником на работе ездили в командировку на его машине - у него была «Ауди» довольно редкой модели и в необычной комплектации. Наряду со штатной магнитолой, стоявшей на своем штатном месте под приборной панелью, там имелся удивительный прибор: CD-чейнджер, в который можно было вставить несколько дисков и проигрывать любой из них нажатием одной кнопки, без необходимости вынимать и вставлять диски. Чейнджер был по размерам гораздо больше обычного проигрывателя дисков и размещался то ли в багажнике, то ли под задним сиденьем. Выпускались и компьютерные чейнджеры, которые можно было встроить в системный блок вместо обычного дисковода (по размерам они были лишь чуть-чуть больше обычного). Сейчас CD-плееры, а тем более чейнджеры, - уже антиквариат.
В 2006 году товарищ по работе хвастался мне своим новым приобретением: миниатюрным музыкальным плеером, размером раза в два меньше дискового (первый подобный плеер фирма «Эппл» выпустила в 2001 г. под маркой iPod). В нем музыка хранилась в виде файлов не на CD-диске, а на крошечном жестком диске (винчестере). Если прижать плеер к уху, можно было услышать жужжание винчестера. Плеер можно было подключить к компьютеру с помощью кабеля USB (тоже новинка того времени) и «заливать» в плеер файлы по собственному желанию (в отличие от покупных CD дисков, на которых те или иные музыкальные произведения размещаются по выбору издателя). В то время уже существовала флэш-память, но емкость флэш-карт исчислялась мегабайтами, так что хватало ее лишь на несколько минут звучания, и это никого не могло удовлетворить. В то же время винчестер, даже суперминиатюрный, имел емкость уже не в мегабайтах, а в гигабайтах: если считать, что одна минута музыки в формате MP3 соответствует одному-двум мегабайтам, то получается, что на винчестере можно разместить десятки часов музыки.
Однако технический прогресс не стоит на месте, и вот буквально на следующий год я купил дочке в подарок MP3 плеер уже с флэш-памятью - практически такой же, как те, что продаются сейчас. По размерам такие плееры в 2-3 раза меньше винчестерных. В таком плеере обычно имеется встроенная память емкостью порядка 1 ГБ и гнездо для вставки карты памяти microSD, емкость которой в 2010 году могла быть 1-4 ГБ, а в 2018 году - уже 64 и даже 128 ГБ. Соответственно плееры на ЖМД ушли в прошлое вслед за CD.

Поначалу MP3 плееры выпускались только как самостоятельные промышленные изделия. Идея встроить такой плеер в сотовый телефон кажется очевидной, но не сразу нашла воплощение на практике. А когда промышленность освоила выпуск электронных книжек, многие из них также получили функцию воспроизведения MP3.
Мы рассмотрели миниатюрные портативные аудиоплееры, но никто не отменял работу со звуком на обычном компьютере. На рубеже XX - XXI веков было разработано множество программ для записи звука с микрофона, для сжатия и перекодирования («пережатия») файлов, для резки, склейки записей (аудиомонтажа). Постепенно профессиональные «звукари» освоили цифровую обработку звукозаписей.
Принцип MP3 предусматривает сжатие с потерями: воспроизведенный звук имеет некоторые искажения в сравнении с оригинальным. Для большинства слушателей, для большинства музыкальных произведений эти искажения незаметны. Главное отличие MP3 от грампластинок и магнитных лент в том, что эти искажения вносятся один раз в процессе сжатия и не накапливаются при хранении и проигрывании. Однако человеческая мысль не может останавливаться на достигнутом, и в начале XXI века был предложен ряд алгоритмов «сжатия без потерь». Среди этих алгоритмов в первую очередь следует отметить FLAC - Free Looseless Audio Codec - бесплатный аудиокодек без потерь. Однако он до сих пор не получил такого распространения, как MP3.
Мы обсудили запись и воспроизведение звука, теперь несколько слов о передаче звука на расстояние. До 90-х годов XX века звук (преобразованный в аналоговое электрическое напряжение, разумеется) передавался либо непосредственно по проводам, как в обычном телефоне или в городской радиотрансляционной сети, либо с помощью радиоволн. Все это были, очевидно, аналоговые технологии. На рубеже веков «цифра» (с ударением на последний слог!) пришла и сюда. Какие у нас сейчас варианты?
* Разместить файл в Сети, чтобы кто-то его скачал;
* Передавать звук по Сети с использованием специально для этого созданных сетевых протоколов, которые могут предусматривать передачу как по телефонному принципу (от одного источника к одному получателю - IP-телефония или VoIP-телефония), так и по широковещательному (от одного источника к множеству слушателей - IP-радиовещание);
* Строить отдельные сети цифрового радиовещания, не связанные с Сетью и использующие свои протоколы, несовместимые с IP: наземные (DVB-T) и спутниковые (DVB-S). Впрочем, эти сети с самого начала строились с расчетом на телевидение, а радиовещание для них - дело второстепенное. Собственно, название DVB и переводится как Digital Video Broadcast - «цифровое видеовещание» (T - terrestrial - наземное, S - satellite - спутниковое).

Цифровые технологии в фотографии, кино и видеозаписи

По аналогии с тем как чуть выше мы рассмотрели цифровую звукозапись, рассмотрим технологии обработки изображений.
До 1970-х годов в фотографии и кино основным носителем информации была химически проявляемая пленка и cоответствующая фотобумага, и только на телестудиях ограниченно использовалась магнитная видеозапись: студийные видеомагнитофоны были громоздки и дороги. В 70-е годы промышленность освоила выпуск кассетных видеомагнитофонов, которые по размерам, стоимости и условиям эксплуатации были пригодны для бытового использования. Очевидно, вся эта техника работала по аналоговому принципу. Первые непрофессиональные видеокамеры, появившиеся в конце XX века, также были аналоговыми (носителем записи в них служили кассеты с магнитной лентой). И точно так же как для звукозаписи, постепенно стала очевидной необходимость создания цифровых технологий, а появление лазерных оптических дисков, первоначально предназначавшихся для аудиозаписи, дало толчок к развитию таких технологий уже применительно к обработке изображений.
Еще в 1980-е годы был изобретен сканер - прибор, преобразующий изображение с листа бумаги или иного материала (например фотопленки) в массив пикселей - числовых значений, каждое из которых описывает «элементарную точку» изображения. Все изображение представляется как растр - сетка из точек, расположенных параллельными рядами, а каждая точка рассматривается как равномерно окрашенная. В этой главе мы рассмотрим только растровые изображения, в которых каждая точка может иметь свой цвет, независимый от соседних, так что все изображение невозможно описать никак иначе, кроме как перечислением всех пикселей. В компьютерной технике рассматривается также векторная графика - чертежи, схемы, карты и т. д., где изображение может быть описано через линии, специальные символы и т. д. Но это предмет совершенно отдельного разговора.
Отсканированное изображение можно сохранить как файл. Первоначально использовался формат файла bit map (BMP), в котором каждый пиксель представлен несколькими байтами. Например, если размер растра 640х480 точек и каждую точку представляем 3 байтами (по трем основным цветам: красному, зеленому и синему), то размер файла будет 921600 байт. По нашим нынешним представлениям - сущий мизер, но для того времени, когда дискета вмещала 1.2 или 1.44 МБ, а винчестер - что-нибудь около 40 МБ, это была очень даже немалая величина. И опять-таки по аналогии со звукозаписью стала очевидна необходимость как то «сжимать» файлы изображений, и эта задача была решена: было предложено несколько алгоритмов сжатия, среди которых до настоящего времени наиболее распространенные - это JPEG (1992 г.), GIF и PNG.
Появление сканера изменило технологию работы фотографа. Теперь отснятую пленку проявляли обычным образом, затем сканировали, после чего всю необходимую обработку изображения выполняли на компьютере, а напечатать готовую фотографию можно было на обычной бумаге с помощью цветного принтера, который к концу XX века уже не был диковинкой.
В доцифровую эпоху у фотографа был не слишком-то богатый набор приемов на случай, если фотография на пленке получилась неудачной. Меняя выдержку при печати и время проявления отпечатка, можно было попытаться «вытянуть» недосвеченный или пересвеченный снимок, а увеличитель и кадровая рамка позволяли «вырезать» на фотографии нужные и ненужные части. Светофильтры и «хитрые» проявители давали некоторую возможность «поиграть» с цветами… Продвинутые фотографы (скорее уж фотохудожники) владели ретушью и клеили коллажи. Все это было трудоемко и дорого, особенно если использовать какие-то нестандартные реактивы, к тому же был велик риск безнадежно испортить снимок. Появление сканера и программ для обработки цифровых фотографий (среди которых под номером 1, конечно же, Photoshop) радикально изменило все наши взгляды на искусство фотографии. Однако практически до конца XX века неизменным остался пленочный фотоаппарат.
Цифровые фотоаппараты появились еще в 70-е годы, но, как это обычно и бывает, до поры-до времени их технические характеристики были неудовлетворительны (фотоаппарат «Кодак» 1975-го года имел разрешение всего 100х100 пикселей, а «Фуджи» и «Олимпус» в 1997 г. выпустили фотоаппараты с разрешением 1.3…1.4 Мпикс, т. е. примерно 1400х1000 пикселей). Между тем, как показывает наш нынешний опыт, даже фотографу-любителю для съемки пейзажей, портретов и т.п. нужен размер растра хотя бы 3000х2000 пикселей. Фотоаппараты с таким разрешением по приемлемой цене появились только в 2000-е годы, а сейчас аппарат с разрешением 14 Мпикс (4592х3056) считается средним, и никого уже не удивляет разрешение 40 Мпикс. Таким образом, эпоха цифровой фотографии началась не ранее 2000 года.
Казалось бы, появление цифровых фотоаппаратов должно было окончательно похоронить пленку, но этого не произошло: немалый процент фотографов по-прежнему предпочитает снимать на пленку. Однако цифровые технологии изменили и пленочный аппарат: теперь он представляет собой, по сути, специализированный компьютер, на 3/4 состоящий из деталей цифрового фотоаппарата.
Цифровые технологии, разработанные первоначально для фотографии, быстро нашли применение в видеотехнике. Граница между кино и видео перестала существовать.
Еще в 80-е годы, когда появились компакт-диски для записи звуков, такую же технологию было предложено использовать и для видеозаписи. Поскольку видеозапись требует гораздо большего объема данных, диск пришлось сделать диаметром 25 см (против 12 см у аудиодиска). Однако распространения такая техника не получила и просуществовала недолго: в 1996 году появился DVD - диск, по размерам такой же, как аудио CD, но обеспечивающий в несколько раз большую плотность записи и соответствующую емкость. И, подобно CD, такие диски быстро нашли применение для записи файлов (хотя уместно отметить, что сам формат DVD изначально подразумевал организацию данных в виде файловой системы).
Видеокамеры начала XXI века записывали информацию на кассеты стандарта miniDV (miniature digital video). Подобно компакт-дискам, такие кассеты еще не тянут на настоящую цифровую технику. По размерам и внешнему виду они очень похожи на аналоговые мини-видеокассеты 90-х годов. В первом десятилетии XXI века на смену таким камерам пришли камеры с «винчестером», которые, собственно, и являются первыми настоящими цифровыми. Просуществовали они недолго: им на смену пришли камеры, использующие диск стандарта мини-DVD. Были камеры, пишущие видео на такой диск, а фотографии - на флэш-карту. Современные видеокамеры используют карты памяти microSD.

Мировая компьютерная сеть в новейшее время

Выше мы рассмотрели мировую Сеть, какой она была в конце XX века. Мы отметили, что в то время Сеть действовала на электрическом принципе, который она унаследовала от телефонных и телеграфных сетей. На рубеже XX-XXI веков произошла революция в сетевых технологиях: началось массовое внедрение волоконно-оптических (оптоволоконных) кабелей, разработка которых была начата еще в 80-е годы. Носителем информации в таком кабеле является не электричество, а свет, и жилы такого кабеля похожи не на проволоку, а скорее на рыболовную леску. Появилась новая профессия - монтажник волоконно-оптических сетей, которая имеет мало общего с давно известными профессиями электромонтера или телефониста.
Оптоволокно свободно от ограничений, присущих электрическим кабелям, поэтому позволяет передавать данные на большие расстояния со скоростью, немыслимой для прежних технологий.
В конце XX века и в начале XXI оптоволоконные кабели по конструкции все еще имели много общего с телефонными и телеграфными, и прокладывались они обычно в земле, так же, как и последние. Кабель новейшего времени изготавливается полностью из синтетических материалов, что обеспечивает ему целый ряд преимуществ:
* Он не содержит металла, поэтому неинтересен ворам-металлоломщикам;
* Дешев;
* Легок и прочен, так что не нуждается в прокладке под землей: в городе его можно натягивать прямо от дома к дому по крышам. Это гораздо дешевле и удобнее, чем в земле;
* Обеспечивает полную электробезопасность, как от поражения людей током, так и от повреждения приемопередающего оборудования молниями, так и от наводок со стороны мощных электроустановок, способных «забить» передаваемую по кабелю полезную информацию. Эти качества позволяют прокладывать кабель по существующим опорам линий электропередачи или контактной сети железных дорог, что резко снижает затраты на строительство Сети;
* Для злоумышленника, желающего перехватить информацию из кабеля, есть единственный вариант: резать кабель, а эта работа требует определенной квалификации, и притом ее невозможно сделать незаметно.
С распространением таких кабелей проблема последней мили в городах была в основном решена. Вариантов решения два.
* FTTB (Fiber to the building - волокно в здание): прямое оптоволокно от дата-центра вводится в многоквартирный дом, где-то на чердаке или на лестничной клетке ставится маршрутизатор и от него данные раздаются в квартиры по проводной локальной сети;
* PON (Passive Optical Network - пассивная оптическая сеть): оптоволокно разветвляется с помощью оптических устройств - сплиттеров - и его ветви проводятся прямо в квартиры. Преимущество PON в том, что сеть за пределами квартиры не содержит ни элементов, привлекательных для воров, ни приборов, нуждающихся в электроэнергии, и практически не требует ухода и обслуживания. Однако в квартире приходится ставить оптоволоконный маршрутизатор, который тяжелее и дороже обычного. Первые шаги по созданию пассивных оптических сетей предприняты в 1995 г.
На следующем фото - опора линии электропередачи (напряжение 110 кВ). Видны высоковольтные провода, подвешенные на гирляндах изоляторов, и три волоконно-оптических кабеля, подвешенные без изоляторов, а также соединительные муфты (для пущей надежности спрятанные в металлические ящики).
istoria-optovolokno.jpg
В загородной местности, по крайней мере в густонаселенных областях вроде Ленинградской, года с 2015-го оптоволокно тоже становится обычным, но основным решением проблемы последней мили видится сотовая сеть. Первым сотовым провайдером, предложившим услуги по передаче данных, стал «Скайлинк». В 2003 г. я работал на фирме, которая располагалась в промзоне на окраине Питера, и там не было других вариантов подключения к Сети, кроме «Скайлинка». В следующем, 2004 г. туда уже провели оптоволокно. Около 2005 г. сотовые телефонные компании уже обеспечивали GPRS (Global Package Rooting System - глобальная система маршрутизации пакетов). Передача данных осуществляется с использованием специального радиомодема или телефона с поддержкой соответствующей функции. GPRS считается вторым поколением радиосетей передачи данных, считая первым поколением технологию передачи данных по голосовому каналу обычной сотовой сети. Позже была развернута сеть 3G (третьего поколения), в городах и густонаселенных областях действует сеть 3.5G (которую некоторые считают четвертым поколением - 4G). А в экономически развитых странах вроде Японии начинается строительство сетей 5G.
С распространением оптоволокна и сетей 3G-4G цены на интернет резко пошли вниз, и большинство интернет-провайдеров стали предлагать абонентам «безлимит», т. е. помесячную оплату независимо от траффика.

Интернет в новейшее время

Смену эпох в области интернета я связываю с появлением динамического контента. Теперь страница, которую запросил пользователь, необязательно подготавливается заранее - она может вырабатываться HTTP-сервером «на лету» по соответствующей программе. Более того: теперь и на клиентской стороне может стоять программа (опять-таки не заготовленная заранее, а присланная сервером), которая может как-то обрабатывать данные, прежде чем отображать их на экране. Таким образом, появляется концепция WEB-приложения, которое представляет собой совокупность двух программных изделий: фронтенда (англ. frontend) на клиентской стороне и бэкенда (англ. backend) - на серверной. Это несколько упрощенная трактовка, но достаточная на нашем сегодняшнем уровне понимания.
Для разработки WEB-приложений были созданы специализированные языки программирования. Под номером 1 среди них идут созданные в 1995 г. Java («Сан Микросистемс») и Java-Script (Б. Эйх, М. Андерссен и Б. Джой, «Нетскейп Комьюникейшенс»). Это совершенно отдельные языки, слово Java не должно вводить нас в заблуждение. В профессии «программист» появились специализации, названия которых часто пишут по-английски, вообще без перевода на русский: frontend developer, backend developer, fullstack developer.
Все это было бы очень здорово, если бы не одна проблема: как пользователю узнать адрес сайта, на котором он ожидает найти интересующую его информацию? (если, конечно, не принимать всерьез развешанные на улицах рекламные плакаты, на которых фирмы-рекламодатели пишут адреса своих сайтов).
Первоначально решением этой проблемы было поддержание (вручную!) тематических списков («индексов») сайтов. Около 1990 г. этим занимался, в частности, уже знакомый нам Тим Бернерс-Ли. Однако по мере развития интернета количество сайтов возросло настолько, что поддерживать списки вручную стало нереально - эту задачу нужно было как-то автоматизировать. В течение ряда лет было предложено много частичных решений, пока не появились поисковые роботы, которыми мы пользуемся по сей день. Под номером 1 среди них - «Google» (1998 г., Л. Пейдж и С. Брин), однако в России более популярен «Яндекс» (первый выпуск в 1997 г.). Поисковый робот, получив наш запрос на поиск информации, опрашивает все известные ему сайты и, если находит подходящий, включает его в динамически генерируемую страницу, которую и выдает пользователю. Очевидно, что без динамического контента такая хитрость была бы невозможна.
Следующее революционное нововведение, определившее новейшую интернет-эпоху, получило не очень удачное название: социальные сети. Первая такая сеть - «Фейсбук» - была придумана М. Цукербергом в 2004 г. Я использую слово «придумана», потому что идея «Фейсбука» не представляет собой изобретения. Цукерберг просто совместил в одном сайте все то, что было изобретено раньше. Каждый пользователь мог создать в «Фейсбуке» свою страницу, находить страницы других людей по именам, подписываться на их новости, выражать свою симпатию или согласие или, наоборот, несогласие, организовать свои тематические группы и вступать в другие группы. Пользователи отличаются интересами и уровнем серьезности, но в социальной сети каждый найдет для себя то, что ему нужно.

Вопросы информационной безопасности

Помните анекдот про представителя одной из малочисленных северных народностей, который разбил топором чайник и сказал: «этих зверей надо убивать, пока они маленькие»? Зверя под названием «компьютерная угроза» в 90-е годы, когда он был еще маленьким, можно было убить одним ударом: разработать новую операционную систему, которая с самого начала имела бы встроенные механизмы «иммунитета». Много раз я пытался говорить на эту тему с разными людьми (по итогам этих разговоров, кстати, родилась вот эта статья: Понимание основ информационной безопасности для яхтсменов, лошадников, лучников, фехтовальщиков, игровиков-ролевиков и исторических реконструкторов ), но разговор так ни разу и не склеился. Впечатление такое, что вся эта тема - табу. В лучшем случае мне отвечали: «нас все устраивает». В общем, у нас в распоряжении было 25 или даже 30 лет для того, чтобы решить проблему информационной безопасности раз и навсегда, но эти годы упущены. Проблема не только не решена, даже не было сделано ни малейшего шага к ее решению. А «зверь» между тем растет, и борьба с ним со временем становится только труднее.
С годами меняется не только масштаб и сложность компьютерных угроз - меняется их сущность. Если в 90-е годы результатом вирусной эпидемии или хакерской атаки могла быть потеря файлов (пусть даже очень ценных), то в нынешнем веке пострадать могут уже реальные капиталы, деловая репутация и иные существенные жизненные ценности.
Следующий вопрос информационной безопасности, возникший в новейшее время, - это слежка всевозможных темных личностей за нами. «Мы все под колпаком у Мюллера» - помните? Да ладно бы если у одного какого-то Мюллера. Следят за нами все кому не лень, точнее все, кто может придумать для этого технические средства. Уже ни для кого не секрет, что операционная система Windows и некоторые веб-браузеры хранят информацию о нашей деятельности в Сети.
В принципе, для рядового обывателя жизнь под колпаком может быть несколько дискомфортной, но не более того. Если же ты не просто обыватель, а подготовленный шпион, то слежка должна восприниматься тобой как обыкновенная повседневность, не мешающая выполнению твоих трудовых функций. Однако сам факт, что слежка ведется, провоцирует нас на разработку методов противодействия этой слежке. А поскольку мы не можем рассчитывать на то, что наши послания не попадут в руки посторонним, остается один вариант: шифроваться. Так появились коммерческие и некоммерческие шифрсистемы, виртуальные частные сети, прокси-серверы, анонимайзеры… Мы сейчас занимаемся историей техники, так что едва ли здесь будут уместны технические подробности. Остановимся на том, что, хотя с инженерной стороны перечисленные средства имеют различия и соответственно преимущества, недостатки и области применения, но математика, лежащая в их основе, одна и та же. По большому счету, используется тот же алгоритм, что и в электронной подписи, только «другим концом». Речь идет о шифровании с открытым ключом.
Всевозможные шифры, о которых мы можем составить представление по книгам и фильмам про шпионов, основаны на шифровании с закрытым ключом, которое мы обсудили в главе «Первобытная эпоха». В современных шифрсистемах каждый из субъектов посылает другому сообщение типа «зашифровывай свои послания вот таким ключом:…», и эти послания передаются открыто (отсюда и название: шифрование с открытым ключом). Посторонний человек запросто может перехватить открытый ключ, но воспользоваться им он едва ли сможет: для расшифровки нужен другой - закрытый, или приватный, ключ, который у каждого участника переговоров свой и держится в секрете. И здесь уместна та же оговорка, которую мы сделали при обсуждении электронной подписи: стойкость шифрсистемы с открытым ключом определяется не невозможностью, а большой трудоемкостью расчета закрытого ключа по известному открытому. «Это неосуществимо, потому что до сих пор никому не удалось», да? Преимущество шифрсистемы с открытым ключом не в том, что ее невозможно «расколоть», а в возможности установить сколько-нибудь защищенную связь между двумя лицами по недоверенной сети без предварительного обмена закрытыми ключами.
С древности, когда криптография только зарождалась, и года как минимум до 1990-го математическая криптография была страшным секретом, изучали ее крайне немногочисленные люди в крайне немногочисленных институтах, сам факт существования которых был гостайной. Школьник, интересовавшийся этой наукой и мечтавший сделать ее своей профессией, не мог просто так прийти в такой институт и подать документы на обучение, как в обычный вуз. Однако в XXI веке требование осуществить передачу данных между абонентами скрытно от посторонних привело к тому, что «информация как вода - дырочку найдет», а спецслужбам, охранявшим секреты, ничего не осталось, кроме как пересмотреть это положение. И сейчас криптография преподается уже совершенно открыто, люди получают официальные дипломы и по ним устраиваются на работу. Говорят, что эта работа неплохо оплачивается.

Характеристика эпохи

Новейшая эпоха в компьютерном мире характеризуется множеством факторов:
* Цена компьютеров снизилась до величины значительно меньше стоимости автомобиля. Современный школьник может носить в кармане смартфон, вычислительные возможности которого превосходят весь мировой парк компьютеров 1960-х годов, и собирать собственные компьютерные системы из запчастей, цена которых сравнима уже с ценой не автомобиля, а школьного завтрака. А в Англии уже ставится вопрос о том, чтобы простенькие микроконтроллеры раздавать школьникам бесплатно - лишь бы учились программированию.
* Компьютеры стали переносными: в конце XX века уже никого не удивляли ноутбуки, а в XXI веке появились еще более легкие планшетные компьютеры, способные много часов работать от аккумуляторов без подключения к электросети.
* Появились новые виды компьютерных услуг: интернет (в т. ч. мобильный) и GPS.
* Было изобретено множество специализированных компьютеров и гаджетов, которые в начале 1990-х годов даже не были предметом мечты. Примеры: электронный музыкальный плеер и автомобильный видеорегистратор.
* Компьютер освоил несвойственные ему до недавнего времени профессии: фотографию, видео, звукозапись и черчение.
* Если в предыдущие исторические эпохи развивающаяся компьютерная промышленность только способствовала появлению новых предприятий и целых отраслей промышленности, то теперь компьютер, образно говоря, вышел убивать. В большинстве стран мира прекратил работу телеграф, исчезли сельские и районные телефонные компании, и на очереди - телефонные сети в небольших городах. Под вопросом существование почты. Прекращено производство электрофонов, магнитофонов, видеомагнитофонов, магнитных лент и виниловых пластинок. Практически свернуто производство чертежной бумаги, чертежных принадлежностей и инструментов, светокопировальной бумаги и аппаратуры для светового копирования чертежей, фотокинопленок и реактивов для их проявления. Уходит в прошлое профессия штурмана, как на море, так и в авиации. И это далеко не полный список «унесенных ветром».
———————
Игорь Романов

igor/istoria.txt · Последнее изменение: 2022/05/01 18:15 — igor