I'd also prefer if the area changes relatively slowly compared to other computer science areas (so maybe not security).
I'm currently thinking that graphics or machine learning would be high demand areas that use a lot of math, but I'm looking for more suggestions and advice. Thanks.
People that are in demand are programmers and good programmers code 90% of time. Some people, including yourself, suggested graphics but read the history of DOOM and read its source code: despite being a cutting edge technology at the time, 90% of the code is the non-math drudgery: reading and writing files, networking code, performant array and string classes, making the code cross-platform and cross-compiler, debugging code etc. Carmack certainly knows his math but he knows his C even more.
Math might be helpful/necessary in some fields but if you're thinking about being a programmer (as opposed to academic/researcher), don't expect math to be more than 10% of your time. The rest is the same drudgery that the rest of us has to deal with on a daily basis.
A math degree in a job where the outcome is software is like a chemistry degree in Antony Bourdain's archetypical restaurant kitchen: amongst the sharp knives and hot tempers, you will be able to deduce and induce properly, but the food has to be served.
But a math degree can give you confidence so that, when confronted with formal stuff you don't know, you know that you can know with a bit of effort. This is useful, for example, when reasoning with properties of algorithms. This is not useful, for example, when arguing about object-oriented design patterns which are not formally defined.
So you will do well with the aspects of Machine Learning (as many others suggested) which can be formally studied; whereas the hand waving artsy pantsy experimental part will feel like cooking with Bourdain.
And the skills you'll learn in finance will be transferable to a range of other fields - advertising and cloud distribution, which pretty much drive most tech startups' revenue, heavily rely on concepts and techniques that you'll learn in finance.
Here's an interesting course you can take a look at: http://www.algorithm.cs.sunysb.edu/computationalfinance/ Note that this is by steven skiena, the author of the well-known Alogrithmm Design Manual. Khan Academy also has a pretty extensive series on modern finance.
You can only get paid for doing research on the mathematical side of ML if you work in academics or for e.g. Google. The rest will just use an off-the-shelf machine learning software.
I'm also fairly interested to see how AI / machine learning develops in the future, and I think it will involve more math, so it definitely seems to be a good choice.
I'm getting pretty good contracts for doing research work from pretty big US companies/startups and I'm not even located in US...
I did electronics engineering in undergrad, signal processing in masters and computer vision in phd - also took some courses in physics. I sort of wish I did some formal math courses (optimization/graph theory/variational calculus) as well. Applied math will help you a lot in CV/ML domain so that's a pretty good idea for you to get it. ML is very hot and there are lots of people going after that but don't forget to check out the geometric part of the cv - finding camera calibrations, stereo, multiview stereo or the realtime stuff as cv is being used more and more in mobile apps... Computational photography is my new focus these days - I'm getting more queries about that... PM me if you like more detailed info...
Also Professor Ng's course from Stanford (http://cs.stanford.edu/people/ang/?page_id=22).
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.
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.)
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).
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.
It's an important distinction. The people who are doing math with the help of computers (rather than doing software that uses math) are much more involved in mathematics.
In our age we are increasingly seeing technology changing other fields. But there are relatively few CS majors who are proficient in another domain and there are relatively few non-CS majors who can engineer/program well. There is a lot of demand for people who can program and have domain-specific knowledge, e.g. in computer vision, market prediction, natural language processing, etc.
The other advantage is that, even if the demand for computer science majors collapses, there may be opportunities in the other field (well, perhaps not in linguistics ;)).
You never know where the most valuable lessons will come from and how they will pay off. For example, my second Real Analysis class leveled up my ability to communicate clearly and precisely in a way that no writing class could have. Graph theory, automata theory, numerical methods, abstract algebra, and statistics have each made their way into my work, sometimes in ways that I never would have expected.
If you want to ignore this, Machine Learning.
Your question is somewhat vague, though. Do you want to spend the majority of your time working on math? Even machine learning researchers only spend a majority of their time on annoying data cleanup issues, model coding, or data infrastructure. Further, as you become more successful you worry about grant-writing, lab management, or stressing about tenure (or, if industry, department cuts). What's your motivation for entering a "slow" field? Regression is going nowhere but ML's research frontiers are expanding rapidly right now.
Note also that you won't land this work with just an undergrad degree, so you should add another 2-5 years of schooling if considering ML.
Although it is not as fun as machine learning and computer graphics, there is a strong industrial demand for strong mathematicians. http://en.wikipedia.org/wiki/Operations_research
Many of the work do not involve much coding but require advanced mathematical skills to transform the original problem into something that can be send to a "solver".
Also, here's a good video that might give you some ideas:
Otherwise, I'd suggest taking a bit of time to think about the sector like a entrepreneuring hacker. Look beyond the well worn paths and take advantage of your current naivite.
If you also happen to be interested in finance, or think it might interest you at some point later, you could transition to quant finance (where machine learning will also be very usefull).
See if this piques your interest for instance: http://janestreet.com/technology/
But for second major I would recommend some 'soft' science, such as finance, economics or accountancy. Most people on those fields do not know high math.
Computational biology
Scientific/industrial simulation
I would caution you that you haven't seen `real math` as an undergraduate who still has time to decide on your major - you will find that real math is not elegant. Math is baroque, infinitely deep and you success will entirely depend on the community and the perspective you get from your mentors. For example, conversations I had with math professors were able to frame problems so that I could look past the equations and understand the big picture. Then I had to describe it in the precise language of mathematics. I quickly realized that math wasn't that precise of a language - just esoteric hand waving. I then realized that Mathematics is a language that is unintelligible without context.
When I did my CS algorithm classes, I skipped all the lectures and spent 8 hours doing homework from a textbook - my school is rated 3rd in the US.
If you only take Math classes you will not find a job or find yourself in a situation where you have not learned the creative skill necessary to extend upon existing solutions.
Although pure maths can be extremely hard and initially seem quite arcane, I think you paint a picture of it which is subjective and in some cases factually wrong.
I agree that maths is infinitely deep and complex, but that is exactly why maths has developed to be as elegant as possible. Good mathematics is about developing structures and analogies that allow people to drastically simplify and improve their thinking about complex situations.
You are objectively wrong when you say that maths "isn't that precise of a language". Modern maths is extremely precise and the level of rigour is leagues ahead of CS. In the early 20th century, mathematicians were worried about how precise mathematics and its proofs were. To combat this crisis, mathematicians boiled down the inherent assumptions in maths to a handful of axioms, from which the entirety of maths is logically proven. Maths is not esoteric hand waving.
I studied maths at university and in my experience, there are lots of opportunities to apply my degree to the real world. Even in a more standard software engineer role I've been able to use my maths knowledge to quickly develop solutions to problems my CS peers are struggling with (and visa versa). If anyone's interested in maths, do consider taking courses in it. It's a valuable, rich subject which has plenty of real world uses and plenty of jobs waiting for you at the end
Saying that Maths classes are irrelevant in a workplace also seems ill-conceived and basically to be personal conjecture.