Migrating from fixed function to programmable pipeline is a huge pain in the ass. Every chapter of the Red book is marked as deprecated or removed in OpenGL 3.1.
Anyway, I'm starting to see the benefit of programmable pipeline; Rika's object system and rendering system needs to be re-factored to take advantage of shaders, e.g. there has to be a way for models / scripts to specify / pass arguments (uniforms in GL's context) into shader scripts and the type and number of arguments have to be dynamic.
I also find a gotta of STM, i.e. threads have to be event based, otherwise TVars could be modified too often or for too long such that a consumer threads will retry forever.