Чтобы помочь кандидатам лучше понять процесс найма, подготовиться к собеседованию морально, а также взглянуть на него со стороны с меньшим стрессом, я разработал небольшой текстовый квест на движке Twine с нелинейным сюжетом.
Почему текстовый квест?
Жанр текстовых квестов - формат, в котором игроки погружаются в мир приключений, основанный на словах и воображении. Эти игры предлагают уникальный опыт, позволяя каждому принимать решения, влиять на ход сюжета и взаимодействовать с окружающей средой, используя лишь текстовые команды. В урезанном виде текстовые квесты встречаются и в современных играх - например, в диалогах.
Для меня эталоном качественных, нелинейных и захватывающих текстовых квестов являются квесты из Космических Рейнджеров. От ролевые фентези игр до экономических симуляторов горнолыжных курортов, каждый с приятной долей юмора. Помню как на прохождение квеста "Мастер Иикэ-Бааны" у меня уходили добрые 2 часа. Зато, как правило, я получал достойное вознаграждение за такие квесты. Чем сложнее и длиннее квест - тем больше награда.
Пару лет назад я сделал текстовый квест - симулятор поиска работы в IT. Не помню как пришла в голову идея, но безусловно, я, вдохновленной ностальгией по космическим рейнджерам, хотел сделать его интересным и реиграбельным. Главная цель - синтезировать различные активности, которые доступны начинающему специалисту в поиске работы в IT в игровой форме. Таким образом потенциальный кандидат тренируется и лучше понимает процесс найма. Спустя 2 года я добавил несколько языков программирования, Chat-GPT и повысил возможные зарплаты.
Движок Twine и язык Harlowe
Разработку начал на движке Twine — это платформа для создания интерактивных текстовых игр и историй без необходимости программировать на сложных языках. Игры в Twine состоят из отдельных узлов или «пассажей», которые представляют собой текстовые блоки, связываемые гиперссылками. Игрок взаимодействует с историей, переходя между этими узлами, делая выборы, которые влияют на развитие сюжета. Каждый узел может содержать текст, изображения, аудио и элементы сценариев для создания логики, изменяющей сюжет в зависимости от действий игрока. Конечно, можно было это запрограммировать, но визуальный редактор пассажей - вещь все-таки удобная.
Если другие программисты учат Rust или Go, то я учу никому ненужный экзотичный Harlowe.
Начнем с простого.
-
Переменные
<!--присвоение значений--> (set: _vacancy to "Junior разработчик") <!--локальная переменная, внутри одного пассажа--> (set: $metWithFriends to true) <!--глобальная переменная--> <!--использование переменной--> (print: _vacancy) (print: $metWithFriends
-
Условия
(if: $challengePassed is true)[Небольшой подвох, но Иван справился с задачей за пару часов] (else:)[Иван недостаточно прокачался в этой области. К сожалению, он терпит неудачу.]
-
Ссылка на другой пассаж
[[Закрыть резюме ->Сайт для поиска работы]]
Иногда перед переходом нужно поменять состояние. В таком случае спасает функция link.
-
Ссылка с действиями
(link: $salaryLinkText)[(set: $salary to _salary)(goto: "Зарплатные ожидания в резюме")]
-
Цикл
(for: each _vacancy, ...$visibleVacancies)[ (print: _vacancy) ]
Бросание кости придает игре больше непредсказуемости.
-
Генерация случайного числа
(random: 1, 10)
Вложенные пассажи.
Чтобы пассаж можно было переиспользовать, можно рендерить его в другом пассаже. Получается эдакая модульная модель.
(set: $passage to (passage:)'s name)
(display: "Время")
(display: "Обновить состояние")
Но на простых переменных далеко не уедешь. Для того, чтобы сложный мир было проще менять нужны более сложные структуры данных.
-
Создание простого массива
(set: $skills to (a:"Базы данных", "Знание алгоритмов", "Коммуникабельность", "Стрессоустойчивость", "Обучаемость", "Git"))
Немного был удивлен синтаксисом обращения к элементу массива. Посмотрите на это:
-
Обращение к элементу массива
$editableSkills's 1st $editableSkills's 2nd $editableSkills's 3rd $editableSkills's 4th
Еще немного странно выглядит ассоциативный массив, в котором порядок элементов важен для правильного соответствия.
-
Задание ассоциативного массива
(set: $vacancy1 to (dm: "title", "Developer / Frontend разработчик", "salaryText", "от 100 000 руб. до вычета налогов", "salary", 90000, "skills", (a: "UI/UX", "HTML/CSS"), "experience", 2, "description", "Проект в сфере онлайн-платежей."))
Такие массивы можно засунуть в датасет - коллекцию уникальных элементов. Например так:
-
Создание датасета
(set: $visibleVacancies to (ds: $vacancy1,$vacancy2,$vacancy3,$vacancy4,$vacancy5,$vacancy6))
С течением времени я стал жалеть, что выбрал Twine и Harlowe для моей идеи. Но назад было идти уже поздно. В итоге получилось 80 пассажей и больше 1000 строк кода и текста. Я давал эту игру участникам курса, как материал, призванный применить знания полученные на протяжении всего курса в такой вот нестандартной форме. На удивление, игра всем понравилась, хотя и визуального сопровождения в ней не было. Поэтому я и решил ее выложить. Писал текст и код я, руководствуясь своим опытом как собеседуемого, так и собеседующего.
Сюжет
Переходи к заключению, если не хочешь спойлеров.
Иван типишный вайтишник-свитчер - то есть человек меняющий свой род деятельности на айти. Работает консультантом в банке. Однако попал под сокращение и согласился на уменьшение ставки и рабочих часов наполовину. Теперь он намерен найти работу в IT. На пути к работе мечты его поджидают различные испытания. В игре есть фриланс биржи, OpenSource репозитории, leetcode задачи, Chat-GPT и старый добрый хабр. Для успешного прохождения игры рекомендую прочитать статью: Как повысить свои шансы на оффер, когда ты джун?
В игре я старался сделать условия максимально приближенные к реальным. Позовут Ивана на собеседование или нет по большей части зависит от его резюме. Выбор действия не всегда очевиден. Иногда решения, кажущиеся непродуктивными могут привести к неожиданному результату, и наоборот. Задача игрока - получить оффер с максимальной зарплатой.
У игрока есть специальная способность просить больше денег на собеседовании и она прокачивается. Но не все так просто. Если игрок будет слишком медлителен, то после определенного времени Иван потеряет мотивацию и игрок проиграет. Возможно, что игрок получит отказ на всех собеседованиях из-за завышенных требований и слабой компетенции.
Заключение
Текстовые квесты — это отличный способ объединить обучение и развлечение в одном формате. Вдохновленный ностальгией по «Космическим рейнджерам», я создал интерактивный симулятор поиска работы в IT, который помогает игрокам лучше понять процесс найма. Надеюсь, что моя игра станет полезным и увлекательным инструментом для всех, кто начинает свой путь в IT.
Ссылка на квест: Помоги Ивану найти работу
В Telegram группе Собес делимся опытом и помогаем друг другу в прохождении собесов в IT - вступайте.
Еще полезные ресурсы для джунов ищущих работу - у меня в профиле.
sobeskiller
Гы. Это постирония наверно такая? Поиск работы превратился в квест! Вот раньше было - просто берёшь и находишь работу. Потому что эта работа есть и нужен хоть кто-то чтобы её делать. А сейчас работа - суперприз в игре! Надеюсь в будущем эта игра не превратится в шутинг от первого лица...