I am a computer science student and I am developing with C/C++ and Python and I want to begin learning graphics tools to start developing with game engines, especially the Blender Game Engine. So what is your recommendation for me to learn and to read? And recommend me a road map for it.
Not looked into blender game engine for a while, but I'd have thought the only requirement to use BGE would be to learn how to use it, like any other program.
Firstly a Game Engine and Graphics Engine are very different.
A Game Engine could be thought of as lots of little engines, graphics, sound, network, input etc...
A Graphics Engine such as
Ogre, focuses entirely on the graphics side of things.
The single most important thing is
Maths. Leaving aside the physics.
curves in space,
Approximation methods, it goes on ...
The maths is platform independent and will be useful on
Also pick a graphics API such as
DirectX, I prefer OpenGL for platform sakes, but it doesn't really matter.
XNA would do I guess if you'd prefer C#.
Learning to be a good programmer and learning how to use the (relatively obscure and underused) Blender Game Engine are two very different problems. Almost so different that I think you should be asking two separate questions.
That said, learning the Blender Game Engine is like learning any other API or toolchain. Check out the documentation, read and understand it, and practice using it over and over until you are comfortable with it.
That general concept applies to learning how to be a good programmer as well. Generally a programmer will learn by first acquiring some basic skill with a particular programming language and then experimenting in the default environment of that language -- this typically means building text-based, console-IO type programs and games for a while. It sounds like you are there already and want to move beyond that.
At that point the programmer tends to start experimenting with windowing libraries or 2D graphics libraries. There's a big jump between console-based IO and 2D, window-oriented, event-based programming for some. Making games in this space that introduce the programmer to the fundamentals of linear algebra, which is a critical part of understanding the 3D graphics programming that many programmers eventually end up doing. Once a programmer has built a few 2D games, it may be time to consider learning 3D math and APIs (Direct3D or OpenGL, or some higher-level API provided by some engine or whatnot).
At some point during that whole process, which is very focused on the everyday minutiae of being a programmer, you will hopefully acquire a talent for larger-scale problem solving and for considering the design and architecture of the systems you build rather than just the "how to" of building them in particular languages -- this is the thing you want to strive for, this is where you start becoming a good software developer instead of a good code monkey.
In your specific case, PyGame might be a reasonable thing for you to start looking at.
If you're a computer science student, then find out what the graphics course is at your university/collage and its prerequisites. You'll probably want to take both optional and required prerequisites for the graphics, but you also need to get all of the prerequisites for the graphics prerequisites.
For example, the University of Waterloo's graphics course is CS488. The prerequisites are (CM 339/CS 341 or SE 240) and (CS 350 or SE 350) and (CS 370 or CS 371). Each of these will have their own prerequisites that you need to fit into your schedule.
While the specific courses are different for each school, I'd assume a lot of the content is similar. The UW graphics course requires students to build several small scenes and then a ray tracer. They then make a proposal for and implement their final project. You can get ahead in your education by going through the courseware for a lot of universities online: MIT, Stanford, etc... (MIT puts a lot of effort into making their courses available online.)