This is a response to CS undergrads asking for advice about what to do in college.


To get good at programming, work a lot, and work on hard problems. The best way to do this is to find some engaging project. This project probably won’t be a class assignment.

Another way to get good at programming is to find other people who are good at it, and learn what they know. Some of the smartest people around are the professors, so consider volunteering as a research assistant. Beware though - although they’re usually smart, a lot of them don’t work on interesting stuff. You should avoid these professors.


The amount of math that you need to know for programming is pretty small. It’s certainly less than what CS departments will admit.

But math is still worth studying because it’s a valuable source of metaphors for other types of work.








The languages you should learn to get a job depends on the kind of job you want (big companies want different things than small ones and research labs).

You often learn things in college that are more advanced than what you’ll need at a job, and a big reason for this is that it gives your brain a workout.


You don’t have to wait to graduate before you start writing real world applications - start contributing to open-source projects while you’re still in college.

Grad School

In principle, grad school is professional training in research, and you shouldn't go unless you want to do research as a career. And yet half the people who get PhDs in CS don't go into research. Don’t be deterred from going if you just want to learn more. But be warned - you’ll have to do a lot of things you don’t like (eg. your dissertation).

Aside from the dissertation, most people love grad school.


On the whole, grad school is probably better than most alternatives. You’ll learn, meet a lot of smart people, and get a degree.
