940 karma · joined November 11, 2007
Online Tutorials:
Dr. Dobbs - CUDA, Supercomputing For the Masses: http://www.drdobbs.com/high-performance-computing/207200659
GTC Video Tutorials / Presentations: http://www.nvidia.com/object/gpu_technology_conference.html
University Courses:
GaTech ECE4893 - Multicore and GPU Programming for Video Games (not CUDA specific, but covered): http://users.ece.gatech.edu/lanterma/mpg/
UIUC ECE498AL - Applied Parallel Programming: http://courses.engr.illinois.edu/ece498/al/
Books:
Programming Massively Parallel Processors: http://www.amazon.com/Programming-Massively-Parallel-Process...
CUDA By Example: http://www.amazon.com/CUDA-Example-Introduction-General-Purp...
If you decide to go the CUDA route, as opposed to OpenCL, then NVIDIA has a lot of solid documentation that will help you get to a "Hello, World" level pretty quickly. This StackOverflow thread should help if you choose to go with an AMD OpenCL solution: http://stackoverflow.com/questions/780978/opencl-books-tutor.... Personally, I would stick with NVIDIA; they seem much more dedicated to advancing the cause and you have support for both API's.
That said, http://khanacademy.org
Your point still stands though.
It seems that your first step is to to find good C++ resources: http://stackoverflow.com/questions/155762/best-c-resource
Hope this helps.
We often start to think that success is simply the result of hard work or building something awesome, but we overlook how important it is to maneuver ourselves into a situation where we can capitalize on all that work and preparation. There is no substitute for good old-fashioned legwork.
The amount of difference between a good programmer and a great programmer is going to get wider, in terms of the amount of value that you can create.
That said the 20- series is really freaking expensive. When I got my C1060's, they were ~$1500/per retail; I think the C2070's are nearly twice that.
1) Hardware knowledge. I didn't start programming until I started college, but I quickly realized that, growing up as a pretty avid gamer, I still had one advantage that a lot of the CS majors didn't have: I knew more about computers than they did. Games are some of the most demanding applications being created today, and, as a result, I had spent a lot of time reading hardware reviews and benchmarks. This resulted in my having a somewhat innate understanding of how data is passed around inside a computer and how this affects performance. It takes time to understand on a deep level how your code is interacting with the hardware, but when you see the frame rate tank because you used an inefficient algorithm somewhere, it sticks with you instantly.[1]
2) Instant gratification. Much like web programming, game programming allows you to see the result of your work, immediately and incrementally. And it looks good, because you get to use professionally developed resources (models, textures, etc). A side benefit is having good looking programs to put in your portfolio.
3) Wide variety of problem domains. Once you get familiar with programming in general, you can then work on pretty much anything you want: 3D graphics, physics simulation, AI, networking, UI / UX , HCI, etc.
4) It's fun.
Try giving Unity a shot and see how you like it: http://unity3d.com/unity/download/ . It's multiplatform and has API's in C#, JavaScript, and Python, so you have an element of choice. If you're a Windows user, I know a few people who started out by playing around with XNA, which uses C#. Examples of free commercial game SDK's are Epic's Unreal Development Kit (http://www.udk.com/) and Valve's Source Engine SDK, which comes free with any Source Engine-based game.
[1] When working on a graphics project, I accidentally put the function that imports and initializes the texture resources into the draw loop, which meant that new memory was being allocated for them 60+ times per second. Needless to say, I became very aware of the problem when my fans started to spin up like jet engines.
Another thing that you might want to consider if you're not the hardcore gym type is adding some less traditional forms of exercise. A lot of people really get into martial arts despite not liking to "workout"; I know you like driving, so I'd recommend seeing if there are any good karting options in SF. Karting is crazy amounts of fun, and its a great all-around workout: http://www.itv-f1.com/News_Article.aspx?id=46561&PO=4656...