
What are the math heavy CS areas with high demand? - davidxc
I&#x27;m an undergraduate student who&#x27;s thinking about a double major in computer science and applied math. I&#x27;d like to choose a math heavy, high demand computer science area to specialize in. I like the utility and elegance of math, and I&#x27;m trying to find a CS area that uses many different branches of math.<p>I&#x27;d also prefer if the area changes relatively slowly compared to other computer science areas (so maybe not security).<p>I&#x27;m currently thinking that graphics or machine learning would be high demand areas that use a lot of math, but I&#x27;m looking for more suggestions and advice. Thanks.
======
kkowalczyk
I think you're setting yourself up for disappointment with unrealistic
expectations.

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.

~~~
achompas
This is an excellent point, although I disagree with 90%. Lots of a
developer's time goes into QA/testing, design, and conversations about
requirements and goals. I think developers spend much less than 90% of their
time with an IDE open.

~~~
roryhughes
Some do and some don't. It obviously depends on what you're doing.

------
mfn
How about computational finance? Finance is what drives pretty much all modern
economic activity around the world, and the fundamental concepts in finance
haven't changed for hundreds of years, which takes care of both the
stable/slow-changing and in demand criteria. It is also heavily mathematical
if you choose to focus on the quant side, with probability, statistics,
stochastic calculus, PDE's, and even measure theory being used in some form.
Also, software is becoming an increasingly important part of modern finance,
with things like electronic exchanges, high frequency trading, complex
derivative/option pricing, prop trading, and actuarial science.

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/](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.

~~~
davidxc
Thanks for the great response. I'll also look into computational finance.

------
dill_day
I think your thinking is right, machine learning is probably a good area as
far as jobs go. Depending on your CS interests you'll find what areas of math
they use most. AI / machine learning, learn lots of probability and
statistics. High-performance, scientific computing, graphics, maybe more of a
focus on linear algebra. Algorithms or theory or programming languages, lots
of discrete math, logics, algebraic structures, etc. Of course it's good to
get a good grasp of the basics of all these, since they're definitely not
exclusive, and which you'll get from your degree, and beyond that, well
explore, and enjoy!! Good luck!

~~~
davidxc
Thanks for the comment. High performance and scientific computing jobs seem a
lot rarer than AI / machine learning jobs, which is why I think the latter is
a better choice for me (I have no preferences between those areas right now).

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.

------
vladtaltos
Go for computer vision/pattern recognition. There seems to be a shortage of
enough 'good' people for them - even in HN I read very low quality vision
related blog news as if they are very good ones... (I remember an image
rotation article a few months back...). There are very good CS guys here but
vision/learning seems to be a bit underrepresented...

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...

------
espeed
For a glimpse into machine learning, check out Professor Yaser Abu-Mostafa's
"Learning From Data" course from Caltech. The videos are online for free
([http://work.caltech.edu/telecourse.html](http://work.caltech.edu/telecourse.html),
[https://www.edx.org/course/caltechx/cs1156x/learning-
data/11...](https://www.edx.org/course/caltechx/cs1156x/learning-data/1120)),
and its corresponding book is on Amazon ([http://www.amazon.com/Learning-From-
Data-Yaser-Abu-Mostafa/d...](http://www.amazon.com/Learning-From-Data-Yaser-
Abu-Mostafa/dp/1600490069/)).

Also Professor Ng's course from Stanford
([http://cs.stanford.edu/people/ang/?page_id=22](http://cs.stanford.edu/people/ang/?page_id=22)).

------
maaku
Actually computer security doesn't change very fast compared to other
industries, and is probably a very good fit if you have a math background. But
machine learning would be fun too. Stay far, far away from graphics if you are
worried about rapid change.

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.

~~~
davidxc
Thanks for the advice. I actually didn't know that graphics changed very fast.
I'm only partly making this decision based on what's in demand. As long as the
area is math heavy and broadly applicable, I'll probably enjoy it.

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.

~~~
eropple
Graphics programming isn't _that_ fluid. A lot of hay was made about moving
away from fixed-function to the shader model, but since then it's been
iterative API changes and growth to better target certain goals. OpenGL is
throwing overboard most of the dumb stuff from its earlier versions and is
turning into a pretty nice API overall.

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.

~~~
dxhdr
Very inaccurate and misleading. You're confusing learning an API (easy) with
doing actual graphics programming. Graphics programming involves deep
understanding of the target hardware. The level of sophistication of the
hardware determines which graphics techniques to pursue for the best results.
Often it's a balance of your ability to optimize along with achieving the
highest fidelity of output.

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.

------
sliverstorm
Quick question- are you aiming for a computer science/software job with lots
of math, or a math job that involves computing?

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.

~~~
davidxc
I was primarily thinking of software jobs that involved lots of math, but
that's partly because I'm not really aware of what math jobs are out there
(and most math jobs seem to require a graduate degree, which I'm not
interested in pursuing right now).

------
danieldk
Let me offer a different advice: go for computer science and a major with
practical application, e.g. biology, chemistry, medicine, economy, or even
linguistics.

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 ;)).

------
Adrock
I did a dual degree in Computer Science and Math. My recommendation is to take
the classes in both areas that you find the most interesting, with no concern
for your career. Your career will span decades and unlikely to involve a
steady focus on a single area, as either the environment or you will change.
Personally, I've been working for 11 years in a variety of roles (PM at
Microsoft, Product Analyst at a SF startup, Quantitative Developer in
finance).

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.

------
twiceaday
I graduated two years ago with this exact degree from University of Waterloo.
My favourite subjects were Quantum Mechanics, General Relativity, and Computer
Graphics. Throughout my undergrad I was somewhat hoping to go into game dev to
work on graphics or physics engines. I ended up getting a ton of internship
experience doing web dev, and now I work at Google. The math degree ended up
being more of a hobby, and I'm ok with that. I am pretty lazy and so I found
it hard to stick to my guns about utilizing both degrees on the job. You have
to be prepared to move a lot, and to pass on very good opportunities. I prefer
using my math knowledge for side projects and keeping it from becoming a job,
though maybe thats just sour grapes.

------
achompas
There's a machine learning path that fits this: study math/stats/algorithms,
get a graduate degree, work on research in industry or academia.

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.

------
sumodds
I do Computer Vision/Machine Learning for a living, but would caution a little
against super-focusing on a narrow area. AI in general is known for its AI
winters, where jobs dry up and opportunities are far fewer and you could have
a lot of people with undergraduate in ML (or whatever that era's AI is
called). Now that said, who knows may be you might find it interesting enough
that you may decide to go for graduate school. If I was giving advice to my
younger self, it would be to learn Algorithms, Linear Algebra, and Probability
really well. Get exposure to Machine Learning, and a little bit of Linear
Programming. But if you really want to be able to apply machine learning or
math heavy subjects to work, it might be a reasonable idea to do a Masters.

------
MaysonL
Operations research, optimization, disccrete math, machine learning, computer
vision.

------
primitivesuave
Graph theory - it has an immense amount of overlap with computer science.

~~~
broodbucket
Sure, but is there work in graph theory outside of academia? Obviously there
are people who use it to solve real problems but I'm unsure if you can really
get a job as a graph guy.

~~~
primitivesuave
It depends, when I worked at a big company that produced a CAS (computer
algebra system) they had an entire team for building graph theory ideas into
the software. When I worked at a startup working on urban traffic congestion,
there was just one guy who had done some surface-level reading one weekend on
max-flow-min-cut and some basic algorithms. Knowing graph theory definitely
helped me get that startup job (and take over as "the graph theory guy")

------
mandor
You should definitely check "Operational Research".

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](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".

------
vmsmith
I agree with adrock: take classes you think are interesting without a career
in mind. Things will change way too much and way too quickly for you to plan a
career around courses in college. The main thing you need to learn as an
undergrad are thinking and communicating skills.

Also, here's a good video that might give you some ideas:

[http://www.youtube.com/watch?v=0tuEEnL61HM](http://www.youtube.com/watch?v=0tuEEnL61HM)

------
kineticfocus
For a good overview from one of the big math guys:
[http://blog.stephenwolfram.com/2013/03/talking-about-the-
com...](http://blog.stephenwolfram.com/2013/03/talking-about-the-
computational-future-at-sxsw-2013)

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.

------
rhhfla
This article, "The Shape of Math to Come",talks about applying topology to
large data sets. [https://www.simonsfoundation.org/quanta/20131004-the-
mathema...](https://www.simonsfoundation.org/quanta/20131004-the-mathematical-
shape-of-things-to-come/) Might stimulate your thinking.

------
pallandt
Machine learning.

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/](http://janestreet.com/technology/)

------
hgx77
In my view, I vote for machine learning. In order to study better in machine
learning area, you need to have better understanding in statistics,
probability, matrix, optimization and numerical computation. machine learning
just like a model, the important thing is that know how to build, it exactly
mathematics can help us.

------
dangero
DSP related jobs are pretty math heavy, albeit in a very particular focused
area of math. These jobs are in demand and highly specialized, so you aren't
going to see a thousand job postings, but when you find one, if you are good,
they will want you.

------
warcher
Formal verification of software and hardware systems relies heavily on
mathematics, as well as an obvious core of computer science. (Not 'number'
math, per se, but logic math.) Static analysis of programs, proofs of
correctness, et cetera.

------
agibsonccc
Machine Learning and its subfields or Actuarial are the top picks I've seen.

~~~
davidxc
Thanks for the reply. Based on the answers so far, machine learning does seem
to be a good choice.

------
qwerta
Concurrent processing and database design.

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.

------
jpeg_hero
Quant / algorithmic trading

Computational biology

Scientific/industrial simulation

------
cynusx
Machine learning is very heavy on statistics and mentally engaging enough, the
field is called data science and there is a very high demand for them.

------
mcdemarco
Bioinformatics.

------
myfootsmells
econometrics + algorithmic trading

------
frozenport
Stay away from math.

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.

~~~
triangle
The courses he's taken so far should give him a good understanding of what
applied maths is (which is the type that the OP is thinking of majoring in).
The scarier, more baffling variety of maths is pure maths. In the US system,
half-majoring in applied maths, you shouldn't have to do hardly any pure maths
if you wanted to avoid it.

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

------
gaius
Go and be a quant at a hedge fund. All the maths (statistics, probability) and
programming you could ask for (and people in the back office to do the boring
bits for you).

