One thing that continually amazes me is the amount of email I get from
readers of this blog asking for career advice. I usually try to just politely
decline; I don’t think I’m particularly qualified to give personal
advice to people that I don’t know personally.
But one thing that I have done before is shared a bit about my own
experience, and what I’ve learned about the different career paths that you
can follow as a computer science researher. About six months after I started
this blog, I wrote a post about working in academia versus working in
industry. I’ve been meaning to update it, because I’ve learned
a bit more in the last few years. When I wrote the first version, I
was a research staff member at IBM’s T. J. Watson research center. Since
then, I left IBM, and I’ve been an engineer at Google for 2 1/2 years.
Having spent a couple of years as a real full-time developer has
been a seriously educational (and humbling) experience. If you’d like
to look at the original to see how my thinking has changed, you can find it
here.
At least as a computer scientist, there are basically three kinds of work
you can do that take advantage of a strong academic background like a PhD. You
can go into academia and do research; you can go into industry and do
research; or you can go into industry and do development. If you do
the last, you’ll likely be doing what’s sometimes called advanced
development, which is building a system where you’ve got a specific
goal, where you need to produce something real – but it’s out on the edge of
what people really know how to do. You’re not really doing research, but
you’re not doing run-of-the-mill programming either: you’re doing full-scale
development of systems that require exploration and experimentation.
I’m going to talk about what the differences are between
academic research, industrial research, and advanced development in
terms of the basic tradeoffs. As I see it, there really five fundamental
areas where the three career paths differ:
- Freedom: In academia, you’ve got a lot of freedom to do
what you want, to set your agenda. In industrial research, you’ve
still got a lot of freedom, but you’re much more constrained: you
actually need to answer to the company for what you do. And in AD,
you’re even more constrained: you’re expected to produce a particular
product. You generally have a decent amount of freedom to choose
a product to work on, but once you’ve done that, you’re pretty much
tied down. - Funding: In academia, you frequently need to devote huge amounts
of your time to getting funding for your work. In industrial research,
there’s still a serious amount of work involved in getting and
maintaining your funding, but it’s not the same order of magnitude
as in academia. And in AD, you don’t really need to worry about funding
at all. - Time and Scale: Academic projects frequently have to be limited
in scale – you’ve got finite resources, but you can plan out
a research agenda years in advance; in industrial
work (whether research or AD), you’ve got access to resources that
an academic can only dream of, but you need to produce results
now – forget about planning what you’ll be doing five years
from now. - Results: What you produce in the end is very different
depending on which path you’re on. In academic research, you’ve got
three real goals: get money, publish papers, and graduate students.
In industry, you’re expected to produce something of value to
the company – whether that’s a product, patents, reputation, depends
on your circumstances – but you need to convince the company that
you’re worth what they’re paying to have you. And in AD, you’re
creating a product. You can publish papers along the way, and that’s
great, but if you don’t have a valuable product at the end, no number
of papers is going to convince anyone that your project wasn’t a failure. - Impact: what kind of affect your work will have on
the world/people/computers/software if it’s successful.