I'm beginning my journey into graphics programming and want to learn OpenGL. Because I'm green to graphics programming but not to C and C++, a familiar question came up when I looked at OpenGL and ES... Is OpenGL a superset of OpenGL ES? I read in an ES 3.0 guide that it uses shader-based implementations that exist as part of OpenGL's embedded libraries, and that ES avoids using similar/redundant libraries provided by big 'ol OpenGL due to mobile hardware limitations... Are shader-based implementations which are a huge part of OpenGL ES less efficient solutions when programming on the desktop? OR should I look at the two APIs as different beasts altogether? thx in advance.
Desktop OpenGL and OpenGL ES share a lot of similarities. The older OpenGL, prior to programable shaders, is somewhat similar to ES v1, in which both relied on a fixed-function rendering pipeline (i.e.: just the C-API). GL ES 2 and above is a lot more like the modern desktop GL, since it requires the use of shaders and other modern rendering practices like the use of Vertex Buffers. In fact, there are two extensions to the desktop GL that aim at reducing the work of porting code from desktop to GL ES devices, by providing to the desktop version all the specific functions of GL ES. ARB_ES2_compatibility, ARB_ES3_compatibility
So I think it is fair to say that OpenGL ES is a subset of desktop GL. Both are converging to a unified API, and the overall "feel" of the library is pretty much the same for both.
If you are looking for a more detailed comparison of existing GL versions, I think your best bet is looking at the wiki History of OpenGL and the OpenGL ES wiki. There is also this SO thread that you might find worth reading.