Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

First, my regards to all programmers out there who have put their endless efforts in learning and becoming expert, wise, efficient and best.

Let me describe my situation. I have just graduated from Electronics and Communication Stream. Though I have more interest in software development and hence I have opted to become a software developer rather than Electronics engg.

  1. I have learned C++ and wish to wish to go more deep.
  2. I have started to learn OpenGL.

Guide me in the following:

  1. Is OpenGL good to learn and is it job oriented?
  2. Should I learn some other language rather then OpenGL after C++?
share|improve this question

migrated from stackoverflow.com Jan 15 '11 at 0:38

This question came from our site for professional and enthusiast programmers.

closed as off topic by ChrisF Feb 9 '12 at 22:43

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

5  
OpenGL is not a language so I’m not sure what this question is about … –  Konrad Rudolph Jan 13 '11 at 14:25
2  
OpenGL is not a language,it is a Graphics Library –  Mahesh Jan 13 '11 at 14:28
3  
Anything is "job oriented" if you look for the right jobs. Most software development jobs do not involve OpenGL, but if you want a job that does, then knowing OpenGL is an extremely good idea. –  jalf Jan 13 '11 at 17:57
add comment

8 Answers

It's worth pointing out that besides games, OpenGL is underneath the graphics of most of the new handheld devices (smartphones and tablets).
While you don't need to talk directly to the OpenGL layer to do most things in general apps it's always worth knowing something a little deeper than your competitors.

share|improve this answer
add comment

I don't know much about the job market in India, so I can't tell you anything about how "job-oriented" OpenGL is there. I work in the US writing software tools for 3D animators, so I do know something about the field in general.

The first thing I would say is that there are much easier ways to make a living as a programmer than doing graphics and graphics related programming. So I think it is only something you should pursue if you would really like to do that sort of work. If that's the case, and you put in the time to get good at it, my guess is that you will be able to find work doing it. It might be work that pays less than many easier programming jobs. But it might also be very satisfying work.

OpenGL is something that you should definitely learn if you want to do graphics programming. But OpenGL by itself is a very small part of what you need to know to do most jobs that require a lot of OpenGL programming. There are a lot of different domains that involve graphics programming and each has its own set of requirements. So you might want to do some research and find some area that you find particularly interesting, and find out what other things you need to know to be competent in that field.

Just to give you an example from the domain I am working in right now- well, I started working on a project for a small company in May. When I got there I discovered that their basic process was a mess. So I had to set up a dev server, set up version control, and teach the other programmers to use it. I also introduced some rudimentary testing.

Then I spent most of the summer designing some new algorithms (in collaboration with another developer there.) We prototyped the algorithms in Python. At first we worked in 2D, using pygame and openGL. The description of what our algorithms should do came from an animator and was in many ways very vague. We beat our heads against the wall, trying approach after approach, for 3 months. In that time we had to at least skim dozens of academic papers, looking for clues and picking up techniques.

We tried a lot of things, and a lot of the approaches we tried required a lot of computational geometry, and quite a bit of what I would call "applied differential geometry." I'm not really a math whiz, and I can't claim to understand the deeper aspects of differential geometry, but over the years I have learned to fake it a bit, which is a skill of its own. We also used some approaches from optimization theory- linear programming and geometrical programming. And I implemented at least 3 different interpolating splines, and researched quite a few others.

In the end our breakthrough came when we realized that we could treat our geometry as a signal and adapt some DSP (digital signal processing) algorithms to our vector valued domain- that didn't quite work, but my collaborator drew on his experience doing physical simulations and suggested that we iterate the function, and that did work, though it was hideously slow in Python. In the end it took us three months to come up with about 75 lines of Python.

Once we had the 2D case worked out we generalized it to 3D, using a simple 3D library called visual python to visualize our results. The 3D case introduced a lot of complications, but we eventually solved them using some complicated trigonometry, a bit of linear algebra, and a lot of computational geometry.

That done, we moved to Maya (a 3D animation package, and the platform where we will commercialize our work), where I wrote a Python library that provides a DSL that encapsulates a lot of the uglier bits of the API that lets you write Maya plugins. After we adapted our existing code to Maya we found that it needed to be about 1000-2000 times as fast as it was. I am rewriting the expensive bits in ANSI C at the moment, and replacing one function at a time using an FFI (foreign function interface) library called ctypes. This is complicated, as I have to make sure that all of the python structures exist in parallel with the C data structures until I am in a position to dispense with the python data, but it has the advantage that I have a working program after every step. In the end I suspect that even highly optimized C code will not be as fast as we want, and we will push a lot of the work onto the GPU- but I won't do that until the profiler tells me I must.

Once the optimization is done we will have to write a lot of UI components so that animators can actually use our tools. Then we will have to debug, and track bugs from our testers. Then we will have to make installers for Windows, Linux and OS X. I hate death marches, but we would like to ship early this summer, so I imagine I will be working 60-70 hour weeks for a while, 'cause i don't see this getting done by then any other way. And even with long weeks the schedule may slip- this happens when you set out to improve the state of the art.

I've given you a very long reply, and one that might seem at first to not be responsive to your question. But I wanted to give you an idea of what kind of work you might wind up doing in a few years if you decide to specialize in graphics now. And I also wanted to point out that a lot of "graphics" programming really draws on a lot of disciplines. In my case, at least, the OpenGL part is trivial compared to the rest of the work.

If you want to be good enough at this stuff that you will always have work, because very few other people can do what you can, the key is to know the basics well, so that you can be flexible. If you look at the laundry list of things I had to be able to do to do the job I've been doing this year- well, I had to learn the specifics on the fly. The only way to be able to that quickly enough is to know the basic patterns that recur over and over in software and algorithms. So be hungry, and try to have at least a broad overview of as many areas of computing as you can.

I didn't know the specifics of the DSP algorithms we adapted before this, but I knew they existed, and I knew what they did, in a general way. I had never used ctypes before this, but I have used other ffi libraries. I experimented with simulated annealing at one point (though we wound up not using it.) I sure didn't know the details of that, but I was aware of it as an optimization technique.

So yes, go ahead and learn OpenGL, if you want to do this kind of programming. But OpenGL is a detail- one library out of an infinite number of possible libraries. Learn the substance too. Algorithms, math, good development practices, the ability to skim hundreds of pages of API docs in a day, not with the idea of memorizing them, but with the idea of having a mental index of them, the ability to make sense of doctoral dissertations where it wasn't in the interests of the candidate to be clear- you'll need all these skills.

I'd also highly recommend that you learn a language like Python that is a bit more flexible than C++. Graphics programmers tend to use C++ as C with classes anyway, as they don't want to pay for the machinery of idiomatic C++. Python is often way too slow for production, but for testing out ideas you really need something more flexible than C with classes. You will learn OpenGL a lot faster if you use something like pygame to experiment with it than if you use C++. If you are adventurous you could do as someone above suggests and learn a Lisp- if I had had my druthers we would have prototyped in some Lisp but it wasn't practical in this case.

share|improve this answer
add comment

OpenGL never hurts, and if you know how it works you can do great things with it. But you have to be into graphics and advanced trigonometry to enjoy it and create good things.

It really depends on what kind of software you want to develop. 3D engines, modelling tools or applications like web browsers, music players all have very different kind of techniques and specializations with their own languages/libraries.

EDIT from out of the comments and in the answer

I am interested in game designing and developing software dealing with graphics. – Ani

Then OpenGL/DirectX is certainly a very good start and job oriented. Just look for graphics programming classes in C++ with OpenGL/DirectX and read the books. Get comfortable with the API and start creating your own little projects, they are the best way to learn. This is a very good (yet slightly outdated) website with OpenGL tutorials: nehe.gamedev.net.

share|improve this answer
    
Thanks for that insight 'Sir'. I would be grateful if you bifurcate and describe your point. Where should I start and how these libraries differ. How OpenGL is applied and from where should I start so that I can get a break to start my career. Regards –  Ani Jan 13 '11 at 14:36
    
I'm not a 'Sir', I'm sixteen :) I can't explain much more without you describing what you like, gaming, drawing, solving math problems, etc. On OpenGL though, OpenGL is a graphics library which allows you to efficiently drive the video card. It is often used in combination with C/C++ to create blazing fast rendering of images, games and video. There is another major graphics library, DirectX. Unlike OpenGL it is not open-source and is used a lot for (Windows) games by large game designing studios. Please describe better what you like to do in your OP so we can help you better. –  nightcracker Jan 13 '11 at 14:48
    
I am interested in game designing and developing software dealing with graphics. –  Ani Jan 13 '11 at 15:19
1  
Then OpenGL/DirectX is certainly a very good start and job oriented. Just look for graphics programming classes in C++ with OpenGL/DirectX and read the books. Get comfortable with the API and start creating your own little projects, they are the best way to learn. This is a very good (yet slightly outdated) website with OpenGL tutorials: nehe.gamedev.net. –  nightcracker Jan 13 '11 at 15:23
add comment

It all comes down to whether you want to work as a graphics programmer or not. If you do, then:

  1. Yes, OpenGL is still used at many software developement companies.
  2. Depends, if you're interested in working with games I suggest you look at DirectX as well.
share|improve this answer
add comment

OpenGL is good to learn conceptually (Matrices, Transforms, etc), especially if you want to do games and graphics. You'll probably want to pick up some other languages along the way. Java or C# are both good. If you really want to learn to do some crazy stuff, learn LISP. LISP is not at all a 'job oriented' language, but learning it will make you a better programmer in whatever language you end up using. There is a new book out there called 'The Land of LISP' that teaches LISP programming through writing games. Like I said, there is no immediate payoff in learning LISP, it's more about developing your programming mind. As a bonus, Functional Programming is making a comeback (F#, Clojure, Scala), so those languages will be much easier to pick up after learning some LISP.

share|improve this answer
    
Thanks a lot for your comments sir. –  Ani Jan 13 '11 at 14:44
    
Bottom Line: If you're going to spend your life programming, you better enjoy what you're doing. Happy programmers make good programmers, so figure out what you like to do... and then get out there and learn the supporting technologies and languages. –  flevine100 Jan 13 '11 at 14:49
add comment

Your profile says you're from Delhi, and since I'm from India too, I just want to make sure that you understand what you're asking. (Since a LOT of my college mates are really confused regarding what certain technologies actually ARE).

OpenGL is a GRAPHICS LIBRARY. It is used to create high performance graphical applications like CAD tools or even computer games. It is not a language, as others pointed out.

As a recent graduate, I don't exactly know if there are many openings around here for freshers in the OpenGL field. But you can look around.

If you want to go deeper into C++, make sure you have a strong grasp of the C++ standard library, and perhaps look into the Boost libraries. If your heart is set on high performance graphics programming, then of course you can go ahead with OpenGL (or DirectX).

Just wanted to make sure that you got your concepts straight. If you already knew all this, sorry :D

share|improve this answer
    
hey thanks for being such a great companion. well My pure interest is in C++ and I wish to extend my wings to broader space. So I felt graphics as my choice. I will certainly learn it but can you guide me then what else I should be opting to be more n more job oriented.. thanks –  Ani Jan 13 '11 at 15:24
2  
Besides OpenGL, another option would be to look into GUI development using Qt or GTK+(google them). Jobs for those seem to be more common here. –  Rao Jan 13 '11 at 16:34
add comment

It depends on what kind of job you would like to do.

C++ is a language usually used in contexts where performance matters a lot. OpenGL is used for real-time rendering (in particular 3D), and they combine well together, since often 3D applications need high performance; the probably most common example are games.

If what you want is to write videogames, or application with similar needs, you could probably stick to C++ and OpenGL. If you instead want to expand your horizons, you should learn other stuff (I'd talk about technologies, more than languages) before specializing in something.

share|improve this answer
    
I appreciate your answer. n I am motivated. Would you explain me what kind of technologies are you talking about. Please help me. –  Ani Jan 13 '11 at 14:42
    
@Ani: I used technology as a more general term (but maybe it's not general enough). Just knowing the syntax of a language is not a big deal and doesn't matter that much. For some jobs it's more important to know a lot of theory about algorithms, for others the most important thing could be to know how a specific hardware works, for others you'll need to know everything about network protocols and so on. My best advice is to find out what fields of the software world interests to you the most and focus on it, or, if you have no idea, to explore as many languages/libraries/systems/... as you can –  peoro Jan 13 '11 at 14:50
add comment

as you are from electronix background you should go for Device programming instead

share|improve this answer
2  
Maybe he doesn't want to program devices. –  Moo-Juice Jan 13 '11 at 14:36
    
Thanks for your concerned advice. I would like to know what device programming consist of. What I have to do to go into that. –  Ani Jan 13 '11 at 14:40
    
I am interested in everything that is related to programming. So please enlighten me in how to go in device programming.. –  Ani Jan 13 '11 at 15:30
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.