Wednesday, January 05, 2005

Joel on College

I have a love-hate relationship with Joel Spolsky. I disagree with him as often as not, but his most recent essay, Advice for Computer Science College Students, is better than most.

As usual, the essay is a mixed bag, but on his last point (getting a good internship), I agree completely. After my third year, I interned with a small startup company. This was way before the Internet bubble, so working for a small company wasn't the "in" thing to do--people favored either research internships at the university or else internships with big companies like Andersen or IBM. I didn't even find their product that interesting at the time--I was looking toward UNIX system administration as a career, and they were developing the first software-based video editor for Windows.

But it broadened my worldview. I found out why source control is important (they didn't have any). I found out why microecomics is important (hint: make sure your company can make payroll). I found out that compilers don't give partial credit, and that real quality matters, because released software has a longer lifespan than homework assignments, and customers and magazine reviewers grade a hell of a lot harder than bored TAs.

In other words, the real world isn't your BSCS program, and I learned that a lot faster in a small company than I would have at a cushy Fortune 500 internship.

It was also the best career move I've ever made. The three-programmer and two-intern company turned into a one-programmer and one-intern company by the end of the summer (the other programmers left for greener pa$ture$). The president asked me to stay on for a year, and after we presented in the Microsoft booth at Comdex that fall, Paul Allen bought the little company, and me along with it.

So I'd add to Joel's advice: get an internship, but make sure it's one where you're not insulated from reality. Lots of companies put their interns in the corporate equivalent of a padded cell. They let interns write some low-impact code, do some random-monkey testing, or handle some scut-work that isn't cost-effective to have a more senior programmer do. But an internship at a small company that's just scraping by will expose you to the real world, and the insight and bruised knuckles you get there will give you a real advantage over your blue-suited entry-level colleagues.

No comments: