Ретро бит 5 (СИ). Страница 35
О встрече мы сговорились в приятной кафешке на севере города, специализирующейся на итальянской кухне. Истинный храм пастафарианства, так как тут обещали «свежую пасту». Домашняя лапша ручной работы, приготовленная поваром здесь и сейчас, начиная от стадии теста, оказалась шикарной. Нужно будет узнать у Линды, умеет ли она так. Или Селесте подсказать, что Макаронному Монстру сие угодно. Ну, вкусно же. Я успел умять тарелку прежде, чем явился собеседник и настало время сорить деньгами. Еще и за обед для нас обоих заплатил, как принимающая сторона.
— Спасибо. Если со всей честностью, то не ждал этих денег никогда. У нас знакомство не задалось.
— Очень зря, Артур. Я честный человек. И вот моя для вас работа. Есть один негодяй, избивающий свою невесту и бросающийся на других людей с кулаками. Нужно раскопать его правонарушения и слить полиции. Никаких подстав, только настоящие грехи. Я уверен, он так и так замарался, больно уж неприятный и неуравновешенный тип. Моё имя звучать нигде не должно, его невесты, по возможности, тоже. Я попросту опасаюсь, что ублюдок ее убьёт. У меня есть его имя, Тодд, номер машины и полные контактные данные девушки, она работает на меня.
Азиат задумался, а затем кивнул.
— Заниматься подобными домашними тиранами — привычная рутина. Могу заодно интрижки на стороне у него поискать. Статистика показывает, что они в порядке вещей. На других людей — это на тебя?
— Да. Я не хотел влезать, пока он не припер меня к машине.
— Не проще самому на него в полицию заявить?
— Нет. Никто ведь не пострадал, — своему адвокату о том, что врезал коленом по хуэвос Тодда, я готов признаться, но вот Артуру даже такой мелкий компромат на себя выдавать не стал.
— Тогда прежняя ставка, 30 долларов в час. Аванс в двести баксов, и, возможно, его и хватит. Парень наверняка не самый умный, раз распускает руки. Надеюсь, он не держит бойцовских собак.
Стыдно ли мне за то, что поступаю так неблагородно, да еще и чужими руками? Ни капли! Ни о чем не жалею. Тодд ответит за свои же преступления. Оставайся он честным тружеником — повода для ареста не возникло бы. Ну а Бренде Линда кого-нибудь найдет. Художника с курса изучения искусства, например. Нет, лучше музыканта, тот мне нужнее.
Выписал, в общем, второй чек. И еще тарелку макарошек заказал. Эти итальянцы знают в них толк.
Сегодня же у меня состоялась новая встреча с аспирантом Сэмом — опять вечернее занятие. И Бренда на него подъехала, на метро трамвае БАРТ. Вот чего я такой невнимательный идиот-то? Про фичу, что машина влияет на скорость передвижения персонажа симулятора студента подумал, а факт того, что наша джун перемещается на общественном транспорте, только к середине ее стажировки заприметил. Ну не бабосо ли? Но наличие или отсутствие машины — это уже точно личное дело Бренды. Разве что пусть комнату у Монти и Селесты снимет, здорово на транспорте сэкономит.
— Как успехи? — спросил у девушки и получил рассказ, наполненный бухгалтерскими терминами.
Она целый учет со счетами и субконто, отражающий жизнь героя квеста, организовать пытается.
— Послушай, к какому решению я пришла. У каждого действия всегда есть две стороны и они должны уравновешивать друг друга. Например, если студент сидит за учебой, его параметр знаний растет. Но ровно на эту же «стоимость» нужно что-то списать — свободное время, энергию, состояние здоровья, настроение.
Первый закон термодинамики в чистом виде. И это крутой подход! Я чуточку представляю, как работает бухгалтерия — и в ее сторону дорога кодерских приключений заводила. Полагаю, «заднице Одина» все же однажды быть. Лет через десять или даже раньше. Все, что для нее нужно — хорошая СУБД, и простой скриптовый язык. Даже бейсик сойдет. Но, может быть, я уже нежно любимые мной за простоту Питон или Джаваскрипт изобрету.
Про встречу с Тоддом промолчал. Нефиг всякой ерундой от важного отвлекать. А язык Си — это ведь важно? Наверное, да. Он и для написания трехмерных движков отлично подойдет, так как работает быстро. Почти все культовые шутеры из 90-х — Вольфенштейн, Дум 2, Квейк, Халф-Лайф — это Си. Ну, кое-где еще и Си-Плюс-Плюс, но уже не суть. Одно вытекает из другого.
Итак, первый практикум. Аспирант Сэм мне приветливо кивнул. Бренду проигнорировал, но хотя бы заявлений в духе «курица не птица, женщина не программист» делать не стал.
Нас усадили за компьютеры, а точнее, терминалы, дающие доступ к мощному по нынешним временам PDP-11. На вид обычные моноблоки, похожие на TRS-80 третьей модели, но на самом деле это вообще не полноценные машины, а мониторы с клавиатурой. Вся магия творится за перегородкой из толстого стекла, где расположилась допотопная серверная размером со спортзал. Компьютеры — шкафы. Жесткие диски габаритами со стиральную машинку, толстые пучки кабелей, что-то подпаивающие ремонтники в белых халатах. Подозреваю, могли бы обойтись и без стекла, но нарочно оставили юзверям обзор, чтобы прониклись величием и богатством университета. Не бывай я пару раз в продвинутых дата-центрах, тоже, наверное, впечатлился бы.
Гарланд прошелся и раздал каждому листочки с логинами и паролями. Я оказался Си-Си-1965. То есть инициалы и год рождения.
— Предполагается, что все вы владеете минимальными навыками работы с операционной системой. Если у кого-то будут затруднения, позовите, помочь вам моя работа, — посмотрел парень при этом на Бренду, — надеюсь, что все вы хорошо слушали мою лекцию. Сегодняшнее практическое занятие максимально простое: вам нужно написать программу для копирования массива данных с одного имеющегося адреса на другой. Однако…
Сэм подошел к имеющейся в классе грифельной доске и написал «1.5 секунды». Еще и обвёл в несколько кружочков, показывая важность.
— Вот ваша цель. Попробуйте оптимизировать свой код так, чтобы уложиться в поставленные временные рамки. Это сложнее, чем вам кажется и справятся не все.
Казалось бы, ничего сложного. Выдернуть данные из памяти по указанному адресу, перебрать циклом и положить в новые ячейки, оперируя указателями. Решается в один проход. Ну и еще добавить замер времени исполнения и его вывод. Где тут можно накосячить?
И в чем тут вообще принято писать? Какой текстовый редактор? Vi, Emacs? Глянув на руки соседа по терминалу, убедился, что минималистичный Vi. Ну и хорошо. Здорово было бы еще его исходники дернуть, как и более навороченного Емакса.
Написал, наверное, первым. Чуть дым из-под клавиатуры не пошел от моей скорости набора. Но важна-то не она, а время выполнения программы.
2.2 секунды. Ох, Семён Семёныч, не просто так ты нам «элементарную» задачу поручил. Неподалеку чертыхнулся еще один студент, скорее всего, получивший тот же или похожий результат. И как тут оптимизировать?
— Мистер Гарланд, я могу использовать ассемблер? — спросил один из соучеников, парень с длинными, как у рокера, волосами, стянутыми в хвост.
— Это было бы неспортивно. Не все тут изучали машинный язык PDP-11. Но это возможный выход. При использовании ассемблера вы бы получили порядка 1.2 секунды.
И как? Что-то такое на краю сознания зудело. Основные потери времени здесь не в копировании байтов памяти, а на самом цикле. А как быстрее? Убрать накладные расходы на обслуживание цикла можно через goto! Но чувствую, меня за его применение расстреляют на месте без суда и следствия.
«Не использовать метки и переходы по ним» — одна из первых заповедей программиста. Я бы сам всех собак на джуна спустил, примени он настолько грязное решение. Хотя в данном случае оно смотрелось бы не так и плохо.
Если goto — это выход, то надо, чтобы работало как с ним, но без него. Закрыл глаза и погрузился в недра воспоминаний. Решение продолжало напрашиваться, но никак не рождалось.
А стоит ли мне вообще напрягаться? Ну не совершу я невозможное. И что? С занятий меня не выгонят, двойку не поставят. Уважение не вычтут. Подозреваю, что в учебный план это занятие вписано специально, чтобы избавить нас от иллюзий о всемогущем Си. Но выпендриться-то хочется! Грешен — немного тщеславен и люблю купаться в лучах обожания коллег. Нравится мне, когда вокруг кодеры паникуют, и тут я весь такой из себя Д’Артаньян и решаю проблему парой строк кода.