I strongly vote against mix-n-match. You need to know FF and programmable pipeline pretty good in order to get to them play well together. Not recommended for a beginner.
Don't get me wrong - I certainly wouldn't recommend it as a long-term viable solution. The obvious objective is to get everything onto a shader-based API and the issue is finding the easiest way of getting there. Porting an existing program, where you can just port a small part of it at a time, is one way of doing this, and the ability to mix shader code with FFP code is useful there because it doesn't put you in a position where you need to junk everything and start over from scratch. Instead you can take something simple, like your 2D GUI, and invest some time and effort into getting that up and running with shaders while leaving the rest unaffected.
There's a rant somewhere inside me about how the old GL_ARB_*_program extensions made this kind of thing easier than GLSL, but that's for another time.