Что такое программная инженерия. Лекция в Яндексе
Этому термину уже почти 50 лет — впервые его начали использовать в 1968 году. Дело в том, что именно тогда методы классической инженерии — например, разбиение на отдельные компоненты — стали всерьёз применяться в создании софта. Но почему они не применялись раньше, и какой новый смысл приобрело выражение «программная инженерия» в последние десятилетия?
Под катом — подробная расшифровка и слайды.
Итак, разрешите представиться. Меня зовут Ефим Гринкруг, я профессор Департамента программной инженерии Высшей школы экономики, там новый факультет, организованный с участием Яндекса. Вы, наверное, знаете — факультет компьютерных наук. Там есть три департамента, один из них — Департамент программной инженерии. Одновременно с этого года я являюсь заместителем заведующего кафедры системного программирования. Это базовая кафедра, которая у нас открыта с этого сентября, и что это такое, я вам тоже немножко сегодня расскажу.
Вы видите этот слайд, который показывает, что я в 1968 году закончил физико-математическую школу № 444. Среди вас есть кто-нибудь оттуда? Это лицей № 444 в Измайлово, 13-я Парковая. Я там был две недели назад, он еще оставался. Это была первая физико-математическая спецшкола в Москве, которая вместо столярного и слесарного дела в 1959 году, задолго до того, как я там учился, ввела уроки программирования. До этого все строгали табуретки. И когда я получал аттестат, вместе с аттестатом зрелости в школе я получил такую бумажку — свидетельство о присвоении квалификации, где написано, что мне присвоена квалификация «вычислитель-программист 3-го разряда». В те времена рабочие профессии были от 1-го до 6-го разряда, 6-й был самый крутой. Третий разряд получали те, у кого пятерка по программированию, второй разряд — четверка, троечников- перворазрядников у нас не было. И так получилось, что в 1968 году я столкнулся со словом «программирование» в первый раз. Почему в 1968-м? Потому что я пришел в эту школу не с самого начала, а с середины девятого класса, предпоследнего в те времена. И когда я туда пришел, потому что старые районы Москвы стали сноситься и школы закрывались, а я ходил в университет на мехмат в математический кружок, мне посоветовали пойти в эту школу в середине 9-го класса, потому что преподавателю было интересно, смогу я догнать там или нет. Нас таких было трое из этого кружка. Я пришел туда, и через неделю где-то выяснилось, что какая-то полугодовая контрольная по программированию. Я, конечно, ни сном ни духом. Мне дали учебник, я честно прочитал половину этого учебника за пару вечеров, и потом нужно было написать программу. И программа представляла собой некий двойной ложный цикл. Нужно было успеть за 45 минут что-то такое двойным циклом изобразить, причем на языке, как теперь сказали бы, ассемблера. Я успел прочитать только половину команд, которые бывают в этой машине, оператор цикла до меня не дошел, он был в другой половине, и мне пришлось ухитриться сделать двойной цикл, пользуясь условным переходом, больше ничем. Вы, наверное, представляете, как это можно соорудить теперь. Парадокс был в том, что оценку «пять» за контрольную получили в классе двое: один мальчик, который там учился с самого начала и который был победителем всех мыслимых олимпиад всегда, и ваш покорный слуга, просто потому, что у нас двоих программа работала, а у остальных примерно тридцати пяти учащихся все было очень хорошо с циклами, но не работало. И с тех пор я проникся очень твердо идеей о том, что в программировании ничего серьезного нет. Если человек напряжется и за два дня может превозмочь то, что проходили два года до этого, и получить пятерку, не делая ничего и ничего не зная, то никакого серьезного отношения к этому делу вообще быть не может, и все это полная ерунда. Вот математика, физика — это серьезно, а это полная ерунда. И это отношение к делу, к программированию, у меня сохранялось после этого примерно лет шесть, то есть почти до окончания университета (тогда это называлось институтом, но мы об этом еще поговорим).
Мой первый учебник, который мне дали читать и который я не успел прочесть, назывался «Программирование в содержательных обозначениях». Сразу возник вопрос:, а что, бывает программирование в бессодержательных обозначениях? Русский язык в этом смысле очень показателен для перевода программистских терминов, мы еще увидим это. Спустя много лет я скажу: да, иногда бывает. Иногда сознательно, чаще бессознательно. Содержательные обозначения в сравнении с бессодержательными облегчают процесс создания программ, и бессодержательные, соответственно, затрудняют этот процесс. Есть специальные программы, которые называются обфускаторы, которые назло делают обозначение бессодержательным, просто чтобы сократить воровство кода.
Что же такое процесс создания программ? Это и есть тема нашей лекции, это и есть сущность программной инженерии.
Как и любое производство, производство программ проделало большой путь: от кустарного к промышленному. Что отличает современное производство вообще, не только в программировании, от кустарного? Есть какие-то отличительные признаки. Какие это признаки? Прежде всего, разделение труда. Неслучайно говорят: «кустарь-одиночка». Наверное, какие-то научные результаты привлекаются, что кустарю редко бывает под силу. Еще современные технологии. Чтобы было разделение труда, нужно поддерживать какие-то стандарты. Вы никогда не пробовали воткнуть какой-нибудь разъем туда, куда он не втыкается? Значит, нужно поддерживать какие-то профессиональные стандарты. Что еще?
— Результат.
— Это правильно. Качество результата. А откуда оно берется? И вообще, на что оно влияет? И почему, как вы думаете, я пришел сюда из Высшей школы экономики, где есть новый факультет компьютерных наук? Потому что, как на днях в газете «Ведомости» писал Анатолий Карачинский, президент компании IBS, большого российского холдинга, который компьютеризирует все на свете (в этот холдинг входит также компания Luxoft, это едва ли не единственная в стране компания, которая имеет сертификат качества высшего уровня в мире по производству программного обеспечения), экономика Индии, например, получает почти в два раза больше от экспорта ПО, чем Россия от экспорта нефти и газа (это в цифрах). Поэтому серьезная разработка программ и вы как будущие серьезные разработчики программ — это, наверное, и есть национальное достояние.
Что же такое программная инженерия? А что такое вообще инженерия? Если полезть в «Википедию», как все любят делать первым делом, вы там прочтете, что это приложение систематического дисциплинированного подхода к развитию, функционированию, сопровождению ПО, а также исследованию всего перечисленного, чтобы это сделать лучше. «Инженерия» вообще от французского слова «изловчиться» — это такая область технической деятельности, которая направлена на практическое применение знаний. Мы в конце с вами немножко обсудим, чем же компьютерные науки отличаются или как они соотносятся с программной инженерией. Примерно так же, как любые другие науки соотносятся с инженерией. Инженерия вообще — это наука?
Кораблестроение — это наука? Да, академик Крылов делал какие-то достижения в кораблестроении. Это наука? Что там есть кроме закона Архимеда? То есть наука бывает разная: бывает наука теоретическая, бывает наука практическая, инженерная и так далее.
Программная инженерия — это деятельность, связанная с производством и поддержанием ПО.
Откуда взялся этот термин и почему я решил начинать свой рассказ с 1968 года? Потому что в 1968 году впервые в истории этот термин стали использовать. Была конференция, которую спонсировало НАТО, в германском городе Гармиш-Партенкирхене, где потом проводилась зимняя Олимпиада, там собралось 50 крупнейших специалистов со всего западного мира, и они попытались ответить на вопрос, который к тому времени — к 1968 году — уже назрел очень остро, а именно: «Как делать программы так, чтобы они были надежные, вовремя и так далее?» К тому времени в 1968 году я окончил эту самую 444-ю школу и поступил на первый курс МИЭМ (тогда это был Московский институт электронного машиностроения, как когда-то отколовшийся от Вычислительного факультета МИФИ, а теперь он стал отделением (или кампусом, как у нас принято говорить) Высшей школы экономики). Таким образом получилось, что с 1968 года я, не имея особого влечения к этой деятельности, оказался в профессиональном смысле ровесником программной инженерии.
Когда я учился в школе, там стояла одна из первых вычислительных машин, называлась она «Урал-1». К сожалению, уже очень давно закрыт на ремонт Политехнический музей, и всю его экспозицию раскидали по каким-то углам. На самом деле, там довольно интересный был представлен ряд отечественных вычислительных машин. Отличникам давали попрограммировать на «БЭСМ-4» тогда, неотличникам — на «БЭСМ-3» и этом самом «Урале». Это ламповая машина. А вот фотография школы.
Кто ее разрабатывал? Тут было написано, что их было сделано всего 183 штуки, и одним из разработчиков был Юдицкий Давлет Исламович, который потом стал одним из основателей города Зеленограда. Зеленоград — это была попытка сделать «Силиконовую долину» под Москвой. Он известен тем, что был одним из разработчиков нетрадиционных арифметических устройств, которые считали в остаточных классах. Это такая арифметика, у которой нет единиц переноса, поэтому она работает очень быстро. Эта линия как-то увяла, потому что потом из этого представления числа, которое годится для такой быстрой арифметики, очень трудно преобразовывать в обычные числа туда-сюда, зато считает замечательно.
Вот эта машина «Урал-1», когда она еще стояла в Политехническом музее.
А вот это машина «БЭСМ-4», на которой я как раз, сам того не ведая, правильно двойной цикл написал. Эта машина известна еще и тем, что на ней первый раз делали компьютерный мультфильм в Советском Союзе. Иногда его показывают в том же музее.
Конференция в Гармиш-Партенкирхене была посвящена тому, что уже в те годы на Западе стало ясно, что писать программы дороже и дольше и более трудоемко, чем делать то железо, на котором они потом работают. И возник вопрос: почему это происходит и как сделать так, чтобы быстро разрабатывать надежные программы?
Темой основного доклада на конференции, которая первый раз озвучила термин «программная инженерия», стал вопрос, как эффективно, экономически выгодно, надежно и качественно разрабатывать ПО индустриальным образом, не кустарным, а промышленным образом? И все корифеи на тот момент признали, что основная и принципиальная разница между железом и программами заключается в том, что в железе разрабатываются компоненты, а программы пишут каждый раз с чистого листа (как правило, так и происходило в те годы). Задались вопросом: «Почему компонентность широко применяется в промышленном производстве аппаратуры и не применяется в достаточной степени в программном обеспечении?»
А что такое программная компонентность? Есть давно такой термин, появившийся как раз с той конференции — компонентно-ориентированное программирование. О чем это вообще? А это о многом. Это о том, как программировать, как создать большую программную систему, где участвует много разработчиков, как использовать результаты, полученные в такой разработке, для других программных систем, и что вообще считать результатом такой разработки? Как ее отладить, такую большую систему, какими средствами? Как использовать результаты труда других коллективов? Как организовать процесс разработки, в каком порядке это все делать, чтобы это было обозримо? Причем это обозримо должно быть не только для того, кто делает, но и для того, кто деньги платит. И потом, когда эта система уже сделана, как ее развивать? Потому что есть системы, и я очень скоро их увидел, которые работают всегда. И ведь будет катастрофа, если они перестанут это делать. А их надо развивать.
Значит, хочется чего? Хочется собирать программные изделия так же, как вы в детстве делали это с помощью конструктора Lego.
То есть взять какой-то готовый набор…
Может быть, если не хватает, другой прикупить.
Собрать команду.
И строить это дело, как Lego, из типовых готовых компонент.
Как строят дома, города, машины, из подходящих деталей, но разные, или разрабатывают радиоприемники из всяких стандартных радиокомпонент, как само железо раньше разрабатывали, всякие вычислительные устройства.
Это, кстати, продукция одной из компаний, в которых я работал потом до сравнительно недавнего времени.
И как это все делать вообще? Основное содержание этой конференции, 1968 год. Перед вами темы, которые обсуждались тогда. А кто там был? Там были преподаватели, производители как железа, так и программ, там был, в частности, Эдсгер Вибе Дейкстра. Знаете такого?
— Да.
— Чем он знаменит?
— Алгоритмы делал.
— И не один, много. Семафоры Дейкстры, алгоритм Дейкстры. «On-the-Fly Garbage Collection» — классическая статья о том, как математически обосновать параллельную сборку мусора в теперешних платформах — Java, .NET и так далее, — там, где есть на ходу параллельная сборка мусора. Автор — тоже Дейкстра.
Вот основные темы, некоторые из них уже неактуальны. Например, последняя — «Надо ли оценивать Software отдельно от Hardware?». Всерьез обсуждался этот вопрос. Все уже понимают, что такой Hardware, по сравнению с Software, которым он начинен, не стоит вообще ничего.
И главный доклад был про то, как организовать такое компонентное программирование, чтобы поставить это дело на промышленный поток. Этот вопрос актуален до сих пор, хотя прошло много лет. Это такая парадигма программирования. Что такое парадигма? Подход к программированию, один из многих. Где какие-то программные конструкции можно многократно использовать, единожды написав (в современных объектно-ориентированных языках это обычно классы или совокупности классов) с тем, чтобы их можно было, во-первых, написать хорошо, обязательно переиспользовать, обязательно достигать их безошибочного качества, и потом из качественных компонент собирать качественные изделия. Что для этого надо? Надо ограничить свободу программирования, потому что нужно соблюдать какие-то правила. Правила — это стандарты программирования. И мы тут первый раз переходим от кустарщины к промышленному разговору. Необходимо внедрить производственные стандарты. Это высоко сказано, но какие-то стандартные отношения, потому что стандартизация — это необходимое условие промышленного производства, надежности результата, разделения труда, и отвечает почти на все вопросы, которые хотелось прояснить.
Программные компоненты должны производиться и использоваться в соответствии с определенными стандартами, которые принято называть компонентными моделями. То есть что такое компонент? Компонентная модель — их может быть много разных — отвечает на главный вопрос: что такое компонент и чем он отличается от некомпонента?
Тут я должен заметить (и вы, наверное, уже сами это почувствовали), что некомпонентного программирования не бывает, и весь разговор идет о том, что считать компонентом.
Что такое программирование? Это процесс принуждения более-менее большого количества железа к какой-то полезной деятельности. Это борьба за то, чтобы машина выполнила то, что вы от нее хотите. Но борьба эта не с машиной, а борьба эта с вами, с самим собой, потому что есть тенденция развести безграничное безобразие, и когда вы что-то делаете, вы боретесь с собой. Бороться с железом абсолютно бессмысленно. Вы боретесь со своим недопониманием, неумением и так далее. И вся эта борьба так или иначе связана с компонентностью, если вдуматься.
Если посмотреть на историю вычислительной техники, то меня, например, в университете учили программировать на двух видах вычислительных машин: на аналоговых, которых вы, наверное, уже не увидите, скорее всего, никогда, и уже цифровых. Почему не увидите? Потому что вся аналоговая техника начиная с телефона уже перешла на цифру. Тем не менее, изначально аналоговая вычислительная машина представляла собой набор готовых компонент, и здоровенный ящик с проводами перед ней для того, чтобы соединять эти компоненты между собой, и получать такую функцию только на выходе, или напряжение, которое моделирует постановку задачи, решаемой на этой аналоговой машине. Кроме того, сама цифровая машина сделана из электрических элементов, которые так или иначе аналоговые. То есть некая диалектика.
Слева вы видите сравнительно позднюю аналоговую вычислительную машину, компоненты которой как раз соединены проводами для того, чтобы получилась какая-то желаемая функция, смоделировалась.
А здесь вы видите первую цифровую машину (или одну из самых первых). Я ее когда-то сам сфотографировал в библиотеке Гарвардского университета, называлась она MARK-1. Буква «K» от слова MARK-1 в правом верхнем углу отвалилась. Может быть, сейчас уже приклеили обратно. Вы видите параметры этой машины.
Почему все это важно и почему НАТО за это взялось в первый раз? Потому что вы видите, что это стало развиваться примерно в конце войны, и развиваться это стало не просто так, а потому что надо было бомбу делать, а бомбу надо было моделировать и просчитывать, потому что если бы каждый раз делали натурные испытания бомбы, когда возникал какой-то вопрос, и не применяли бы вычислительную технику для этого, то вполне вероятно, Землю уже раскололи бы пополам давно. Неслучайно Лос-Аламосская национальная лаборатория, которая делала бомбу в Америке, считается одной из основных лабораторий, которая диктовала и диктует всякие суперкомпьютерные, например, оценки. Знаете, 24 ливерморских теста (Ливерморская национальная лаборатория) до сих пор считаются классическими тестами оценки производительности компьютеров.
Как это все происходит? Как правило, обычная программа, к которой вы привыкли, сперва пишется, создается (разрабатывается, отлаживается), а потом исполняется. Поэтому принято различать всегда две стадии, два этапа: статику до выполнения программы и динамику, когда она выполняется, какие возможности она получает и что она делает в динамике.
Как в аппаратуре, так и в программном обеспечении за всю историю идет постепенный переход от статики к динамике. При этом динамика требует новых средств аппаратуры, нового качества, потому что она не дается даром. И, соответственно, при программировании можно различать компоненты, которые используются на этапе разработки в статике, в динамике или и там, и там. И эти различия определяются архитектурой самой вычислительной системы и того базового ПО, которое на этой машине есть. Вы привыкли к тому, что ваша машина уже снабжена всем, чем надо: там есть операционная система, есть это базовое программное обеспечение, или, как сейчас говорят, платформа.
В те времена все это было гораздо сложнее. И этой платформой занималась отрасль программирования, которая называлась «системное программирование». На самом деле системное программирование — это основа программирования вообще. Что это такое? Очень часто приходится объяснять экономистам, что такое системное программирование и чем оно отличается от просто программирования. Я уже сказал, что у нас с этого года открыта базовая кафедра Института системного программирования Российской академии наук под руководством академика Иванникова. Академик Иванников знаменит тем, что он руководил разработкой программной системы, которая управляла стыковкой космических кораблей «Аполлон» и «Союз». Слышали об этом? Наверное, слышали благодаря сигаретам, а тогда это было большое достижение.
Экономисты говорят, что бывает два вида продукции в промышленном производстве. Их называют «Производство группы А» и «Производство группы B». Что относится к группе А? Средства производства, а к группе B — в основном предметы потребления.
Блага, которые предназначены для производства, называются средствами производства или товарами производственного назначения. А то, что непосредственно потребляется — одежда или еда, — это средство, предметы потребления. Бывает так, что один и тот же продукт относится и к средствам производства, и к предметам потребления. Какой-нибудь сахар, когда вы его кладете в чай — это предмет потребления, а когда вы его используете для производства варенья — это средство производства.
Системное программирование — это средство производства средств производства программ. Это в программировании в виртуальном мире промышленность группы А. И это важнейшее дело, потому что от кустарного производства вообще к индустриализации был возможен переход только потому, что, как тогда говорили, происходило опережающее развитие средств производства над предметами потребления. Спроецируем эту мысль на программирование в целом. То, что мы сейчас программируем здесь, — это программирование конечного программного продукта, который потребляется непосредственно пользователем, к сожалению. Вы можете назвать операционную систему, разработанную у нас? Нет? Вы можете назвать язык программирования, разработанный у нас?
— Был.
— Был один, РЕФАЛ назывался. Он был очень теоретический. Рекурсивных функций алгоритмический язык. Он был давно, он не использовался для практического программирования. Я когда-то на семинаре в университете попытался вместе с автором этого языка сложить два целых числа. Мы исписали несколько досок — и не уложились в семинарское время.
Название «системное программирование» происходит от того, что базовое ПО любого компьютера включает операционную систему (обратите внимание на слово «система») и систему программирования отладки (туда входят компиляторы, отладчики и так далее). Это базовое программное обеспечение разрабатывается системными программистами, и оно и составляет средство производства программ. Поскольку у нас с этим делом беда в последнее время, мы можем сказать, что никакого опережающего развития без этого ожидать не приходится. Мы занимаемся производством программ потребления. Это тоже серьезная область. Они стоят бешеных денег, ровно на них зарабатывает Индия, потому что она тоже не делает операционных систем, как вы понимаете. Но невозможно иметь лидирующие позиции на этом рынке, в этой области науки, если нет производства средств производства программ. Это как на заводе. Я вспоминал вначале, что были шесть градаций рабочих профессий. В токарном цеху самый квалифицированный токарь не занимается производством продукции, он резцы затачивает для всех остальных. Самый квалифицированный программист — это системный программист, который делает инструменты для всех других программистов.
Вот у нас кафедра системного программирования Института системного программирования Академии наук с этого сентября появилась, и для начала где-то 15–20 человек с каждого курса там раз в неделю занимаются, слушают лекции и работают. Это попытка. Эта базовая кафедра не только у нас открыта, она открыта в Физтехе и на ВМК МГУ, они там все вместе перемешиваются. И это попытка передать опыт, чтобы не распалась связь времен в этой области, важнейшей области программирования, если мне удалось это донести до вас.
Развитие компонентного программирования вообще зависит от архитектуры железа. Даже на голом железе машинный код, были какие-то содержательные обозначения, как писать программу. Не в нулях и единицах же, эта производительность будет равна нулю. Потом появляется автокод, какие-то содержательные обозначения появляются. Потом появляются какие-то процедурные языки, то есть можно воровать целыми процедурами и считать их компонентами. Это будут компоненты, этапы статистической разработки программ. Берете код и делаете cut and paste. Потом вас лишают премии за это. Появляются какие-то языки высокого уровня, более-менее высокого уровня.
Появился язык C. Почему появился язык C? Где-то на рубеже 1973–1974 годов появился язык C, потому что научились быстро делать железо, быстро делать машины, появилась машина PDP-11 в частности, и к тому времени надоело каждый раз писать операционную систему с нуля для разных архитектур.
Появилась идея переиспользовать код. Это тоже компонентность. Главный смысл компонентности — не делать дважды того же самого. Переиспользовать даже не код, а труд. Язык C появился для того и потому, что ядро операционной системы каждый раз переписывать не захотелось. А захотелось иметь основную часть, написанную на компилируемом на любое железо языке, где надо чуть-чуть вставить Assembler. Это главная побудительная причина появления языка C и ядра операционной системы Unix.
И зимой 1974 года мне так повезло, что я держал бобину с магнитной лентой, которая каким-то образом попала в Курчатовский институт. Обратите внимание, у нас тоже сильные программисты были в институте, занимавшемся вопросами ядерной физики. Это тоже неслучайно. И так мне повезло, что я держал первый компилятор C в руках, потому что в Курчатовском институте собирали команду добровольцев, чтобы ее содрать, эту самую операционную систему Unix, потому что железо уже сдирали. Содранное PDP-11 называлось у нас СМ-3, СМ-4, СМ-5, СМ-6, они соответствовали этой PDP-11. Как выглядела PDP-11 в те времена, вы видите.
Я в то время уже пошел писать диплом на практику в Институт вычислительных комплексов (как он потом стал называться), а до этого он был филиалом Радиотехнического института Академии наук имени Минца, и заведовал этим филиалом Михаил Александрович Карцев. Вы, наверное, не слышали эту фамилию. Вы слышали фамилии Карцев и Ильченко, а имени Михаила Александровича Карцева вы не слышали, потому что это был довольно секретный главный конструктор отечественных суперкомпьютеров (его иногда называли «советский Крэй»). Он — основатель института. Прошел всю войну и возглавил разработку первых советских компьютеров, наиболее мощных по тем временам. Кроме того, он сам мне показывал книжку на китайском языке, которую написали пара его китайских аспирантов (тогда была большая дружба с Китаем), и он фактически являлся автором архитектуры первой китайской вычислительной машины. Сейчас китайцы поставляют суперкомпьютеры в качестве спонсорского взноса в наши университеты куда-нибудь на Урал и так далее. Карцев был автором первой китайской вычислительной машины.
Что было сделано в мои времена в этом институте? Был проект, он был начат в 1967 году, вычислительный комплекс М-9 производительностью 1 млрд операций в секунду (по тем временам). Денег на него не дали, и он постепенно обрезался до машины под названием М-10, которая примерно 10 лет, начиная с конца 1970-х годов, была самой мощной советской вычислительной машиной. Она была параллельной и многопроцессорной, и параллелизм этой машины не превзойден нигде по сей день. Когда эта машина прошла испытания, как раз образовался Институт вычислительных комплексов, который потом к 70-летию Карцева (Карцева уже не было в живых) стал носить его имя. Сейчас он находится недалеко от метро Беляево и уже не является никаким институтом. Там, как во многих теперь бывших закрытых институтах, торгуют мебелью, бог знает чем, — это время прошло.
В те времена в академическом Институте проблем управления под руководством профессора Задыхайло из Института прикладной математики имени Келдыша проходили тараканьи бега, как мы называли. Все отечественные и неотечественные компьютеры, которые были в стране, соревновались на какой-то контрольной задаче, кто быстрее ее посчитает. В качестве единицы измерения, как в попугаях, было время расчета этой задачи на БЭСМ-6. БЭСМ-6 — это 48-разрядная машина, поэтому по правилам нужно было считать не хуже, чем БЭСМ-6, то есть с не меньшей точностью. А эта наша М-10 могла перестраивать формат вычислений на ходу, и можно было считать в 16-разрядной арифметике, в 32-разрядной, в 64-разрядной. Нас заставили считать на 64-разрядной, чтобы было не хуже. И эта машина М-10 выиграла у всех и держала этот рекорд примерно десятилетие.
Вот я вам показываю Радиотехнический институт имени Минца, который до сих пор есть на улице 8 Марта. Весь первый этаж, эти большие стекла, был выставлен, чтобы шкафы от этой машины внести внутрь, потому что никак иначе внести ее туда было невозможно.
Так выглядит НИИ ВК теперь возле метро Беляево (может быть, проезжали, видели), но там уже нет института.
И эта самая М-10 в 1974 году предстала передо мною на первом этаже радиотехнического института как куча голого железа без единой команды внутри. И какое-то количество людей пыталось ее зарядить базовым программным обеспечением, системным программным обеспечением. И я туда попал по распределению, и, конечно, я вам рассказывал, что мое пренебрежение к программированию тогда было известно какое. Меня спросили, когда я пришел в первый раз: «Чем бы вы хотели заниматься?», я сказал: «Чем угодно, только не программированием». И мне сказали так: «У нас сейчас горячая пора, у нас там запарка, сроки. Вы помогите месяца три, а потом мы с вами найдем что-нибудь вкусненькое из математики, прикладной математики и так далее». Я поехал помогать. Вот примерно до сих пор и помогаю.
Вы видите здесь всякие слова о том, что качественная архитектура не имеет себе равных до сих пор, потому что Cray — это был наиболее знаменитый американский аналог. Конечно, элементарная база была лучше у Cray, но по количеству вложенных идей М-10 была богаче.
Тут ведь какая картина? Элементной базы нет, а задачу надо решать по сложности большую и такую же, а может быть, и еще более сложную. Как быть? На пальцах это можно себе представить так.
В Америке берут и строят Empire State Building, потому что у них есть замечательное сталелитейное производство, и 100 с лишним этажей эти балки выдержат. Они занимают мало места по площади и имеют какой-то объем.
У нас места много, кирпичи у нас необожженные, но места много. Мы можем этот Empire State Building положить на бок, объем будет такой же, места будет занимать много, и не требуется никакой особой высоколегированной стали. Если положить на бок, там будет всего этажа четыре. Примерно т