Update: I forgot to mention, before this I'll be doing an internship with RethinkDB, which I'm really looking forward to. I'll be in the Bay area in December 2010 just for the month and then I'll move there indefinitely April 2011.
Since high school, or maybe before that, I had dreams of becoming a computer science professor after getting a PhD in programming languages. Reading people on Slashdot and thedailywtf talk about real-world jobs made me never want to have one. So, to see what research is like, build relationships with professors and help my resume, I've done research internships with professors each summer rather. There's a special NSF program called REU to fund these, and because of this I've never found it difficult to find these positions.
The research topics always sound really interesting, but somehow the mechanics of doing research never really worked out for me. I could make some progress, but didn't make a significant piece of software or contribute a polished component to someone else's software. I learned some ideas, and read and modified some significant pieces of code, but I always lost motivation somewhere in there.
I take this to be a product of the incentive structures in academia: everyone has to work for themselves. Sure, most people are motivated to some degree by the idea of science and technological progress. But that's not what the system is set up to do. Academia isn't about ideas directly; it's about publishing many papers in prestigious venues. You don't just do what you want, you do what the program committee will like. If you don't do this, then you won't be able to stay in academia: at every step--getting into grad school, getting an academic position once you have a PhD, getting tenure--most people are kicked out of the system. You have to get your name first on enough papers to survive, so collaborative groups are often very small and technical interaction, outside conferences, can be limited.
On the upside, there are tons of smart, interesting people in academia, and the work can be challenging and interesting. I've just realized, recently, that they don't have a monopoly on these things. Working, if it's for the right company, should have these things too. I know there's gruntwork, but if you're working on a real project in academia, this exists there too. In fact, it can be really bad: grad students need to get something publishable written as quickly as possible, allowing both messy and buggy code. It doesn't really matter anyway, nobody's going to use it and the PC won't see the code when reviewing the paper.
Interviewing with companies was so easy. It was so much less work than the mess of personal statements--one for each of 10 grad schools--and recommendations that I was preparing to do. You just send in your resume (which I just wrote in a couple hours), they respond asking when you're free, you interview on the phone once or twice, and then meet them in person for a few hours. If the process takes two months because of delays on their end, everyone complains about the slowness. For grad school applications, it can take months to assemble your part of the application materials, and more months for them to respond. And you have to apply 9 months before you'll start.
Within a couple months of getting tired of academia, I had a couple job offers and a few more promising interviews that felt like they'd lead to an offer if I kept going. It was hard for me to choose Google, but I think it should be the right environment for me as a recent graduate. They (should I start saying 'we' soon?) have amazingly advanced technology, great perks and what sounds like a good support and training structure for employees. There are many people working for Google as software engineers that don't need to work, and could probably find a good job at lots of places.
And, I guess this isn't so important, but it doesn't hurt that the starting salary for recent graduates at Google is something like what a tenured professor makes, or that I'll be able to live in San Francisco, my favorite city. Maybe the work will be difficult and have long hours, but my life will be nice in ways that I never expected to happen so quickly.
If I have any readers in the Bay Area, contact me and we should chat! I love talking with other programmers.
7 comments:
Congrats—and have fun in SF! I'm jealous.
Congrats; make good use of your 20% time!
There's a pretty active Forth group in the area; that's where Chuck Moore gives his yearly speech, and his current line of processors is really interesting. Might be an interesting way to meet some people who could be taught Factor, since Forth is one of the classical influences of Factor.
The only person I know of who works there and knows Factor (and Forth) is Sam Falvo. He lived/lives right near the Google complex; I can introduce you if you're not already familiar with him.
William,
That'd be nice. Do you live around there too? It could be fun to hang out some time.
Congratulations!!
Cheers,
Ruben
"somehow the mechanics of doing research never really worked out for me. I could make some progress, but didn't make a significant piece of software or contribute a polished component to someone else's software"
Research is not about writing code.
Create code, and you solve one problem. Create an *idea*, and you solve millions.
Research is about creating knowledge that enables thousands of coders world-wide to solve million problems.
All the best at Google.
Anonymous,
This is how research is sold, and this is what I wanted to get into as a researcher. But (I may be wrong) it seems to me that ideas are only a small part of it.
First of all, your idea has to solve some problem recognized by the research community to be important, or your paper is going to get rejected and everyone will ignore your technical reports. (You can also convince the research community that your problem is important, but you have to start *somewhere* with shared values.)
Second, you need more than an idea: you need a fleshed-out idea. In the world of systems, which is what I like, this means a good implementation with sound evidence that you've done it better than the other guys. This is what takes most of the work. And this is how it should be--things are much better when they have sound empirical evidence and a practical demonstration. (In fact, there's some concern that the empirical techniques aren't good enough.)
In each of the three summers, I came up with the idea I wanted to pursue in the first week, or before my actual internship started. The whole time I was working on the implementation. Without a working implementation, there's not much to talk about. I could come up with a bunch of ideas for making programming languages faster, but I have no idea if they'd work and if they'd be worth it, so those ideas are worth very little right now.
Both industry and academia involve innovation, thought, and hard implementation work. They get to work on solving different problems due to their different incentive structures. Academics tend to do more experimental, failure-prone stuff, but they mostly don't *actually* want to risk complete failure--it'd cause damage to their career, or at least slow it down.
There are jobs where programmers are more or less innovative; academia doesn't have a monopoly on innovation. Academia has inventions that influence industry, but industry also has inventions that influence academia and certainly industry has inventions that influence other industry.
I hope Google turns out to be a place for innovation as it's advertised. You hear about lots of people dropping out of grad school to work at Google, but not very often the other way around, and I don't think it's because they've decided they don't want to have new ideas anymore.
Daniel, I live in San Diego County, about a day's drive from the Bay area. Not an easy outing :-). It would be excellent to hang out.
I do think you're likely to meet Factor enthusiasts around Google, though.
Post a Comment