My questions:

  1. Are there universites offering a B.Sc. in computer science aimed solely at giving the best training to future theoretical computer science researchers?
    (in the universities I checked, the programs are a combination of training people for research and training people to be programmers in the industry).
  2. As it seems not to be the case in most universities, is there a reason not to offer such programs? (financial maybe)

The motivation for the questions:

I am a mathematics M.Sc. student. I had several conversations with researchers (full/associate professors) in theoretical computer science when I was looking for a thesis advisor. Three of them mentioned to me that they wish they would have learnt more mathematics in their basic training (two of them had a B.Sc. in mathematics and computer science and said they wished they did an M.Sc. in mathematics as well and one of them studied computer science only for a B.Sc.). Their comments referred to funtional analysis (by a researcher in metric embeddings), to group theoretic constructions of expander graphs, etc.

This led me to check the program in computer science and here is what I found:

If a student really tries to get as much cs-theory and mathmematics in his B.Sc, he can study: 38% theoretical computer science, 40% mathematics with mathematics students, 6% mathematics with cs-students only, 16% technical courses. This amounts to 16% waste of time (for a future theoertical cs researchers) and 6% non-optimal use of time (as these math courses with cs-students feel a bit like high-school math).

I included the basic programming courses under theoretical cs because I believe they are essential in order to "know what you're talking about" when studying algorithms, computability, etc. The situation is even a little worse from the perspective of this student because I included all the graduate courses in theoretical cs offered to undergrads, so he will have less theoretical cs courses to take during the M.Sc.

It seems like a much better choice for a future cs theory researcher is to study mathematics and take the cs theory courses (together with the most basic programming courses) as the "free choice" courses. I feel lucky to have done that as it seems that I would not have received such an excellent training if I had gone for the university's fixed cs+math program.

I think that the cs world could benefit alot if universities offered both B.Sc. and M.Sc. programs in "mathematics and theoretical computer science". This can be good both in giving a better training and in encouraging future colloboration.

So here's another question:

Do you agree that such programs ("mathematics and theoretical computer science") are a better alternative to cs-only programs or math+cs program which include many technical courses, as far as future theoretical cs researchers are concerned?

  • 2
    Can you give an example of a "technical course" that you would consider a waste of time for a Theoretical CS researcher?
    – ESultanik
    Apr 3, 2012 at 19:30
  • 2
    The word you're looking for is "Isreal".
    – JeffE
    Apr 3, 2012 at 19:43
  • 1
    @JeffE: I don't understand what your comment refers to.
    – user302099
    Apr 3, 2012 at 20:56
  • 4
    It is not at all obvious that those 16% are a waste of time. Take a look at this question or its blog post summary Apr 4, 2012 at 3:51
  • 5
    @user30209: I consider a course on any particular language a waste of time for any computer science major. I thought you were referring to courses on operating systems, or compilers, or networking, or architecture, or graphics, or distributed systems, or machine learning, or scientific computing, or parallel computing, or programming language semantics, or human-computer interaction, or computer vision, or robotics, or real-time systems, or databases, or bioinformatics, or software engineering. You know, computer science. In my opinion, none of those courses is a waste of time.
    – JeffE
    Apr 4, 2012 at 9:42

2 Answers 2


One downside is the "all eggs in one basket" problem. If you're sure you want to go into theoryCS, then this is great. But if you want to hedge your bets, then some more programming and general CS courses at the undergrad level would be helpful. Also, even within theoryCS, a solid understanding of computer science at large helps with asking new questions about other models of computation, or evaluating the value of theoretical questions motivated by some practical applications.


As Suresh points out, most majors aren't narrowly focused towards exactly one career track, because many people don't end up in the career they expect to. (The exception I know of is that some schools offer things like pre-med and pre-business majors, but note that 1) there are a lot more spots in medical schools than in graduate CS programs, and 2) many schools don't offer these programs, precisely because they're so narrow.) That 16% of time is only wasted, at worst, for the very few people who are absolutely sure of what they want to do.

The purpose of an undergraduate degree is to give someone broad knowledge of a field, not to make a bee-line for academic research. This is the same reason most schools require some level of "general education" requirements, under some name or another---they want their graduates to have a broad overview of academia in general, partially because some people end up being inspired by something they hadn't expected to, and partially because having a broader base of knowledge makes it easier to answer unexpected questions.

Finally, many schools offer some sort of "make your own major" program, which would be a way for the student who is actually sure they want to study CS theory to focus on that earlier.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .