Преподаватель, принимая РГР, долго хвалил Сергея и ставил его в пример остальным, а когда увидел еще и вторую программу подбора коэффициентов, чуть было не расчувствовался и сказал, что Сергей очень далеко пойдет по стезе программирования.
Оказалось, что преподаватель как в воду глядел. Сергей всегда был ленив по натуре и предпочитал, чтобы его работу выполняли другие, так что с программированием они друг друга нашли: достаточно было написать несколько строчек кода, после чего компьютер, пыхтя, за несколько секунд решал сложнейшую задачу, избавив Сергея от многих часов возни с калькулятором. Сергею это нравилось. Компьютеру вроде тоже. Да и начальник вычислительного центра, куда Сергей ходил каждый день, убедившись в том, что парень действительно пишет какие-то программы, а не пытается распечатать на АЦПУ «Сказку о Тройке» Стругацких или «Николая Николаевича» Алешковского, дал Сергею неограниченное машинное время, что в те времена было большой редкостью.
После этого учеба в институте у Сергея резко вырулила фактически на пятерки. Во всех технических дисциплинах программирование использовалось очень активно, и преподаватели, ни один из которых программировать не умел, к Сергею относились с величайшим почтением. А на занятиях по марксистско-ленинской философии Сергей сидел на задней парте и тихо писал очередную программу: ему нравилось отлаживать код так, чтобы после запуска интерпретатор не находил ни единой ошибки, – в этом был его программерский кураж.
Правда, на пятом курсе Сергей пришел к выводу, что Basic, который вообще-то создавался как язык для обучения хорошему стилю программирования, этот стиль портит совершенно кошмарнейшим образом, после чего перешел на изучение Turbo Pascal, который тогда можно было найти только на первых персоналках. Однако на его институтские успехи это не повлияло, несмотря на то что Сергей совершенно забросил вычислительный центр: он уже прочно приобрел репутацию программерского гуру и преподаватели ставили пятерки даже за распечатки программ расчета биоритмов, которые Сергей нагло выдавал за решение очередной задачи.
В «ящике» на «Аэропорте», где ему предстояло делать диплом, программировали на языке Modula 2, который представлял собой улучшенный и расширенный Pascal. Впрочем, незадолго до этого там использовали тот же Basic, а внедрение Modula 2 шло с большим трудом. Сергею после Turbo Pascal на освоение Modula 2 потребовалось два-три часа, и в отделе на него смотрели с квадратными глазами, когда он в конце первого дня работы начал объяснять ведущему программисту некоторые особенности операторов Modula 2 для работы с матрицами.
Для диплома ему дали очень серьезную задачу – расчет какого-то уравнения с заранее заданными параметрами из «фильтра „Калмана“». «Это, – внушительно сказал начальник отдела, – нужно будет запрограммировать. – На языке Modula 2», – добавил он для ясности. Впереди было четыре месяца напряженного труда, и Сергей решил, что успеет.
Сначала он расписал решение уравнения обычным алгебраическим образом. Получилась какая-то ерунда – уравнение решалось в десять строчек. Он понес показать листок начальнику, тот посмотрел и сказал, что все нормально – уравнение именно так и решается. Но вся суть в том, пояснил начальник, что это нужно запрограммировать. И тут Сергей понял, что в «ящике» к такой несложной в общем-то вещи, как программирование, относятся с еще большим пиететом, нежели в институте.
Он сел за стол и за пятнадцать минут набросал код программы. Получилось строчек двадцать. На одном листочке. Как это можно было считать дипломом, Сергей не знал: на его взгляд, задача никак не тянула даже на обычную институтскую расчетку. Он взял листочек и снова пошел к начальнику. Показал. Начальник, для которого код на Modula 2 выглядел как стихотворение на языке зулусов, слегка рассердился и объяснил Сергею, что тот больше не должен подходить советоваться по каждому промежуточному этапу. Задачу нужно запрограммировать, еще раз пояснил начальник. А это означает, что программа должна быть написана, внесена в машину (начальник имел в виду местный компьютер, располагающийся в вычислительном центре), отлажена, в результате ее работы должно быть получено правильное решение, после чего текст программы нужно распечатать, решение нужно распечатать, а если удастся получить какие-то графики – это уже будет просто на пятерку, хотя графики получить не удастся, потому что местный компьютер графики строить не умеет. Но графики, любезно пояснил начальник, можно нарисовать от руки. Карандашом. Или фломастером. Так что если вопросов нет, сказал начальник, – иди! Работай!
Сергей, не будучи дураком, все понял. Никому не хотелось серьезно отрываться от питья чая и разыгрывания продовольственных заказов. Навязали студента на их голову – ну что ж, надо его озадачить. Вот тебе, сынок, озадача, и чтобы месяца четыре ты никого сам не озадачивал. Вопросы задавать можно. Но не чаще раза в месяц. А еще лучше – не чаще раза в два месяца. И не в момент разыгрывания заказов. И не в момент, когда дамы отдела примеряют очередной комбидрес, так что всех мужиков, включая начальника отдела, отправляют на полчасика покурить. Причем вопросы, сынок, должны быть такие, чтобы на них мгновенно мог ответить любой работник отдела. Так что не надо лезть со своими «фильтрами „Калмана“», операторами Modula 2 и прочей дрянью. Спроси, есть ли жизнь на Марсе, или поинтересуйся методикой разыгрывания заказов – вот это действительно интересно.
Ну и заодно ему сказали, что ближайшие три-четыре недели Сергею придется отлаживать свою гениальную программу на бумаге, потому что на вычислительном центре сразу машинное время не дадут: тут тебе, сынок, не институт, так что нужно записываться задолго.
Чтобы как следует привыкнуть ко всем этим интереснейшим вводным, Сергей, никому ничего не сказав, отправился в Сочи. Аж на три недели.
Обычно он туда ездил летом и совершенно не представлял, что в Сочи творится глубокой осенью. Но оказалось, что конец октября – самое прекрасное время! Ни одного отдыхающего, кристально прозрачное чистейшее море, шикарный морской запах йода и водорослей, демонически «вкусный» воздух – особенно после московского смога, – поспевающая хурма, спелый виноград «Изабелла», тонны молодого вина и на удивление благодушно настроенные местные жители. Впрочем, благодушие местных жителей имело под собой четкое обоснование: сезон, который начинался с мая и заканчивался в сентябре, прошел, деньги получены, отдыхающие – их в Сочи презрительно называли «здыхами» – свалили, так что теперь можно пить-гулять до следующего сезона.
Сергей без труда снял шикарную комнату за какие-то копейки и провел чуть ли не лучшие три недели в своей жизни: он бесконечно гулял по пустынной набережной, обедал в кабачках, попивая молодое вино, дышал свежим воздухом, придумывал новый язык программирования и новый механизм организации файлов на жестком диске, размышлял о своих непростых взаимоотношениях с очередной подругой, а также просто мечтал о том о сем. Вообще, он был человек достаточно компанейский, но за все три недели одиночества Сергей так и не заскучал. Наоборот, дни почему-то проходили очень быстро, несмотря на то что он, в общем-то, практически ничем не занимался. И когда пришло время возвращаться в Москву, Сергей даже начал жалеть, что непроизвольный отпуск закончился так скоро, хотя, отправляясь в Сочи, он думал, что один там не выдержит и недели.
В Москву он явился загоревший почти дочерна, но в отделе, где Сергей нагло заявил, что три недели проболел, ему ничего не сказали. Видимо, там не принято было лезть человеку в душу: раз загорел во время болезни, значит, такая болезнь удачная попалась. Ему только напомнили о том, что для работы над дипломом осталось чуть больше трех месяцев, а это очень и очень мало, так что давайте-ка, молодой человек, отправляйтесь завтра в машинный зал – вам там на неделю выделили времени по два часа в день.
Машинный зал «ящика» на «Аэропорте» мало чем отличатся от институтского машинного зала: та же «СМ-4», стойки с перематывающимися бобинами магнитной ленты, здоровенное печатающее устройство, перерабатывающее непрерывный поток широкой перфорированной бумаги, терминалы с монохромными мониторами.
Машинный зал был довольно большой, терминалов на десять, но там, как ни странно, практически никого не было, за исключением парня лет тридцати типично «ботанической» наружности: засаленные польские джинсы, купленные лет пять назад, рубашка с подозрительными пятнами на груди, имеющими то ли пищевое, то ли алкогольное происхождение, длинные спутанные волосы, поповская козлиная бородка, а также почти обязательные в то время очки в допотопной роговой оправе, стекла которых последний раз протирали еще в прошлую пятилетку. Губы парня были плотно сжаты и слегка искривлены, что придавало лицу презрительное выражение. Рядом с парнем стояла здоровенная фаянсовая кружка с чаем, которую явно не мыли пару лет.
На появление Сергея парень вообще никак не отреагировал, продолжая шлепать пальцами по клавиатуре, которая непонятно зачем была разрисована фломастерами.
– Привет, – сказал Сергей. – У меня тут машинное время.
Парень нервно дернул головой, но на приветственные слова ничего не ответил, продолжая бряцать клавишами, и тихонько бормотал что-то ругательное – видимо, относящееся к происходящему на экране.
– Але, – громко сказал Сергей, – на борту! Тут вообще жизнь есть какая-нибудь или нет? Или мне за любой терминал садиться?
Тут парень наконец-то соизволил оторваться от клавиатуры и уставился тусклым взглядом на Сергея.
– Садиться здесь можно только туда, куда я укажу, – заявил парень каким-то скрипучим и очень противным голосом. – Я тут – начальник машины.
– Поздравляю, – сказал Сергей. – Тогда укажи, куда можно сесть. И я сяду, – объяснил он, стараясь говорить очень короткими и односложными фразами. – Кстати, – сказал он, показывая пальцем на кружку, которая внутреннюю белизну давно поменяла на нечто темно-коричневое, – а ты вообще в курсе, что человечество уже изобрело соду?
Парень на вопрос о соде никак не отреагировал и начал задумчиво ковырять пальцем в волосах. Видимо, он никак не мог решить вопрос, за какой из девяти свободных терминалов можно посадить этого нахального неофита.
– А что делать-то будешь? – наконец спросил он Сергея.
– Диплом программировать, – объяснил тот. – Жутко сложное уравнение. Строк на десять.
– Я тебе программу писать не буду, – объяснил парень. – У меня времени нет – работы по горло. Ну то есть, если что, могу и написать, но сам понимаешь, работа серьезная, требует всякого… – он замялся, – сопровождения и так далее. Программировать – это тебе не бидоны возить. Тут башка знаешь как соображать должна? Обычный человек…
– Не надо мне ничего писать, – прервал его Сергей. – Программу я написал, надо просто вбить код, прогнать через интерпретатор, получить результаты и распечатать код вместе с результатами.
– Дай посмотреть, – требовательно сказал парень, протягивая руку за текстом программы.
Сергей молча протянул листок с написанным кодом.
– Только должен тебя огорчить, – торжествующе сказал парень, не заглядывая в бумагу. – У нас тут не какой-то вшивый Basic. У нас тут Modula 2. Так что все надо переписывать.
Сергей промолчал.
Парень, подхихикивая, поднес листок к глазам. Посмотрел на код и поскучнел.
– А, – сказал он вяло, – у тебя уже на Modula? Ну, садись тогда, – и парень махнул рукой на ближайший к нему терминал.
Сергей устроился за клавиатурой, положил рядом текст программы и начал вбивать код. После того как все было перенесено, он запустил интерпретатор, и тот тут же выдал ошибку в самой первой строчке программы. Сергей нахмурился. Там точно не было никакой ошибки. Но он на всякий случай попробовал то так, то сяк изменить написание – пробел вставить, «оператор» написать маленькими буквами – мало ли что. Но это не помогало, интерпретатор упорно выдавал ошибку. Пришлось обращаться за помощью к парню, хотя Сергею это делать совершенно не хотелось.
Парень, поправив очки, посмотрел код на экране, торжествующе улыбнулся и сказал:
– Ну так ты «операторы» неправильно пишешь!
– Как это неправильно? – удивился Сергей. – Что там неправильного?
– Ну так у тебя написано CONST, VAR, PROCEDURE, BEGIN, WRITELN и так далее, – так же торжествующе сказал парень, – а так нельзя!
– Вообще-то, Никлаус Вирт, разработчик этого языка, – заметил Сергей, – считает, что именно так эти «операторы» и должны писаться. Впрочем, конечно, может, он ошибается, тогда ты его поправь.
– Чтобы можно было выводить русский текст, – объяснил парень, – нужно эти «операторы» писать по-русски. И переменные все по-русски. Вообще не должно быть никаких латинских символов – тогда интерпретатор не будет ругаться. Пиши КОНСТ, ВАР, ПРОЦЕДУРЕ, БЕГИН, ВРИТЕЛН.
– Ты что, серьезно? – потрясенно спросил Сергей.
Парень сделал гордое выражение на лице.
– Ну так учись, – сказал он. – Что бы ты без меня делал!
– А какой мудак, – все так же потрясенно спросил Сергей, – сотворил такой интерпретатор? Что, нельзя было подключить обе половины кодовой таблицы и при обработке русского просто переключаться на вторую половину? Там же русский только для текстовых переменных нужен. На черта такой геморрой с языком устраивать?
Парень скривился.
– Это я вообще-то отлаживал интерпретатор, – заявил он. – Только благодаря мне теперь по-русски можно что-то выводить. Если ты такой умный, делай свой.
– Вот тут извиняй, – сказал Сергей, – у меня в этом заведении другие задачи. Ты уж как-нибудь сам. Но я тебе, старичок, на будущее рекомендую все-таки не искать легких путей, которые на самом деле очень тяжелые. Это же надо было так интерпретатор изуродовать…
– Во-во, явился умник, – пробурчал парень, вставая из-за своего терминала. – Если ты такой умный, – сказал он, – тогда сам тут и колупайся. Мне идти пора.
– Удачи, – сказал Сергей, надеясь, что дальше он сам как-нибудь разберется.