К книге
Ретро бит [5]Глава 18
67%
Глава 18
18

Переиначивая знаменитую поговорку: “Реши проблему насилием один раз – будешь свободен от нее один день. Научись решать проблемы насилием регулярно – освободишься через десять лет и хорошо, если без конфискации имущества и штрафов”.

Это я к тому, что мне совсем-совсем не нравится бить людей. Даже плохих и тех, что сами нарываются. Совсем недалеко на парковке стояла машина Тодда. Красный форд-мустанг с белой полосой – само торжество брутальности. Я не очень разбираюсь, но, скорее всего, начала семидесятых модель, жрущая бензин, как не в себя. Ну что за бабосо! Эта без дураков красивая тачка – настоящее разорение. Даже моя Эль-Камино и то экономичнее, хотя ей далеко до Селики и тем более погибшей в огне Короллы.

Запомнил номера перед тем, как уехать. С “парикмахером” надо что-то решать. Я, в общем-то, имею полное право подать на него заявление в полицию, но дальше что? Бренда наверняка вся в слезах начнет умолять не ломать парню жизнь, а я или прогнусь, что само по себе ошибка, или останусь у перспективной сотрудницы как “козёл, отправивший за решетку невиновного”. И у меня даже резинового утенка на приборной панели нет, чтобы посоветоваться.

Нормальные пендехостанцы в такой ситуации звонят своему адвокату. Я доехал до полюбившейся пиццерии, воспользовался их таксофоном и набрал номер Лео и Глории. Длинные гудки, никого нет дома. Не повезло.

Но не настолько же я тарадо, чтобы самому решение не принять. А потому позвонил другому человеку. Опять расходы! Мистеру Артуру Шену, частному детективу из Сан-Франциско, я задолжал и имел полное право мелочно тянуть с выплатой долга еще полгодика. Теперь же, чтобы обратиться к нему за помощью, придется сначала заплатить. Так-то не последние деньги, но пендехо в обуви на диван залез, это достойно наказания!

Несмотря на уколы жадности, нашел в записной книжке номер и позвонил. Ну хоть звонок не очень дорогой. Беркли – это почти Сан-Франциско и тарификация здесь ненапряжная.

– Мистер Шен, здравствуйте, это Кристобаль Колон, я хотел бы расплатиться по долгу перед вами, – сказал я, когда частный сыщик ответил.

– Выписывай чек и отправляй по почте, продиктую адрес. Лично в Лос-Анджелесе я не скоро покажусь, терпеть не могу ваш город, – без большого энтузиазма отозвался детектив.

– Вы как будто не рады тому, что заберете свои… напомните мне сумму.

– Семьсот пятьдесят, – не обманул, столько я ему задолжал.

– Вообще-то вы сможете получить даже больше. Семьсот пятьдесят я отдам при личной встрече, хоть бы и прямо сейчас, если назовете место, куда приехать. Я в данный момент в Беркли. И у меня имеется для вас работа.

В тягостном вздохе с той стороны трубки жадность смешалась с другими чувствами. Вот сейчас обидно было. Как будто я настолько плохой работодатель.

– Я приеду в Беркли, так получится быстрее всего, – решил Артур. И, пожалуй, я ему немного благодарен за то, что не придется мотаться по незнакомому мегаполису.

О встрече мы сговорились в приятной кафешке на севере города, специализирующейся на итальянской кухне. Истинный храм пастафарианства, так как тут обещали “свежую пасту”. Домашняя лапша ручной работы, приготовленная поваром здесь и сейчас, начиная от стадии теста, оказалась шикарной. Нужно будет узнать у Линды, умеет ли она так. Или Селесте подсказать, что Макаронному Монстру сие угодно. Ну, вкусно же. Я успел умять тарелку прежде, чем явился собеседник и настало время сорить деньгами. Еще и за обед для нас обоих заплатил, как принимающая сторона.

– Спасибо. Если со всей честностью, то не ждал этих денег никогда. У нас знакомство не задалось.

– Очень зря, Артур. Я честный человек. И вот моя для вас работа. Есть один негодяй, избивающий свою невесту и бросающийся на других людей с кулаками. Нужно раскопать его правонарушения и слить полиции. Никаких подстав, только настоящие грехи. Я уверен, он так и так замарался, больно уж неприятный и неуравновешенный тип. Моё имя звучать нигде не должно, его невесты, по возможности, тоже. Я попросту опасаюсь, что ублюдок ее убьёт. У меня есть его имя, Тодд, номер машины и полные контактные данные девушки, она работает на меня.

Азиат задумался, а затем кивнул.

– Заниматься подобными домашними тиранами – привычная рутина. Могу заодно интрижки на стороне у него поискать. Статистика показывает, что они в порядке вещей. На других людей – это на тебя?

– Да. Я не хотел влезать, пока он не припер меня к машине.

– Не проще самому на него в полицию заявить?

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

– Тогда прежняя ставка, 30 долларов в час. Аванс в двести баксов, и, возможно, его и хватит. Парень наверняка не самый умный, раз распускает руки. Надеюсь, он не держит бойцовских собак.

Стыдно ли мне за то, что поступаю так неблагородно, да еще и чужими руками? Ни капли! Ни о чем не жалею. Тодд ответит за свои же преступления. Оставайся он честным тружеником – повода для ареста не возникло бы. Ну а Бренде Линда кого-нибудь найдет. Художника с курса изучения искусства, например. Нет, лучше музыканта, тот мне нужнее.

Выписал, в общем, второй чек. И еще тарелку макарошек заказал. Эти итальянцы знают в них толк.

Сегодня же у меня состоялась новая встреча с аспирантом Сэмом – опять вечернее занятие. И Бренда на него подъехала, на метро трамвае БАРТ. Вот чего я такой невнимательный идиот-то? Про фичу, что машина влияет на скорость передвижения персонажа симулятора студента подумал, а факт того, что наша джун перемещается на общественном транспорте, только к середине ее стажировки заприметил. Ну не бабосо ли? Но наличие или отсутствие машины – это уже точно личное дело Бренды. Разве что пусть комнату у Монти и Селесты снимет, здорово на транспорте сэкономит.

– Как успехи? – спросил у девушки и получил рассказ, наполненный бухгалтерскими терминами.

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

– Послушай, к какому решению я пришла. У каждого действия всегда есть две стороны и они должны уравновешивать друг друга. Например, если студент сидит за учебой, его параметр знаний растет. Но ровно на эту же “стоимость” нужно что-то списать – свободное время, энергию, состояние здоровья, настроение.

Первый закон термодинамики в чистом виде. И это крутой подход! Я чуточку представляю, как работает бухгалтерия – и в ее сторону дорога кодерских приключений заводила. Полагаю, “заднице Одина” все же однажды быть. Лет через десять или даже раньше. Все, что для нее нужно – хорошая СУБД, и простой скриптовый язык. Даже бейсик сойдет. Но, может быть, я уже нежно любимые мной за простоту Питон или Джаваскрипт изобрету.

Про встречу с Тоддом промолчал. Нефиг всякой ерундой от важного отвлекать. А язык Си – это ведь важно? Наверное, да. Он и для написания трехмерных движков отлично подойдет, так как работает быстро. Почти все культовые шутеры из 90-х – Вольфенштейн, Дум 2, Квейк, Халф-Лайф – это Си. Ну, кое-где еще и Си-Плюс-Плюс, но уже не суть. Одно вытекает из другого.

Итак, первый практикум. Аспирант Сэм мне приветливо кивнул. Бренду проигнорировал, но хотя бы заявлений в духе “курица не птица, женщина не программист” делать не стал.

Нас усадили за компьютеры, а точнее, терминалы, дающие доступ к мощному по нынешним временам PDP-11. На вид обычные моноблоки, похожие на TRS-80 третьей модели, но на самом деле это вообще не полноценные машины, а мониторы с клавиатурой. Вся магия творится за перегородкой из толстого стекла, где расположилась допотопная серверная размером со спортзал. Компьютеры – шкафы. Жесткие диски габаритами со стиральную машинку, толстые пучки кабелей, что-то подпаивающие ремонтники в белых халатах. Подозреваю, могли бы обойтись и без стекла, но нарочно оставили юзверям обзор, чтобы прониклись величием и богатством университета. Не бывай я пару раз в продвинутых дата-центрах, тоже, наверное, впечатлился бы.

Гарланд прошелся и раздал каждому листочки с логинами и паролями. Я оказался Си-Си-1965. То есть инициалы и год рождения.

– Предполагается, что все вы владеете минимальными навыками работы с операционной системой. Если у кого-то будут затруднения, позовите, помочь вам моя работа, – посмотрел парень при этом на Бренду, – надеюсь, что все вы хорошо слушали мою лекцию. Сегодняшнее практическое занятие максимально простое: вам нужно написать программу для копирования массива данных с одного имеющегося адреса на другой. Однако…

Сэм подошел к имеющейся в классе грифельной доске и написал “1.5 секунды”. Еще и обвёл в несколько кружочков, показывая важность.

– Вот ваша цель. Попробуйте оптимизировать свой код так, чтобы уложиться в поставленные временные рамки. Это сложнее, чем вам кажется и справятся не все.

Казалось бы, ничего сложного. Выдернуть данные из памяти по указанному адресу, перебрать циклом и положить в новые ячейки, оперируя указателями. Решается в один проход. Ну и еще добавить замер времени исполнения и его вывод. Где тут можно накосячить?

И в чем тут вообще принято писать? Какой текстовый редактор? Vi, Emacs? Глянув на руки соседа по терминалу, убедился, что минималистичный Vi. Ну и хорошо. Здорово было бы еще его исходники дернуть, как и более навороченного Емакса.

Написал, наверное, первым. Чуть дым из-под клавиатуры не пошел от моей скорости набора. Но важна-то не она, а время выполнения программы.

2.2 секунды. Ох, Семён Семёныч, не просто так ты нам “элементарную” задачу поручил. Неподалеку чертыхнулся еще один студент, скорее всего, получивший тот же или похожий результат. И как тут оптимизировать?

– Мистер Гарланд, я могу использовать ассемблер? – спросил один из соучеников, парень с длинными, как у рокера, волосами, стянутыми в хвост.

– Это было бы неспортивно. Не все тут изучали машинный язык PDP-11. Но это возможный выход. При использовании ассемблера вы бы получили порядка 1.2 секунды.

И как? Что-то такое на краю сознания зудело. Основные потери времени здесь не в копировании байтов памяти, а на самом цикле. А как быстрее? Убрать накладные расходы на обслуживание цикла можно через goto! Но чувствую, меня за его применение расстреляют на месте без суда и следствия.

“Не использовать метки и переходы по ним” – одна из первых заповедей программиста. Я бы сам всех собак на джуна спустил, примени он настолько грязное решение. Хотя в данном случае оно смотрелось бы не так и плохо.

Если goto – это выход, то надо, чтобы работало как с ним, но без него. Закрыл глаза и погрузился в недра воспоминаний. Решение продолжало напрашиваться, но никак не рождалось.

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

– Да это невозможно! – воскликнул парень позади меня.

– Профессор Гарланд, а можете вы показать своё решение? – обратился еще один.

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

Да что же они все так орут! Еще и дышат громко! И сердцами стучат. Или это у меня самого тахикардия началась?

Время занятия шло, я мысленно готовился к провалу, а решение все не вспоминалось. Чтобы успокоиться надел наушники, нажал на кнопку плеера и снова прикрыл глаза. Заиграли мексиканские трубы и меня окутал волшебный баритон Джонни Кэша.

Я провалился в огненное кольцо и буду падать, падать, падать… Гори, гори, гори...

Провалился! Ай, карамба! Вспомнил! Переход по веткам конструкции выбора switch-case компилятор Си преобразовывает в машинный код, аналогичный goto. Но за использование кейза никто предателем заветов дедушек Кнута и Вирта меня не назовёт. Спасибо вам, мистер Кэш. Ваша музыка здорово прочищает мозги. Я на ваш концерт схожу, чтобы свой респект высказать.

В приступе кодерского вдохновения я положил руки на клавиатуру и родил выносящий мозг нормальному человеку код. Уродца с циклом while, вложенным в switch и начинающемся в первом ветвлении, а заканчивающимся после последнего. Восемь веток, немного копипаста и готово. Я восхитителен.

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

– Это не будет работать. Компилятор выкинет тебе ошибку, – сказал мне подглядевший через плечо аспирант Гарланд.

Точь-в-точь мои мысли, когда доцент написал на доске странную конструкцию с огромным количеством фигурных скобочек, за которыми попробуй уследи. Эх… где там моя IDE c подсветкой. На мощном университетском серваке отлично крутилась бы. Моник, правда, монохромный, с зеленым люминофором.

– Спорим, что заработает, профессор? – я еще раз окинул код взглядом и не нашел в нашем с пиксаровцем уродце явного изъяна. Мы просто сокращаем накладные расходы на цикл… ну, не в восемь раз, но очень сильно. Можно и еще несколько ветвлений добавить, добить до 10 или 16. Больше, скорее всего, лишено смысла.

– Заключать пари со студентами непрофессионально.

– На шоколадку, сэр. Это мелочь.

Уместнее было бы на пиво, по-“одмински”. Но от одной мысли всего передернуло и в ногу кольнуло. Психосоматика – она такая.

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

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

Не бережет он свой кошелек. И не верит в то, что кто-то из студентов добьется результата.

Переходим в командный режим vi, :wq – сохранить файл и выйти. Запускаем компиляцию, супермощный компьютер справился с преобразованием программы в машинные коды непривычно быстро – всего за две-три секунды. Офигеть, хочу! Где такие продают? Мой 5150 провозился бы секунд 20, и то благодаря старине Корвусу. С дискетами совсем печальная картина прогнозируется.

Не слишком ли я самоуверен? Что, если компилятор Си из 1982-го обрабатывает кейзы как-то по-другому? Я даже не помню, в каком году пиксаровец придумал свой хак. Где-то в середине восьмидесятых, кажется. Но это не точно.

Скомпилилось, уже хорошо. Теперь запускаем. На секунду с небольшим я дыхание затаил. И… 1.35. У меня вскоре от шоколадок что-нибудь слипнется! А ну и ладно, одногруппников угощу. Они высокомерные задницы, но отношения налаживать надо, кое-кого я и нанял бы.

– Как? – спросил сосед сзади.

– Очень изобретательно, мистер Колон, – похвалил Сэм Гарланд. – По-своему изящно, – лихорадочная работа мысли прямо читалась в том, как по лбу молодого препода складки гуляли. – Я объясню всем желающим смысл решения после занятия, у вас есть еще пять минут, чтобы добиться успеха.

Предыдущая главаГлава 18 из 27Следующая глава