Выбор между С# и Java (для разработки игр)

Доброго времени суток! :) У меня вопрос, который мучает меня уже несколько дней..

Дано: я java backend разработчик (с опытом работы 3 года). Мне всегда хотелось писать игры, это ведь круто и интересно :) Но проекты попадались для банков :( То ли я такой везучий человек, то ли на backend-е для игр используют не java. И да, я знаю, что для игр — это к С++, но С++ мы не подружились еще с универа.

Сейчас есть возможность пойти на игровой проект (backend часть). И вроде бы все отлично :), наконец-то есть возможность поучаствовать в написании игры ), но язык С#. Я с ним знакома, но поверхностно, все таки последние 3 года — java backend. В общем я не знаю, что мне делать..

Мой вопрос к опытным разработчикам (желательно игр) — стоит ли переходить на C#? Немного погуглив нашла — C# Unity, для java backend такого нет. На сколько в индустрии игр развит C# и C# + Unity? Посоветуйте мне, пожалуйста, а то я уже совсем запуталась..

LinkedIn

Лучшие комментарии пропустить

Писать игры не круто, не интересно, и невыгодно.
Нравятся игры — играй в них. Но лучше тебе не знать страданий тех, кто их делает.

Если ты любишь молоко, это не значит что круто есть траву и жить в стойле. Молока, кстати, при этом не употребляя.

C# отличный язык, сильно приятнее, чем Java, по крайней мере стоит его попробовать. Перейти на него не составит большого труда, а писать на нем больше удовольствия, чем на Java. Так что если интересно разрабатывать игры то точно стоит.

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Вижу сколько здесь Senior разработчиков игор и иду к вам с вопросом. Интересно ли людям такого уровня участвовать в тренингах по алгоритмам именно для геймдевов. Знаю насколько это популярно в Штатах. Именно оттуда мой друг и организатор подобных тренингов идею то и привез. Он уже 2 года занимается организацией Kyiv Algorithms Club. Но вот на днях мы нашли специалиста, который прокачан именно в гомогенных координатах в программировании. Он дает тренинг 9 ноября в Киеве. Конечно же я всех приглашаю. Но вот интересно, какие могут быть причины не обращать внимание на такие штуки?
Говорю я об этом www.facebook.com/events/1713660642029514

Java неудачный язык, хоть и у него отличные инструменты и JVM. Эдакое тело без рук и головы. C# не уверен.

Начни со своей цели — куда ты хочешь попасть конкретно? И построй себе в обратном порядке шаги к своей цели, тогда вообще нет вопросы что и как учить.

java + libgdx = игры. Можно добавить javalua для полного дзена.

Кстати, мы тут обсуждаем java vs C#, хотя на самом деле ТС возможно будет писать основную часть кода на Lua. Даже если ТС принципиальный, и твёрдо решит писать всё на джаве или под дот нет, всё равно рано или поздно возникнет проблема скриптования игровой логики, на что приходится львиная доля кода, и что лучше всего делать на Lua.

дотнет легко позволит избежать страданий с луа

для дот.нета тоже своя луа есть — www.moonsharp.org (и не только эта реализация, кстати), так что «страданий» с луа игроделу на си-шарпе не избежать /* звучит дьявольский смех */. :-)

А кто тебя заставляет на них писать?

так тебя тоже никто не заставляет писать на Lua, а ты уже начинаешь от нее(или него) страдать))

Всё зависит от того, какие игры ты хочешь писать. С джавой можно податься в андроид и писать игры для мобилок. Если для десктопа, то, конечно, среди этих двух языков шарп будет актуальнее.

C# отличный язык, сильно приятнее, чем Java, по крайней мере стоит его попробовать. Перейти на него не составит большого труда, а писать на нем больше удовольствия, чем на Java. Так что если интересно разрабатывать игры то точно стоит.

Аналогичным образом доказывается и обратное утверждение.
©

Ну для тебя конечно, ты ж лямбды не осилил, куда тебе на C# )))

Не нарывайся. Прямое обвинение и клевета — это уже скотство.

Ты выбрал анонимность — твоё право [на самом деле нет, почитай соглашение]. Но я ж могу поставить вопрос так, что или тебя пробанят со всеми твоими клонами (найти не так сложно как ты думаешь), либо вообще пойдёт травля анонимов — и это не всем понравится (да и мне не хотелось бы лишать людей этого права). Можем обойтись без поднятия этого вопроса?

Я «слегка» лучше тебя тебя владею инструментами макания в дерьмо. А не пользуюсь без надобности по одной причине: дерьмо не люблю, и другим не советую. Лучше разберись как те же грабли работают в правильную сторону.

PS. Давай, покажи свой распрекрасный код на лямдах, все осилим его читаемость. Лучше в отдельной теме, если считаешь что говнокод вообще стоит обсуждать.

код на лямдах, ... его читаемость

Кто как привык писать для того такой код и читабельнее. Можно еще подискутировать о читабОльности функциАнальных языков :). Тем не менее, есть, ведь, причины почему их используют.

Слова истинного ценителя конфликтологии как предмета.

Но начинать на нем сложнее. Много лишнего, как для первого языка..

В контексте этой темы C# не первый язык. У меня C# был первым и очень даже хорошо пошел.

Много лишнего, как для первого языка

Это в сравнении с Java? На лишем можно начать фокусироваться после изучения основ. Но тем не менее интересно узнать что там лишнее.

Например способы передать параметры в метод.. ref, out.. Что передали, что где получили, еще значения по умолчанию, еще класс или структура.. LINQ, лямбды, которые в джаве можно оставить на потом, в с# нужно учит сразу. Геттеры и сеттеры, которые нужно знать и понимать, но которые дописываются компилятором.
Я не говорю, что с# плохой язык.. Мне нравится, что есть все это, но для первого языка, имхо java проще.

Если для тебя это проблемы то следует идти в куа мануал. Ибо это база для девелопера, в js нюансов еще больше, причем менее очевидных.
Геттеры и значения по умолчанию понять тежело? Просто феспалм.

как для первого языка..

Чукча приходит в издательство и представляет свою книгу. Редактор смотрит и видит вместо букв — неведомые закорючки. Он спрашивает:
— Чукча, ты читать вообще умеешь?
— Чукча, однако, не читатель. Чукча — писатель.

как для первого языка..

Как раз таки очень даже хорош для первого языка, я сам с него начинал, и я скажу что js с прототипами и неявными преобразованиями и отсутствием для него ide типа вижуал студии выносило мне мозги куда больше чем c#, в дальнейшем на джаве чувака ждут проекты с такой сложность, что геттеры и сеттеры просто ничто.

В дальнейшем будет потом, мы говорим о первом языке. Тут изучают циклы, условия, массивы..

Это как приверженцы учится водить на жигулях которые старше тебя. «А ты полностью перебери, узнай что и как работает, а потом покупай что-то другое». И ты такой стоишь на светофоре и не знаешь, то ли ты не так что-то делаешь, то ли машина такая.

Циклы учатся легко на любом языке, вещи типа делегатов и лямбд и прочее учится позже и поэтапно и проблем не создают, ибо это первые шаги и база, потом пойдут фреемверки, паттерны... и если синтаксис все еще проблема то в jave ему будет не легче совсем а скорее наоборот.

Возможно. Делегаты и лямбды и правда дались не сразу, но с этим у многих проблемы, как говорил тренер. С пониманием остальных конструкций проблем не было.

Проблема не с пониманием, проблема с избытком. Понимается все легко, и так же легко забывается, за количеством всего этого. Мы сравнивали с java, как java помешало отсутствие структур, ref и out?

Этот «избыток» помогает писать меньше кода. Структуры помогают повысить производительность в узких местах снизив нагрузку на GC, ref и out вообще редко пользуюсь т.к. в асинхронных методах их использовать нельзя. А вот async/await, pattern matching, expression-bodied functions/properties, string interpolation мне бы сильно нехватало. Но тут дискуссия уходит далеко в оффтоп, наверное.

З шарпу понад три роки тому сам починав.
Ще й як пішло, хоча деякі речі усвідомив далеко не одразу, бо фактично самоучка, вчив сам, бо універ дно.

LINQ, лямбды, которые в джаве можно оставить на потом, в с# нужно учит сразу

Серйозно ?

для первого языка, имхо java проще.

да ладно ? Хелло ворлд і там, і там одинаковий.
ІМХО, з джавою важче заплутатись через білдери і їхні конфігі, а core код — практично одинакової, багато де концепції одинакові

а писать на нем больше удовольствия, чем на Java

Очень спорно..

Попробуйте, в C# много конструкций, которые сильно упрощают код, а в C# 8.0 будет полноценный pattern matching.

Я пробовал. Visual studio после intelliJ idea вообще не очень. Я пробовал райдер, но он был в бете, и тоже как-то не очень. Возможно проблема в том, что я не дошел до .net, но мне было очень неудобно писать. Но опять таки, возможно я просто уделил с# слишком мало времени.

В VS очень крутая отладка, но тормозит ужасно. Сейчас работаю в Rider очень доволен, но есть нюансы. Не знаю чего он не очень после IntelliJ — это же одна платформа.

Может машинка старовата или памяти мало, памяти жрет прилично, дома phenom 2 955 и 8 гб оперативы и мне решарпер уже часто проще отключить чем работать с ним, на работе i5 3.3 Гц 16 гб оперативы три года уже, не помню модель, проблем нет.

Та машина норм, памяти тоже 16 гиг и i7-7700HQ, просто после Rider VS кажется настолько неповоротливой, что к ней возвращаться не хочется :)

это 17 или 15? Спасибо , надо попробовать райдер.

2017, вроде, немного шустрее, чем 2015 не знаю, 2015 уже давно не включал. Но Rider стоит попробовать просто для сравнения. Там R# 64-битный и редактор намного отзывчивее, и нет жестких блокировок интерфейса, Roslyn не откушивает ресурсы, в общем совсем другие ощущения. Почти как в VS Code.

В геймдеве уже скриптинг. К тоиу же важно отлично юзать ООП и математику. Язык вторичен уже.

Я раньше в течении нескольких лет вёл разработку игрового сервера на C++. Еслиб я этот проект начинал на сегодняшний день, то писал бы его не на C++, не на C# и не на java, а на Go. Дизайн Go идеально подходит для разработки сервера, там есть решения всех проблем, которые как подводные камни возникают при разработке подобного софта на C++. Это встроенная многопоточность, горутины. Практически весь серверный код крутится на коротинах, для этих целей ранее применялось встроенное скриптование. Полноценные замыкания в Go ещё больше открывают возможностей, предоставляемых обычно скриптовыми языками. Утиная типизация позволяет избавиться от написания тысяч классов с дремучей архитектурой и взаимосвязями, и в дальнейшем рефакторить всё это. Механизм panic/recover позволяет сделать никогда не падающий сервер, даже в тех случаях, когда на C++ софт вылетает с ошибкой защищённого режима, таких как обращение по нулевому указателю. А это особенно важный момент, поскольку писать безошибочный код вряд ли у кого-то получится, а обеспечить стабильность работы при этом необходимо.

+1 кстати
... а то меня тут один PHP-шник, за то что я как-то Go няшкой назвал, после работы выловить угрожал ))

не следует путать горутины и корутины

Мой вопрос к опытным разработчикам (желательно игр)

хоть я не опытный разработчик (тем более игр, хотя да интересуюсь геймдевом, но больше как для хобби), но надеюсь мне тоже можно вставить свои пять копеек)

На сколько в индустрии игр развит C# и C# + Unity?

ну сишарп, наскорлько знаю второй по популярности язык для геймдева (а в инди-геймдеве — первый). И во многом благодаря как раз юньке (ну и отчасти XNA/MonoGame).

Немного погуглив нашла — C# Unity, для java backend такого нет.

для джавы есть например такое jmonkeyengine.org (по-моему больше для 3D-игр) и такое libgdx.badlogicgames.com (больше для 2D напверное, хотя 3D вродке тоже на нем можно).
Ну и всем известный майнкрафт на джаве написан)

стоит ли переходить на C#?

если идти в контору, где в основном AAA-игры пишут, то наверное лучше переходить на си-шарп (хотя если онлайн игра, то для бэкэнгда можно и джаву юзать, если заказчик и/или начальство не против), а если учить си-шарп неохота (или времени нет), то можно попробовать искать разработку игр под андроид на джаве (ну или какой-нить игровой проект, где можно писать на джаве).

а что входит в бэкент игрового проекта? движок, логика игры или только сохранение-проверка-выдача данных? в смысле если это десктопная/мобильная игра — то движок и много логики будет в самом клиенте игры а бекенд не будет отличаться особо от банковского ПО — прием данных, пересчет, выдача результата.

Хороший вопрос, кстати. Если игра подразумевает серверную часть, явно интереснее подниматься на Java, чем привязываться к мелкомягкому стеку со всей его непредсказуемостью, пусть даже и на Mono.

Протоколы общения достаточно стандартны. Даже если приспичит что-то шифрануть. Гораздо сложнее с реактивными фронтами если они пишутся в одном коде с бэкендом, но не думаю что там аж настолько всё плохо.

Что же непредсказуемого в микрасофтовском стеке, аж интересно?

микрасофт и его лицензии

Ясно, еще один чувак, который застрял в 2009 и ничего с тех пор не слышал о мелкомягких

Попробуй сам услышать, только НЕ от мелкомягких.

Протоколы общения достаточно стандартны.

Вот здесь как раз придётся проявить много творчества. Во-первых, сокетное соединение скорее всего должно быть постоянно открытым, чтобы клиент мог получать многочисленные уведомления от сервера, а не просто работал как в вебе по схеме запрос-ответ. Если игра — не стратегия какая-нибудь, и там требуется минимальный пинг, значит сам протокол будет бинарным, причём формат транзакций ещё придётся оптимизировать.

Ну здесь уже нужна конкретика. А насчёт бинарных протоколов — я бы не сильно не усердствовал. Что 50 байт послать, что 500 — разница невелика. Хотя опять же, конкретика, если это стрелядло-убивадло, здесь свои тараканы.

Для реалтайма — разница огромная.

Реалтайм — очень малюсенькая часть игрового бизнеса. И даже там есть свои фокусы, чтобы сделать пинг почти ничего не значащим, при этом не сильно страдая от читов.

Основной фокус в том, чтобы переносить серверную логику прямо в клиенты, и по факту вычисления передавать серверу уже результат. Если результат совпадает у нескольких наблюдателей, включая его самого — сервер фиксирует состояние. Если нет — значит кто-то читит.

Но это целая эпопея, честно говорю. Как по мне, чтобы этим заниматься, нужно быть шизофреником. Страшнее разработки файловых систем.

Очень маленькая часть игрового бизнеса где? Глобально по миру? В корне не согласен. В Украине, где пишут только слоты и казино на аутсорс? Возможно.
Да и делать так, как вы предлагаете, выводя логику в клиенты — лишь частный случай. Физика на двух клиентах никогда не даст вам одинаковые результаты, например.
Так же как абсолютно невозможно посчитать выстрел пули одного клиента на втором клиенте. Чтобы второй об этом узнал, первый должен сообщить об этом серверу, а сервер, в свою очередь, должен сообщить второму и только тогда второй об этом узнает, что где-то кто-то высттрелил. А доверять расчетам первого — доверять читам. В этом месте идея «посчитать на клиентах, а на севрере проверить» не сработает.

PS. А как по мне, так куда страшнее верстать сайты, например.

абсолютно невозможно

Ну дык «невозможно» любой вася скажет. А вот реализовать чтоб реально — тут уже искусство.

Конечно, в большинстве случаев такие алгоритмы надо жёстко обфусцировать, чтобы не так-то просто было почитить и даже отладчиком выловить уязвимость. Но факт в том, что технически возможны алгоритмы вообще без сервера, равно как и мультисерверные платформы.

Да никакой обфускатор не поможет, никогда. Если цель сделать чит, его сделают, т.к. можно не только код игры вытянуть, а и сетевые пакеты подделать. Единственное, что нельзя пропатчить — это сервер, так что логика важных расчетов никогда не доверяется клиентам.
Вернее, сделать это все на клиентах, конечно же, можно, никто не отрицает, полно игр, которые работают по данной модели.
Но тут вопрос в проффесианализме и правильном выборе подхода к решению задачи. Доверять любым расчетам клиентов — неправильный подход, игры с таким решением обязательно обзаводятся читами. Инфа сотка.

Ты просто никогда не сталкивался с ситуацией, когда серверу тоже есть основания не доверять, когда есть вероятность что данные не нём подделают.

Это само собой, любые сетевые данные нужно проверять всеми возможными способами, но опять же, если кто-то мимикрирует под твой сервер, создав эмулятор — это никак не скажется на целостности твоего сервера. Если это не ААА тайтл, никто этого делать не станет ибо это очень сложно. Более того, пиратам для этого придется пропатчить и игру, а, соответственно, оригинал игры будет продолжать работать с твоим, надежным сервером. И если кто-то осознанно скачает пиратку, так это абсолютно не твои проблемы.
Проблемы — это когда на оригинальном сервере читы и кража денег. Читов не избежать никак, но поскольку все расчеты на сервере — это позволяет сразу банить негодников.
Ну а если же есть шанс, что кто-то попросту получит доступ к оригинальному серверу — это абсолютно другая тема, не из области нашего обсуждения.

а что входит в бэкент игрового проекта?

Смысл бэкэнда игрового проекта состоит в том, чтобы вести учёт денег, именно вокруг этого и крутится вся разработка сервера. Всё что не связано с учётом движения финансов — можно вынести на сторону клиента.

так читерить же будут. нужно еще много чего проверять и контролировать что бы из воздуха не появлялось

без разницы, всё равно учёт всех покупок и перечислений ведётся на сервере

Для мене C# core та java core подібні. Легко буде перейти, і думаю повернутись також.
Unity доволі популярний фреймворк, я би спробував

Шарп без вариантов, Джава это такой исчезающий процент что даже не интересно.

Секта «Свидетелей смерти Java»? :)

Крупные и успешные игры на Джава (именно игры!) — очень небольшой процент.

+вакансий джунов на шарпе на порядок больше

Так речь о бекенде шла. Как правильно уже заметили если это беки разные бывают.

тут соглашусь, но всё-таки я бы советовал начинать с шарпа в играх.

Тут у меня почему-то сразу аналогия с JS всплывает. «А давайте бек на ноде запилим — у нас фронт на JS». Аналогично — а давайте C# везде юзать — мы ж на Unity решеткой крутим — пусть будет везде.

Где-то работает — где-то не очень. Ситуации разные бывают. Этим я лишь хочу подчеркнуть, что

Шарп без вариантов

наверное все-таки «с вариантами» ;)

А що маєте проти шарпу на бекі?

Незнання шарпа автором топіка проти знання жаби.

а давайте C# везде юзать — мы ж на Unity

Потому что уже есть команда .net-чиков в конторе, потому и бэк-энд на нем делают. Создавать новый отдел с другим стэком или расширить существующий просто немного другого профиля? Логичнее сделать второе.

не, он — game designer ;) а вот как-раз такие как вы эти всякие frontendы с backend-ами понапридумываете что б людей специально путать и не давать менторским тоном свою экспертное ИМХО высказывать ))

Вообще java на нынешний момент самый популярный язык программирования в мире.

К сожалению, только язык. В Java нормально не решены проблемы ни интеграции в операционку, ни UI. Так что жабе уготована судьба Линукса — быть прекрасной бекенд-платформой и не более.

Ведроид — своё направление, сильно ответвившееся. Равно как и более мелкие Java-платформы. Там да, может ещё выстрелить. А вот там где жаба заняла пик, ей стоит остановиться в экспериментах и допиливать простоту, иначе она слишком сильно растит стоимость разработки. Ведь Java-разработчики не могут просто знать новейший стек, им надо владеть и всем предыдущим. И чем более оно «революционно» (читай выпущено сырым), тем более токсичны останки кода, который на этих технологиях остался.

Java core — очень малюсенькая часть реально разросшейся жабы. Из-за того что жаба не покрыла собой базовые потребности, теперь есть куча фреймворков, фреймворчиков, библиотечек, шаблончиков, хороших практик — и всё это надо знать чтобы банально переслать кусочек данных из точки А в точку B принятым в каком-то месте «единственно правильным» способом. Ещё хуже, когда не единственным.

Так что популярность весьма условна. Java разветвилась на десятки направлений, которым уже не сойтись. И всё что их объединяет — ядрышко, несущее в себе маленькое рациональное зерно, и огромный пласт тухлого жира прошлых лет.

Включив диванного аналитика, подключусь к треду и скажу, что Java удерживает позиции, в основном, за счет JVM, которая и является тем зёрнышком, имхо. У меня все :)

Подключив прокладку меж диваном и монитором к гулгу, аналитек может обнаружить что не только на жабе можно писать под JVM.

Конечно. Но если оппонет соизволит подключить логику, то сможет догадаться, что огромная масса джавистов набралась тогда, когда альтернатив было не столько, сколько их есть сейчас.
JVM продолжает прекрасно работать, соответственно и массе джавистов нет смысла спрыгивать на всякие скалы и новомодные котлины. Убери JVM и джависты будут ненужны. А Котлин останется, например, т.к. умеет в JS и LLVM.

Hearthstone на сколько я знаю на шарпе написан. Что уже само за себя говорит.

Писать игры не круто, не интересно, и невыгодно.
Нравятся игры — играй в них. Но лучше тебе не знать страданий тех, кто их делает.

Если ты любишь молоко, это не значит что круто есть траву и жить в стойле. Молока, кстати, при этом не употребляя.

Мне кажется все тут слишком ситуативно. В компаниях типа Ubisoft или WG нормальные зп наверное. А сложность может кому то нравиться наоборот.

«наверное», «может». Расскажи лучше, устрицы вкусные?

честно — на любителя

Наверное... Тут это слово ключевое. В Киеве обе конторы есть. Зарплаты сильно ниже оутсорса. Сложность в данном понимании означает овертаймы, много овертаймов

Но лучше тебе не знать страданий тех, кто их делает.

magspace.ru/...​sochnitsa_kote_789461.png

Писать игры не круто, не интересно, и невыгодно.

А мне интересно, круто и выгодно (почти выгодно) !

Вот тебе и отдать на аутсорс, если чего понадобится.

Не круто — субъективщина.
Не интересно — субъективщина.
Не выгодно — спорно, разве что если речь за Украину.

Наоборот, спорно выгодно. И круто, и интересно. Но незаконно.

«Спорно выгодно» — это спорно, потому что я считаю, что выгодно, например. Геймдев очень разный и в разных его областях разные ценники. Но об этом мало кто говорит, почему-то.

Подписаться на комментарии