In delving into game programming, I have encountered both "SDKs" and "game engines". What are their relationships and differences to each other?
To be as concise as possible, an SDK is engine + tools. It gives you all you need to make a game for that platform.
Sometimes you don't need specialised tools to make a game; in that case you only need an engine. Sometimes they are required or at least very helpful.
To give a few examples:
- UDK, in addition to the Unreal engine, includes editors to create content suited for the engine.
- Back in the cartridge console days, the console vendor would give you a kit with hardware tools, such as a doohickey (like gameshark/gamegenie) that you plug in between the cartridge and console, which gives useful diagnostic output. Sometimes they will also give you a special development version of the console that amounts to the same thing.
Of course, you can have SDKs for things that aren't engines, which adds a bit of confusion. The DirectX SDK for example doesn't include a game engine, as DirectX is a graphics/multimedia framework.
SDK applies to all of software development, whereas "engine" pretty much only applies to games. That's the only real difference between the terms (and even this description of "engine" plenty of people will disagree with); everything else is just semantics.