I've spent some time when I can spare it experimenting with c++ and at the same time learning a bit about game programming. I like most thought I'd start with creating a simple game engine but with some experimenting and plenty of advice along the lines of create a game, not an engine I forgot about the engine and just experimented with building a game.
Suffice to say in the process of doing that I hacked together rendering code (ogre3d) and physics (bullet) and input/output (OIS) and a couple of times over experimented with basic game ideas to the point of loading a map and being able to walk around it. Nothing special I know but it's an achievement for me.
Moving on from that now I would like to learn more about creating reusable code that falls more under engine programming than just a game. I'm sure the skills will be transferable to more than just games.
Basically I'd like to move from having everything intertwined to being able to separate and replace the individual parts. For example, build a 3d renderer dll/so in OpenGL and another with DirectX (as a dll). Or the same for other aspects such as Physics, sound, input, networking.
I'm learning about general dll programming and shared libraries on Linux but would like some more information with regards to game specific interfaces. I am also aware that Ogre3d which I previously mentioned is already cross platform and capable of both opengl and direct-x... I'm not saying I want to replace a library like that, more make it able to be unplugged and have something else plugged in instead.
So you are aware. My programming experience has been C with some more recent exposure to C++. Mostly recently I have been doing web development with both PHP and C#.NET (mostly php). I've also got average experience with c#, python, perl, etc. I'm a bit of a jack of all trades and I pick up things pretty quickly. What I'm hoping for is not to be spoon fed the code but rather some good places to research the concepts etc. (Although I won't turn down code if you're offering) ;)