Когда я разбирался с программируемыми калькуляторами, то думал, как бы элегантнее протестировать функциональность устройства. Один из известных способов проверки – это реализация какой-либо игры.
Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.
Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.
❯ Основа программы
В предыдущей своей статье "Калькуляторы с обратной польской нотацией" я делал обзор литературы для программируемых калькуляторов. Среди которой была замечательная книга А.Г. Гайшут "Калькулятор твой помощник и соперник в играх".
В этой книге приводится огромное количество примеров игр на калькуляторе и, в частности, пример игры в крестики-нолики:
Мне не удалось найти описания логики работы этих игр, а автор книги, к сожалению, умер в 2015 году. Попытка искать ответ в публикациях автора, любезно предоставленных на его личном сайте, не увенчалась успехом.
Поэтому придётся разбираться с этой программой самостоятельно. Приведу текст и описание программы из книги под спойлером:
Описание программы Крестики-нолики из книги:
Главная задача – это перенос этого кода с МК-61 на калькулятор HP-32S. Для начала, разберёмся как эта программа работает.
❯ Проверка программы на МК-61
Первое, что я сделал – это перенабрал код из книги в формате, который понимает онлайн-эмулятор МК-61.
Кстати, если интересно, то можно попробовать поиграть в эмуляторе, чтобы понять принцип работы. Для этого копируем код, вставляем в область «Код программы:» и нажимаем кнопку «Ввести в память». Картинка из книжки выше подсказывает нам, что калькулятор даёт координаты, куда ставить "X", а мы ему в ответ передаём координаты, куда ставить "O".
Координаты для игры
Чтобы начать играть на клавиатуре калькулятора, нужно нажать кнопку [С/П]. В ответ будет выведено число, первое число всегда «9» (центр поля). В ответ необходимо ввести свою координату, например, «2» и нажать [С/П]. И так далее, пока вы не проиграете (калькулятор выведет «77», либо будет ничья (калькулятор выведет «0»).
Калькулятор победил
Чтобы посмотреть последний ход калькулятора, надо обменять регистры X и Y местами, для этого нужно нажать на клавишу [⟷].
Проверка показала, что всё прекрасно работает как в эмуляторе, так и на живом калькуляторе, и ошибок в программе нет.
❯ Анализ кода программы для калькулятора МК-61
Для понимания работы программы, я переписал её на python. Конечно, даже при переносе на привычный язык программирования, код будет выглядеть немного диковато, поскольку реализовывался на совершенно иных принципах, но он хотя бы будет читаемым для остальных пользователей.
Особенность программирования МК-61 в том, что он пропускает команду перехода, если условие истинно, и исполняет — если ложно! Поэтому все условия для python пришлось инвертировать. Плюс, я для удобства ввёл дополнительные функции, которые также перенёс впоследствии в HP-32S: функция вывода координат крестиков и ввода ноликов, функция ничья и победа калькулятора:
Первое – инициализирую регистры калькулятора:
После всех подпрограмм идёт головная программа:
Можно увидеть, что в любом случае в самом начале крестик будет стоять на координате 9. Вся основная логика сокрыта в подпрограмме.
Из всего кода я понял, что второй ход калькулятора будет на единицу меньше оппонента, а если ход был в координату «1», то равен восьми. Но вот что делает остальная логика программы, особенно зачем там тригонометрическая функция, для меня осталось загадкой. Буду рад читателям, если кто-то сможет прояснить, как же работает эта программа.
И, да, код вполне себе работоспособен, в чём несложно убедиться:
❯ Перенос кода на HP-32S
Напомню, что калькулятор HP-32S, который есть у меня, принадлежит семейству калькуляторов HP10B/14B/17B/17BII/19BII/20S/21S/22S/27S/28S/32S/32SII/42S, таким образом, всё, что приводится ниже, с небольшими адаптациями можно будет перенести и на другие модели этой серии.
Трудозатраты в предыдущей главе, по переносу кода на python, были проделаны с двумя целями:
Понять, как же работает этот код (увы, не выполнено).
Более удобно переносить на другую модель калькулятора.
Этакая программная блок-схема, которая позволяет понять, какие регистры нужны, какие переходы и прочее.
Вооружившисьдокументацией на калькулятор HP-32S, я переписал программу крестиков-ноликов с питона для него. Для удобства я делал это в таблицах Exel. Как я уже говорил, особенность калькулятора в том, что он маркирует каждую строку буквой и цифрой, а любая метка – это смена буквы. Таблицы идеально подходят для этого.
Ниже под спойлером, приведён код программы. Если вы хоть немного знаете ассемблер и какой-то другой язык программирования, хоть тот же BASIC, то без труда сможете понять, что же там происходит.
Код программы для калькулятора HP-32S:
В силу того, что на калькуляторе HP-32S можно сделать вывод на экран конкретного регистра (с указанием имени регистра), а также запрос ввода другого конкретного регистра, то ввод-вывод становится чуть более интерактивным и интересным.
Лучше один раз увидеть, чем тысячу раз прочитать.
❯ Выводы
Изначально задача казалась мне такой простой, но заняла у меня достаточно приличное время. Её ценность состояла в том, что мне удалось разобраться — как же программировать для калькулятора HP-32S. В результате оказалось, что из модельного ряда калькуляторов, с которыми я занимался — эта версия оказалась самая дружелюбная и удобная.
Другой задачей, которую я хотел решить — это разобраться, каким образом изобретались подобные программы для микрокалькуляторов. Из-за того, что у калькулятора ограничена память программ, производилась какая-то дичайшая оптимизация, поэтому она выглядит так запутанно. Но, к моему сожалению, ни толковой литературы, ни описания, как это делалось, мне не удалось найти.
Поэтому, если у вас, уважаемые читатели, есть идеи о том, как же работает программа крестики-нолики (можно анализировать код python), то я с удовольствием их выслушаю.
Эта захватывающая и познавательная во всех аспектах история от советского программиста-еврея копипастится уже второй десяток лет на разных ресурсах и в авторстве я не уверен. Я ее много лет назад нашел на этом форуме, где запостил ее автор Самуил Любицкий. Является ли он автором и первоисточником или тоже притащил откуда-то, уже разбирайтесь самостоятельно. Для наглядности я добавил немного изображений из интернетов. Из-за ограничения Пикабу в 30к символов придется разбить на 6 постов.
ЭВМ Минск-22
001. Моя первая вычислительная машина
Моя первая машина случилась много раньше первой программы. Нетипично для людей нашего поколения, обычно сводивших знакомство с компьютерами (тогда их называли «ЭВМ») в студенческие годы, осваивая программирование. Причем, многие программы-то писали, сдавали их на счет, получали распечатки с результатами, а саму машину, бывало, и в глаза не видели. У меня сложилось иначе: летом 1966 года, помню, как раз начались каникулы, я – тогда еще мальчишка – пошел работать...
И сразу же отвлекусь в сторону. Живя на Западе, мы привыкли к тому, что подростки работают. В каникулы повсеместно, но и во время занятий – в вечерние часы. Сообразно со своей никакой еще квалификацией: везде, где надо что-то разносить, укладывать, убирать, помогать, стоять за кассой и т.д. Это – норма. В стране победившего социализма, в государстве рабочих и крестьян, где с утра до вечера воспевались радости труда, родители изо всех сил оберегали своих чад от этой самой радости. Причем, речь не об избалованных отпрысках партийно-советского начальства – такие на нашей задымленной, грохочущей привокзальной окраине и не водились, но о детях простых работяг, что населяли облупленные панельные пятиэтажки. Считалось нормой, когда до окончания школы, а фактически – до армии, здоровенные великовозрастные балбесы шлялись по улицам, изнывая от безделья. И если паренек шел работать – это был знак беды. Это означало, что отец-слесарь пьет беспробудно, а мать-уборщица не в состоянии сама поднять троих детей. Так что новость, что де сынок главного инженера стройтреста, по тамошним меркам – богатея, пошел работать, это... Это было воспринято соседями весьма неодобрительно: кто видел здесь свидетельство ненасытной еврейской жадности («даже сына не пожалел, погнал на заработки»), кто – коварный еврейский умысел пропихнуть сынка в ВУЗ, загодя готовя ему привилегированный «рабочий» статус, кто что еще, но какая-то еврейская хитрость обязательно должна была быть. И она таки была!
Отец был в ту пору увлечен идеей «строительства с колес». Это когда все конструкции и материалы, потребные на стройке сегодня и сейчас, именно сегодня и сейчас подвозятся. Ничего необычного, так в нормальных странах и строят. Но вспомним, как выглядела типичная советская стройка (фильм «Операция Ы»: «надо Федя, надо») – огромная территория, заваленная кирпичем и панелями, досками и стеклом, рубероидом, металлом, столяркой... Все это месяцами мокло, ржавело и гнило под открытым небом, буквально взывая к окрестному населению: «ну укради, укради же меня, пусти, наконец, в дело в своем гараже или на даче»... Так вот, отец переманил из Киева молодого, амбициозного кандидата наук и тот возглавил центр комплектации строительства, где установили первую в нашем городе вычислительную машину «Минск-22». Они приятельствовали, частенько встречались в неформальной обстановке – по выходным, на природе, так что я присутствовал и слушал, раскрыв рот. Это было время, когда компьютер казался чем-то фантастическим, а программист в глазах мальчишки недалеко отстоял от мага-волшебника. Только вышел и мгновенно стал сверхпопулярным «Понедельник начинается в субботу». И вот, оказывается, в получасе ходьбы от нашего дома стоит это чудо расчудесное. Понятно, как я туда рвался. Отец же говорил, что не знает, удастся ли мне поступить в институт и получить диплом, но уметь зарабатывать и кормить семью я обязан. А при нынешнем (т.е. тогдашнем) увлечении вычислительными машинами работа где-то рядом с ними может, пожалуй, кормить. Так что он договорится с начальником центра и меня возьмут туда на летние месяцы. Ну, а дальше – как себя проявишь...
И вот я попал в вычислительний центр (ВЦ). Занимались они тем, что сейчас называется логистика. К концу первой смены приходили отчеты за сегодня и заявки на завтра. Их сверяли с календарными планами, утрясали и формировали наряды. На ЭВМ расчитывали загрузку и маршруты автотранспорта и печатали путевые листы. Также печаталась куча репортов и (вот это интересно) эдакий наглядный отчет, который можно отнести к отдаленным предкам современной деловой графики: на барабанном скоростном принтере АЦПУ-128 (совершенно фантастическая по тем временам машина) выпечатывались диаграммы Ганта. Цвета, конечно, не было, но разными «по густоте» символами достигался зрительный эффект градаций серого. Много позже схожая работа оставшихся безымянными программеров-художников привела к появлению целого направления компьютерной живописи. Помните Мону Лизу, Чебурашку или портрет Эйнштейна на «АЦПУшной» распечатке? Вблизи видишь мешанину букв, цифр, точек, звездочек; отодвигаешь лист от себя и... магически проступает картина из филигранно подобранной мозаики знаков. Это ныне утраченное (как византийская мозаика) искусство расцвело в 70-е годы и погибло в 80-е с появлением матричных, а затем – струйных и лазерных принтеров (потом еще и цветных), которые позволяли распечатывать графические изображения (впоследствии – с фотографическим качеством). И все, прогресс технологии убил искусство – банальная история...
Алфавитно-цифровое печатающее устройство
Итак, я стал работать на ВЦ мальчиком-куда-пошлют-подай-принеси и был готов там хоть полы мыть, только бы не изгнали меня в конце лета из обретенного рая. Освоил подготовку перфолент, делал сверку данных (сверхнуднейшая работа). И постепенно стал там своим, пришелся ко двору. Работа на ВЦ кипела во вторую смену, а доделывалась в третью (туда меня, как несовершеннолетнего, не ставили). Причин бросать работу с началом учебы, равно как и переходить в вечернюю школу, не было – я продолжал учиться в дневной. Но... очень быстро отдалился от одноклассников: они оставались детьми, просившими у родителей пятиалтынный на мороженное, а я уже был взрослым – получал аванс и получку. Поначалу меня оформили учеником с окладом в 30 рублей, потом я стал оператором подготовки данных и наконец – оператором ЭВМ. Это уже была карьера! К программированию меня, естественно, не подпускали, там колдовал сам начальник – Игорь Владимирович – с помощниками. Моя обязанность была запускать задачи, т.е. аккуратно вводить перфоленты, сматывать их, укладывать в коробки, туда же прилагать полученные распечатки (широкую алфавитно-цифровую печать АЦПУ-128 берегли, поэтому для всяких отладок использовалась «стрекоталка» – принтер, печатавший только цифры и еще пару значков на узкую ленту, наподобие кассового аппарата). Ну и конечно, для каждого прогона надо было установить магнитные ленты (лентоводов было восемь), причем не напутать, какую в какой, а в конце работы все аккуратнейшим образом снять и разложить по местам...
ЭВМ со считывателем магнитных лент
Магнитные ленты были самой примечательной особенностью машины «Минск-22» (самой эмоционально примечательной) и заслуживают отдельного параграфа. Это были очень толстые, очень неэластичные коричневые ленты шириной в четыре, а то и пять дюймов. Без бобин. Вы представляете себе, без бобин! Как же с ними работать? А вот как. В лентоводе были два кармана, открытых сверху, – как два невероятно глубоких стакана. Надо было ухватить пальцами конец туго смотанной ленты и бросить моток в один карман, затем конец ленты протиснуть между магнитными головками и встромить в другой карман. В процессе движения, а лента использовалась как устройство прямого (!) доступа, она перемещалась между карманами, укладываясь там прихотливыми волнами (передняя стенка кармана была стеклянной и можно было любоваться). А чтобы лента не проскользнула целиком в один из карманов, по концам ее обычным дыроколом делались отверстия. В лентоводе же стояли специальные лампочки и светодатчики, которые должны были (по идее конструктора) стопорить ленту в последний момент. Ну да, как же! Каждые пару часов в одном из лентоводов лента «просклизывала» в карман. Тут-то и начиналась потеха... Как мы знаем из великой русской литературы наш великий народ – великий мастер по преодолению препятствий, им же воздвигнутых. Итак, когда лента «просклизнула», надо прежде всего... успокоиться, привести себя в состояние полной философской отрешенности и созерцательности, ибо дело тебе предстоит долгое, как зимняя рыбалка. Метафора тут неслучайна: надо встать на специальную табуреточку (поскольку верх кармана выше твоих плеч, а руки не должны уставать) и взять в руки «удочку» – специально же изготовленный из сталистой проволоки гибкий двухметровый прут с крючком на конце. Ну... вперед! Запускаем удочку в карман. Помните, на конце ленты есть отверстие, проделанное дыроколом. Вот за это отверстие надо зацепить ленту крючком. Ерунда, говорите? Да только лента, она укладывается в кармане как ей заблагорассудится и вам очень повезло, если конец ее лежит сверху и вы его видите. Обычно же он заныривает куда-то вниз и надо этого прихотливо свернувшегося удавчика осторожно поглаживать-постукивать, чтобы кольца его легли как-то иначе – а вдруг кончик и высунется. И осторожно! На ленте ценнейшая информация – результаты трехчасового счета. Поцарапаешь, повредишь магнитный слой – амбец! А время меж тем тикает, а отчеты надо в трест отсылать... А ты стоишь на табуреточке и удочкой вверх-вниз, дерг-дерг, вверх-вниз, дерг-дерг... Вы представляете, чтó тут высказывалось в адрес несчастного конструктора этого чуда и его родственников по материнской линии? А вот и зря, кстати. Если нервничаешь, никогда не выудишь... Я был непревзойденный удильщик магнитных лент. Жаль искусство это не успело оформиться в вид спорта (ленты сняли с производства), а то завоевывал бы медали высшей пробы. Но и без медалей талант сей немало поспоспешествовал моему карьерному росту...
А между тем Игорь Владимирович начал еще преподавать в пединституте. В нашем ВЦ стали появляться его страждущие ученики со своими курсовыми. И тут я с удивлением обнаружил, что эти старшие (!) на три-четыре года студенты (!!) и, главное, студентки (!!!) обращаются ко мне с искательными улыбками. Что я в их глазах – местный бугор, авторитет, с легкостью щекающий их несчастные задания типа «отсортировать массив чисел, используя»... Та-а-ак! Сопливые одноклассницы были позабыты окончательно. Жизнь удалась!..
ЭВМ Минск-32
А тем временем стали монтировать вторую машину – новейшую, только начался выпуск – «Минск-32». Мне она сразу понравилась. Это был уже настоящий, серьезный мэйнфрейм: шесть нормальных лентоводов (ленты в бобинах, прощайте удочки!), перфокарточный ввод-вывод (по сравнению с перфолентой это колоссальный прогресс, оценить который может только тот, кто хорошенько надолбался с перфолентами). Конечно, скоростной АЦПУ, никаких «стрекоталок». Быстродействие, память 64 килослова (в слове 37 бит) – супер! И самое поразительное – магнитные барабаны (вот забыл, сколько их было штук). В конце 60-х и первой половине 70-х «Минск-32» был самой популярной машиной (вне академической и военной сфер), неприхотливой, на редкость удачной. В ней как будто был угадан тот максимальный уровень сложности, который возможен в массовом (и не военном) изделии советского хайтека. Но... поработать толком на этой симпатичной машине мне так и не довелось. Я заканчивал школу. Надо было пытаться поступать в институт. И поступать как «производственник», брать бумагу с работы, где я числился на «пролетарской» должности. Все это, по идее, должно было как-то ослаблять тяжкое бремя пятой графы...
Почему я так не поступил? Не знаю, по наитию. Я ведь закончил нормальную, не вечернюю школу, чего с «рабочей молодежью» не бывает. Думал, как же буду там доказывать, что я не верблюд? А ведь прицепятся, как пить дать. Да, ну его к лешему, прикинусь обычным школьником. Так и поступил в институт в Киеве, причем, на дневное отделение (чтоб увильнуть от солдатской службы в Советской Армии). И пришлось мне из родного ВЦ увольняться. И оказалась у меня на руках трудовая книжка, о которой в институте никто не знал. Но это уже совсем другая история...
002. Мои первые программы
Итак, проработав несколько лет и привыкнув дважды в месяц получать в кассе хоть небольшие, но деньги (и пусть бóльшую их часть сразу отдавал маме, но делал это по своей воле и чувствовал себя мужчиной), я стал студентом в столичном Киеве и в то же время как бы вернулся в детство. Поселился на раскладном кресле в проходной комнате у бабушки с дедом. Было тесно. Днем для занятий использовался обеденный стол, а на ночь я под столом раскладывал пресловутое кресло и акробатически туда заныривал, так что наружу торчала только голова и плечи. А еще у меня была своя полочка для книг... Ну да ладно, ерунда. Отец каждый месяц передавал деду какую-то сумму на мое пропитание и мне выдавал на мелкие расходы. Вот эта подзабытая уже жизнь на иждивении меня донельзя угнетала. Нужно было искать заработок. Но где? Обычное студенческое хождение на станцию разгружать вагоны было разовым приработком, шальными деньгами, которые тут же в той же компании пропивались. Не для меня. Вообще, уже тогда сформировалось стойкое убеждение, что если есть голова, то руками работать как-то некошерно. Не окупает себя. Это было время расцвета стройотрядов и кому же туда ездить, как ни студентам строительного факультета строительного института. Я не ездил ни разу...
Ну ладно, первый курс. Тяжело на нем потому, что идет дрессировка: научают трудиться тех, кто к этому способен, и отсеивают остальных. Я же был так вышколен на своем ВЦ, что маялся от избытка свободного времени. А для трудоголика нет мучения тяжче... И вот иду как-то мимо кафедры строительной механики и вижу на доске объявление, что дескать приглашаются желающие на факультатив по алгоритмическим языкам и программированию. Со строительной механикой студенты знакомились аж на третьем курсе (те, кто выживал после сопромата). А я – салага-первокурсник. Да ладно, думаю, что я теряю – погонят, так погонят. Постучался, зашел. Сидят немолодые (по моим тогдашним меркам) мужчины лет 25-27-ми. Аспиранты, как потом выяснилось. Я говорю: «так мол и так, хочу заниматься программированием» — «А что ты об этом деле знаешь?» — «Да вообще, немного знаю — отвечаю, — три года оператором ЭВМ проработал».
Тут все головы ко мне повернулись и в глазах вижу явный интерес: «ну-ка, ну-ка расскажи подробно, где, на каких машинах, что умеешь?»
Рассказываю. — «А про БЭСМ-6 слыхал?» — «Вот именно, что слыхал» — «А хочешь?» — «Ха, что за вопрос?» — «Слушай, на кой тебе этот факультатив. Нам тут оператор нужен»...
Компьютерный зал БЭСМ-6
В общем, выясняется, что лаборатория при кафедре арендует машинное время на единственном в Киеве суперкомьютере БЭСМ-6, который стоит в Институте Кибернетики. Понятно, что злобные киберы все дневное время себе забирают, а на ночь, чтоб машиной пользоваться, лаборатория должна выставлять собственного оператора. Ну и кто, не доцент же пойдет. Ясен пень, что аспирант. А они – люди солидные, семейные. Когда дома молодая жена, большой интерес в машинном зале ночи проводить в обнимку с «бармалеем» (это такая кликуха была у карточного перфоратора за утробное урчание, с которым он выплевывал из своего нутра перфокарты). Короче, если согласен, то сегодня в ночь выходим. На месте себя и покажешь. Условия такие: три ночи в неделю (тут они наврали малость – бывало и четыре, и пять, а в авралы – так и все семь, и с вечера пятницы безвылазно по утро понедельника), волонтером без оплаты (тут чистую правду сказали), но зато де – намекнули – перспективы открываются по части аспиратуры там, защиты (ага, у еврея, как же). Я был в восторге и... в ту же ночь начался мой роман с БЭСМ-6, длившийся пять лет – немалый кусок жизни. И если первые мои машины «Минск-22» и «-32» были как полудетские (платонические) влюбленности, то с этой – настоящая, серьезная, взрослая любовь, имевшая вполне ощутимые плоды: я стал профессиональным программистом и заработал кучу денег. Это как же, ведь волонтером работал? А вот так, расскажу. Но сперва – о самой машине.
Думаю, БЭСМ-6 – величайшее достижение советского компьютеростроения, лучшая машина, созданная за 40 лет этого самого -строения (от выпуска МЭСМ в 1951 и до 1991 – завершения советской истории), последний шедевр академика С.А.Лебедева. Кто входил в машинный зал (именно зал – метров 200, не меньше), сразу ощущал – да, это суперкомпьютер! Огромные, уходящие вдаль, теряющиеся в затемненных глубинах зала ряды серых шкафов. Линейка лентоводов, их было штук 16, если не больше, – ленты располагались вертикально друг над другом (уникальный дизайн), так что шкафы были узкие и таких вот узких на беглый взгляд было столько, что крайние сливались, как сливаются лица солдат в шеренге. А за лентоводами в полумраке тяжко гудят магнитные барабаны на массивных чугунных станинах и ты физически ощущаешь их чудовищную энергию (к слову, много позже был свидетелем, как со шпинделя сорвался магнитный диск, который супротив барабана, что велосипед против «харлея»; так вот, этот диск прорвал, будто картонные, три шлакоблоковые перегородки, покрушил по пути шкафы с бумагами, ворвался в бухгалтерию и там наполовину вгрызся в кирпичную стену – счастье, что случилось это в обеденный перерыв и обошлось без жертв)... У входа в зал – устройства ввода-вывода. И сколько же их! Для перфокарт, для перфолент. Два барабанных принтера (АЦПУ) молотят беспрерывно, на глазах тают толстенные пачки белой фальцованной бумаги, складываясь в приемный поддон уже отпечатанными... А посредине – центральный пульт управления: из четырех секций, состыкованных под углом и как бы обнимающих оператора полукругом. На пульте – тысячи мигающих светодиодов, индицирующих состояние ячеек памяти, регистров и т.д. (кстати, эти лампочки были набиты столь плотно, без зазоров, что образовывали гигантский, в несколько квадратных метров, экран – как на стадионе – и на этом экране, загоняя в соответствующие ячейки нужные значения, умельцы выводили движущиеся картинки: вот вино льется из бутылки, наполняя бокал, потом из бокала в рот или вот лунный модуль отделяется от корабля и садится на Луну; если не ошибаюсь, первые интерактивные игры были сделаны именно с визуализацией на центральном пульте БЭСМ-6 – еще одна забытая страничка компьютерной истории).
Барабан АЦПУ
До сих пор помню, какое невероятное впечатление производило одновременное бешеное вращение магнитных лент и непрерывная печать – наглядная демонстрация работы многозадачной операционной системы разделения времени с пакетным планировщиком заданий и спулером печати (прошу прощения у непрограммистов, – наглядная демонстрация чисто конкретной крутизны). На прежних машинах достичь такого эффекта было невозможно, там ты сам пошагово инициировал работу машины, которая ощущалась именно машиной, от тебя зависящей. Кстати, современные десктопы и лаптопы, при всех их наворотах, занимаются ведь тем, что по-всякому реагируют на клавиатуру и мышку, т.е. по сути – исполняют приказы человека. К тому же они маленькие. А современные сервера в датацентрах доступны только специалистам, да и нет в них уже ничего такого массивно-вращающегося. Выходит, впечатление тогдашнее – не воспроизводимо. Кто сам не видал, пусть поверит на слово: это ощущение отдельной от тебя чудовищной мощи, какого-то зверя, живущего своей жизнью. И вот ты должен его обуздать, навязать ему свою волю, направить его энергию туда, куда тебе (а не ему) надобно. Это пьянящее ощущение власти делало работу с суперкомпьютером неодолимо притягательной, как наркотик...
Конфигурация машины постоянно наращивалась. Поначалу памяти было 32 килослова (по 48 бит), потом ее учетверили. Где-то, кажется, в 1970 году появилась ОС «Диспак» и к машине подключили дисплеи Videoton – маленькие такие, аккуратненькие, показывали всего 16 строк текста. Всего?! Это была подлинная революция в общении с компьютером – программист сидел за экраном, правил программу, не сходя с места отправлял на отладку-счет и на экране же видел результаты... Вообще, машина была на удивление современная. Судите сами: виртуальная память страничной организации со своппингом на барабаны, мультизадачность, защита памяти, конвейеризация... Ну все, все, остановился с техническими подробностями...
Итак, я стал работать ночным оператором на БЭСМ-6. Вечером заходил в лабораторию и забирал задания: колоды перфокарт и ленты. Моя задача была в том, чтобы как можно оптимальнее спакетировать эти задания: совместить, к примеру, долгий расчет с серией коротких отладочных прогонов, приняв во внимание кому сколько потребно лентоводов. Планированием пакетов занимался и сам компьютер, но с человеком ему не совладать: из нормативных восьми часов счета я неизменно «натирал» не меньше полутора в свое личное, безраздельное пользование. Такой себе многотонный персональный компьютер получался. И вот это «свое» время я тратил на освоение программирования. А даже если б и не хотел осваивать – пришлось бы. Аспиранты давали программы на отладку и говорили: «ну, ты там глянь, чего-куда, если что не так». Действительно, ошибся человек в пробивке карты, не ту букву ввел или там запятую пропустил. Формально я должен был распечатку с опечаткой забрать и утром страдальцу вернуть – все, его проблемы. Но что я, не могу тут же подправить и целые сутки (до следующей ночи) человеку сэкономить? И иметь, как результат, с ним хорошие отношения? Понятно, как я поступал – старался помочь, как мог. А чтобы мочь – штудировал ФОРТРАН, первый мой язык программирования. В ту пору еще и книжек по нему не было, мне вручили самодельный том с отвратительно «отрэмленной» (помните этот советский ксерокс?) инструкцией по CERN-FORTRAN. Чуть позже появилась книжка Мак-Кракена и Дорна «Численные методы и программирование на ФОРТРАНе». В коричневом переплете. Она до сих пор со мной – сорок лет. Всего-то. Конечно, давно ее уже не читаю, но берегу как память...
Первая программа, которую не писал, но дописывал, был популярный в то время «наборщик» (программное имя «CONSUM»). Это была программа форматирования текстов, набираемых на перфокартах. Первая позиция карты резервировалась для управляющего символа. Осталось в памяти: ‘I’ – начать абзац, ‘C’ – центрировать строку, ну и так далее. Уже в те годы программа интенсивно использовалась для подготовки разных руководств и инструкций. Хотя на тогдашних принтерах был только один регистр (прописных) букв и тексты получались не шибко красивыми, но зато не было в машинных залах удушающего гэбистского контроля за подготовкой и (в особенности) копированием документов. Ведь самый невинный технический текст размножить без санкции «товарища майора» можно было только подпольно, за бутылку и с определенным риском. А на компьютере – печатай себе, кто тебя проверит. (К слову: вот ведь что интересно. Знали, знали ведь гэбнюки, что народ в машинных залах на принтерах не только инструкции по программам, но и Высоцкого, и Стругацких, и Мандельштама с Ахматовой, и – страшно вымолвить – Солженицына печатает. Знали! А ничего, вот ничегошеньки поделать с этим не могли. Странно. С машбюро, с РЭМами, со светокопировками – без проблем: железная дверь и марш за разрешением в первый отдел. А с компьютерами как? Железную дверь поставить, шмонать на выходе? Лейтенанта рядом с каждым принтером посадить? Вроде и можно, а вот – хрен! Где-то читал, что именно компьютер (и особенно – персональный) похоронил Советский Союз. Что-то в этом есть)... Так вот, сперва заказали мне встромить в наборщик переносы слов по правилам русской грамматики, каковой алгоритм имелся, но написанный на АЛГОЛе. Справился. Потом добавил туда полноценную подсистему табличного форматирования, обрамление страниц рамками (по стандарту ЕСКД) и наконец – режим двухпроходной печати на листе по две страницы и с двух сторон так, чтобы после фальцовки-разрезания получалась книжечка...
После «наборщика» ученичество мое кончилось. Я получил для изучения опять же самодельную, отпечатанную на машинке, со вписанными от руки формулами, книгу Зенкевича «Метод конечных элементов» (изумительная по простоте, доступности изложения книга!), которую надлежало проштудировать и включиться в основную работу лаборатории. Проштудировал, что очень помогло в учебе: фатальный для многих, зловещий «Сопромат» Беляева читался после Зенкевича без особых проблем. И в основную работу включился, честно писал свои кусочки для разрабатываемой в лаборатории большой системы прочностного анализа. Честно, но... без фанатизма. Во-первых, понимал, что «хоть гопки пляши», а в аспирантуру меня не пропустят. А во-вторых, протопталась к тому времени тропинка, чтоб деньги зарабатывать. И немалые деньги.
Почти весь первый курс я проучился, будучи единственным евреем на потоке. Как вдруг появился (по переводу) соплеменник. Мы сразу друг друга заметили и подружились. Он был старше меня, закончил техникум, поработал в Киеве в проектных конторах, поступил (киевлянин) в институт в другом городе и вот – перевелся, наконец, домой (обычная история). Намеревался он немедля начинать работать. Стипендия ему (как и мне) хотя бы и при круглых пятерках не полагалась – у нас в институте она назначалась не по успеваемости, а по «социальной справедливости»: детям рабочих и селян – да, детям инженеров и прочих интеллигентов – фиг. Впрочем, хоть бы и была – как на нее прожить взрослому парню? И мне уже мое иждивенчество в печенках сидело. Тут мы сразу пришли к согласию. Вопрос, где? А там, где он раньше работал, в расчетном отделе считать колонны, фундаменты, фермы, подкрановые балки. Работа эта сдельная, оплата от числа «форматок» (листов, заполненных формализованной записью последовательности расчета). Вычисления, естественно, делаются на арифмометре или на клавишной вычислительной машинке – это был тогда в большинстве киевских проектных контор самый передовой рубеж, cutting edge, последний писк моды. (Какие там компьютеры? На весь город – десяток наберется). Ага-а-а! В голове у меня начал вырисовываться бизнес-план... Проблема только, как устраиваться на работу. У него-то, у товарища, есть родственница домохозяйка, которая, чтобы стаж ей тикал, готова свою книжку положить, а вот как тебе? Да без проблем – у меня дома лежит собственная трудовая! Немая сцена...
Тут надобно бы пояснить молодым читателям, что все мы в совчине были государственными рабами. Когда приходил человек на первую свою работу, на него заводилась трудовая книжка, где в дальнейшем фиксировались все места его службы, должности, квалификация, награды и взыскания – все! Хранилась она в отделе кадров. При увольнении выдавалась на руки, при поступлении на новую работы – изымалась снова. И так – пожизненно, до выхода на пенсию. Что до студентов, то кто поступал в институт, успев поработать, тот сдавал трудовую в канцелярию и получал ее по окончанию учебы. Наличие-отсутствие книжки у студента тщательно фиксировалось и об этом затем сообщалось в отдел кадров предприятия, куда он «распределялся». Таким образом, без трудовой поступить на работу можно было только один раз в жизни – в самый первый раз. Завести себе две книжки было практически невозможно. А я вот, на тебе – взял, да завел. То есть, покамест припрятал, утаил свою и вовсю использовал, пока учился. А как закончил институт, на «законном основании» получил вторую. Но об этом позже. Осталось объяснить, к чему все ухищрения. А к тому, что если ты хочешь подрабатывать где-то, принеси с первой работы справку, что дескать знают и не возражают. Однако, инженерам и на таких условиях «совместительство» было запрещено. Студенту дневного курса – сторожем можно, а расчетчиком – фиг. Заботилась о нас родина, чтоб ненароком лишнюю копейку не заработали. Точнее, копейку-то ладно, а рубль – низззя! Потому что ей не просто рабы были нужны, а нищие рабы...
Ну вот, устроились мы оба расчетчиками со сдельной оплатой и вскоре заделались героями-стахановцами. Считали больше и качественнее всех остальных. А работала наша маленькая фирма вот как: мой товарищ ведал контактами с клиентом, набирал заказы. Он же, лучше меня разбираясь в строительной механике и имея опыт расчетов, делал постановки задач, четко описывал алгоритмы. Я же тихонечко их программировал, а потом прогонял на своем персональном суперкомпьютере БЭСМ-6. Программы эти были странноватые: они имитировали ручной счет, т.е. выводили на печать все промежуточные результаты, как если бы считал человек. Только человек – опытный расчетчик – пыхтел дня три, а я вводил исходные цифры и шел вынимать из принтера распечатку – на круг три минуты. Оставалось переписать с распечатки на форматки и получить деньги. Впрочем, со временем в фирме появились две симпатичные сотрудницы, которые аккуратно переписывали все округлым девичьим почерком, т.е. каждый занимался своим делом. Фирма процветала – деньги в кармане всегда были и студенческие годы прошли вкусно... А что потом? Товарищ мой как-то уверовал, что нас оставят в аспирантуре (при наших-то «заслугах», рекомендациях кафедры, дипломах всесоюзных студенческих научных сборищ). И когда этого не случилось – сильно осерчал и свалил в Штаты. Мне свалить не удалось, так как загребли на военную службу, где без всякой моей вины наградили первой степени допуском (что хуже, чем сифилисом). Пришлось мне, по возвращении, выстраивать бизнес заново – на двух моих трудовых книжках и совсем с другими компьютерами. Начиналась эпоха ЕС ЭВМ. Но это уже совсем другая история...
Как развивалось программирование в СССР? Какую роль в этом сыграл Андрей Петрович Ершов? Когда и где выпускалось первое поколение советских программистов? Что такое проекты «Альфа» и «Бета»? Когда в отечественных школах стали вводить информатику?
Об этом рассказывает Ирина Крайнева, доктор исторических наук, ведущий научный сотрудник Лаборатории информационных систем Института систем информатики им. А. П. Ершова Сибирского отделения РАН.
Ролик создан при поддержке Ассоциации волонтёрских центров в рамках Международной премии МЫВМЕСТЕ.
Prolog – язык логического программирования. Япония, экономический рост в 1970-х был просто впечатляющийся, вдруг тогда объявила, что в ближайшем десятилетии Пролог будет основным языком программирования и притом он - язык искусственного интеллекта. Японцы носились с Прологом как с писаной торбой. И тут, чтобы не отстать и поверив японцам, начали клепать под этот язык все кому не лень. Даже сам изучал Turbo Prolog, но так и не понял, в чём фишка, чтобы говорить так пафосно как японцы. Другие Пролог-компиляторы и интерпретаторы были не лучше. В СССР тогда тоже верили в это «светлое будущее», этим занимались в том числе в нескольких наших серьёзных НИИ.
Потом рост Японии превратился в его стагнацию (так называемое "потерянное поколение") и интерес к Прологу постепенно угас. Кстати, некоторые японцы до сих пор носятся (они же не привыкли отступать!) с Прологом, но даже среди адептов он уже не «язык будущего»
Такую задачу поставил Little.Bit пикабушникам. И на его призыв откликнулись PILOTMISHA, MorGott и Lei Radna. Поэтому теперь вы знаете, как сделать игру, скрафтить косплей, написать историю и посадить самолет. А если еще не знаете, то смотрите и учитесь.
Все знали про программистскую деятельность Сергея Алексеевича [а он был руководителем проекта] , а [Лев Николаевич] Королев все время спрашивал: «Сергей Алексеевич, когда же вы сделаете ошибку в программе?»
На что Лебедев отвечал: «Это вы, программисты, делаете ошибки, а потом до ушей радуетесь, что их находите, а я пишу программы тщательно, и ошибок не будет».
Лев Николаевич заметил: «Сергей Алексеевич, этого не может быть, потому что не может быть никогда».
И наконец, это случилось — Лебедев сделал ошибку!
На программе с подготовленными им исправлениями он написал ставшую потом знаменитой фразу «Лев Николаевич оказался прав. Программ без ошибок не бывает.
Записка Сергея Алексеевича Лебедева
Лев Николаевич оказался прав. Программ без ошибок не бывает. Ошибка в константе №01471 она должна быть 20 0 00000 00 0 00000 (нормализованая «1» с минимальным порядком) вместо 00 0 00000 00 0 00200 (минимальный порядок с «1» в младшем разряде мантиссы). Эта константа служит для определения перехода по «0» См. Вычитаясь из «0», она должна дать отрицательный результат, при прежнем же значении константы вследсдвие нормализации результата получался машинный ноль, т.е. положительный результат. В остальном как будто все верно.
Просьба исправить константу, отпечатать колодные данные и повторить расчет.
Лев Николаевич Королёв (06.09.1926 — 05.01.2016)
Сергей Алексеевич Лебедев (02.11.1902 — 03.07.1972)