Hacker News new | past | comments | ask | show | jobs | submit login
What are the math heavy CS areas with high demand?
36 points by davidxc on Oct 6, 2013 | hide | past | favorite | 51 comments
I'm an undergraduate student who's thinking about a double major in computer science and applied math. I'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'm trying to find a CS area that uses many different branches of math.

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.

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.

Agreed, and here's the cooking metaphor.

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.

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.

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

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

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

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!

It depends on what side of AI/ML you end up on, though. The research-heavy side involves lots of math and requires a PhD (or a MS + experience, in industry); the data engineering & infrastructure side is almost solely coding (and distributed systems design).

And even in machine learning, the vast majority of the work is in feature engineering, which is applying domain-specific knowledge (e.g. linguistics) to generate discriminative features.

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.

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.

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

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, https://www.edx.org/course/caltechx/cs1156x/learning-data/11...), and its corresponding book is on Amazon (http://www.amazon.com/Learning-From-Data-Yaser-Abu-Mostafa/d...).

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

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.

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.

Why do you care about the high demand? We can put that aside for now--if you are a competent coder, you are in high demand...

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

Computer security in general has almost nothing to do with math. Cryptography specifically obviously does (the security and cryptography communities are pretty distinct). However, cryptographic engineering, which is what you would do with just an undergrad degree, has almost nothing to do with math at all.

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.

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

You will be well at home in the field of AI (machine learning being the currently-in-vogue subfield).

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.

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.

> The core techniques should be fairly static for at least the next 4-5 years.

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.

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.

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

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

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.

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.

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.

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.

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

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

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.

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")

Actually, now that I think about it, I am giving you quite a microcosmic example. I agree that coming across graph theory jobs is tough, but its still worth knowing, at least at a surface level.

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

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

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:


For a good overview from one of the big math guys: http://blog.stephenwolfram.com/2013/03/talking-about-the-com...

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.

This article, "The Shape of Math to Come",talks about applying topology to large data sets. https://www.simonsfoundation.org/quanta/20131004-the-mathema... Might stimulate your thinking.

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/

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.

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.

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.

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

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

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.

Quant / algorithmic trading

Computational biology

Scientific/industrial simulation

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.


econometrics + algorithmic trading

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.

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

I don't agree with this at all. What is and isn't 'real' math is subjective and very hard to quantify. The 'feel' of mathematics depends on the field but people are often overwhelmed with the level of rigour required to communicate mathematically as an undergraduate. Saying Mathematics isn't precise seems really ill-conceived, Mathematics is very similar to Computer Science in terms of language: one can take a level of abstraction of a concept which simplifies it so that it is understandable.

Saying that Maths classes are irrelevant in a workplace also seems ill-conceived and basically to be personal conjecture.

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

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact