But really, find what you're interested in and do that. It may involve trying them all out, or reading up some reference works on each. Making an important life decision based on “what's in demand” is a very poor choice.
But really, find what you're interested in and do that. It may involve trying them all out, or reading up some reference works on each. Making an important life decision based on “what's in demand” is a very poor choice.
Also, I was thinking of "in demand" with a more long term view. I would think that security and artificial intelligence would continue to stay in high demand well into the future.
I mostly just want to choose an area where I can use many different branches of math, so I keep my math skills in practice. I also like writing code, as long as it involves math and is not boilerplate or repetitive.
Now there's a lot of innovation in terms of specific techniques to achieve certain visuals, but that's the same as any other field - read the paper, implement it. The core techniques should be fairly static for at least the next 4-5 years (because it'll probably take that long for GLES 3 to be widespread) and evolve incrementally after that.
Change is not something you should be worried about there.
That's very fast by the standards of other fields :)
Graphics has only slowed down by comparison to its own rapid pace in the late 90's / early 00's.
For example, availability of floating point render targets -- how do you use them, and for what? How does the hardware handle them? It's different across devices even in the same generation! How does the hardware optimize rendering of opaque vs transparent objects? It's different across devices. Let's get really specific -- how many cycles does a medium precision square root take? Do you use pow or not? How much does a texture lookup cost? Hopefully you can guess the answer by now -- it's different on every device.
It gets exciting when a blend of API and hardware (which includes additional supported and unsupported extensions, which yes, also change with every OS/hardware combination) requires the invention of a novel technique to fully utilize the resources at hand. It's a continual balancing act of visual fidelity and performance with the end goal of squeezing out every last bit of memory and computational bandwidth.
Enough about hardware which is really just an important detail of the field. Being a great graphics programmer requires keeping up to date with the community of blogs and published papers, all of which are a constantly updating source of experimentation and novel techniques. This doesn't even touch on the artistry involved. Being at the top of the field takes extreme dedication and is absolutely not a "learn once and refresh now and then" activity.
Summary: real-time graphics programming is one of -the- most difficult fields to stay at the forefront.
Cryptographic research, on the other hand, can be math heavy. However, it typically draws on pure rather than applied math. E.g. number theory(RSA/factoring), algebraic geometry(ECDSA/elliptic curves, pairings over elliptic curves), and ideal latices.
You will be well at home in the field of AI (machine learning being the currently-in-vogue subfield).
If you want to have more math, then some subfield in CS theory is the way to go. CS theory have lot of elegant math. complexity, data structure, algorithms, combinatorial optimization, computational geometry. All of them have nice set of mathematical tools you can use. There are also unexpected ones that uses more traditional mathematics, like universal algebra for CSP, functional analysis in graph embedding with little distortion, and topology for computational topology(well that seems obvious, there are certain uses for computational topology, read up on persistent topology, which I guess is part of machine learning now).
Of course, the demands are low for pure theory students. However you can do some practical work. For example http://www.tokutek.com/ , founded by professors who specialize in cache oblivious data structures. Some more practical ones include cache oblivious data structures, sublinear time algorithms, string related algorithms. In Google, there are researchers working on how to optimize ads.
Also, I just don't see how you are going to write non-boilerplate code anywhere. everything eventually become repetitive(unless you use Haskell, anything new become a paper.)