Есть ли сейчас какой-то кризис - это, конечно кто как смотрит.
На мой взгляд, исчезли из производства сложные по своей структуре игры. Сложные по логике поведения персонажей, по алгоритмам их взаимодействия. И в этом я вижу кризис самой индустри.
Почему? Ведь энтузиасты всегда есть, они никуда не исчезают, но вот вместо интересных и логически сложных продуктов мы получаем либо графических монстров со спинномозговым геймплеем, либо "казуалки". Здесь, конечно вмешиваются и расчеты маркетологов, особенно в крупных проектах - планировать что-то сложное, что возможно будет не понято среднестатистическим потребителем (IQ которого почему-то все предположительно опускают ниже плинтуса) - это просто не выгодно из-за возможных рисков, которые трудно просчитать заранее.
Это понятно. Но ведь энтузиасты то не должны брать в расчет такие вещи, на то они и энтузиасты, что делают именно то, что им самим нравится. Свои задумки воплощают.
И я кажется теперь, когда вновь вплотную коснулся ООП, меня можно сказать озарило.
Дело в том, что когда я собрал в конце 80-х своего первого Микрошу по схемам из какого-то журнала или еще откуда, скопированные моим дядькой, к нему, естественно не было никаких систем программирования, тем более визуальных, тем более объектно ориентированных.
Все делалось либо в хексредакторе, либо на ассмблере, который также был с трудом неизвестно откуда доставаем.
И все было просто.
Если тебе нужно сложить 2 числа - ты просто используешь комманду процссора для этого.
Если тебе нужно часто делать сложение или еще что-то - ты делаешь подпрограмму, к которой можешь обращаться.
Структура самой программы при этом была просто как 5 пальцев. Ты знаешь, что и в какой момент происходит во всех регистрах процессора, знаешь какие флаги в каком значении. И не потмоу, что программа была очень маленькая. Они делались и довольно большие со сложными вычислениями и алгоритмами логики.
Просто в то время все называлось своими именами и ты знал физическую суть каждого процесса.
Потом получили распространения по крайней мере в хронологии их доступности в СССР языки вроде паскаля, которые в общем-то отражали этот процесс, их называли процедурными языками.
И все в них было просто и самое главное - очевидно.
Всю структуру можно было удержать в голове, потому что ее можно было представить. Посдедовательность дейсвтий над ячейками памяти и переходы между строками вполне представляемая вещь.
И уже позднее стали вводится в широкое пользование объектно ориетнированные языки.
У меня сразу было своеобразное отторжение такого подхода, когда простые вещи вроде подпрограмм и функций заменяются на абстрактные объекты и методы, просто потому, что терялась за этими красивыми понятиями физическая суть происходящего в программе.
В то время я думал на то, что просто привык уже к одному виду программирования, поэтому мне не нравится новый. И долгое время я его игнорировал.
Только недавно я столкнулся с потребностью на самом деле занятся более плотно с# в следствии того, что все движко собственно перешли на него.
Да, крупные проекты, казалось бы в самый раз делать в ООП, потому что он позволяет модульно, то ест независимо друг от друга программистам собирать целую программу из кусков, когда один не знает кода других. Это удобно, казалось бы. Но тут же возникли и проблемы.
Первая - как раз то, что казалось удобным вызвало появления кучи багов - когда программист одного модуля не знает содержание другого, не знает физической сути происхояддщих в нем процессов, он зачастую просто допускает грубые ошибки в своей работе.
Второе - представление программы.
Скажите что проще представить себе вложенные друг в друга функции и подпрограммы, или абстрактные объекты наследующие свойства других объектов и тд и тп?
Изначально казалось что проще второе.
Но я начинаю понимать, и это и есть главный вопрос этой темы, что именно та форма представления программы, в виде абстракций и усложняет процесс создания сложных по логике программ.
Многие не согласятся, большинство из них начнет доказывать, что дурак ты дядя, учи мат часть и все будет понятно.
Хорошо, солгашусь. Но ответьте тогда на вопрос.
Где игровая продукция с интересным, сложным внутриигровым алгоритмами? Ведь вы посмотрите все сводится к тривиальным вещам. Где задумки? Где интеллектуальные системы?
С появлением современных мощностей можно было ожидать всплеск разработок искуственного интеллекта, в том числе в играх. Где он? Ведь это же одна из наиинтереснейших тем компьютерной техники - симуляция интелектуальных способностей самого человека, поведенческие особенности, и так далее. Где это все? Этого просто нет.
И я кажется начал понимать, что от части эта ситуацифя сложилось именно в силу распространенности систем ООП.
Для решение даже простых задач, в ООП требуется довольно сложные подчас формы их записи. Сложные для того чтобы представить и удержать их в голове.
Что же будет если человек попытается из этих абстрактных форм создать что-то на самом деле сложное?
В общем, я считаю, что именно в этом и заключается проблема ООП - сложность представления программы тем, кто ее разрабатывает. Сложность удержания в голове абстрактных категорий и понятий.
Вся мысль разработчика заканчиватся на основной стурктуре программы. Делать что-то более сложное, придумывать внутриигровые алгоритмы поведения дпоустим персонажей на ООП - черезчур сложная для представления и удержания в голове задача.
В то же время, возьмите любой не ООП язык - и вы напишите за несколько часов довольно сложные поведенческие скрипты - потому что все голо, все на виду, все очевидно.
И знаете почему? Да потому что поведение самого челвоека - оно как раз по сути является аналогом процедурного программирования. Человек привык мыслить в категориях процедурного программирования. ООП же предлагает естественные для логики человека вещи заменить на абстракции, и это и вызывает сбой в создании программ с помощью этих абстракций.
Абстракции ООП слишком далеки от качеств самого мышления человека.
Вот и все. И в этом проблема ООП, и соотвественно, причина кризиса в развитии игровой индустрии.
ПС Вообще, на сложности ООП сказывается их всеохватность. Процедурные языки имеют обычно узконаправленный характер. Но это не отменяет вышесказанного. Пусть в системе разработки, в движке используется простой процедурный скриптовый язык. Как например блиц, Хорс и пр. Иначе программмирование загоняет само себя в угол своей чрезмерной сложностью помноженной на абстрактность используемых понятий.