As most well-known universities are, my university also has a theoretical-based CS curriculum where the classes either teach straight-up theory, or teach you how to implement systems rather how to use them effectively.

I originally came into CS hoping for knowledge about how the world works (in a practical sense) so that I'd be able to see opportunities & advantages in every corner (if you know what I mean). So I was hoping that I could streamline what I'm learning in my courses to optimize it toward this goal.

I need some suggestions on what skills or knowledge I should accumulate before I graduate and apply for graduate school, or get a job in industry (hopefully more than just programming). Basically, I'm looking for a good direction.

  • 8
    $\begingroup$ I'm a little puzzled why you'd come to a site devoted to theory research to ask how to acquire "real-world" knowledge :) $\endgroup$ Oct 28, 2011 at 2:57
  • 2
    $\begingroup$ @SureshVenkat: As someone doing Computational Geometry and Data Mining, I'm sure you are well aware that there's theory and then there's Theory. $\endgroup$ Oct 28, 2011 at 7:34
  • 3
    $\begingroup$ I'm a little puzzled why you think a theoretical CS curriculum is not teaching you about how the world works (yes, even in a practical sense). $\endgroup$
    – Jeffε
    Oct 28, 2011 at 9:36
  • 2
    $\begingroup$ This would be a great question for a general CS site (see current proposal). $\endgroup$
    – Raphael
    Oct 28, 2011 at 10:46
  • 1
    $\begingroup$ @DaveClarke: Not sure what you mean. $\endgroup$ Oct 28, 2011 at 17:19

3 Answers 3


I need some suggestions on what skills or knowledge I should accumulate before I graduate and apply for graduate school, or get a job in industry (hopefully more than just programming). Basically, I'm looking for a good direction.

What are you really passionate about?

Among the things that you're really passionate about, what are you really good at?

Do that.

Talk to everyone you can who does that. Figure out who does that well and who just spouts shiny nonsense about doing that. Ask the good ones how they got good at doing that. Do what they do. Most of what they do won't work for you, but until you try and fail yourself, you won't know what works and what doesn't. And you will fail; brush it off, get back up, and keep doing that. Don't avoid the uncomfortable, frustrating, boring, but necessary stuff you have to do to learn to do that well and to keep doing that.

Oh, and as long as you're in college, you might as well take some classes.


This list is not hard-line TCS, but nevertheless:

  • Data mining and statistics – there's a lot of data out there and companies want to understand and exploit it.
  • AI – so that your applications can have that "human" touch.
  • machine learning - for when it's too hard to write an algorithm, let the machine do it for you.
  • Programming language theory (and implementation) – Domain Specific Languages are becoming more popular, and when it comes time to design and implement such a thing, having good principles behind you will be extremely useful to design more sensible languages
  • Linear algebra and the foundations of computer graphics – just in case you need to put something other than text fields etc on the screen.
  • Newtonian physics – if you need to implement a game, then you'll need to need to understand basic physics to help make the worlds behave realistically.
  • Model checking – finds application in hardware design, and sometimes in software, certainly for some safety-critical systems
  • Verification – used less commonly, but starting to find application in safety-critical systems.

Of course what will really help in the real world is a good design course and, I believe, exposure to many different programming languages. Getting a grasp on concurrent and distributed programming concepts, problems and solutions will also ready you for the future developments in the real world.


Caveat emptor: I know little about the real world, but let me put in a quick plug for learning theory.

One of the most marketable fields of CS at the moment (and one of the most valuable skills) is machine learning. (see here for a discussion). This is the backbone of most of Google's services, and any other company that seeks to offer intelligent personalization of any sort (targeted ads, personalized recommendations, etc.).

Luckily, machine learning also has a rich and well developed theory, both of the STOC/FOCS variety (see courses here and here), and of the statistical variety (see, e.g. here), and of course there is now plenty of overlap. Remarkably, some of this theory actually has relevance to practice (Boosting, SVMS, online learning, more), and it is easier to move between theory and practice in this particular area of theory than in say, complexity theory.

Of course, soon the same should be true of data privacy. :-)


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.