1965 (germanych) wrote,
1965
germanych

Как я научился программировать. Часть 2.



Итак, я поступил в Московский экономико-статистический институт (МЭСИ). Приятным бонусом стало то, что в 1983 году, когда это свершилось, было введёно в эксплуатацию новое здание МЭСИ, которая располагалось совсем недалеко от моего дома. Если в МИИВТ мне приходилось ехать час через всю Москву, то сейчас я мог дойти до института даже пешком. Что с удовольствием делал даже зимой в мороз.

Посвящение в студенты состоялось где-то за городом. Всех первокурсников собрали на одном из вокзалов, погрузили в электричку и высадили на станции, название которой уже давно улетучилось из моей головы. Потом мы шли через лес к какой-то поляне. Где и состоялось мероприятие. Было всё в общем обычном стиле студенческих капустников. Заправлял всем действом Царь Супервизор (а может быть и Транслятор – точно я уже не помню его «имя», но что-то в этом роде). Когда мы интересовались у старшекурсников, а что вообще обозначает это странное слово, они загадочно улыбались и отвечали: «Скоро всё сами узнаете». Что там происходило тоже уже как-то не сильно помню. Запомнился только мой однокурсник размалёванный под русского купца Шура Барышев (подпольная кличка – Барыш), который подарил Царю Супервизору (а может и Транслятору) бутылку портвейна или типа того. Остальные отделывались разными номерами самодеятельности. Я бренчал на гитаре, что, как позднее выяснилось, .вызвало приступы сарказма у другого однокурсника – Ильи Авдонина (подпольная кличка – Авдон).

Ну а дальше понеслись студенческие будни.


Не знаю какое бы впечатление на меня произвела студенческая жизнь, поступи я сразу, но после года работы лаборантом быть студентом мне страшно понравилось. Не надо ничего пилить, ездить в порт за всякой непонятностью, бегать по заданию завлаба на судоремонтный завод, чтобы там своровать что-нибудь для нужд лаборатории. Да и вообще – простор. Сегодня в когда-то новом здании МЭСИ разными помещениями заполнен кажется каждый квадратный сантиметр полезной площади. Отчего присутствует ощущение какой-то сдавленности. В 1983 году (да и ещё много лет спустя) в здании существовал огромный просторный холл (сейчас там всякие помещения). На каждом этаже были просторные светлые рекреации, которые сегодня, понятно, все переделаны в кабинеты, отчего коридоры стали полутёмными и унылыми. Ну в общем раньше в МЭСИ царствовал простор и свет, а сейчас теснота и полумрак. Ну это общее, так сказать, ощущение.

Тут, пожалуй, сделаю небольшое теоретическое разъяснение. Поскольку дальше речь пойдёт о программировании, то надо хотя бы в общих чертах объяснить что это такое для тех, кто возможно ничего кроме самого термина не слышал. Ну а те, кто это знают, могут спокойно пропустить весь теоретический кусок.

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

Сердцем любого компьютера (кстати, название ЭВМ в сущности более точное, чем просто – вычислитель/компьютер) является процессор (для персональных компьютеров – микропроцессор). А в свою очередь сердцем любого процессора является АЛУ – арифеметико-логическое устройство. Вот это самое АЛУ и перемалывает всю информацию, которую программист решит обработать. Кстати, информация в приемлемом для обработки виде называется данными. То есть в сущности суть процесса программирования заключается в том, что надо взять какие-то данные и каким-то образом их обработать, получив некий результат. Результат может быть самым разнообразным – это может быть колонка цифр на бумаге, а может быть такая же колонка на дисплее, это может быть некий звук, или картинка на том же экране, или даже быстро сменяющие друг друга картинки, рождающие ощущение движения. Из чего плавно вытекает понятие входных и выходных данных. И можно уточнить, что программирование это есть процесс получение из входных данных выходных путём обработки в процессоре или, в конечном итоге – в его АЛУ.

АЛУ в сущности «не умеет» ничего, кроме выполнения сложения, нескольких логических элементарных операций и ещё нескольких не очень понятных свежему человеку операций сдвига разрядов. Вся его магическая сила заключается в том, что делает оно это чертовски быстро. Даже АЛУ самого первого микропроцессора iNtel 4004 могло выполнять за секунду сотни тысяч элементарных операций. А АЛУ современного микропроцессора Intel i7 может за секунду выполнить миллиард и более элементарных операций, причём только на одном ядре. А ведь есть ещё и второе, и третье и четвёртое ядра (то есть второе, третье и четвёртое АЛУ со всеми положенными прибамбасами), которые тоже в эту секунду без дела как правило могут не сидеть. В итоге у вас будет рождаться ощущение того, что компьютер и в самом деле дьявольски умён, хотя загляни вы поглубже и замедли темп, то умерли бы от тоски – настолько это всё однообразно и не интересно.

А как же АЛУ и вообще процессор знает, какую операцию надо выполнить? Элементарно, Ватсон. Все операции имеют уникальные двоичные коды, которые называются машинными, ошибиться просто невозможно. Так вот компьютерная программа – это и есть последовательность кодов операций процессора и ещё некоторые дополнительные операции, призванные помогать выполнять основную обработку. Выполнение начинается путём загрузки этой последовательности (программы) в память. После чего в микропроцессор посылается код самой первый операции программы и понеслась.

В принципе можно писать программу прямо в машинных кодах. Самые первые программисты для самых первых электронно-вычислительных мастодонтов именно так и поступали. Но в те стародавние времена, о которых даже моё поколение знает только по легендам, сами программы были относительно небольшими, состоящими из сотни-другой операций. Но даже и несколько сотен машинных двоичных кодов записать без ошибок – это надо сильную нервную систему иметь. И моё вам почтеньице, если кто-то отважится таким образом написать программу хотя бы в тысячу операций. Хотя конечно среди программистов и ходит шутка, что мол настоящий программист должен уметь писать программу сразу в машинном коде, но она потому и шутка, что это возможно только для очень-очень-очень малюсенькой программки-лилипута.

Усложнение программ привело к идее, что надо бы дать программисту что-то более надёжное и понятное, чем жуткая последовательно единиц и нулей. Так возник первый язык программирования – ассемблер. Ассемблер это та же самая последовательность элементарных машинных операций, но уже записанная в виде языковых конструкций, называемых операторами языка. Программисту куда понятнее работать с ассемблером, чем с машинными кодами. Например, чтобы переслать откуда-то куда-то число, в ассемблере есть операция MOV, а чтобы сложить числа – ADD и т.д. В общем куда понятнее. Однако если ассемблер облегчил понимание программы и, как результат, выявление сделанных в ней ошибок, то в плане общей трудоёмкости он процесс программирования не очень облегчил. К тому же ассемблер называется машиноориентированным языком, что в переводе с тарабарского обозначает – язык, зависящий от архитектуры конкретного компьютера. Невозможно написать программу на ассемблере, не зная архитектуру ЭВМ, на которой предполагается выполнять эту программу. То есть надо изучать как устроен данный процессор, как адресуется память и много ещё чего. Причём при переходе на другую платформу, надо заново вдаваться в детали её архитектуры. Ну и общее количество операторов ассемблера на одну программу тоже вызывает священный трепет.

Чтобы сделать жизнь программиста получше, добрые люди в итоге изобрели языки программирования высокого уровня (ЯВУ). Первым таким языком стал язык для перевода формул – FORmula TRANslator или попросту – ФОРТРАН. Ну а дальше понеслось и поехало. ЯВУ стали плодиться как грибы после дождя. Любой ЯВУ хорош тем, что программисту уже не требуется досконально знать архитектуру того или иного компьютера. Кроме того, ЯВУ освобождает программиста от необходимости писать всякие второстепенные однотипные рутинные операции. Таким образом вся задача программиста на ЯВУ – это правильно описать структуру данных и алгоритмы, которые эти данные будут обрабатывать. Об остальном можно сильно не париться.

Ну а позднее, когда с одной стороны программы сильно усложнились (знаете, редактор изображений или даже видео, тем более компьютерная стратегия – это очень непростые программы), а с другой стороны пришло понимание, что главным в программировании является правильное представление данных, а не алгоритмы как таковые (тем более что большинство алгоритмов давно типизированы), появилось т.н. объектно-ориентированное программирование, которое ещё больше оторвало программиста от архитектуры компьютера и дало ему в руки такой инструмент, что сегодня даже начинающий программист может на коленке сварганить небольшую игрушку или простой редактор текста, изображений, да хоть и видео.

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

Я не понимал ни бельмеса. Я не пропускал лекций и честно пытался записывать объяснения таких святил, как профессор Неслуховский, но всё равно ничего не понимал. Тем более что тогда нам не просто объясняли принципиальную схему ЭВМ, а ещё заставляли вникать в подробности всяких там вентилей и прочих тому подобных элементарных узлов, из которых строятся все остальные элементы. Впрочем, не понимал не я один. А Неслуховского боялись, как огня. Однажды мой приятель по группе Шура Качанов, чтобы так сказать подлизаться (да простят мне такое выражение) к Неслуховскому, решил заранее подготовить и задать Неслуховскому какой-нибудь страшно умный вопрос. Когда он на лекции поднял руку и задал свой страшно умный вопрос, реакция Неслуховского оказалась несколько иной. «А почему вы это спрашиваете? – злобно нахмурился тощий, как Кащей Бессмертный профессор Неслуховский, – мы ведь это уже проходили и даже семинар был. Вы чем вообще на лекциях занимаетесь? А ну как покажите свои конспекты!» Так Шура попал в чёрный список студентов, которых на зачёте будут пытать с особым пристрастием.

Сегодня я вижу изящество ассемблера и иногда, в качестве логической игрушки, для самого себя могу писать какие-нибудь программки на ассемблере. А в то время, когда на зачёте мне совали под нос огромный листинг и предлагалось не то чтобы пояснить что делает та или иная процедура, а хотя бы объяснить что делает та или иная команда и куда попадёт точка выполнения программы после какого-нибудь там очередного JNE, я впадал в ступор. С таким же успехом мне под нос можно было положить свиток с китайскими иероглифами. Не лучше дело обстояло и с архитектурой ЭВМ. Я категорически был не готов объяснить принципы работы какого-нибудь вентиля.

Основы программирования были полегче. По крайней мере там не давали ассемблер. Но говоря по правде, по моему скромному мнению, язык высокого уровня PL/1, на котором нас учили, был не на много понятнее. В вольном переводе PL/1 обозначает что-то вроде – першая программна мова. Ну или типа того. И я её категорически на разумел. А нас довольно скоро погнали на машины. Другие бы на моём месте только радовались – настоящая работа на настоящей ЭВМ! – а я ничего так не боялся, как сдавать свои программы на прогон.

Программа на PL/1 выглядит примерно вот как-то так (первые три строки, кстати, это не комментарии, как могут подумать современные программисты, а команды на специальном языке выполнения заданий для машин ЕС):

//PR1 JOB MSGLEVEL=(2,0)
// EXEC PL1LFCLG
//PL1L.SYSYIN DD *
PR1: PORC OPTIONS (VFIN);
DCL FD FILE STREAM ENV (F=80);
DCL 1 D,
2 TN PIC’(5)9’;
2 FIO CHAR(30)
. . . .
DCL FLAG BIT(1);
. . . . .
ON ENDFILE(SYSYIN)
FLAG =1’B’;
OPEN FILE (FD) OUTPUT;
DO WHILE (FLAG=’0’B);
GET FILE(SYSSIN) EDIT(PP) (A(80));
. . . .

ну и т.д.

Я смотрел, как мои однокурсницы пишут на доске всю эту белиберду, а потом ещё вписывают её же в листки задания – и благоговел перед всем этим шаманизмом. Я добросовестно пытался копировать обрывки этих тайных шифров и сдавал их на выполнение. Результат был всегда один – «Job no trans», что в переводе с машинного означало примерно следующее – «Долго думал перед тем, как эту хуйню посылать на выполнение?». А нам задавали писать программы всяких там преобразований матриц и нахождения минимумов и максимумов и всё такое прочее. Я только глупо улыбался такому полёту головокружительной фантазии.

Но каким-то неведомым чудом мне удалось сдать зимнюю сессию, а затем и летнюю. Правда прошло не то чтобы совсем без запинки. На втором семестре меня с Авдоном сняли с дистанции как раз за «Архитектуру ЭВМ» и мы многократно приходили её пересдавать. Помню в тот июнь 1984 года в Москве была страшенная жара. А мы вдвоём каждый день собирались друг у друга дома и штудировали учебник «Устройство ЭВМ IBM 360/370». И была у нас одна заветная мечта. Мы решили, что если всё же сдадим Архитектуру ЭВМ, то купим 3-литровую банку виноградного сока и выпьем её без остатка. Сока? Да. Сока. В самом деле. Мы мечтали не напиться портвейна или водки, на худой конец пива, а купить 3 литра сока. Самому сейчас не очень верится. Однако так было. И сок мы купили. Потому что всё-таки сдали. Чудо? Чудо.

Впрочем, это вовсе не означает, что мы никогда не напивались других напитков. Но сейчас не об этом. Хотя если рассказать именно об этом… Нет, пожалуй всё же удержусь. Хотя соблазн так велик. И это будет куда интереснее, чем скучный рассказ про программирование. Но всё же – нет. Нет.

В июле почти всех юношей с нашего курса забрали в армию. Я как-то проскочил было. И даже осенью поехал на картошку. И даже… ох, это снова не та тема. Когда я в октябре вернулся с картошки, то дома меня ждала повестка. Прибыв в РКВ я получил суровую отповедь – мол что это я уклоняюсь и не являюсь. Не хочу ли я попасть под всю строгость закона? Я не желал. Поэтому экспромтом вызвал у себя признаки гипертонии, как учил меня пришедший на 2-й курс бывший танкист Гена. Способ был великолепен и я убыл на целый месяц на обследование в районную больницу. В которой был помещён в палату, в которой кроме меня лежало ещё около десятка престарелых жителей Страны Советов. Жители и днём-то не шибко способствовали повышению радости, а ночью превращали бытие в пытку. Когда одновременно храпят полдюжина стариков – это испытание для очень сильного характера. Я с позором испытания не выдержал. И начал каждый вечер убегать домой. А возвращаться утром перед ежедневным обходом. В итоге я так обнаглел, что ушёл на пару дней – аккурат на ноябрьские праздники.

Когда я вернулся, моя лечащая врач, которая наверное с первого же дня поняла, что из меня такой же гипертоник, как из Промокашки – скрипач, вызывала меня в ординаторскую и испуганно округлив глаза, сказала мне: «Что же ты наделал? Теперь мы тебя должны выписать и послать соответствующую бумагу в РВК». «Всего и делов-то?» – легкомысленно подумал я. И был сильно не прав. В 1984 году был страшный недобор и во многих институтах, включая МЭСИ, сняли бронь. Аккурат ровно 31 год тому назад, на полуватных ногах я кое-как вынырнул из подъезда родного РВК, держа в руках повестку, в которой почти русским по почит белому значилось – «25-го с вещами». Если честно, то количество ярких красок вокруг моментально сильно поубавилось. В родном институте, где на военной кафедре я уже с интересом начал изучать боевые порядки моторизованного батальона армий НАТО, меня взбодрили не сильно. Одна однокурсница, так прямо нелицеприятно сказа мне в лицо – «а почему мой парень должен служить, а ты не должен?». А и в самом деле? Ну надо, так надо. Чтобы однокурснице не было обидно. И в соответствующее время, после ужасного мероприятия под названием «проводы в армию», я убыл для прохождения.

Сперва я – о чудо! – попал в учебный полк РТВ ПВО в городе Елец. Сейчас этой части уже нет. Увы. Служил я в роте, в которой готовились специалисты по обслуживанию… ну не суть важно по обслуживанию чего. Но я попал во взвод, где ковались кадры для кабины ЭВМ. То есть учился я в институте по специальности АСУ, а в армии в учебке я получил воинскую специальность «механик АСУ». Что было весьма неожиданно. Работа моя заключалась в обслуживании специализированных военных ЭВМ, у которых не было ни дисплеев, ни клавиатур. Точь-в-точь, как в ЭВМ в моей лаборатории в МИИВТе. Офицеры любили подбадривать нас, что в случае ядерной атаки у нашей кабины есть целых три наряда. Первый наряд сидит десять минут или сколько получится. Потом гибнет в страшных мучениях от радиации и заступает второй наряд. Который тоже гибнет через какое-то время, но возможно уже не в таких страшных мучениях. Зато третий наряд конечно тоже погибнет, но в принципе если его не убьют сразу прямым попаданием обычной ракеты, то умрёт он от той же радиации лишь спустя какое-то время. И почти без мучений. Что бодрило. Оставляло простор для мечтаний о третьем наряде в случае начала войны.

После учебки мне довелось попасть в батальон РТВ недалеко от китайской границы (нет, ну не в 100 метрах конечно, но для истребителя всего пара минут лёту). Несмотря на то, что в батальоне стояла техника, к управлению которой нас готовили, боевые дежурства проходили по старинке. Правда несколько раз я всё же заступил на дежурство именно как механик АСУ и в случае объявления тревог как полагалось всё включал, но в целом это было бессмысленно. Это к слову о мощи нашей армии. В нашем батальоне имелся современный комплекс обработки радиолокационной информации с применением ЭВМ, но он там был, что называется, для модели. Армия ему – по крайней мере в нашем батальоне – применения не нашла. Зато нашли дембеля. Оказывается, если сделать из плексигласа модель взлетающего истребителя, а условно взлётно-посадочную полосу по бокам обрамить цветными колпачками из под лампочек на передней панели ЭВМ, то это выглядит очень круто. Кто и когда ввёл моду на такие дембельские модельки я не знаю. Но в итоге обе ЭВМ нашего комплекса остались без этих цветных – белых, зелёных, красных – колпачков. Я так скажу, корсары прошлых веков, которые на африканском побережье меняли стеклянные бусы на золотой песок, сильно дешевили. Им надо было поставлять цветные колпачки от лампочек в ЭВМ жителям солнечного Таджикистана. Навар был бы значительно большим – я уверен. А дембелями в ту пору, когда меня занесло в этот батальон, были преимущественно выходцы из Таджикистана. В итоге комбат однажды издал приказ, что никто не уйдёт на дембель, пока все цветные колпачки от лампочек не вернутся на своё место. Это подействовало. Колпачки вернулись. ЭВМ снова замигала как новогодняя ёлка. Но толку от этого всё равно не было никакого.

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

Наша батальон, да наверное и вся бригада и группировка ПВО в целом, работала по китайскому военному аэродрому Цицикар. Как только там поднимался в воздух хотя бы один самолёт и направлялся в сторону советской границы, сразу врубали боевую тревогу. С одной стороны чисто психологически это настраивало на особый лад. Потому что одно дело учебная тревога, а совсем другое – боевая. С другой стороны – постоянно бегать на КП по тревоге тоже не самое то, о чём мечтаешь в детстве. Тем более что в случае боевой тревоги надо было тащить на КП автоматы на весь наряд, который там сидит. До сих пор не понимаю, почему бы не заступать на боевое дежурство сразу с личным оружием? Но нет, его надо было туда нести только по тревоге. Помню как-то раз по тревоге мне на одну руку нанизали пять автоматов и на другую столько же и я это всё потащил на КП, которое находилось примерно в километре от казарм. Чтобы срезать дорогу – ибо было очень тяжело – я свернул с грунтовки в степь и сразу же пожалел об этом. Из жухлой травы поднялась толпа гнуса – такой мелкой мошкары – и налетела на все открытые участки моего тела. Укус комара по сравнению с укусом гнуса – это просто детский лепет. А автоматы, бросить, чтобы отбиться от наседающего гнуса, я не мог, потому что потом не сумел бы все десять автоматов снова нанизать на руки. Так и топал дальше, весь облепленный гнусом. Самое приятно, что пока я топал, тревогу отменили.

Позднее меня перевели в учебный центр бригады под Читой и со своей боевой техникой я уже дела не имел.

Но как бы то ни было, а в ноябре 1986 года я демобилизовался и оказался в городе-герое Москва. Во всяком случае именно так сообщили пассажирам самолёта Ту-154, в котором я приближался к аэропорту Домодедово, на ближних подступах к столице нашей Родины. И знаете, мало что меня взбодрило за предшествующие этому моменту 730 дней, как это короткое сообщение. Несмотря даже на то, что я всё ещё продолжал пребывать в сапогах.

Впрочем, я ведь начал про то, как научился программировать. Но об этом придётся поговорить в следующий раз. Спасибо за внимание.
Tags: По волнам моей памяти
Subscribe
promo germanych август 22, 01:07 145
Buy for 100 tokens
На фото: кадр из фильма «Что такое Совок?» Итак, свершилось. Наконец я домонтировал его. И приглашаю в кинозал на просмотр фильма-размышления « Что такое Совок?» Это мой первый опыт такого масштабного видеопроекта. Так это и первый опыт использования…
  • 74 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
  • 74 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →

Comments for this post were locked by the author