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

<p>What are you <em>really</em> passionate about?</p>

<p>Among the things that you're really passionate about, what are you <em>really</em> good at?</p>

<p><strong>Do <em>that</em>.</strong></p>

<p>Talk to everyone you can who does <em>that</em>.  Figure out who does <em>that</em> well and who just spouts shiny nonsense about doing <em>that</em>.  Ask the good ones how they got good at doing <em>that</em>.  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 <em>will</em> fail; brush it off, get back up, and keep doing <em>that</em>.  Don't avoid the uncomfortable, frustrating,  boring, but necessary stuff you have to do to learn to do <em>that</em> well and to keep doing <em>that</em>.</p>

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

CC BY-SA 3.0
2011-10-28T09:59:42.783Z
2011-10-28T09:59:42.783Z
Jeffε
<p>This list is not hard-line TCS, but nevertheless:</p>

<ul>
<li>Data mining and statistics – there's a lot of data out there and companies want to understand and exploit it.</li>
<li>AI – so that your applications can have that "human" touch. </li>
<li>machine learning - for when it's too hard to write an algorithm, let the machine do it for you.</li>
<li>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</li>
<li>Linear algebra and the foundations of computer graphics – just in case you need to put something other than text fields etc on the screen.</li>
<li>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.</li>
<li>Model checking – finds application in hardware design, and sometimes in software, certainly for some safety-critical systems</li>
<li>Verification – used less commonly, but starting to find application in safety-critical systems.</li>
</ul>

<p>Of course what will really help in the real world is a good <em>design</em> course and, I believe, exposure to many <em>different</em> 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.</p>

CC BY-SA 3.0
2011-10-28T07:24:55.717Z
2011-10-28T07:54:18.503Z
2011-10-28T07:54:18.503Z
Dave Clarke
<p>Caveat emptor: I know little about the real world, but let me put in a quick plug for learning theory.</p>

<p>One of the most marketable fields of CS at the moment (and one of the most valuable skills) is machine learning. (see <a href="http://hunch.net/?p=275" rel="nofollow">here</a> 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.).  </p>

<p>Luckily, machine learning also has a rich and well developed theory, both of the STOC/FOCS variety (see courses <a href="http://www.cs.cmu.edu/~avrim/ML10/" rel="nofollow">here</a> and <a href="http://www.cs.columbia.edu/~cs4252/" rel="nofollow">here</a>), and of the statistical variety (see, e.g. <a href="http://www.cs.cmu.edu/~10702/" rel="nofollow">here</a>), 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.  </p>

<p>Of course, soon the same should be true of <a href="http://www.cis.upenn.edu/~aaroth/courses/privacyF11.html" rel="nofollow">data privacy</a>. :-)</p>

CC BY-SA 3.0
2011-10-28T13:32:01.497Z
2011-10-28T13:32:01.497Z
Aaron Roth
<p>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 <em>use</em> them effectively.</p>

<p>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 &amp; 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.</p>

<p>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 <em>just</em> programming). Basically, I'm looking for a good direction.</p>

CC BY-SA 3.0
2011-10-28T02:57:38.330Z
I'm a little puzzled why you'd come to a site devoted to **theory** research to ask how to acquire "real-world" knowledge :)
Suresh Venkat
CC BY-SA 3.0
2011-10-28T07:34:03.960Z
@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.
Dave Clarke
CC BY-SA 3.0
2011-10-28T09:36:01.393Z
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).
Jeffε
CC BY-SA 3.0
2011-10-28T10:46:19.490Z
This would be a great question for a general CS site (see current proposal).
Raphael
CC BY-SA 3.0
2011-10-28T17:19:14.100Z
@DaveClarke: Not sure what you mean.
Suresh Venkat
CC BY-SA 3.0
2011-10-28T17:42:13.243Z
@SureshVenkat Both data mining and computational geometry are practical topics, though they are both theoretical in nature. In both topics there is a very strong theory side and theory that is more the theory of the practice.
Dave Clarke
CC BY-SA 3.0
2011-10-28T18:00:22.130Z
I like "the theory of the practice"
Suresh Venkat
<soft-question>
What can I do to supplement my theoretical undergraduate CS curriculum so that I can increase my value in industry & academia?
Dark Templar
# What can I do to supplement my theoretical undergraduate CS curriculum so that I can increase my value in industry & academia?

(Asked by: username_0 on 2011-10-28)

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.

**Tags:** soft-question
> **Comments:**
> **username_1**: I'm a little puzzled why you'd come to a site devoted to **theory** research to ask how to acquire "real-world" knowledge :)  
> **username_2**: @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.  
> **username_3**: 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).  
> **username_4**: This would be a great question for a general CS site (see current proposal).  
> **username_1**: @DaveClarke: Not sure what you mean.  
> **username_2**: @SureshVenkat Both data mining and computational geometry are practical topics, though they are both theoretical in nature. In both topics there is a very strong theory side and theory that is more the theory of the practice.  
> **username_1**: I like "the theory of the practice"  

---

## 3 answers

### Answer by username_3 on 2011-10-28. Score: 7

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


---

### Answer by username_2 on 2011-10-28. Score: 4

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.


---

### Answer by username_5 on 2011-10-28. Score: 3

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](http://hunch.net/?p=275) 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](http://www.cs.cmu.edu/~avrim/ML10/) and [here](http://www.cs.columbia.edu/~cs4252/)), and of the statistical variety (see, e.g. [here](http://www.cs.cmu.edu/~10702/)), 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](http://www.cis.upenn.edu/~aaroth/courses/privacyF11.html). :-)


---

