Fog Creek Software
Discussion Board


Hey Joel,

From reading your homepage, you went to Yale University and majored in computer science. I'm also attending a fairly prestigious University and double majoring in Pure Mathematics and Computer Science.

My question to you is as follows:

What advice would you have to somebody who wants to get the most out of their education?

For example, would you even take computer science if you were a present-day student? What electives would you recommend? What about homework/study skills? You seem like a really bright guy, did you ever consider graduate school/research?

Monday, February 23, 2004

I would take a CS curriculum and try to pick the classes with the most programming involved.

I wouldn't leave school without

(a) one course in C and/or assembler programming. NOT Java. NOT Pascal. C. Or Assembler. Not even C++. I mean it.

(b) introductory microeconomics

(c) an intensive writing course like the famous "Daily Themes":

Joel Spolsky
Fog Creek Software
Monday, February 23, 2004

In the interest of honesty I must add that I didn't actually TAKE Daily Themes, but I did take a writing-intensive course in the CS department taught by Roger Schank.

Joel Spolsky
Fog Creek Software
Monday, February 23, 2004

I think it depends on what your goals are -- a double major in Pure Mathematics suggests a different goal than software engineering.

Having taken a great deal of pure math, I will say it is not very relevant to software engineering.  The easy stuff is (e.g. basic set theory).  But once you get to even junior or senior year of an undergraduate major, it has no relevance.

*Applied* math has relevance, in computer graphics, signal processing, simulations, systems engineering etc.  Pure math is based on argument.  There are no numbers involved.  It is more like a degree in philosophy.  Applied math takes its own kind of skill.  There are people who are good at both, but most people have a distinct inclination one way or the other.

If your goal is to become a programmer though I would second Joel's advice.  Skip the class on the pumping lemma and build some real systems.  My other advice would be to work at a REAL job (not some fluffy internship) first.  Then you will know what is important to learn.  I had my first REAL job after I graduated (after some prestigious but fluffy internships), and I was surprised what I wished I had taken.  I wish I payed more attention in OS class, learned a little more about multithreading, about memory management schemes, about object oriented design -- rather than about combinatorics, complexity theory, lisp, and grammars and all that stuff.

Monday, February 23, 2004


Which residential college were you a member of?

Do you think it is a good thing that Bush, Kerry, Dean, and Lieberman all went to Yale?

Morse '88
Monday, February 23, 2004


What's really funny is we could have two Skull and Bones members running against each other for president. Where are the conspiricy theorists?

Joel Spolsky
Fog Creek Software
Tuesday, February 24, 2004

I'm an avid paranoid conspiracy theorist but this time there is no conspiracy but only obvious facts: Democrats and Republicans talk different but act the same. Members of the same club so to speak. Or rather literally in this case.

(I supported Bush last time. This time I'll vote for Nader.)

Of course it's the Bilderbungs that are really behind it all. Actually, I was lucky enough to go to one of their meetings a few years ago. The strange thing about it was that although there were a lot of nefarious illuminati international bankers there, none of them were jewish.

Dennis Atkins
Tuesday, February 24, 2004

Yale - don't foget WJ Clinton, GHW Bush and H Clinton. It seems quite possible that after Reagan and for the foreseeable future we could have nothing but Yalees in the White House. As a UCONN graduate, this makes me ill (not really).

Actually, I like Yale. If we had no Yale, we'd have no York Square. And if there were no York Square, there'd be no York Square Theater. And then I'd have to go all the way to New York to see Triplets of Belleville.

Tuesday, February 24, 2004

Getting back on topic, I would recommend a Philosophy course. 

I took a Philosophy of Science course on Space and Time in my last year.  Somehow, debating about the nature of the universe and epistemology ("How do we know that what we know is true?") helped me as a programmer and software designer.  It's funny, some metaphysical theories are just Object-Orientation in a different language. 

The biggest benefit was a chance to exercise communication skills that doesn't always come up in programming courses.

Nicolas Desjardins
Tuesday, February 24, 2004

One of the hardest and most rewarding non-technical classes that I had was Rhetoric. It's not twisting words or anything like the common usage, but more of how to write considering your audience, what the tools are to persuade, how to read critically, etc.

Tuesday, February 24, 2004

This is a leaky abstraction thing, (i think) when I fiirst got turned onto C ( and unix) it was because I saw ( .s) what the compiler was doing.( good luck now!)  To write code you can survive a lot of ignorance, to debug code ,sometimes ,, you need to understand exactly what  is happening.. Countless times I've been able to figure out bugs that confused others because I could imagine things in terms of the idealised C registers and stack. It is not knowing something obscure it is knowing something precisely and accurately.

I ( Joel may correct me) think the issue is understanding what the  real thing  is . i.e. add  up x,y,z, but q is differant beacuse base 2 vs base 10.

mike abbott
Tuesday, February 24, 2004

I'm enjoying the conversation, though I'm a college student so I have only a questionable amount of wisdom to add. Personally I'm majoring in applied math but my interest is business. Thus I've found my courses in entrereneurship, finance, and organizational behavior most interesting.

Ralph Lee
Tuesday, February 24, 2004

The two classes with the highest impact, for me, were compiler construction and the required computational theory class.  Once they blow your mind with the theory you're nice and ready to build your own compiler. After that, all sorts of things become extremely clear.  And they're not the kind of ideas you'd learn on the job. An honorable mention goes to a human-computer interaction course, although it is a little easier to learn out of school than the first two.

Marcel Levy
Thursday, February 26, 2004

*  Recent Topics

*  Fog Creek Home