My first hardware accelerated application was a MS Word document! No kidding! Before I get to that, let me tell the story of learning to use opengl in basic, assembly and then C, and yes in that order. In early high school I played around a lot with qbasic and was writing simple wireframe 3d mazes with horrible performance. I didn't have a C compiler, so I started playing around with debug.com, and started writing little assemly language routines to speed up certain slow things in basic. Debug sucks, it can't even do labels, you have to specify the exact jump address. You literally have to write JMP 0x322 and hope you put some code at 0x322. So I wrote a qbasic program that reads in assembly source with labels, strips them out, runs it through debug with dummy addresses (JMP 0x1234 or whatever). It looks at the redirected output of debug to see what address the assembler said it was using for each line, figured out the labels, and then reassembled it a second time. It was so cruddy. While I was doing this, I also got involved in a high school robotics program called Botball, where you programed lego robots in a language called Interactive C.
Back to graphics. I wanted to try using GL, but like I said, I didn't have any compilers. MS Word 2000 had a built in version of VB, called VBA. It turns out VBA can load and run functions from DLLs (scary), so I wrote a word VBA macro that loaded system32.dll, and called the function to get the application's window handle. I played around with GDI, and got to draw dots and lines onto the word document window using only the win32 api. So then I loaded opengl32.dll. After crashing word several times, I managed to get a textured quad on the screen, put there by the video card! I then shortly discovered that the Windows DDK for Window 98 came with a FREE COPY of MASM. So I started writing programs in the psychotic mix of dll's written in MASM that were loaded into MS Word's Visual Basic. A teacher at high school saw what I was doing, and gave me a copy of Borland C++. I was able to apply what I learned about writing PC programs in MASM and Basic to what I learned in Botball's 'Interactive C' and from there everything took off. After I finished highschool, I did EECS at UC Berkeley, and now I do software for a living.
I'm so glad visual studio has free editions. I would have free loved visual studio as a kid. Ubuntu would have also rocked. Kids today can access this stuff so easily now.
That's the difference between you and me: I learned programming to let me make video games so I can put my ideas in an interactive media. You learned it simply for the joy of discovery and making software work. As a byproduct, I've learned that, too, but I don't know if I will ever get into as deep passionate as programmers like yourself. It's just funny that I'm learning the same stuff that others in the game industry take paths in learning, anyway, so I suppose I may be as passionate as people like yourself. I sometimes think I'm just a man using programming as a tool to get something done, and I believe that to be the case as it's a means to an end.