I'm currently about 50% done rearchitecting RSEngine (my VB.NET 3D engine) from the fixed-function pipeline to a shader-driven pipeline.
It's been interesting trying to strike a balance between performance and flexibility. While I could potentially render everything using the same shader, it doesn't make any sense to. Right now, I've got one shader for the world, one shader for transparent surfaces, one shader for animated meshes and one other for static meshes.
That lets me do id-style "quad" shading on models, but not the world, and that's fine. The engine is going to be released under the BSD license anyway, so if you don't like it, change it yourself.
Anyway, it's been a fun use of my weekend trying to wrap my head around shaders. The book I'm using is "Microsoft DirectX® 9 Programmable Graphics Pipeline" by Kris Gray (Microsoft Press). I found it on sale recently for $24.98, and I would have been crazy not to pick it up at that price. It's fairly decent, and the tutorials run the gamut from vs/ps1.1 through HLSL. I would have preferred more samples, specifically some more real-life samples and information on integrating multiple shaders in the same pipeline, but it's a good book.