Путь химика в программирование - ч3
От: Pavel Dvorkin Россия  
Дата: 10.02.05 07:41
Оценка: 124 (16) +1
#Имя: FAQ.Learningtofly.PavelDvorkin.part3
Продолжаю.

Наконец, настал счастливый день, когда первая колода перфокарт оттранслировалоась без всяких остановов. Распечатка не содержала ничего, кроме текста моей программы, а на колоде было написано

Останов по чтению. КРА 3123.

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

Оказалось, что и колоду данных я сформировал неправильно. Надо было после каждой перфокарты подложить еще специальную перфокарту "контрольная сумма" (это еще что такое ? , а за ней — 2 чистых перфокарты.
Чтение "Математического обеспечения ВЦ ТГУ" внесло ясность насчет контрольной суммы. Правда, что это такое, я так и не понял, но там было сказано, что можно вместо нее подложить стандартную карту "контрольная сумма с блокировкой останова", которых на ВЦ было очень много

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

Ладно, с контрольной суммой я вроде разобрался. Подложить 2 пустых карты после нее проблемы не составляло, но тут меня уже любопытство взяло — зачем ? Спросил кого-то. Оказывается, это подлое устройство ввода с перфокарт имеет привычку заглатывать после требуемой карты еще 1-2. Инерция у него такая, видите ли. Вот и подкладывают после контрольной суммы еще пару чистых — на тебе, подавись

Подложил я эти чистые перфокарты, положил колоду в ящик, и наутро меня ждал грандиозный успех — программа что-то напечатала, а на колоде не было написано ничего. Впервые.

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

++-0320000000 ++-043400000

и вот таких чисел несколько сот. Это и было то, что она напечатала.

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

Все совпало!!!

Я был на седьмом небе от восторга. Конечно, моей заслуги в том, что программа посчитала правильно, было немного, я ведь ее не составлял, но все же адаптировать ее к машине с памятью в 8 раз меньше, выдержать сражение с эфиопами и прочими блоками и добиться результата — этим можно было гордиться!

Впрочем, это было только начало. Сработала ведь не вся программа, а только ее первая часть. Мне пришлось разбить программу на несколько кусков, теперь предстояло и с остальными кусками сделать то же самое, а потом каким-то образом их объединить.

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

Впрочем, что делать — в принципе я понимал. Внешнюю память использовать надо. Была она в то время двух видов — магнитные ленты и магнитные барабаны. Ну, магнитные ленты — ленты как ленты, похоже на бобину от советских магнитофонов (не кассетных), только раза в 2 больше. А вот магнитные барабаны — это видеть надо было. Этакий агрегат, одному человеку не поднять ни за что, снаружи — кожух, внутри — цилиндр, на боковой поверхности его нанесен магнитный слой, цилиндр вращается и неподвижные головки считывают/записывают информацию. Объем этого барабана в точности равен объему КУБа, т.е. 4096 45-битных ячеек.

(В скобках. Много позже прочитал я один рассказ И.Грековой. Там в некую лабораторию приводят журналиста и показывают ему ЭВМ. Сопровождающий журналиста человек мимоходом произносит фразу "А вот здесь у нас память на магнитных барабанах"

"Память — подумал журналист. На барабанах. С ума сойти можно " )

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

Все бы ничего, но оказалось, что этот проклятый транслятор Альфа умеет использовать только один барабан. Точнее, СП из ИС-22 может писать и на второй барабан, но в руководстве по Альфа сказано, что второй барабан использовать нельзя — на нем, мол, Альфа что-то свое хранит. А одного барабана мне не хватает.

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

И тут меня осенило. Если этот проклятый транслятор хранит что-то свое на втором барабане, значит, надо сделать, чтобы во время работы моей программы этого транслятора и близко не было. Оккупирую я барабаны полностью и транслятору ничего не дам. Правда, у меня нет уверенности, что после этого не перестанет работать эта самая ИС-22 и не выгонят ли меня с позором с ВЦ за дезорганизацию его работы, но выхода другого нет — придется рисковать.

Оттранслировал я все 4 части своей программы и записал их на магнитную ленту. Записал — это слишком громко сказано. Просто в инструкции, прилагаемой к программе, я написал — записать на ленту. Лента была, естественно, коллективного пользования, мне на ней выделили зону, размером в точности в КУБ, и туда мой машинный код (.EXE записали, после чего перфоратор отперфорировал "карту вызова". Вставляешь эту карту, лента начинает крутиться (машина при этом стоит), докручивается до нужной зоны, она считывается в память и начинает выполняться.

Вот так все 4 части я записал на ленту, и , наконец, в один прекрасный день положил в ящик совсем уже тощую колоду, в которой были 4 карты вызова и данные. В инструкции написал "связь между частями организуется через магнитные барабаны, поэтому между вызовами частей барабаны не затирать". Колода попалась на глаза начальнику ВЦ (потом мы с ним познакомились) и он эту фразу вычеркнул — никто эти барабаны никогда и не затирал, но мне откуда было знать ?

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

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

Что же касается самого метода первоначального обучения, как он был у меня — ну что же, это было не так уж плохо. В целом вся эта история не оставила у меня отрицательных воспоминаний, как видно из моего рассказа . Конечно, если бы рядом был кто-то, кто смог бы помочь мне по ходу действия — все могло пройти легче. Но и так — тоже неплохо. Бросить в воду и пусть плывет — может, и не самый лучший способ научиться плавать, но если человек потенциально готов к тому, чтобы плавать — выплывет. А "утонет" — ну что же, тоже не беда, займется чем-то другим. Так думал я лет 15-20 назад. Сейчас, после многих лет работы преподавателем, я уже так не думаю. Люди разные, и кому-то нужна на начальных стадиях поддержка, без нее он не выплывет, а потом уже сможет совершенствоваться сам и, быть может, даже станет чемпионом.

Дальнейшая судьба программы мне неизвестна. На следующий год я уехал в Москву делать дипломную работу, и она была уже по другой тематике (тоже химические расчеты). Потом были годы, в которых было много химии и немного программирования, потом больше программирования и меньше химии, а последние 20 лент — уже никакой химии и только программирование. Добрался я и до той самой БЭСМ-6 и посвятил ей несколько лет, были в моей жизни ЕС и СМ, ДВК и Ямаха, Алгол и Фортран, Паскаль и С/C++, и даже , должен признаться, Бейсик . Но все это уже было по-другому, а описывать все это — недель не хватит. Может, когда-нибудь и решусь еще один кусок мемуаров написать .

With best regards
Pavel Dvorkin
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.