If you are a good programmer its very easy to become friends with math/phys/cs profs. They typically have many projects that they are not looking at at the moment for lack of programming power. Offer a few hours a week of your time to a particular project that you feel interested in. You will learn crazy lots. This is what a "Grad Student" is. But IMO this is much better than being a grad student and suffocating through the bureau-crazy.
This is how I got started programming professionally. During my freshman year, my CS prof had funding for a climate research project and he first set me up as a UNIX admin then a C and Perl programmer. In addition to learning UNIX and programming, it paid about 3 times as much as any other work study job, and I got to put "participated in NSF funded research" on my resume. I wasn't even a good programmer, I just wasn't as bad as everyone else.
Are you suggesting trading programming time for mentoring time, or just programming a math teacher's projects as a means to learn?
How would you initiate something like that anyway? I would feel more than a little awkward wandering on to a local campus and knocking on doors in the math dept. Are there any online resources/communities?
Second Question: Read online about the interests of a prof. Select a few. Watch a few of their introductory lectures to see if you like how they explain stuff. Select one. Look up the office hours. Wander into the room and state your mind.