Ох не зря я вспоминал алгоритм быстрой сортировки, когда начинал играться с Си. Его и воспроизвел на доске, собственно, на языке, созданном Деннисом Ритчи. Си не умрёт никогда – так и знай, на нас работы хватит, не переживай.
Квиксорт – самая-самая классика задач упорядочивания массива. Он и в новейшем времени актуален, но уже не совсем в чистом виде.
Никаких революций и фурора написанный мной на доске алгоритм совершить не должен, его придумали еще в какие-то лохматые времена, чуть ли не в шестидесятых, но вот доказать мою собственную компетентность безупречный код на Сях обязан. И утереть нос расисту-аспиранту, да. Пусть весь мой опыт и говорит о том, что так легко “белый господин” обезьянку из гетто за равного не признает. Но с тем же Миллером в итоге удалось контакт наладить.
Группа поддержки из зала притихла. Когда какой-то там унтерменьш вдруг начинает демонстрировать неожиданные навыки, они всегда затыкаются. Сэм смотрел на мой код с прищуром и недоверием.
– Для чего нужно вот это условие? – ткнул он подобранной со стола указкой в третье ключевое ветвление.
– Проверка на то, что элемент равен опорному. Без нее будет медленно работать на массивах с большим количеством повторяющихся чисел.
– В классическом варианте быстрой сортировки нет проверки на равенство, только на больше и меньше. Вы сами придумали модификацию?
Конечно, не сам. Квиксорт ведь до моего рождения изобрели. Мы его в нашем политехе досконально разбирали и я за каждую строчку поручиться готов. Между прочим, мне есть, как алгоритм улучшить. На коротких массивах до десяти чисел лучше использовать простую сортировку подстановкой, поэтому доцент говорил нам иметь две функции и вызывать ту, что сработает быстрее.
– По большей части да, мы придумали этот алгоритм вместе с мисс Джулай, когда она обучала меня языку Си, – вспомнилась старая отмазка.
Очень не хочется прослыть плагиатором, но если вдруг какой-нибудь умный дядька, тот же самый, что придумал доработку в реальности, вдруг уже изобрел то же самое, то объясню тем, что мысли у умных людей сходятся. Моральная сторона вопроса еще остаётся. Я, получается, какого-то академика обокрал. Может, даже кого-то уровня Вирта или Дейкстры.
– Вы должны понимать, что дополнительное ветвление – это накладные расходы, – еще раз посмотрел на доску Гарланд.
– Все зависит от исходных данных, сэр. Мы с мисс Джулай пришли к выводу, что в большинстве реальных случаев доработанная нами версия покажет себя лучше.
– Да кто она вообще такая?
– Мисс Джулай – это наша соседка из Лос-Анджелеса. Она научила меня играть в шахматы и программировать. Моя наставница, если угодно. Так мы с мисс Бойл доказали нашу состоятельность?
– Да-да, конечно, давайте ваши бланки, – рассеянно пробормотал Гарланд. По его лицу видно, что он уже мысленно в компьютере, вбивает мой код в терминал и оценивает эффективность.
Оба мы получили свои подписи в заявлениях о приёме на курс. Теперь придется вернуться в канцелярию и потратить сто баксов за сомнительную честь продолжить посещать курсы по языку, и так мне превосходно известному.
– Парень… Колон, – заглянул в бланк аспирант, – твой алгоритм выглядит любопытно, я пойду проверю его на стенде, на следующем занятии скажу результаты.
– Он называется джулайсорт, в честь моей наставницы, – поправил я его.
– Ага, как скажешь, твоё право назвать, как угодно, – совсем по-дружески хихикнул парень.
Вся прежняя враждебность Сэма куда-то ушла. Как же приятно ставить на место этих расистов, прямо хоть в МЕЧА вступай ради одного этого. Но это дурной путь, не мой. Да и для предвзятости могут иметься вполне разумные основания.
– Дождись меня, хорошо? Есть разговор, – сказал я Бренде, когда она собралась уходить и получил утвердительный кивок.
Блондинка поджидала меня у выхода из учебного класса.
– Спасибо, что вступился, не ожидала, что в этом университете сохранились рыцари, – сказала она, – учитывай только, что у меня уже есть парень. Никаких подкатов.
– Договорились, – по-деловому протянул ей руку, – я Крис. А ты правда бухгалтер?
– Что, собираешься стебаться? Да, считаю налоги, и у меня хорошо получается! – мгновенно вспыхнула блондинка. – Но я способна на большее! Бухгалтер – это оклад двенадцать тысяч в год и монотонная рутина. В статье в Байте я почитала про язык Си и то, что компиляторы для него появились и на TRS, и на IBM. Если начать изучать его уже сейчас – я стану востребованным специалистом!
– Стоп-стоп-стоп. Не горячись, мне как раз нужен кто-то, кто посчитает налоги для моей фирмы, оформит декларацию и прочее необходимое по закону. Потому и спросил. Я ищу программистов для своей компании. Если сможешь закрыть сразу две позиции – это преимущество.
– Твоей компании? Поняла, для твоего босса. Это умно – послать молодого подчиненного в универ подбирать перспективных.
– Да, мистера Коламбуса из Каналья Геймс.
– Вы что, делаете игры? Это как-то несерьезно. Развлечение для подростков.
– Именно так, рынок с миллиардными оборотами. И у нас отлично получается.
По-хорошему, стоило бы сразу сказать, что я и есть “Мистер Коламбус”, но не один лишь Рокки любит подколки и розыгрыши. Сама виновата, что сразу не восприняла меня всерьез, даже после того, как я удивил аспиранта.
– Предложение о работе от мистера Коламбуса – оно серьезное? – спросила Бренда. – То есть я смогу завтра выходить на новое место и мне будут платить… сколько? Учитывай, на всякие глупости вроде часовой ставки я не согласна. Мне нужен стабильный контракт хотя бы на полгода. И я не против заодно заниматься учетом за отдельную плату в нерабочее время.
– Серьезное, – кивнул я, – если у тебя есть время, можем перекусить и пообщаться. Сначала всё-таки собеседование. Мне понравилась твоя реализация пузырьковой сортировки – очень аккуратно и, навскидку, без ошибок.
В ресторанчике, показанном Рокки, я взял большую пиццу с пепперони и произнес проникновенную речь о том, как космические корабли бороздят Большой Театр, а Каналья Геймс собирается покорить мир. Про уже пять вышедших игр, контракт с крупным издателем и множество прибыльных идей.
– Ты и есть босс. Колон и Колумб – это одно и тоже, – догадалась девушка. Пиццу она хомячила без малейшего стеснения. – Всё время говорил “мы” или “я”, как будто ты самый главный. Ты не слишком молод?
– Я совершеннолетний, – у меня и справка есть. Но эту часть пока умолчал. – Расскажи про себя. Как пришла к программированию?
– Я из Окленда. В школе ходила в компьютерный кружок, изучала Бейсик и Паскаль, у меня хорошо получалось. Сразу после выпуска пошла работать помощником главного бухгалтера, так и тружусь. Мой босс, миссис Стивенс, она… сложный человек. Не хочу ее ругать, но она не признает ничего нового, а компьютер для нее – дьявольщина. Честно скажу, весь учет в компании на мне, но платят при этом жалкие двенадцать тысяч в год. Это до вычета налогов! Не жалуюсь, но мы с парнем собираемся съехаться и этого хватит только на аренду. Уверена, я способна на большее!
А сколько налоги? Если процентов 15, то негусто получается для пендехостана. Баксов восемьсот пятьдесят, в месяц, прикидывая на пальцах. Как у Елены в парикмахерской. Прожить, в общем, можно, но не шиковать.
– И несмотря на нехватку денег, ты записалась на курс по языку Си? – спросил я.
– Да. Это инвестиция в себя, иначе мозги заржавеют. Мне на самом деле интересно изучать новое. Как закончится этот курс, я хочу попробовать Фортран и Форт.
Рассказывая, девушка раскраснелась и принялась жестикулировать куском пиццы. Блондинка мне по-человечески понравилась – целеустремленная и уверенная в своих силах.
Техническое собеседование заняло полчаса и всё оказалось очень неплохо для бухгалтера. Проблема разве что в знакомстве с индустрией просматривалась.
– Ничего про игры не знаю, – призналась Бренда, – я даже фильм Трон до сих пор не смотрела.
– И в залах аркадных автоматов тоже не бывала?
– Ни разу. Там обычно шумно, а у меня тонкий слух.
Итого, она потенциально неплохой исполнитель. Дотошная и внимательная, но даже массивы пока что сортирует пузырьком. Но тут будем честны, на все базовые алгоритмы уже есть готовые библиотеки. А если их и нет, то я напишу. Хороший исполнитель – как раз то, что нужно.
– Я предлагаю тебе взять недельный отпуск в бухгалтерии и выйти на оплачиваемую стажировку. Я придумаю игру и напишу под нее подробное техзадание. С тебя – исполнение. Из расчета пятидесяти в день. Если увижу, что не справляешься – честно скажу, что расстаемся, не стану тратить деньги попусту.
– Это же больше, чем я зарабатываю! Я согласна! – прикинула бухгалтерша. По крайней мере считать она умеет.
А предложу я ей сделать для начала простой экономический симулятор с менеджментом ресурсов. Их в девяностые выходило немало. Называли “Симулятор жизни”, “Симулятор студента”, “Симулятор бомжа” и так далее. Примитивные поделки на вечер, которые, однако, имели свою аудиторию и распространялись по сети со скоростью чумы. На американщине такие игры давным-давно появились – начиная с легендарной “Орегонской Тропы”, в которой если не угадаешь с менеджментом ресурсов – умрешь от дизентерии.
Назвать “Студент Беркли” или “Калифорнийский студент”, чтобы универ в суд не подал. По большому счету, геймплей уляжется в возможности моего квестового движка. Может быть, немного придется его подшаманить. Как-то так.
Если под моим чутким руководством справится со “Студентом”, то перейдем к чему-то более прорывному – Алхимии. Игрушке с принципом объединения элементов для получения новых. Идея гениальная в своей простоте, любой джун потянет. Еще и Линда пиктограммы для комбинирования нарисует и выйдет абсолютный хит – может быть, и не уровня Тетриса, но сопоставимый. Легкая казуальщина всегда пользовалась популярностью.
– Мне потребуется несколько дней, чтобы закончить дела на работе, – предупредила Бренда. И этим она тоже подкупает. Не сорвалась с места туда, где вкуснее кормят, а дисциплинированно собирается завершить несделанное.
– Жду в понедельник. Вот наш адрес, это в Эль Серрито.
Записал на листочке и дал наш домашний, хотя с радушными соседями, быть может, и это и боком нам выйдет. Но на аренду отдельного офиса денег пока что нет. Стоит подумать о том, чтобы у Монти офис устроить, у него полно свободных комнат, но пока обойдусь своим кабинетом. Посажу сотрудницу за Эппл 2.
Приехав домой, обнаружил, что Линда уехала в школу. Интересно, как она там. Не обижают ли какие-нибудь пендехо?
На крыше вольера Дюке снова спала Каналья, сделавшая вид, что нас с питбулем не существует, пока я водил пса на прогулку.
Хорошо побегали. К нам соседский пацан подходил, с Дюке познакомиться. Тот, что сын финансиста, переживающего за стоимость земли в районе. Учитывая, что пёс в наморднике, легко разрешил его погладить.
Вернувшись, заварил себе на ужин во славу Макаронного Монстра стаканчик доширака и начал неспешно составлять синопсис для “Калифорнийского студента”, сев за комп. Не на бумажке же мне писать, а потом выбрасывать черновики. Нужно беречь природу, мать нашу.
Придумывалось и вспоминалось легко. Все жанровые фишки в голове всплывали: глобальный таймер и оценка времени на каждое действие, расписание дня, график событий, несколько шкал, оценивающих состояние героя, движение вверх и вниз по социальной лестнице, случайные происшествия и текстовые мини-игры. Всё это я еще для “Космических рейнджеров” задумывал, только руки до них пока никак не дойдут, но движок уже позволяет при грамотном обращении.
Файлик с задумками и хотелками рос и рос. Например, пусть от модели машины главного героя зависит скорость перемещения между локациями. Заработок и трата денег. Возможность сдавать имущество в ломбард и выкупать обратно. И чтобы встречали по одежке – прилично одетому профессора поставят балл повыше, но его побьет гопота в переулке и придется тратиться на прием у доктора.
РПГ составляющая – посещаешь спортзал и растет сила, после чего хулиганы уже не страшны. А если качаешь интеллект, то есть возможность устроиться программистом.
Несколько условий для поражения – от физической смерти при истощении шкалы здоровья, до полицейского ареста и отчисления из универа.
Отдельная репутация с преподавателями. Возможность завести подружку, которая принесет баффы и дебаффы по различным показателям. И еще над азартными играми на деньги подумать стоит.
Чем дольше придумывал, тем сильнее хотелось самому заняться, при помощи Линды, без всяких посторонних. А во второй, третьей или, может быть, пятой версии добавить изометрическую графику и возможность топить гостей в бассейне или замуровывать в туалете, так как получится Симс – любимая игра многих девушек. Но буду честен – фишку с утопленником и я пробовал, из чистого интереса. Потом, правда, загрузился из сейва, так как не понравилось ощущать себя злодеем.
От мечтаний о симуляторе расстановки мебели и выбора рисунка обоев меня отвлек телефонный звонок. Джон? Кен? Елена или Гектор? Трейси? Рокки? Лео? Какой толпе народа я, оказывается, небезразличен.
– Алло, – поднял я трубку.
– Кристобаль Колон? – услышал я на линии голос аспиранта. – Это Сэм Гарланд из Беркли. Я взял твой номер из анкеты. Я провел замеры производительности твоего алгоритма в сравнении с эталонным вариантом. На массиве из ста тысяч случайных чисел твоя версия сортировки проиграла примерно двадцать пять процентов.
– И вы так обрадовались этому факту, что не удержались от звонка, Сэм?
Понятно, что на полностью случайном массиве с малым числом повторяющихся элементов алгоритм с дополнительным сравнением проигрывает. Не новость, банальная логика, но…
– Но я вспомнил твои слова о наборе данных и подумал, что никому не нужно упорядочивать псевдослучайные массивы и проверил на таблице почтовых адресов, отсортировав ее по индексу, – с заметным возбуждением в голосе выпалил Гарланд. – Твоя версия алгоритма дает прирост скорости на порядок! Нужно еще проводить оценку для различных ситуаций, но это потрясающе!
Шутка про то, что его там Рокки покусал, застряла в горле. Ох я бабосо, тарадо, идиото! На порядок – то есть как минимум в десять раз быстрее! Орале! Как хорошо, что я написал алгоритм на доске при свидетелях, при полном классе расистов. Моё авторство теперь никто не оспорит.
– И что же дальше, Сэм? – спросил я.
Совершенно неожиданно получилось. Я искренне считал, что пишу на доске самый стандартный немодифицированный квиксорт. Но… коготок в плагиаторстве увяз и всей птичке пропасть. Музыка, игры, теперь вот алгоритмы. Нужно будет выяснить, кто в настоящее время работает над оптимизацией быстрой сортировки и, как появятся деньги, отблагодарить их всех. И выпустить джулайсорт под лицензией GPL, естественно.
– Я собираюсь написать статью в “Вестник ассоциации вычислительной техники”. И еще, пожалуйста, поищи контакты мисс Джулай как можно скорее! Без указания ее в блоке “Благодарности” получится неэтично! Ты пойдешь первым соавтором. По-хорошему, тебе бы стоило выступить единственным автором, но ты даже не студент, твою одиночную работу без шансов отклонят.
Вот же жучара он! Подмазался в соавторы. А если бы не толпа студентов, видевшая, как я пишу джулайсорт на доске, быть может, и вовсе попытался бы всю славу себе присвоить.
– Сделаю, что возможно, – пообещал аспиранту, – но шансов очень мало. Я не знаю, куда она переехала, – а я ведь и в действительности не в курсе, где именно остался тот самый журнал. Куда-то прибрали во время многочисленных переездов.