
Practical Examples in Data Oriented Design (2013) [pdf] - Tomte
http://gamedevs.org/uploads/practical-examples-in-data-oriented-design.pdf
======
CurtMonash
Somewhat related: My periodic rants about the terrible database designs of
games.

[http://www.dbms2.com/2014/04/16/the-worst-database-
developer...](http://www.dbms2.com/2014/04/16/the-worst-database-developers-
in-the-world/)

~~~
elvinyung
Hi! Long time follower of your blog here. As a general database-internals-
enthusiast-in-training, this kind of stuff is really fascinating to read
about.

In general, however, I kind of get the impression that game development is
much less rigorous even than normal software engineering, and that things are
less well-architected, much more ad hoc/hackier, etc. Is there any truth to
this?

~~~
amagumori
Hey, not the OP, but I did want to offer my 2c anyway, as someone into
gamedev. I'd say you're both very right and very, very wrong at the same time.

In game development, especially with indies, in the early phases of
development many developers take an approach of valuing "getting it going"
over everything else. While this might sound short-sighted, it's actually a
very canny decision, and often is the only way to gain enough of a foothold to
ensure the long-term success of the project when you're working on a very
complex piece of software like a game - see Jonathan Blow's youtube video on
"The art of getting things going". Additionally there's the relationship of
this approach with the game design process, where you need a very fast
iteration time on prototyping game mechanics in the early stages, to start
finding your way towards something interesting to flesh out into a full
product.

With that being said, in commercial game development (and experienced indie
developers), the performance standards are so much higher than most other
fields of programming that it is actually absurd. The focus on performance of
much of enterprise software, web apps, and even most native tools, is nowhere
even in the same league as that of high-quality games.

I would also say that at the highest level of game development there is a very
high quality level of code organization and architecture. Games are one of the
most complex types of programs, involving physical simulation of a large
amount of objects, skeletal animation skinning, very complex rendering and
shading, realtime deterministic state synchronization over a network, audio
streaming, and on, and on, and on, all happening on a realtime basis.

There's simply no room to be "ad hoc" or "hacky" in AAA gamedev because the
systems involved are so complex that their architecture has to be extremely
robust to _even be able to finish the game at all_. In my opinion, other
fields of programming have a lot to learn from the lessons of game
development, but unfortunately gamedev is a bit of an insular field and
there's not much cross-pollination between gamedev and other industries.

Or you could just look at it like this:

AAA Gamedev: Formula 1 car

Google / AWS : State of the art metropolitan high-speed rail system

Enterprise Software: Diesel bus service

Native apps and tools: Sedans, hatchbacks, vans, sports cars

Web apps: Bicycles

Electron apps: Bicycle with a lawnmower engine welded to the frame that tops
out around 20mph and gets 3 miles to the gallon

------
vvanders
Slide #3 is evergreen, seen that exact image in many talks and it's still just
as relevant today as when I first saw it.

------
indescions_2018
These slides may be difficult for beginners to follow. A more in-depth
treatment can be found at Robert Nystrom's wonderful game Programming Patterns
resource available for free online:

[http://gameprogrammingpatterns.com/](http://gameprogrammingpatterns.com/)

And of course Mike Acton's classic talk:

CppCon 2014: Mike Acton "Data-Oriented Design and C++"

[https://www.youtube.com/watch?v=rX0ItVEVjHc](https://www.youtube.com/watch?v=rX0ItVEVjHc)

All these resources are CPU oriented. As next gen GPUs begin to dominate for
data queries. It will be interesting to see how the game changes as well.

The Rise of the GPU: How GPUs Will Change the Way You Look at Big Data

[https://www.youtube.com/watch?v=mwpd13urFog](https://www.youtube.com/watch?v=mwpd13urFog)

~~~
reccanti
I also found this to be a really good resource:

[http://www.dataorienteddesign.com/dodmain/dodmain.html](http://www.dataorienteddesign.com/dodmain/dodmain.html)

------
jokoon
I love data oriented programming. It lets you worry on data instead of useless
design patterns and others abstract languages paradigms which i never
understand what it is trying to accomplish.

