I'm in a big dilemma and I need help (advices/suggestions anything). I'm a beginner programmer and have been working on Java past 6 months. I'm comfortable with the language but haven't become a pro at it. I'm planning on learning a second language and my interest is in game development and also because C++ always intrigued me. So I'm planning on learning C++. My problem is I'm not sure if I should start learning C++ in my spare time or should I wait for another 6 months or a year so as I become proficient(or more experienced) in Java. But again when I think of a year ahead I feel that I would regret that why I didn't start a year ago. Please help me out. What do you suggest from your own experience.
If you are feeling thrilled/excited/tingly/squeeeee about C++, then don't wait! Spare an hour everyday,
and satisfy the craving.
That said, if what really thrills/excites/tingles you is in fact *game development*, then as somebody who's had a long time interest in graphics programming
and has dipped hands into stuff like directX and openGL, I suggest the following path:
Learn java Swing framework which provides a relatively easy path to familiarize yourself with 2D graphics , coordinate geometry,
and basic graphics operations like translation/rotations/scaling.
There are many languages/techniques/frameworks for game development, but whether newbie or veteran, you just can't escape
the geometry, trigonometry and matrix algebra that underpins the entire field.
Still using java swing, write simple 2D games to familiarize with frame rates, motion, clipping, and collision detection
Learn javafx framework and graduate to 3D concepts like 3D transformations, cameras, lights,
perspectives, loading/saving vertex meshes, and rigid body physics.
Game development is only part programming; the other more difficult part is *graphics design*.
Design of textures, sprites, meshes, bump maps, etc.
You'd need to familiarize with drawing and graphics tools like the free Blender and Gimp, or commercial ones like 3D studio max
These models can then be loaded and rendered using javafx and incorporated into simple 3D games.
At this point, you would have become comfortable with 3D primitives. Now the focus can switch to performance optimization techniques, and this is where concepts like
shaders, GPU rendering, OpenGL and DirectX come in.
These technologies are accessible from java itself through frameworks like JavaGL, JOGL, LWJGL, etc so you can either familiarize with them using java itself (good enough
for most games), or switch to the more difficult C/C++ (required for professional game development).
C/C++ are in picture here because all games involve a game engine, and complex games require really performant engines.
C/C++ give the best performance and provide lot of control over memory allocation. So you'd have to become familiar with pointers, memory management, and in case of directx,
stuff like DCOM pointers and reference counting.
Getting to this level of C/C++ takes time, so I'd say start right now and put in some time everyday while also parallelly learning all the above stuff
Finally, once you've become familiar with all this, you'd have probably written a few small 2D and 3D games and their tiny game engines. So the general principles would be
familiar to you.
It's a good idea to next try out some open source game engines and dig into their code, to learn how the professionals do it.
Please, please learn C++ following the C++11 revision.
It's difficult to explain to new C++ users, but over time it will become obvious. There is a clear dividing line between C and C++. While it is legal to use C in C++, most of the time this is highly frowned upon and produces the "C/C++" problem (which has given C++ a bad rap for memory leaks and other issues). Using modern C++, it is borderline impossible to write a memory leak, as dynamic memory is automatically managed through RAII techniques.
It's definitely worth taking the time to learn...although it took me, personally about 4 years to become a bit more than proficient with it. Try not to expect instant gratification.
C++11 is the latest official C++ ISO standard. It's a dream to work with (in my opinion) with tons of new features including a revamped memory and threading model, thread-safe smart pointers, atomics, new static analysis assertions, expanded template system, and the whole nine yards.
The only one on the list that I've played with is from Herb Sutter ( http://www.amazon.com/dp/0201615622/?tag=stackoverfl08-20 ) -- an excellent book which provided a series of slaps in the face (in a good way) and showed that I wasn't nearly as brilliant as I thought I was. I definitely would not recommend this book until you feel that you've reached a peak in your studies, but eventually I suggest that you definitely add this one to your shelf.