factorio что за игра
Идеальные песочницы: Factorio и RimWorld
Я поведу свой рассказ для тех людей, которые не наигрались с Лего. Для тех, у кого сюжет и графика на вторых ролях. Затрону две свои любимые игры — RimWorld и Factorio. И если расписать широкими мазками общую картину — ты играешь в игру. Звучит глупо, но этот концепт в жанре возведен в абсолют. Тебе дают кубики, и ты играешь с ними как хочешь. Никто не говорит тебе правила, никто не указывает, что ты должен сделать и зачем, просто сиди и развлекай себя сам. Статью попытаюсь написать, в основном, для людей несведущих, с надеждой затянуть их в нашу секту.
Начнем с RimWorld
Игра от Tynan Sylvester и компании Ludeon Studios, сами они описывают свою игру как «генератор историй». Немного размыто, но, в принципе, верно. Вы «управляете» несколькими поселенцами, которые оказались на этой планете по разным причинам (аварийная посадка, богатый исследователь или просто первобытное племя). Почему «управляете» взято в кавычки? Потому что прямых приказов (кроме боевых) вы отдавать не сможете. Ваши поселенцы — Личности с большой буквы, и указаний по типу «Копай отсюда и до обеда» не потерпят. Придется строить расписание — кто, чем и в какой последовательности будет заниматься. Кто-то будет добывать еду, сажая картошку и промышляя дичь, кто-то — копать ресурсы, шить одежду, заниматься постройкой и обустройством колонии и тому подобное. Помимо этого вашим людям необходимо спать, есть, развлекаться, и желательно поменьше работать. Если же вы доведете эту Личность до нервного срыва — она откажется работать и сделает что-то нехорошее в порыве истерики. Сломает стул или на кого-то наорет матом, выпьет весь алкоголь или сожрет всю вкусную еду, может даже устроить пожар. Поэтому при выборе колониста очень важно смотреть не только на то, что он умеет, но и на его психологические черты. Не нужно ждать идиллии в колонии от персонажа с перком «женоненавистник», если его окружает прекрасный пол. Ведь если они подерутся, их придется лечить. А это уже отдельная история.
Система здоровья
Насколько просто выглядят пешки (колонисты) на картинке. Но это обман, под этой 2D кляксой скрывается сложнейшая система здоровья и повреждений.
Гости, дружелюбные и не очень
Мимо вас ходят другие люди, из других поселений. Которые заглядывают к вам, предлагая свой нехитрый скарб в обмен на серебро. Если повезет — зайдут целые караваны, груженные под завязку полезными вещами (охрана не менее внушительна, предупреждаю сразу).
За горизонт
Хоть вы и живете в маленьком квадрате на пару экранов, мир вокруг не генерируется за черной стеной. Это живая планета, по которой вы можете перемещаться, снаряжая экспедиции и караваны. На ней разный климат, разные ареалы обитания животных, нейтральные и враждебные поселения, с которыми вы можете поступать по вашему усмотрению.
Можете дружить со всеми, захватывая в плен напавших на вас негодяев, леча их и отпуская домой. После таких широких жестов, сердце даже самого страшного аборигена станет мягче зефирки, и он пойдет на диалог. Или ваша душа лежит к другому — грабь, убивай (гуси тут тоже есть). Захватывай пленных, вербуй их, или пускай на органы (хороший товар между прочим) или разделывай на мясо, но не жди, что всем поселенцам понравится такое жестокое отношение (кроме некоторых индивидов с определенными перками). Здесь нет правил, и ты волен развлекать себя так, как тебе угодно.
Бывалые вспомнят еще много нюансов, о которых я тут не упомянул. Но не вижу смысла рассказывать о них сразу. Эта игра утоляет жажду изучения чего-то нового. Копнув на полный штык в любую сторону, ты открываешь для себя много мелких вещей, познание которых откроет для тебя новые возможности. Ну и последний совет, для человека, решившего попробовать эту игру — поражение такой же интересный конец истории, как и победа.
P.S забыл упомянуть музыку — она великолепна.
Часть вторая. Factorio
Эта часть будет короче первой, но не из-за меньшего масштаба игры. Если RimWorld больше похож на рассказ, который ты пишешь и корректируешь в реальном времени, то Factorio — это коробка старого железного конструктора с гайками и болтами. Неважно, кто ты и как здесь оказался. Неважно, зачем ты здесь. Все, что ты должен делать — это добывать.
Правила игры просты, как тот же железный конструктор. Добываешь основные ресурсы (медь, железо, уголь, камень, дерево), обрабатываешь их в печи, получаешь вторичные ресурсы (медные, железные плиты и кирпичи) и крафтишь то, что тебе необходимо. Ставишь пару буровых установок на твердом топливе, бегаешь и вручную подкидываешь в них уголек для работы. Вручную заправляешь руду в печи, вручную создаешь необходимые вещи. И вроде бы всего хватает, пока ты не открываешь для себя новые технологии… С каждым этапом твоего развития количество необходимых ресурсов взмывает вверх по экспоненте, а персонаж у тебя один, и все сделать он не успевает. Плюс ко всему на тебя начинают набегать небольшие отряды местных зергов, именуемых кусаками. Значит, производство нужно автоматизировать.
И игра поощряет твое стремление делать все не своими руками, ведь она буквально про это. Манипуляторы, конвейеры и автосборщики твои друзья и основные рабочие на заводе. И чем раньше ты это поймешь, тем легче будет в дальнейшем. Начиная планировать свои первые цеха по выплавке, снабжая их топливом из угольных шахт и выводя готовый продукт в цеха производства более сложных вещей — ты понимаешь, что такое Factorio. И в этом вся игра и есть. У тебя присутствует конечная цель в виде запуска ракеты, но кто захочет бросать свой завод, где каждый пиксель ты построил сам?
Изучая все новые технологии и бросая в топку науки львиную долю ресурсов, начинаешь понимать — запасы ресурсов не так велики. Пока тебе требуется для производства какой-нибудь штуки 20 железа, а ресурс месторождения 6 миллионов, тебя не волнуют далекие залежи. Максимум можно организовать добычу нефти, которая появилась чуть дальше от основных ресурсов. Но месторождения истощаются, и игра толкает тебя на изучение новых мест, развертывание там добычи и доставку руды в плавильные цеха. Теперь становится понятно зачем тут поезда и железные дороги. Можно, конечно, самому управлять поездом, но зачем? Установив станции и задав условия отправки и ожидания поезда, ждем, что локомотив будет курсировать между базами, доставляя свежую руду прямо вам на стол. Главное не забывать об обороне, потому что соседи совсем вам не рады.
Изначально кусаки слабы и довольно пассивны. Сидят в своих ульях, тихонько плодятся и эволюционируют медленно. Но ваше производство загрязняет окружающую среду, и ксеносам это не по нраву. Они будут упорно слать на вас отряды, усиливаясь и эволюционируя со временем. Выход только один — выжечь гнездо паразитов как можно скорее. В этом вам помогут турели в обороне, и пара единиц техники в нападении. В плане боевки игра довольно бедна на разнообразие.
Что мы имеем в сухом остатке — по мне игра идеальный визуализатор программирования. И чем сильнее разрастается ваш завод, тем больше в нем «багов». Где-то встали конвейеры, затор с поставками угля, поезда не успевают подвозить ресурсы и другие проблемы будут вашими постоянными спутниками на просторах этой неприветливой планеты. Но решая эти проблемы, получаешь истинное удовольствие. Как и при созерцании вашего детища, которое при должном старании будет работать как единый механизм, издавая музыку синхронной работы.
Подводя общий итог
Я не претендую на объективную оценку, не хочу описывать все механики и тонкости. Потому что основное удовольствие ты получаешь, изучая эти игры сам, набивая шишки и открывая что-то новое. Это просто трибьют от всего сердца, в надежде поделиться с кем-то. Всего хорошего. ¡No pasaran!
Интересный этюд Factorio: симулятор завода
Эта игра — очередная очень интересная с точки зрения механики бета, представляющая заодно своеобразный язык программирования.
И здесь самое забавное — это кривая обучения и интерфейсы. Давайте пройдёмся по этим моментам, благо есть отличные находки.
Вы играете за инженера, очнувшегося на незнакомой планете около обломков своего космического корабля. Поскольку вы инженер, а не какой-нибудь агроном, вместо космической картохи предстоит развить технологию и собрать ракету с нуля. В общем, старая добрая игра, описанная у Вернора Винджа — «восстанови цивилизацию за минимальный срок».
Первая задача — используя технологии бронзового века, получить прединдустриальные, а затем собрать жестяной радар, чтобы найти основную часть корабля. Затем — добраться туда на каком-то транспортном средстве. Там забрать ядро компьютера и получить доступ ко всем данным по тому, как правильно делать ракеты, бронебойные патроны, скафандры и прочую мелочь, важную для выживания.
Итак, суть. Есть базовые ресурсы — уголь, камень, медь, железо, вода (позже добавляется знание о нефти и солнечной энергии). Задача — собрать ракету. Используя только свои руки в момент начала. В отличие от обычных craft&explore игр (лучший пример из относительно свежего — Radiation Island для планшетов), здесь основной интерес смещён на конвейерное производство и автоматизацию всего того, до чего не может дотянуться ваш персонаж руками.
А ресурсов надо столько, что руками он просто не сможет всё сделать. Даже чтобы приготовить обычную стальную балку, нужно очень сильно попотеть — открыть принципы переработки стали, организовать переплавку металла, собрать печь, обеспечить подвоз топлива (то есть раскопать угольное месторождение) и так далее.
К счастью, наш персонаж не спит, ничего не ест, быстро лечится от ранений сам и умеет собирать вручную почти всё, включая сложные микросхемы. Правда — с линейной скоростью.
Дальше начинается первый этап — вы вручную делаете немного железных пластин, кирпичей и так далее, и собираете первую автоматизированную линию, добывающую руду и копающую уголь. Плюс осваиваете паровой электродвигатель. На выходе из первого этапа — конвейерная лента с железными пластинами, медными пластинами и провод с настоящим током. Из этого можно уже собрать что угодно.
Дерево науки огромное:
Дальше вы исследуете автоматизацию и начинаете делать линии по сборке разных нужных штук — конвейерных лент, манипуляторов, сборочных автоматов, научных пакетов. В общем, всего-всего. Выглядит это примерно так. На рисунке — простейший пример:
Синяя лента сверху — это приходящая железная руда, которая манипуляторами ставится в печи, затем переплавляется в железную пластину. Потом она выгружается из печи манипуляторами на другую ленту. С другой стороны подходят медные пластины. Цель сборочного этюда — получить красные микросхемы. Для производства красной микросхемы нужны зелёные микросхемы, кабель и стальные пластины. Для кабеля нужна медь. Для зелёной микросхемы нужен кабель и стальная пластина. Всё просто.
Конечно, при legacy-driven-проектировании ситуация может немного усложниться:
К моменту, когда вам понадобятся силовые поля, база начнёт приобретать вот такой вид:
Кстати, обратите внимание. как всё красиво дымит и загрязняет окружающую среду. Планета обитаема (и не только вами), и местным кусакам и плевакам (функциональные названия) совершенно не нравится нюхать ваш дым. Они приходят кусаться и плеваться, соответственно. Поэтому вы ещё играете с ними в «перебей их всех и разрушь их гнёзда». Часто это выглядит вот так:
А вот прямо этюд из последних уровней Кримсона:
Планета выглядит примерно так:
Красное по центру — это ваша база, загрязняющая природу. Красные скопления по краям — это гнёзда «зергов», их надо время от времени пропалывать, если зерги лезут к базе. С краю пустыни сверху видно добывающий аванпост с нефтью. Вообще, распределённая база и коммуникации — это одна из важных граней игры. Например, можно играть в Transport Tycoon:
Или строить сеть на летающих дронах:
Ещё одна вещь, которая нам важна — это экипировка своего скафандра. Силовые щиты, экзоскелетные ноги, батарейки, дронстанция, прибор ночного видения, реактор, наплечная турель — куча всего:
Как только вы с этим освоитесь, начинается самая странная часть игры. А именно — автоматизация автоматизации или рефакторинг. Оказывается, дикое удовольствие может доставлять не только кайфно шипящий тормозами поезд «Hello, world!», не только уничтоженное гнездо кусак, но и то, как вы переделаете все процессы, чтобы они шли без вашего участия.
Вообще, тут надо чуть отвлечься и сказать про то, как распределён даунтайм игры:
И начинается рефакторинг базы: к чёрту невозобновляемые источнии энергии, рулит бесконечная нефть и солнце. К чёрту громоздкие производственные линии, всё можно упростить. К чёрту перегрузки и недогрузки — теперь всё работает как часы. От этого вот ощущение «Работает как часы» можно тащиться бесконечно. Впервые оно возникает при разгрузке автоматического поезда, а потом появляется с развитием логической сети.
Итог игры — вылетающая ракета. Но настоящая радость — в песочнице, которая позволяет творить любую фигню, например, музыкальные шкатулки. Вот тут парень упоролся и «написал» программируемые динамики на основе комбинаторов логической сети производства:
UPD: А graninas собрал вообще свой процессор.
Ну а самое интересное — всё же кривая обучения. Чтобы начать играть в «Факторию» первый раз, нужно получить очень много информации — от того, что и как работает до шаблонов строительства базы. Вопрос решён гениально: вы находите чужую базу с двумя аванпостами, разбираетесь, как она работает, и чините её. Заодно хороните павших коллег-гуманитариев, построивших её (на самом деле нет, их сожрали кусаки).
Каждая отдельная миссия короткая, имеет конкретную цель и радует экшном — после первой же кампании хочется чего-то ещё. И там есть ряд логических задач, песочница и всё, что угодно.
В общем, это очень странная игра. Странная тем, что в ней надо работать и фармить — но при этом вы играете. Странная тем, что надо отлаживать процессы: всё всегда идёт не так, но надо следить. Но удивительная тем, что показывает, насколько важна сложность: то, что можно делать руками час, ставится на поток за то же время, и делается тысячами. И поверх этого накручивается ещё виток. И ещё. И ещё. До тех пор, пока всё это будет сложно охватить сознательно. В процессе прямо подводит мысли к тому, что роботы должны делать других роботов посложнее, и так далее.
В общем, ещё один интересный учебный курс. Который вместо традиционного обучения. Хотя бы по схемотехнике, потому что вся карта — эта плата, и вы делаете на ней трассировку своими зданиями и чертежами их совокупностей вроде «блок производства красных микросхем».
Загрузить Factorio Demo
Контент для этой игры Просмотреть все (1)
Об этой игре
Вы будете добывать ресурсы, исследовать новые технологии, создавать инфраструктуру, автоматизировать производство и сражаться с врагами.
На начальном этапе игры Вы будете вручную рубить деревья, добывать руду и создавать простые манипуляторы и транспортные конвейеры, но через некоторое время Вы, наконец, сможете подняться до энергетической индустрии с огромными солнечными фермами, перегонкой и переработкой нефти, построить роботов и развернуть логистическую сеть, настроенную для Ваших потребностей в ресурсах.
Но жесткая эксплуатация ресурсов планеты не останется без внимания местных жителей, так что вам придется быть готовым постоять за себя и свою механическую империю.
Объедините силы с другими игроками в Сетевой игре, вместе создавайте огромные фабрики и распределяйте задачи между своими друзьями.
Добавляйте модификации на любой вкус, от мельчайших улучшений до полного изменения игры. Поддержка модов Factorio позволяет создавать новый контент с интересными или необычными особенностями.
Основным режимом игры является песочница, однако для любителей справляться с интересными и сложными задачами присутствует Набор сценариев, доступных как бесплатное DLC.
А если существующие карты и сценарии наскучили, вы можете создавать свои с помощью внутриигрового Редактора Карт. Расставляйте объекты, врагов, настраивайте местность и добавляйте свои скрипты чтобы разнообразить геймплей.
Пояснение по скидке: В ближайшем будущем у нас нет планов участвовать в распродажах или понижать цену на игру.
Что люди говорят о Factorio
Совместная игра в Factorio — лучшее собеседование для программистов, что мы проводили
В последнее время много копий сломано вокруг технических собеседований. Очевидно, что инвертирование двоичного дерева на доске практически никак не связано с практическими навыками реального программиста. Примитивный Fizzbuzz по-прежнему остаётся самым эффективным тестом. Как следствие, выросло внимание к опенсорсным проектам, но оказалось, что это тоже не очень хороший показатель, потому что у большинства профессионалов нет на них времени.
У нас в компании самое эффективное собеседование по программированию на сегодняшний день — это обычно какое-то домашнее задание на несколько дней, в котором кандидата просят исправить баг или реализовать небольшую функцию. Это не очень хорошо, потому что занимает много времени, и человек может получить внешнюю помощь (или погуглить, если функция достаточно распространённая). С другой стороны, некоторые крупные компании вместо этого удвоили количество собеседований с доской (и алгоритмами), подвергая будущих инженеров многочасовым сессиям онлайн-программирования с различным уровнем инвазивного наблюдения.
Все эти методы интервью не сравнятся с очень простой метрикой: совместная игра в Factorio. Прохождение всего цикла Factorio — практически идеальный показатель, насколько хорошо человек решает общие технические проблемы. Можно даже настроить прохождение игры на основе будущей должности, чтобы лучше понять, как кандидат справится со своей ролью.
Factorio?
Factorio — это игра об автоматизации. Вероятно, лучшим введением будет этот трейлер, но, по сути, ваша задача — построить автоматизированный завод, способный запустить ракету в космос.
Начинаете с нуля. Добываете вручную железную руду и камень, строите плавильную печь, чтобы плавить руду в железные пластины, из которых можно скрафтить автоматический твёрдотопливный бур. Можно самостоятельно забирать железную руду из бура и закладывать её в плавильню, но более эффективно использовать автоматический конвейер. Потом можно использовать полученное железо, чтобы сделать другой бур, который автоматизирует добычу угля. Затем строится конвейер для забора угля и конвейер для его передачи в бур. Эта крошечная фабрика производит железные пластины, из которых можно сделать третий бур — и начать добычу медной руды, которая позволяет крафтить медные плиты, а из них можно сделать медный провод, необходимый для работы погружного насоса. В сочетании с паровым котлом и паровым двигателем это даёт нам первую электроэнергию. Её можно использовать для исследовательского центра и изобретения новых технологий, таких как сборочный автомат. Как только разблокируете сборочные автоматы, можете использовать сделанный вручную провод для создания сборочной машины, которая будет автоматически изготавливать эти провода.
В конце концов вы разблокируете поезда, роботов и логистические системы, которые помогут справиться с растущей логистической сложностью игры. Ну и в итоге сможете запустить ракету в космос.
Выбор направления
Игра начинается без установленной цели и почти без направления. Ведущий программист должен быть способен изучить UI и определить цель, а затем разработать план для её достижения. От джуниора ожидают правильного выполнения задач, поставленных ведущим разработчиком. Предполагается, что стажёр работает с наставником, но джуниор должен быть в состоянии самостоятельно устранить основные проблемы со своим кодом, прежде чем просить помощи от старшего. Миддл должен уметь работать независимо, как только ему дают задание, но от него не ожидают архитектурного проектирования.
Конкретные ожидания можно сформулировать так:
Командная работа
Важнейшим аспектом разработки программного обеспечения является умение работать в команде. Это означает координацию усилий с другими людьми, удовлетворение потребностей чужих проектов и сотрудничество с командой, а не самостоятельную работу, когда вы отказываетесь изменить свой дизайн, чтобы помочь интегрировать его с чьей-то работой. Естественно, такие ситуации всё время возникают в Factorio, потому что стандартные чертежи ограничены физическим пространством. В результате нужно тщательно изучить действия других людей, а иногда скорректировать свой дизайн, чтобы вписаться в ограничения по размеру или приспособиться к какому-то чужому чертежу, который занял больше места, чем ожидалось.
Если игрок уйдёт в себя, начнёт делать всё сам или молча исправлять проблемы, это быстро навлечёт на него гнев команды по тем же самым причинам, по которым коллеги злятся на программистов-ковбоев. К счастью, в Factorio есть встроенный эквивалент git blame : он показывает последнего игрока, который изменил любую сущность. Таким образом, если кто-то поставил костыль и не сообщил команде о проблеме, то когда этот костыль наконец сломается — все узнают, кто виноват. Если хотите выиграть, придётся плотно сотрудничать с товарищами по команде.
Отладка
Одним из главных навыков для программиста является отладка. Это, пожалуй, самая очевидная параллель между Factorio и реальной разработкой ПО. Что-то может сломаться очень далеко от фактического источника проблемы. Способность быстро выяснить реальную проблему — это критический навык, и процесс мышления почти идентичен отслеживанию причины сбоя в реальной программе. Если перестал работать сборочный автомат, сначала нужно проверить выходящие потоки. Потом проверить, какого ингредиента не хватает на входе. Затем проследить ингредиент по фабрике, чтобы узнать, где он производится. И повторять процесс снова и снова, до тошноты.
Отладка в Factorio быстро усложняется. Как только вы построите нефтеперерабатывающий завод, то займётесь крекингом, где на выходе три разных трубы (мазут, дизельное топливо и попутный нефтяной газ), и если какая-то из них по какой-то причине стопорится, то весь завод прекращает работу.
Бывали случаи, когда весь завод останавливался, потому что вы начали исследовать что-то, не требующее жёлтой науки. В результате вы перестали использовать каркасы дронов, которым перестали поставляться электрические двигатели, где использовалась смазочная жидкость, для производства которой забирался мазут. В итоге стопорилась выходящая труба на нефтеперерабатывающем заводе, из-за чего у вас заканчивался попутный нефтяной газ (petrolium), что останавливало производство пластмассы. Как результат, прекращался выпуск сигнального красного провода — и вся фабрика выходила из строя. Опытные игроки предвидят подобные сценарии и внедряют самобалансирующийся крекинг нефти, чтобы всегда гарантировать баланс системы. Такой завод остановится только при закупорке выходящей трубы с попутным газом. Если хорошему программисту дадут сломавшийся нефтеперерабатывающий завод, он обычно сможет проследить проблему до источника, понять, что произошло, и быстро попытаться найти решение. С другой стороны, если человек просто плюхает на землю пару новых резервуаров без веской причины (он абсолютно уверен, что смазочная жидкость будет нужна всегда), то это большой красный флаг на методы решения проблем в его программах.
Подобные ситуации позволяют Factorio точно сымитировать сложные взаимозависимости, с которыми обычно имеют дело программисты. Сложность возрастает по мере добавления в геймплей новых концепций. Это очень похоже на рост сложности от дополнительных уровней абстракции в отладке сбоя, который мог произойти глубоко внутри одного из используемых вами фреймворков.
Код-ревью
Часто первоначальный дизайн нужно исправить для повышения производительности или пропускной способности. Хорошие программисты не только примут критику своих чертежей, но и учтут её в будущей работе. Если они не согласны с изменением, то предоставят конкретное объяснение, чтобы команда могла более точно обдумать плюсы и минусы предлагаемого изменения.
Стиль написания кода и фреймворки
Отказ следовать советам — лишь часть гораздо большей проблемы, когда программист не способен нормально интегрироваться в существующую структуру. Есть много способов построить фабрику в Factorio, и каждый требует стандартных методов сборки. Несоблюдение стандартов быстро затормозит всю фабрику, часто тонкими способами, которые не очевидны неосторожному разработчику.
Конструкция магистрального ленточного конвейера включает 4-8 конвейеров, разделённых на две секции (для подземных конвейеров). Он помещается в центре фабрики, и всё производство происходит перпендикулярно ленте. Эта конструкция опирается на несколько правил, нарушение которых может привести к полному хаосу. Во-первых, всегда следует использовать разделитель на выходе с конвейера. Никогда нельзя перенаправлять всю ленту: пустое пространство для другой ленты означает, что вы теряете целый конвейер ресурсов, даже после апгрейда. Во-вторых, все заводы должны масштабироваться перпендикулярно основному конвейеру. Невозможность быстрого масштабирования приведёт либо к огромной потере пространства, либо к невозможности масштабирования производственной линии, потому что она окружена другими производственными линиями.
Логистическая сеть
Есть разные способы построения логистических сетей. Самый простой — с сундуками пассивного снабжения. Но есть другой метод — сундуки хранения с фильтром, который решает проблему с мусором. Оба метода требуют правильной установки ограничителей в нужных местах. Сундуки пассивного снабжения обычно ограничены пространством сундука. К сундукам хранения нужно поставить манипулятор для подключения сундука к логистической сети. И обеспечить не менее N предметов перед установкой манипулятора. Если забыть про эти шаги, то будут впустую потрачены огромные ресурсы. Если программист постоянно забывает про ограничители на выходах — это красный флаг, что человек небрежно относится к производительности в реальных приложениях.
В других случаях команда может применять заранее разработанные чертежи, такие как проект ядерного реактора или роботизированного завода на дронах (bot factory). Они могут быть крайне сложными, но если сделать над собой усилие и разобраться, то они чрезвычайно экономят время. Остерегайтесь кандидатов, которые не хотят настраивать на заводе новый элемент просто потому, что не могут отследить сложную управляющую логику. Или кто бросает попытки разобраться в алгоритме функционирования такого завода, несмотря на очевидные преимущества дронов перед конвейерами.
Неоптимальный дизайн завода на дронах, источник
Многопоточность
Поезда в Factorio — прямой аналог многопоточности: один поезд — это один поток выполнения, а каждое пересечение поездов или остановка — место в памяти, куда два потока потенциально могут писать одновременно. Светофоры — это блокировки (или мьютексы). Все баги в железнодорожной сети проявляются точно так же, как состояние гонки в ПО, потому что они буквально являются физическим состоянием гонки. Все компромиссы применимы и здесь — слишком длительная блокировка уменьшает пропускную способность. Неправильное проектирование светофоров обычно вызывает взаимоблокировку, точно так же, как в программном обеспечении, потому что в итоге возникает циклическая зависимость блокировок. Самая распространённая взаимоблокировка — это когда поезд слишком длинный и неожиданно блокирует второй перекрёсток, ожидая входа в первый. Затем этот второй перекрёсток препятствует отправлению другого поезда, предотвращая разблокировку первого перекрёстка.
Количество путей в железнодорожной сети соответствует количеству ядер CPU. Один железнодорожный путь трудно масштабировать больше, чем на несколько полос, потому что пропускная способность всей системы очень быстро ограничивается, даже с зонами ожидания. Наиболее распространённой конструкцией является двухполосная конструкция, по одной полосе в каждую сторону. Здесь появятся проблемы с пропускной способностью, когда возникнет необходимость постоянно разгружать поезда. Поэтому в больших железнодорожных сетях минимум по четыре полосы, причём две внешние действуют как объездные пути, чтобы избежать пересечений, когда это возможно.
Проблемы со светофорами в этих системах могут проявиться через фантастический промежуток времени. Единственный пропущенный светофор в одной железнодорожной сети однажды вызвал взаимную блокировку после корректной работы в течение двух недель. Так же и в программах состояние гонки может проявляться только раз в месяц, когда под сильной нагрузкой возникает высокая конкуренция потоков.
Масштабирование
Как и в программном обеспечении, масштабирование производства в Factorio вводит новые проблемы в оригинальный дизайн чертежей и часто требует полной перестройки для максимального повышения производительности, с установкой модулей продуктивности и модулей скорости с маяками. Конвейеры становятся узким местом производительности даже на максимальной скорости ленты, заставляя искать способы разделить конструкции так, чтобы позже можно было вставить больше лент, или разделить заводы на модули.
Управление логистической сетью само по себе становится логистической задачей в конце игры из-за того количества проблем, какое вызывают экспансивные дрон-сети. Как правило, нужно приступить к сегментированию логистической сети и либо использовать поезда для транспортировки товаров между сегментами, либо строить сундуки запроса и снабжения, которые будут передавать товары через границы.
В конце игре для управления поездами требует перехода с push-архитектуры на pull-архитектуру, поскольку push-архитектура не справляется с высокой пропускной способностью. Это неизбежно приводит к использованию функции Train Limit и изучению, как использовать логические сети для кодирования базовой логики, чтобы станция запрашивала поезд только тогда, когда действительно готова полностью заполнить его ресурсами, вместо обычной игровой тактики в начале игры, когда куче поездов просто даётся команда ехать за железом. Новая схема сводит к минимуму количество поездов и при этом гарантирует, что в сети обслуживаются все станции.
Часто бывает, что ограничения входных линий в сборочный автомат и лимиты скорости манипулятора требуют перепроектирования заводов вокруг, точно так же, как высокоскоростные вычисления требуют знания узких мест в работе CPU. Эти узкие места почти никогда не являются проблемой, пока вы не достигнете определённого масштаба, но после этого начинают ограничивать производительность.
Микросервисы и модули
В конце концов, заводы становятся настолько огромными, что приходится отказаться от простого дизайна с основным ленточным конвейером или спагетти-дизайна — и перейти на более масштабируемую структуру. Чтобы выйти на мега-уровень, заводы обычно используют либо систему поездов, либо модульную систему, которая примерно соответствует микросервисам или архитектуре с плагинами.
Мегабазу на основе поездов иногда называют дизайном «городских кварталов» (city-block), где поезда вокруг кварталов завода контролируют все входы и выходы. Таким образом, каждый отдельный квартал изолирован от всех остальных, поскольку все входные данные «чисты» в том смысле, что они поступают из железнодорожной сети. Это почти идентично архитектуре микросервисов (по HTTP) или межпроцессному взаимодействию (IPC), с аналогичными потенциальными проблемами из-за задержек I/O, поскольку результаты не могут поступать постоянно, они должны передаваться в «пакетах» или поездах по железнодорожной сети.
Модульная архитектура пытается сохранить некое подобие основного конвейера, но вместо этого разделяет ленты на заводе и использует модульные блоки, которые принимают стандартные входы и стандартные выходы. Иногда этого можно достичь полностью с помощью дронов, но обычно материалы приходится доставлять по конвейеру на большие расстояния. Это очень похоже на систему модулей для монолитного приложения с теми же компромиссами.
Такие мегабазы представляют верхний уровень дефолтного сервера Factorio. Конечно, существует много модов, которые гораздо усложняют игру.
Распределённые системы
Space Exploration — полностью переделанная версия Factorio для колонизации космоса. Здесь планеты становятся ограниченными ресурсами, требуя от игроков колонизировать другие миры и использовать ракеты для передачи ресурсов между планетами. Из-за огромной задержки с доставкой материалов между планетами, координация этих баз приводит к возникновению проблем, сходных с глобально распределённой системой баз данных. Даже в логической сети приходится бороться с задержкой, потому что автоматическая система теряет из виду элементы, которые запущены, но ещё не достигли целевой планеты. Если это не учитывать, возникают дубликаты запросов для всех нужных элементов. С точно такой же проблемой сталкиваются распределённые системы при попытке обеспечить согласованность между узлами.
Вывод
В целом софтверная индустрия не имеет ни малейшего представления, как находить и нанимать лучших разработчиков. Наверное, совместная игра в Factorio стала лучшим техническим собеседованием, которые мы когда-либо проводили. И это нас сильно смущает. Такое собеседование дико непрактично, занимает более 20 часов в мультиплеере с первого раза или 8 часов для команды опытных игроков. Что из этого можно извлечь? Не знаю. Мы, конечно, не можем перейти на Factorio в качестве метода собеседований — с таким же успехом можно просто дать кандидату домашнее задание.
Но это уже лучше, чем собеседование на доске.