Берут выпускника на оклад в 65 тысяч. «Примерно через полгода работы ты окупишь вложения в обучение и выйдешь в плюс!» — весело сообщает сайт. Понимаете масштаб катастрофы? Это не «ЯЮниор», а «ЯЛох» какой-то. Нормальный человек скорее всего не будет тележить 11 месяцев, а найдёт работу раньше, так как за это время раскачается самостоятельно. Только самые прямолинейные и исполнительные дойдут до конца, но даже среди них вряд ли многие просидят потом 6 месяцев в такой конторе (об этом чуть позже). Те, кто посообразительней, да поталантливее, свалят гораздо раньше. А контора только в плюсе будет. Досидят и останутся только совсем уж специфические кадры.
А теперь самая мякотка: останутся где? Чем придётся заниматься? Низкосортным гиперкежэм. Причём по крайней мере по состоянию на год назад (когда схема со школой уже была в самом разгаре) автор признаётся, что разработка всех игр пока происходит в минус. То есть это контора убыточного гиперкежа, существующая, надо полагать, исключительно на деньги с обучения студентов.
Надо сказать пару слов об атмосфере в студии. Роман часто снимает ролики в офисе и в кадр попадают программисты. Это горстка людей, находящиеся в маленьком кабинете, и сидящие по кругу лицом к стене, уставившись в ноутбуки (видимо, собственные). Сакутин спокойно ходит между ними, отрывает от работы в любой момент ради ролика, уничижительно шутит. Создаётся полное ощущение самодура-начальника по типу Майкла Скотта из сериала Офис.
Апофеозом самодурства, конечно, является шоу «код в мешке». В нём Сакутин выступает ведущим шоу по типу своя игра, но на тему геймдева, а участниками — его сотрудники, которые грустно признаются, что пришли, потому что их «попросили» или «заставили». На протяжении выпуска участники отвечают на вопросы Романа, а он их весело оскорбляет и подкалывает.
Я надеюсь, никому не надо объяснять, что сотрудники находятся в зависимом положении и такое поведение в любой нормальной компании считается недопустимым и влечёт немедленное увольнение, даже если все участники сказали, что им нормально (что ничего не значит, так как они находятся в зависимом положении).
Более того, большинство из тех, кто всё-таки окончил курс до конца (опять же, по признанию автора) устраиваются именно в их контору. Видимо, не очень-то в других местах востребованы такие специалисты, раз остаются в таких условиях клепать убыточные однокнопочные ранеры про летящих на пердяже персонажей, презервативы и прочую срань (справедливости ради, не всё в таком духе, но приличное количество). Это и не удивительно, раз менторы за свою жизнь ничего сложнее не делали, а скорее всего и сами всему научились, закончив этот же самый курс. Эдакая замкнутая система подготовки бесполезных кадров получается. Примечательно, что Роман хвастает, что они сильно переработали курс, когда стали массово нанимать студентов к себе. Дескать, выкинули интересные теоретические материалы, но добавили больше того, что пригождается на практике. Надо понимать, пригождается на практике конкретно в этой конторе гиперкэжа.
А теперь самая мякотка: останутся где? Чем придётся заниматься? Низкосортным гиперкежэм. Причём по крайней мере по состоянию на год назад (когда схема со школой уже была в самом разгаре) автор признаётся, что разработка всех игр пока происходит в минус. То есть это контора убыточного гиперкежа, существующая, надо полагать, исключительно на деньги с обучения студентов.
Надо сказать пару слов об атмосфере в студии. Роман часто снимает ролики в офисе и в кадр попадают программисты. Это горстка людей, находящиеся в маленьком кабинете, и сидящие по кругу лицом к стене, уставившись в ноутбуки (видимо, собственные). Сакутин спокойно ходит между ними, отрывает от работы в любой момент ради ролика, уничижительно шутит. Создаётся полное ощущение самодура-начальника по типу Майкла Скотта из сериала Офис.
Апофеозом самодурства, конечно, является шоу «код в мешке». В нём Сакутин выступает ведущим шоу по типу своя игра, но на тему геймдева, а участниками — его сотрудники, которые грустно признаются, что пришли, потому что их «попросили» или «заставили». На протяжении выпуска участники отвечают на вопросы Романа, а он их весело оскорбляет и подкалывает.
Я надеюсь, никому не надо объяснять, что сотрудники находятся в зависимом положении и такое поведение в любой нормальной компании считается недопустимым и влечёт немедленное увольнение, даже если все участники сказали, что им нормально (что ничего не значит, так как они находятся в зависимом положении).
Более того, большинство из тех, кто всё-таки окончил курс до конца (опять же, по признанию автора) устраиваются именно в их контору. Видимо, не очень-то в других местах востребованы такие специалисты, раз остаются в таких условиях клепать убыточные однокнопочные ранеры про летящих на пердяже персонажей, презервативы и прочую срань (справедливости ради, не всё в таком духе, но приличное количество). Это и не удивительно, раз менторы за свою жизнь ничего сложнее не делали, а скорее всего и сами всему научились, закончив этот же самый курс. Эдакая замкнутая система подготовки бесполезных кадров получается. Примечательно, что Роман хвастает, что они сильно переработали курс, когда стали массово нанимать студентов к себе. Дескать, выкинули интересные теоретические материалы, но добавили больше того, что пригождается на практике. Надо понимать, пригождается на практике конкретно в этой конторе гиперкэжа.
Вообще, насколько я понял из отзывов, все 11 месяцев обучения вам будут тоталитарно насаждать именно сомнительный опыт, принятый у них в студии. К примеру, в отзывах часто упоминают (и даже отмечают плюсом курса, лол) очень жёсткие критерии, по которым заворачивают домашние задания.
Как это выглядит я не знаю, но можно догадаться по роликам Сакутина. В них он довольно часто берёт какой-то публичный код и начинает его обсуждать. При первом или втором просмотре может даже показаться, что он говорит по делу (если опустить шутки и оскорбления). Но если посмотреть их побольше, то замечаешь, что по сути все его замечания всегда сводятся к каким-то докапываниям до оформления и паре-тройке правил рефакторинга, которые он пихает везде и в обязательном порядке.
Например, одна из его любимых претензий к другим курсам или блогерам, это когда кто-то называет метод функцией. На первый взгляд кажется, что замечание правильное. Метод — это более точно. Более того, в документации некоторых языков, насколько я помню, проводится явная дистинкция между, например, процедурой и функцией. То есть процедура формально не является функцией (в бейсике так, если память не изменяет). Но я специально не буду смотреть, считается ли метод частным случаем функции в C# или отдельной сущностью, потому что это не так важно. Даже если это так в документации, то у этой чёткой дистинкции есть контекст, ограниченный этой самой документацией; и за его пределами следовать ему не всегда целесообразно. Потому что тогда при исследовании, например, стека вызова функций, нам бы пришлось говорить о стеке вызова методов, функций, процедур и геттеров свойств. Очевидно, что в этом контексте такой формализм излишен, и даже вреден; можно обобщить просто «функция», но Сакутин всегда и всюду в роликах поправляет, что надо говорить «метод».
Показательно, что он также является большим поклонником SOLID. О том, что в реальном геймдеве на больших проектах SOLID практически никогда не применяется, я писал отдельную статью, но в Agava об этом не в курсе, потому что никогда больших проектов не делали. На деле, почти все их игры можно писать вообще без всякой архитектуры, и они от этого ни капли не пострадают. Самый крутой проект, где участвовал Роман, и где уже можно говорить о какой-то архитектуре — это некая мобилка FrostFall, но в ней он занимался только второстепенными тасками, вроде звука и эффектиков.
Как это выглядит я не знаю, но можно догадаться по роликам Сакутина. В них он довольно часто берёт какой-то публичный код и начинает его обсуждать. При первом или втором просмотре может даже показаться, что он говорит по делу (если опустить шутки и оскорбления). Но если посмотреть их побольше, то замечаешь, что по сути все его замечания всегда сводятся к каким-то докапываниям до оформления и паре-тройке правил рефакторинга, которые он пихает везде и в обязательном порядке.
Например, одна из его любимых претензий к другим курсам или блогерам, это когда кто-то называет метод функцией. На первый взгляд кажется, что замечание правильное. Метод — это более точно. Более того, в документации некоторых языков, насколько я помню, проводится явная дистинкция между, например, процедурой и функцией. То есть процедура формально не является функцией (в бейсике так, если память не изменяет). Но я специально не буду смотреть, считается ли метод частным случаем функции в C# или отдельной сущностью, потому что это не так важно. Даже если это так в документации, то у этой чёткой дистинкции есть контекст, ограниченный этой самой документацией; и за его пределами следовать ему не всегда целесообразно. Потому что тогда при исследовании, например, стека вызова функций, нам бы пришлось говорить о стеке вызова методов, функций, процедур и геттеров свойств. Очевидно, что в этом контексте такой формализм излишен, и даже вреден; можно обобщить просто «функция», но Сакутин всегда и всюду в роликах поправляет, что надо говорить «метод».
Показательно, что он также является большим поклонником SOLID. О том, что в реальном геймдеве на больших проектах SOLID практически никогда не применяется, я писал отдельную статью, но в Agava об этом не в курсе, потому что никогда больших проектов не делали. На деле, почти все их игры можно писать вообще без всякой архитектуры, и они от этого ни капли не пострадают. Самый крутой проект, где участвовал Роман, и где уже можно говорить о какой-то архитектуре — это некая мобилка FrostFall, но в ней он занимался только второстепенными тасками, вроде звука и эффектиков.
Таким образом создаётся впечатление, что в школе «ЯЮниор» за 11 месяцев дают практические навыки для создания гиперказуалок на Unity, но дрессируют писать их «правильно» с точки зрения их лидера. Часть правил действительно имеют смысл (правда на больших проектах, а не гиперказуалках, но вопросы задавать в Agava не принято), а часть взята с потолка, потому что Роман прочитал что-то в википедии и решил задолбать этим всех своих сотрудников (как SOLID, например).
Я не расследователь. У меня нет инсайдов из студии, я составил впечатление исключительно из роликов, интервью, отзывов и чатиков. Я не ручаюсь за то, что всё действительно так плохо, как я описал. Но вот недавно мне твиттерские принесли статью на хабре про 14-летнего парня, который учится создавать игры в Unity самостоятельно. Парень совсем не вундеркинд, показывает, по моему мнению, обычные результаты для своего возраста. Но я уверен, что дай ему кто-то хорошую книжку по C#, то через пару месяцев он уже будет в состоянии запрограммировать добрую половину игр Agava. Без 11 месяцев обучения, менторов и 360 тысяч. А вы уж сами делайте выводы.
Ни для кого не секрет, что российский геймдев давно горит в пекле. Ренессанс 2021 года (Pathfinder, LoopHero, Encased, Atom, BlackBook, HighFleet) это был никакой не ренессанс, а последний вздох перед тем, как окончательно провалиться в ад. Дальше только Игропром, экшен-РПГ Смута, ну и, конечно, школа Unity-программистов ЯЮниор.
Я не расследователь. У меня нет инсайдов из студии, я составил впечатление исключительно из роликов, интервью, отзывов и чатиков. Я не ручаюсь за то, что всё действительно так плохо, как я описал. Но вот недавно мне твиттерские принесли статью на хабре про 14-летнего парня, который учится создавать игры в Unity самостоятельно. Парень совсем не вундеркинд, показывает, по моему мнению, обычные результаты для своего возраста. Но я уверен, что дай ему кто-то хорошую книжку по C#, то через пару месяцев он уже будет в состоянии запрограммировать добрую половину игр Agava. Без 11 месяцев обучения, менторов и 360 тысяч. А вы уж сами делайте выводы.
Ни для кого не секрет, что российский геймдев давно горит в пекле. Ренессанс 2021 года (Pathfinder, LoopHero, Encased, Atom, BlackBook, HighFleet) это был никакой не ренессанс, а последний вздох перед тем, как окончательно провалиться в ад. Дальше только Игропром, экшен-РПГ Смута, ну и, конечно, школа Unity-программистов ЯЮниор.
Advent of Code
#code
В этом году впервые играю в Advent of Code. Это движуха, когда весь декабрь (с первого числа и до рождества) каждый день появляется новая задачка для программистов. Первые дни разминочные, но потом, говорят, будет интересно. Решать можно на любом языке. Всё делается у вас на компьютере локально, а на сайт нужно лишь загрузить ответ.
Я решаю на С++20. Следить за моими решениями можно на гитхабе.
У меня до этого никогда не было адвент-календарей, но на самом деле что-то в этом есть. Каждый день просыпаешься, а тебя ждёт новая задачка — и впрямь появляется ощущение приближающего праздника. Вливайтесь! Пока прошло только два дня, так что можно легко нагнать.
А если хотите дополнительного фана в виде небольшого соревновательного элемента, то добавляйтесь в мою приватную лидерборду: 2341807-220d9fc6. Там не самая лучшая система рейтинга: дополнительные очки даются тем, кто решил задачу раньше других, но без учёта часовых поясов. Задачки появляются каждый день в полночь по UTC-5. Это 6 утра по моему времени или 8 утра по Москве. Так что все оказываются в разных условиях и очки не очень справедливые, но всё равно интересно смотреть за прогрессом друг друга.
#code
В этом году впервые играю в Advent of Code. Это движуха, когда весь декабрь (с первого числа и до рождества) каждый день появляется новая задачка для программистов. Первые дни разминочные, но потом, говорят, будет интересно. Решать можно на любом языке. Всё делается у вас на компьютере локально, а на сайт нужно лишь загрузить ответ.
Я решаю на С++20. Следить за моими решениями можно на гитхабе.
У меня до этого никогда не было адвент-календарей, но на самом деле что-то в этом есть. Каждый день просыпаешься, а тебя ждёт новая задачка — и впрямь появляется ощущение приближающего праздника. Вливайтесь! Пока прошло только два дня, так что можно легко нагнать.
А если хотите дополнительного фана в виде небольшого соревновательного элемента, то добавляйтесь в мою приватную лидерборду: 2341807-220d9fc6. Там не самая лучшая система рейтинга: дополнительные очки даются тем, кто решил задачу раньше других, но без учёта часовых поясов. Задачки появляются каждый день в полночь по UTC-5. Это 6 утра по моему времени или 8 утра по Москве. Так что все оказываются в разных условиях и очки не очень справедливые, но всё равно интересно смотреть за прогрессом друг друга.
Как я проводил собесы?
#light
Что ж, давайте я вам расскажу, как я проводил собесы, когда был большой начальник в маленькой студии. Речь про Dark Crystal Games, где я был лид-кодер и ещё формально технический директор. Напомню, что там мы писали тактическую РПГ Encased на Unity.
Я отвечал только за техническую часть интервью, поэтому в деталях общей картины могу слегка наврать, но в целом можно сказать, что процесс найма у нас состоял из 4 этапов.
Первым делом нужно было откликнуться на вакансию и прислать резюме. Зарплаты мы предлагали ниже рынка в силу того, что были полу-инди студией, но это компенсировалось одним из самых интересных проектов на постсоветском пространстве. Так что основную массу откликнувшихся составляли желающие перекатиться из энтерпрайза или проклятых мобилок в «настоящий» геймдев. В каких-то совсем спорных ситуациях мне показывали резюме уже на этом этапе, но в основном фильтрация производилась без меня нашим проджект-менеджером (он же геймдиректор и ваще главный человек в разработке).
Он же сам проводил второй этап, который представлял из себя что-то среднее между первичным скринингом и культурным интервью. Надо сказать, что как любая восточноевропейская студия, мы не особо много внимания уделяли софт-скилам. Вся софтскилловая часть у нас по сути сводилась к ответу самим себе на вопрос: «хочется работать совместно с этим кренделем, или ну его нафиг?». Ну ещё, конечно, любовь к Fallout и релевантным играм давала бонус. Но на этом всё. Я не говорю, что это супер правильно — на западе, например, софтскиллы даже важнее хардов — но рассказываю, как есть.
Далее у нас было два технических этапа: техническое интервью и тестовое задание. Тут уже подключался я. Кому-то мы давали оба этапа; но кому-то только одно, если видно, что кандидат годный и нет смысла гонять дополнительно. Иногда мы начинали с интервью, иногда — с тестового. Строгой формулы, как мы это решали, не было: руководствовались по ситуации. Например, если в портфолио дофига примеров кода, то тестовое не просили. А если чувак с явно хорошей теоретической базой, но мало опыта в геймдеве, то такого посылали сперва на тестовое.
Тестовое я придумал в самом начале проекта и мы его использовали до самого конца. Нужно было сделать 3D-леталку на самолётике от третьего лица. Требовалось реализовать только управление (повороты, ускорение), выпускаемые ракеты, врагов-мишени и интерфейс в виде индикаторов расстояния до них. Разрешалось делать на кубиках или бесплатных ассетах, красота не оценивалась. Я когда-то писал такое на хакатоне, поэтому к тестовому прилагалось видео, как это может выглядеть.
Изначально я написал, что задача рассчитана на 3 вечера (из расчёта 6-9 часов), но на деле большинство кандидатов делали за 2-3 часа. В поздних версиях мы также начали делать приписку, что нельзя использовать юнити-корутины и ригидбоди, чтобы кандидаты хотя бы реализовали работу с DeltaTime и проверками расстояния, а то совсем порой оценивать было нечего.
Оценивали мы наличие кодстайла и здравого смысла. То есть достаточно было не натворить какой-то лютой дичи, чтобы пройти. Под дичью я имею в виду магические константы, нейминг транслитом, баги и тому подобное. Оценивали мы толпой прямо в канале code в слаке. Делали это в домашней атмосфере, не снимая токсичные тапки. Что тоже не очень профессионально, потому что любопытные сотрудники могли проскролить чат достаточно далеко и почитать не всегда супер-политкорректные формулировки. Благо, это могли видеть только прошедшие кандидаты.
Наконец последний этап (который обычно был до тестового) — это техническое интервью. Я неоднократно упоминал статью «интервью глазами пострадавшего», как свой ориентир по собеседованиям. Собственно, я им и руководствовался, но занизил планочку, как мог, под современные реалии.
#light
Что ж, давайте я вам расскажу, как я проводил собесы, когда был большой начальник в маленькой студии. Речь про Dark Crystal Games, где я был лид-кодер и ещё формально технический директор. Напомню, что там мы писали тактическую РПГ Encased на Unity.
Я отвечал только за техническую часть интервью, поэтому в деталях общей картины могу слегка наврать, но в целом можно сказать, что процесс найма у нас состоял из 4 этапов.
Первым делом нужно было откликнуться на вакансию и прислать резюме. Зарплаты мы предлагали ниже рынка в силу того, что были полу-инди студией, но это компенсировалось одним из самых интересных проектов на постсоветском пространстве. Так что основную массу откликнувшихся составляли желающие перекатиться из энтерпрайза или проклятых мобилок в «настоящий» геймдев. В каких-то совсем спорных ситуациях мне показывали резюме уже на этом этапе, но в основном фильтрация производилась без меня нашим проджект-менеджером (он же геймдиректор и ваще главный человек в разработке).
Он же сам проводил второй этап, который представлял из себя что-то среднее между первичным скринингом и культурным интервью. Надо сказать, что как любая восточноевропейская студия, мы не особо много внимания уделяли софт-скилам. Вся софтскилловая часть у нас по сути сводилась к ответу самим себе на вопрос: «хочется работать совместно с этим кренделем, или ну его нафиг?». Ну ещё, конечно, любовь к Fallout и релевантным играм давала бонус. Но на этом всё. Я не говорю, что это супер правильно — на западе, например, софтскиллы даже важнее хардов — но рассказываю, как есть.
Далее у нас было два технических этапа: техническое интервью и тестовое задание. Тут уже подключался я. Кому-то мы давали оба этапа; но кому-то только одно, если видно, что кандидат годный и нет смысла гонять дополнительно. Иногда мы начинали с интервью, иногда — с тестового. Строгой формулы, как мы это решали, не было: руководствовались по ситуации. Например, если в портфолио дофига примеров кода, то тестовое не просили. А если чувак с явно хорошей теоретической базой, но мало опыта в геймдеве, то такого посылали сперва на тестовое.
Тестовое я придумал в самом начале проекта и мы его использовали до самого конца. Нужно было сделать 3D-леталку на самолётике от третьего лица. Требовалось реализовать только управление (повороты, ускорение), выпускаемые ракеты, врагов-мишени и интерфейс в виде индикаторов расстояния до них. Разрешалось делать на кубиках или бесплатных ассетах, красота не оценивалась. Я когда-то писал такое на хакатоне, поэтому к тестовому прилагалось видео, как это может выглядеть.
Изначально я написал, что задача рассчитана на 3 вечера (из расчёта 6-9 часов), но на деле большинство кандидатов делали за 2-3 часа. В поздних версиях мы также начали делать приписку, что нельзя использовать юнити-корутины и ригидбоди, чтобы кандидаты хотя бы реализовали работу с DeltaTime и проверками расстояния, а то совсем порой оценивать было нечего.
Оценивали мы наличие кодстайла и здравого смысла. То есть достаточно было не натворить какой-то лютой дичи, чтобы пройти. Под дичью я имею в виду магические константы, нейминг транслитом, баги и тому подобное. Оценивали мы толпой прямо в канале code в слаке. Делали это в домашней атмосфере, не снимая токсичные тапки. Что тоже не очень профессионально, потому что любопытные сотрудники могли проскролить чат достаточно далеко и почитать не всегда супер-политкорректные формулировки. Благо, это могли видеть только прошедшие кандидаты.
Наконец последний этап (который обычно был до тестового) — это техническое интервью. Я неоднократно упоминал статью «интервью глазами пострадавшего», как свой ориентир по собеседованиям. Собственно, я им и руководствовался, но занизил планочку, как мог, под современные реалии.
Начинал интервью я всегда с объяснения, что чёткого списка обязательных вопросов нет. Что я буду прыгать с темы на тему, что можно чего-то не знать, и можно об этом так и сказать — мы тогда просто не пойдём углубляться в эту тему, а поговорим о чём-то другом. Идея состояла в том, чтобы нащупать общее представление об уровне кандидата в разных сферах (С#, математика, С++, графика).
Я называл это методом бинарного поиска. Если представить вопросы по теме в виде линии от простого к сложным, то я задавал вопрос где-то посередине и дальше ориентировался по ответам. Если кандидат отвечает хорошо, то я прыгаю в середину отрезка справа, иначе — влево. И так, в ходе эдакой пристрелки из 5-6 вопросов, становится понятен общий уровень по теме.
Секцию C# я почти всегда начинал с вопроса «что такое виртуальная функция?». Разминочный вопрос, на который отвечали практически все, но даже на нём уже видно уровень: кто-то начинает рассказывать, как устроена vtable или рассказывать про производительность в сравнении с обычными функциями, а у кого-то знания ограничены ключевым словом. Далее я старался спрашивать более сложные вопросы, хотя по C# трудно спросить что-то сложное. Чтобы не сочинять каждый раз на ходу и чтобы не повисало пауз, у меня всегда перед глазами был файлик с накиданными заранее вопросами, из которых я уже выбирал. Чтобы пройти на мидла надо было хотя бы отличать стек и кучу, знать в чём опасность float’ов, знать размер байта, отличать Dictionary от List и оценивать стоимость их операций, представлять в общих чертах, как работает GC. Да в общем-то и всё. Бонусные очки давались, если человек может внятно рассказать, как устроены флоаты, хэшмапа, когда и почему происходит boxing.
Вторая обязательная секция была математика. Минимальный джентльменский набор здесь это понимание тригонометрии, знание отличий векторного и скалярного произведений, хотя бы приблизительное представление о том, как работают матрицы трансформации. Иногда я также спрашивал примитивный тервер или комбинаторику. Ну типа: «пушка попадает с вероятностью 50%, какова вероятность попасть 3 раза подряд?». Если у человека не хватает интуиции это посчитать без формул, то скорее всего это красный флаг. Иногда также мог спросить чего-нибудь про графы (здесь ничего конкретного не требовалось, но хорошо, если человек содержательно может поговорить за Дейкстру, А* или чего-нибудь такое).
Остальные секции по большому счёту были опциональные, но знания в них были большим преимуществом. В первую очередь это, конечно, С++. Тут можно было бы много всякого интересного спрашивать в правой части бинарного поиска: всякие там универсальные ссылки, value-категории, guaranteed copy elision или, прости господи, SFINAE (последнее это очень локальный мем — по случаю передаю привет). Но, к сожалению, так далеко мы ни разу не добирались. Всё-таки вакансия была по C#.
Что касается графики, то первым пристрелочным вопросом был «что такое depth buffer?». Далее я мог поспрашивать про освещение и нормали, инстансинг, всякие кулинги, как реализуются тени или какой-нибудь моушн-блюр. Мой любимый вопрос по графике это классический «назовите как можно больше причин, почему экран может быть чёрным?». Но, по-моему, я так ни разу его и не задал (вопрос классный, но его надо задавать чуваку, который не только шарит в графике, но и который чувствует себя уверенно на интервью — иначе перенервничает и поплывёт).
Я называл это методом бинарного поиска. Если представить вопросы по теме в виде линии от простого к сложным, то я задавал вопрос где-то посередине и дальше ориентировался по ответам. Если кандидат отвечает хорошо, то я прыгаю в середину отрезка справа, иначе — влево. И так, в ходе эдакой пристрелки из 5-6 вопросов, становится понятен общий уровень по теме.
Секцию C# я почти всегда начинал с вопроса «что такое виртуальная функция?». Разминочный вопрос, на который отвечали практически все, но даже на нём уже видно уровень: кто-то начинает рассказывать, как устроена vtable или рассказывать про производительность в сравнении с обычными функциями, а у кого-то знания ограничены ключевым словом. Далее я старался спрашивать более сложные вопросы, хотя по C# трудно спросить что-то сложное. Чтобы не сочинять каждый раз на ходу и чтобы не повисало пауз, у меня всегда перед глазами был файлик с накиданными заранее вопросами, из которых я уже выбирал. Чтобы пройти на мидла надо было хотя бы отличать стек и кучу, знать в чём опасность float’ов, знать размер байта, отличать Dictionary от List и оценивать стоимость их операций, представлять в общих чертах, как работает GC. Да в общем-то и всё. Бонусные очки давались, если человек может внятно рассказать, как устроены флоаты, хэшмапа, когда и почему происходит boxing.
Вторая обязательная секция была математика. Минимальный джентльменский набор здесь это понимание тригонометрии, знание отличий векторного и скалярного произведений, хотя бы приблизительное представление о том, как работают матрицы трансформации. Иногда я также спрашивал примитивный тервер или комбинаторику. Ну типа: «пушка попадает с вероятностью 50%, какова вероятность попасть 3 раза подряд?». Если у человека не хватает интуиции это посчитать без формул, то скорее всего это красный флаг. Иногда также мог спросить чего-нибудь про графы (здесь ничего конкретного не требовалось, но хорошо, если человек содержательно может поговорить за Дейкстру, А* или чего-нибудь такое).
Остальные секции по большому счёту были опциональные, но знания в них были большим преимуществом. В первую очередь это, конечно, С++. Тут можно было бы много всякого интересного спрашивать в правой части бинарного поиска: всякие там универсальные ссылки, value-категории, guaranteed copy elision или, прости господи, SFINAE (последнее это очень локальный мем — по случаю передаю привет). Но, к сожалению, так далеко мы ни разу не добирались. Всё-таки вакансия была по C#.
Что касается графики, то первым пристрелочным вопросом был «что такое depth buffer?». Далее я мог поспрашивать про освещение и нормали, инстансинг, всякие кулинги, как реализуются тени или какой-нибудь моушн-блюр. Мой любимый вопрос по графике это классический «назовите как можно больше причин, почему экран может быть чёрным?». Но, по-моему, я так ни разу его и не задал (вопрос классный, но его надо задавать чуваку, который не только шарит в графике, но и который чувствует себя уверенно на интервью — иначе перенервничает и поплывёт).
Психологическая составляющая на собеседовании вообще важная. Не смотря на то, что ты в начале говоришь, что можно чего-то не знать и это не страшно, половина кандидатов теряется после первого «не знаю». Ты задаёшь новые вопросы на другую тему, а кандидат явно продолжает думать над предыдущим. Приходится дополнительно повторять, что ничего страшного не произошло. Также я всегда в начале делал ремарку, что могу перебивать из экономии времени, если вижу, что человек отвечает в правильном русле (некоторые отвечают хорошо, но прям о-о-очень медленно или концентрируются на несущественных деталях), и что если я останавливаю, то это скорее хороший знак, чем плохой. Но, как правило, после первой остановки приходится это ещё раз объяснить, чтобы человек не переживал.
В целом, я старался не подавать виду, если ответы прям плохие и всегда задавал ещё какое-то количество вопросов из вежливости, но не уверен, что умел это маскировать очень хорошо. Когда даже гейм-директор, который присутствовал на всех собесах, вздыхает от ответа про виртуальную функцию, то в целом уже всё понятно.
В самом конце, если интервью прошло слишком быстро или впечатление смазанное, я мог ещё спросить что-то практическое. Ну, типа: «на бильярдом столе 10 тысяч шаров, все двигаются и сталкиваются. Как будем оптимизировать?» Здесь не было никаких правильных ответов, это чисто на послушать, как человек рассуждает. Ну ещё мог спросить логическую задачу про червячков в стиле google, но это уже больше кека-ради.
Как видите, ничего сверхъественного я не спрашивал. В целом, открытая вакансия висела у нас 1-2 месяца. За месяц я в среднем, наверное, видел штук 10 резюме, штук 5 тестовых и проводил штук 5 интервью. 1-2 человека в итоге получали офер, но не все соглашались или приживались после выхода на работу, поэтому найм иногда затягивался. Цифры очень приблизительные.
Ну вот пожалуй и всё, что мне есть рассказать по теме. Пообещайте, что не будете использовать эту схему, как руководство к действию. Она здесь исключительно для удовлетворения любопытства и не претендует на ролевую модель.
В целом, я старался не подавать виду, если ответы прям плохие и всегда задавал ещё какое-то количество вопросов из вежливости, но не уверен, что умел это маскировать очень хорошо. Когда даже гейм-директор, который присутствовал на всех собесах, вздыхает от ответа про виртуальную функцию, то в целом уже всё понятно.
В самом конце, если интервью прошло слишком быстро или впечатление смазанное, я мог ещё спросить что-то практическое. Ну, типа: «на бильярдом столе 10 тысяч шаров, все двигаются и сталкиваются. Как будем оптимизировать?» Здесь не было никаких правильных ответов, это чисто на послушать, как человек рассуждает. Ну ещё мог спросить логическую задачу про червячков в стиле google, но это уже больше кека-ради.
Как видите, ничего сверхъественного я не спрашивал. В целом, открытая вакансия висела у нас 1-2 месяца. За месяц я в среднем, наверное, видел штук 10 резюме, штук 5 тестовых и проводил штук 5 интервью. 1-2 человека в итоге получали офер, но не все соглашались или приживались после выхода на работу, поэтому найм иногда затягивался. Цифры очень приблизительные.
Ну вот пожалуй и всё, что мне есть рассказать по теме. Пообещайте, что не будете использовать эту схему, как руководство к действию. Она здесь исключительно для удовлетворения любопытства и не претендует на ролевую модель.
Advent of Code 2022 Done!
#code
Ну вот и закончился Advent of Code.
Расскажу про задачки, которые хоть чем-то запомнились:
8. Treetop Tree House.
Сама задача не особо примечательная, но я уже после основного решения выпендрился оптимизацией, сделав поиск однопроходным и заюзав intrinsic functions (get_trailing_zeros).
11. Monkey in the Middle.
Первая задача, в которой надо было минимально подумать, заглянув в инпут и проанализировав его. Про наименьшее общее кратное. Хотелось бы больше такого.
13. Distress Signal.
Мудацкая задача со списками, которая легко решается в какой-нибудь динамике типа python или lua, чуть ли не простым eval(), но на крестах задолбёшься только структуры заводить.
16. Proboscidea Volcanium.
Пожалуй, самая интересная задача. Нужно было сначала упростить граф + запилить кэширование стейтов тем или иным способом. Плюс во второй части нужно было придумать, как "распараллелить" дерево возможностей. Жалко, что оптимальное решение у слона и человека не пересекается. Можно было ещё усложнить немного. Тем не менее, понравилось больше всего. Классная.
17. Pyroclastic Flow.
Неплохая задача про тетрис. Выпендрился тем, что уложил многоэтажные фигуры тетриса целиком в один uint64_t и двигал их влево-вправо простым шифтом. Ну и в стакан зашивал битовыми операциями соответственно.
Безумно длинный стакан проблем не вызывает, так как паттерн быстро начинает повторяться, но у меня решение получилось не универсальным. Может быть позже вернусь и наведу красоту.
19. Not Enough Minerals.
На эту задачу бомбил больше всего. На первый взгляд похожа на 16, но честно закэшировать стейты не получается. В итоге решается эвристиками отсечения, которые на самом деле не гарантируют правильного ответа. Причём самое подлое, что тестовые данные подобраны хитрые, на которых простые эвристики не работают, но которые вполне подходят для самого паззла. То есть в выигрыше были те, кто раньше забили на тестовый пример и сразу попробовали свои эвристики на основном инпуте.
22. Monkey Map.
Максимально душная задача. По началу ничего особенно сложного, но во второй части появляется условие, которое хрен запишешь сколько-нибудь красиво. Получается соревнование на то, кто быстрее сможет это захардкодить под конкретный инпут и при этом не запутается. Я всё равно проспал, поэтому решил решать честно и универсально, на что угрохал весь день. Но под конец уже так преисполнился, что даже объяснение алгоритма на реддит запостил.
***
В целом был интересный опыт. Но под конец уже знатно задолбали задачи про регулярные квадратные сетки и ту или иную вариацию поиска на ней. На последней собирался уже в шашлык стрелять, если снова будет сетка. Хотелось бы больше чего-то, где надо именно догадаться, как решать, а не просто аккуратно надолбить условия и поиск в ширину.
Участвовать в таком конкурсе на крестах, это, конечно, «здоровья погибшим», как говорится; но ни о чём не жалею. Насчёт следующего года не уверен, но может быть поучаствую на питоне, чтобы подучить его наконец-то.
И да: всех с Рождеством!
#code
Ну вот и закончился Advent of Code.
Расскажу про задачки, которые хоть чем-то запомнились:
8. Treetop Tree House.
Сама задача не особо примечательная, но я уже после основного решения выпендрился оптимизацией, сделав поиск однопроходным и заюзав intrinsic functions (get_trailing_zeros).
11. Monkey in the Middle.
Первая задача, в которой надо было минимально подумать, заглянув в инпут и проанализировав его. Про наименьшее общее кратное. Хотелось бы больше такого.
13. Distress Signal.
Мудацкая задача со списками, которая легко решается в какой-нибудь динамике типа python или lua, чуть ли не простым eval(), но на крестах задолбёшься только структуры заводить.
16. Proboscidea Volcanium.
Пожалуй, самая интересная задача. Нужно было сначала упростить граф + запилить кэширование стейтов тем или иным способом. Плюс во второй части нужно было придумать, как "распараллелить" дерево возможностей. Жалко, что оптимальное решение у слона и человека не пересекается. Можно было ещё усложнить немного. Тем не менее, понравилось больше всего. Классная.
17. Pyroclastic Flow.
Неплохая задача про тетрис. Выпендрился тем, что уложил многоэтажные фигуры тетриса целиком в один uint64_t и двигал их влево-вправо простым шифтом. Ну и в стакан зашивал битовыми операциями соответственно.
Безумно длинный стакан проблем не вызывает, так как паттерн быстро начинает повторяться, но у меня решение получилось не универсальным. Может быть позже вернусь и наведу красоту.
19. Not Enough Minerals.
На эту задачу бомбил больше всего. На первый взгляд похожа на 16, но честно закэшировать стейты не получается. В итоге решается эвристиками отсечения, которые на самом деле не гарантируют правильного ответа. Причём самое подлое, что тестовые данные подобраны хитрые, на которых простые эвристики не работают, но которые вполне подходят для самого паззла. То есть в выигрыше были те, кто раньше забили на тестовый пример и сразу попробовали свои эвристики на основном инпуте.
22. Monkey Map.
Максимально душная задача. По началу ничего особенно сложного, но во второй части появляется условие, которое хрен запишешь сколько-нибудь красиво. Получается соревнование на то, кто быстрее сможет это захардкодить под конкретный инпут и при этом не запутается. Я всё равно проспал, поэтому решил решать честно и универсально, на что угрохал весь день. Но под конец уже так преисполнился, что даже объяснение алгоритма на реддит запостил.
***
В целом был интересный опыт. Но под конец уже знатно задолбали задачи про регулярные квадратные сетки и ту или иную вариацию поиска на ней. На последней собирался уже в шашлык стрелять, если снова будет сетка. Хотелось бы больше чего-то, где надо именно догадаться, как решать, а не просто аккуратно надолбить условия и поиск в ширину.
Участвовать в таком конкурсе на крестах, это, конечно, «здоровья погибшим», как говорится; но ни о чём не жалею. Насчёт следующего года не уверен, но может быть поучаствую на питоне, чтобы подучить его наконец-то.
И да: всех с Рождеством!
Как я обсирался #1
А давайте я запилю серию о том, как я жиденько обсирался в моей программерской карьере. На несколько постов историй у меня точно наберётся. Будем идти в хронологическом порядке, поэтому начнём со школьных времён, с моей первой и единственной олимпиады по программированию. Дело было, кажется, классе в 10-ом.
Я учился в обычной провинциальной средней школе на окраине Владивостока. И хотя с 7-го класса благодаря какому-то частному спонсору у нас появился компьютерный класс, на уроках информатики мы все годы либо учились печатать в Word’e, либо рисовать в Paint’e. Ну ещё изредка чертили какие-то примитивные блоксхемы на бумаге в качестве контрольных. Я же был единственный, кто умел программировать на настоящем языке программирования, а потому считался местным компьютерным гением. В те времена я называл переменные транслитом и писал без табуляции, но этого было достаточно, чтобы иметь право не ходить на занятия и сдавать выпускные экзамены, просто показывая свои программы (я достаточно старый, что застал не ЕГЭ, а устные экзамены). Причём я так закрыл экзамен не только себе, но и моему старшему брату.
У меня вообще была лучшая успеваемость на параллеле и репутация умника. В старших классах я уже даже не заполнял дневник и не делал никакие домашние работы, кроме английского. Мне и так все рисовали пятёрки, заочно считая, что я всё знаю, и тянули на медаль. Это обычное дело для провинциальных школ: им для какой-то отчётности и бенефитов от министерства образования нужно выпускать медалистов. Для полноты образа добавлю, что на уроки я тогда гонял в дедовском пиджаке (который я носил иронично), а также был обладателем жиденьких усиков девственника (эти я носил неиронично, искренне полагая, что выгляжу так старше и круче). Короче, почти классический задрот, учительский любимчик. Почти, потому что при всём при этом крысой или омежкой я всё-таки не был, держался с коллективом. Булинг иногда, конечно, прилетал, но не чаще, чем другим беткам. В целом за интеллект одноклассники мне скорее респектовали, и эго у меня было соответствующее.
Но вернёмся к олимпиадам. Как я уже сказал, меня тянули на медаль, так что я даже как-то занял второе место на краевом конкурсе сочинений, даже не зная, что участвую в нём; но вот на олимпиаду по программированию меня отправили по-честному.
Олимпиада проходила на базе универа ДВГУ, который ныне часть ДВФУ. Первый тур проводился на бумаге. Там были какие-то тривиальные задания, которые нужно было написать от руки на любом языке программирования. Я с лёгкостью накатал что-то на бейсике и сдал работу в числе первых, только укрепившись в мысли, что и во втором туре всех порву в лоскуты.
Однако во втором туре всё было гораздо серьёзнее. Это уже была настоящая олимпиада на компьютерах с настоящими олимпиадными задачами. Там я узнал, что во многих других школах, оказывается, на информатике учат паскаль или даже си. Я же знал только VB6, которого, разумеется, не стояло на универских компах.
В качестве исключения мне предложили VB.Net и даже посадили предварительно поупражняться, заявив, что это одно и то же. Я проковырялся где-то час, но так и не смог даже прочитать инпут из файла. Для понимания: я тогда вёл тетрадочку, в которую записывал как и что делать на VB6. Чтение и запись в файл у меня были записаны полным хардкодом, без малейшего понимания, что конкретно делают эти строки. И разумеется один-в-один этот код не заводился на .Net.
Дальше случился совсем стыдный кринж-момент. На школьную олимпиаду ехать надо было не самому, а с учительницей, роль которой выполняла моя мать (да-да, я ещё и учительский сыночек, хотя мама была скорее единственной, кто наоборот занижала мне отметки по русскому). Так вот. Мать присела на уши организатором про то, какой я вундеркинд-самоучка, и в итоге меня в качестве супер-дупер-исключения отправили решать олимпиаду из дома на VB6, под личную ответственность матери, что я не буду читерить и пользоваться интернетом.
А давайте я запилю серию о том, как я жиденько обсирался в моей программерской карьере. На несколько постов историй у меня точно наберётся. Будем идти в хронологическом порядке, поэтому начнём со школьных времён, с моей первой и единственной олимпиады по программированию. Дело было, кажется, классе в 10-ом.
Я учился в обычной провинциальной средней школе на окраине Владивостока. И хотя с 7-го класса благодаря какому-то частному спонсору у нас появился компьютерный класс, на уроках информатики мы все годы либо учились печатать в Word’e, либо рисовать в Paint’e. Ну ещё изредка чертили какие-то примитивные блоксхемы на бумаге в качестве контрольных. Я же был единственный, кто умел программировать на настоящем языке программирования, а потому считался местным компьютерным гением. В те времена я называл переменные транслитом и писал без табуляции, но этого было достаточно, чтобы иметь право не ходить на занятия и сдавать выпускные экзамены, просто показывая свои программы (я достаточно старый, что застал не ЕГЭ, а устные экзамены). Причём я так закрыл экзамен не только себе, но и моему старшему брату.
У меня вообще была лучшая успеваемость на параллеле и репутация умника. В старших классах я уже даже не заполнял дневник и не делал никакие домашние работы, кроме английского. Мне и так все рисовали пятёрки, заочно считая, что я всё знаю, и тянули на медаль. Это обычное дело для провинциальных школ: им для какой-то отчётности и бенефитов от министерства образования нужно выпускать медалистов. Для полноты образа добавлю, что на уроки я тогда гонял в дедовском пиджаке (который я носил иронично), а также был обладателем жиденьких усиков девственника (эти я носил неиронично, искренне полагая, что выгляжу так старше и круче). Короче, почти классический задрот, учительский любимчик. Почти, потому что при всём при этом крысой или омежкой я всё-таки не был, держался с коллективом. Булинг иногда, конечно, прилетал, но не чаще, чем другим беткам. В целом за интеллект одноклассники мне скорее респектовали, и эго у меня было соответствующее.
Но вернёмся к олимпиадам. Как я уже сказал, меня тянули на медаль, так что я даже как-то занял второе место на краевом конкурсе сочинений, даже не зная, что участвую в нём; но вот на олимпиаду по программированию меня отправили по-честному.
Олимпиада проходила на базе универа ДВГУ, который ныне часть ДВФУ. Первый тур проводился на бумаге. Там были какие-то тривиальные задания, которые нужно было написать от руки на любом языке программирования. Я с лёгкостью накатал что-то на бейсике и сдал работу в числе первых, только укрепившись в мысли, что и во втором туре всех порву в лоскуты.
Однако во втором туре всё было гораздо серьёзнее. Это уже была настоящая олимпиада на компьютерах с настоящими олимпиадными задачами. Там я узнал, что во многих других школах, оказывается, на информатике учат паскаль или даже си. Я же знал только VB6, которого, разумеется, не стояло на универских компах.
В качестве исключения мне предложили VB.Net и даже посадили предварительно поупражняться, заявив, что это одно и то же. Я проковырялся где-то час, но так и не смог даже прочитать инпут из файла. Для понимания: я тогда вёл тетрадочку, в которую записывал как и что делать на VB6. Чтение и запись в файл у меня были записаны полным хардкодом, без малейшего понимания, что конкретно делают эти строки. И разумеется один-в-один этот код не заводился на .Net.
Дальше случился совсем стыдный кринж-момент. На школьную олимпиаду ехать надо было не самому, а с учительницей, роль которой выполняла моя мать (да-да, я ещё и учительский сыночек, хотя мама была скорее единственной, кто наоборот занижала мне отметки по русскому). Так вот. Мать присела на уши организатором про то, какой я вундеркинд-самоучка, и в итоге меня в качестве супер-дупер-исключения отправили решать олимпиаду из дома на VB6, под личную ответственность матери, что я не буду читерить и пользоваться интернетом.
Когда мы приехали домой, остальные участники уже отстрелялись и ждали результатов, а меня ждали два часа полного унижения. Даже если бы я вышел в интернет (который тогда был, кстати, по карточкам dial-up), мне бы это не помогло. Потому что на листочке с заданиями, который нам дали, были настоящие олимпиадные задачи, и я не имел ни малейшего представления, как к ним подступиться. В итоге я получил только 1 балл за наполовину решённую первую задачу и предпоследнее место в общем зачёте.
Это был мощнейший удар по моему эго, когда я узнал, что на самом деле мои навыки программирования полное днище по сравнению с учениками нормальных школ. И тогда же я заработал себе мой первый (и, слава богу, единственный) синдром самозванца. Потому что в универ я поступил только благодаря школьной серебряной медали, и первые пару месяцев боялся, что я там самый дибил. Позже, правда, выяснилось, что это далеко не так. На деле в универе я тоже оказался в числе лучших студентов и кодеров, но след эта история всё равно оставила во мне серьёзный. Возможно, именно поэтому я все эти годы за версту обходил олимпиадное программирование. Декабрьский advent of code фактически первое из этой области, к чему я притронулся с тех пор.
Вот такие пироги. А в следующий раз я расскажу про мои обсёры уже из профессиональной деятельности.
Это был мощнейший удар по моему эго, когда я узнал, что на самом деле мои навыки программирования полное днище по сравнению с учениками нормальных школ. И тогда же я заработал себе мой первый (и, слава богу, единственный) синдром самозванца. Потому что в универ я поступил только благодаря школьной серебряной медали, и первые пару месяцев боялся, что я там самый дибил. Позже, правда, выяснилось, что это далеко не так. На деле в универе я тоже оказался в числе лучших студентов и кодеров, но след эта история всё равно оставила во мне серьёзный. Возможно, именно поэтому я все эти годы за версту обходил олимпиадное программирование. Декабрьский advent of code фактически первое из этой области, к чему я притронулся с тех пор.
Вот такие пироги. А в следующий раз я расскажу про мои обсёры уже из профессиональной деятельности.
Приходите слушать подкаст про С++ со мной 12 января
Поговорим про прошлое, настоящее и будущее крестов в геймдеве. Согласен, постановка вопроса звучит странно, как будто бы это не дефолтный язык в геймдеве, а какая-то экзотическая штука. Но в такие времена живём. Впрочем, и про это тоже поговорим. По ссылке есть форма, куда можно прислать вопросы для подкаста.
https://www.youtube.com/watch?v=pIUymOJtE-E
Поговорим про прошлое, настоящее и будущее крестов в геймдеве. Согласен, постановка вопроса звучит странно, как будто бы это не дефолтный язык в геймдеве, а какая-то экзотическая штука. Но в такие времена живём. Впрочем, и про это тоже поговорим. По ссылке есть форма, куда можно прислать вопросы для подкаста.
https://www.youtube.com/watch?v=pIUymOJtE-E
YouTube
366. Лучше С++ хуже нет
Мы поговорим про C++ с теми, кто в нем разбирается.
Гости:
- Сергей Федоров, Руководитель роботизации дарксторов, Яндекс Лавка, ex Руководитель бэкэнд разработки, Mail Ru Games
- Александр Тужик, Experienced Programmer, Gameplay & Graphics, Paradox Interactive…
Гости:
- Сергей Федоров, Руководитель роботизации дарксторов, Яндекс Лавка, ex Руководитель бэкэнд разработки, Mail Ru Games
- Александр Тужик, Experienced Programmer, Gameplay & Graphics, Paradox Interactive…
DevGAMM Гданьск 2023
Казалось бы, совсем недавно я выступал на DevGAMM в Минске, а на самом деле уже целых 3 года прошло. Ужас просто, как время ускоряется. Так или иначе, мне на днях компания апрувнула билеты, так что в этом году я снова лечу на эту конференцию. На этот раз выступать не буду, в этот раз я обычный посетитель, но вы всё так же можете ловить меня. На этот раз в Гданьске 1-2 марта.
Казалось бы, совсем недавно я выступал на DevGAMM в Минске, а на самом деле уже целых 3 года прошло. Ужас просто, как время ускоряется. Так или иначе, мне на днях компания апрувнула билеты, так что в этом году я снова лечу на эту конференцию. На этот раз выступать не буду, в этот раз я обычный посетитель, но вы всё так же можете ловить меня. На этот раз в Гданьске 1-2 марта.
Название: Crunch House
Жанр: Песочница, симулятор геймдев студии, экономическая стратегия
Вдохновители: RimWorld, Factorio, Prison Architect
Движок: Godot
Репозиторий: GitHub
Начало проекта: 4 сентября 2023
Подробный симулятор геймдев студии с отловом багов, рефакторингом, фичекатами, bus-фактором, документацией, мерж-конфликтами, спагети-кодом, тех.собесами, мотивацией, кранчами, пицца-патями, харассментом, кондёрами и уборкой.
Основное отличие от разнообразных казуальных симуляторов геймдева, типа GameDev Tycoon или GameDev Story, в том, что основная игровая карта будет не офис, а виртуальный мир разработки, куда симы телепортируются садясь за компьютер, и где они будут физически выращивать код, отлавливать баги и заниматься прочими активностями.
Так же планируется третья карта — мир игры.
Жанр: Песочница, симулятор геймдев студии, экономическая стратегия
Вдохновители: RimWorld, Factorio, Prison Architect
Движок: Godot
Репозиторий: GitHub
Начало проекта: 4 сентября 2023
Подробный симулятор геймдев студии с отловом багов, рефакторингом, фичекатами, bus-фактором, документацией, мерж-конфликтами, спагети-кодом, тех.собесами, мотивацией, кранчами, пицца-патями, харассментом, кондёрами и уборкой.
Основное отличие от разнообразных казуальных симуляторов геймдева, типа GameDev Tycoon или GameDev Story, в том, что основная игровая карта будет не офис, а виртуальный мир разработки, куда симы телепортируются садясь за компьютер, и где они будут физически выращивать код, отлавливать баги и заниматься прочими активностями.
Так же планируется третья карта — мир игры.
Короче, по фану стартанул новый пет-прожект чуть больше недели назад. Буду пилить по вечерам после работы по мере возможности. Если не заброшу сразу, то скорее всего это долгострой. Но поскольку это песочница, в которой нет чёткого финального состояния, и которую можно улучшать и докручивать бесконечно; меня вполне устроит судьба вечного раннего доступа.
Однако это не оторванный от реальности долгострой. Амбиции и артстайл специально подгоняются так, чтобы это было мне по силам в соло. В качестве пруфа, что я адекватно представляю объём работ, вот пример крупного проекта, в котором я был лидом: Encased. Пока никого в команду не ищу. О возможности продать не думаю тем более. Ну а там посмотрим, как говорится.
Взял Godot, потому что принципиально не хочу Unity (у меня к ней старая нелюбовь, задолго до вчерашних новостей), Unreal слишком жирный для моего проекта, а Defold не особо удобен под 3D. К тому же мне импонирует опен-сорсовость и либеральность в плане языков.
GDScript осваивать не хочу, поэтому стартанул на C#, но вполне допускаю, что позже подключу силу С++ для трушности и какой-нибудь скриптинг для модинга. Не исключаю, что на каком-то этапе проекта психану и фана ради стану прикручивать к проекту мой второй пет-проджект — скриптовый язык ку-ку, который всё ещё в зачаточном состоянии. Ну или буду совершать какие-то другие неадекватные мувы по ходу разработки. Потому что это мой проект по фану. И если не реализовывать наркоманские хотелки, то зачем это всё?
Ах, да. Исходники пока планирую оставить публичными на GitHub. Там же, на github pages, будет вестись диздок, он же вики по игре. Однако OpenSource лицензию пока не прикрепляю, так что по умолчанию действует копирайт. Будет проект полностью опенсорсным или всё-таки коммерческим, решу когда-нибудь потом.
Однако это не оторванный от реальности долгострой. Амбиции и артстайл специально подгоняются так, чтобы это было мне по силам в соло. В качестве пруфа, что я адекватно представляю объём работ, вот пример крупного проекта, в котором я был лидом: Encased. Пока никого в команду не ищу. О возможности продать не думаю тем более. Ну а там посмотрим, как говорится.
Взял Godot, потому что принципиально не хочу Unity (у меня к ней старая нелюбовь, задолго до вчерашних новостей), Unreal слишком жирный для моего проекта, а Defold не особо удобен под 3D. К тому же мне импонирует опен-сорсовость и либеральность в плане языков.
GDScript осваивать не хочу, поэтому стартанул на C#, но вполне допускаю, что позже подключу силу С++ для трушности и какой-нибудь скриптинг для модинга. Не исключаю, что на каком-то этапе проекта психану и фана ради стану прикручивать к проекту мой второй пет-проджект — скриптовый язык ку-ку, который всё ещё в зачаточном состоянии. Ну или буду совершать какие-то другие неадекватные мувы по ходу разработки. Потому что это мой проект по фану. И если не реализовывать наркоманские хотелки, то зачем это всё?
Ах, да. Исходники пока планирую оставить публичными на GitHub. Там же, на github pages, будет вестись диздок, он же вики по игре. Однако OpenSource лицензию пока не прикрепляю, так что по умолчанию действует копирайт. Будет проект полностью опенсорсным или всё-таки коммерческим, решу когда-нибудь потом.