Showing posts with label Ph.D.. Show all posts
Showing posts with label Ph.D.. Show all posts

2011-02-01

The PhD is over

I received by email my receipt saying that my PhD dissertation was accepted by the UBC library for archiving. That means I am no longer a student; I'm Dr. Brett Cannon.

It's stil quite the statement to be able to make. I started junior college in September 1997, and for about 11.5 years over these past 13.5 (forced to take time off between PCC and Berkeley, year off between bachelors and masters, and then time off during my three internships at Google), I have been in some form of post-secondary education. To have it finally be finished is somewhat astonishing. I am literally no longer a student; I'm flat-out done and will never be working towards another degree again in my life. That's almost unthinkable.

So the question that I have been asked over the past several months as I worked on my dissertation and towards today has been if I thought this was all worth it. My answer to that is "I don't regret it, but I would not have done it if you told me what it would end up entailing". Basically I would have stopped at my masters degree and gone to work for Google if I knew then what I know now.

Why is that? Well, you need to understand what a computer science PhD entails. You start by taking classes; the 2005-2006 school year for me. For me that was somewhat painful as I had to take an algorithms course for the first time and that is my weakest subject in CS. After that you try to find a dissertation topic. That took me some time as all of my ideas turned out to either be done, too small (e.g., masters level), or too big (multiple PhD students working for years on one massive project), or not enough research behind it (once again, more like a masters thesis). But I was lucky enough to finally have inspiration strike me in my supervisor's office in the summer of 2007. Then you live and breathe that idea until you get a published paper out of it; March 2009. After that you then expand upon the idea, quite possibly with more publications, until it is big enough to warrant a dissertation that is over 100 pages. In my case I diverged in my work and came up with another idea in around April 2009 which got published in April 2010. You then write up your dissertation, get your supervisory committee to sign off, defend it, make final corrections, and then get it to the university library to archive for eternity; that last bit happened today.

In that whole process, there were multiple points of frustration for me. A big one was getting published. It turns out that I don't write like most CS researchers. Coming from my philosophy bachelors, I have a natural writing style which is somewhat flow-y, with more of an emphasis on telling a story. CS papers, on the other hand, are very dry and to the point (something, if you have ever talked to me in person on a topic for any great length, I am not good at doing). As Eric, my supervisor, has always told me, write a paper like a program: repeat points as necessary, be very structured, etc. This drove me nuts. When I wrote CS papers I had to mentally force myself to write in a style that I did not like. If I had my way that stupid paragraph at the end of every introduction I ever wrote that outlines what each section was about would not exist; read the section titles to know what they are about! The paper is only 10 pages! You can flip through it to see what is coming up!

And then there is making sure a paper is done in a way that pleases the conference you are submitting to. You don't simply write a paper for yourself and then try to get it accepted at some conference in your field. No, you write a paper for a conference. That always pissed me off as I felt like I was no longer doing the work simply for the benefit of research, but instead to get a publication. It's an age-old problem with academia and it simply rubbed me the wrong way. It especially upset me when I got rejected for what seemed like bogus reasons because one reviewer just didn't like my approach.

And it didn't help that the programming was not always fun. Java is a blight upon computer science which has a stronger hold upon CS academics than it does enterprise programmers. The great irony of CS academia is that you are usually developing cutting edge techniques with old tech. Programming in Java, using CVS for version control (svn if you are very lucky), all on Windows. My security work was all in Java and I hated it. It's my own fault for coming up with an idea that required AspectJ and thus using Java, but that doesn't mean I have to like Java or my time programming. At least my object persistence work used JavaScript which is better. And thank goodness I got to write the server part of my object persistence work in Python on App Engine.

It was the frustration of being distracted from my research to get published, not always doing the fun stuff even when I was only focusing on my research, and just the amount of time I had to spend on a single idea that causes me to say that I would have skipped the PhD had I known what it was going to take. Had I got to simply focus on the research then I probably would have absolutely no qualms about the PhD.

And now here is where I act as the wizened old man, helping CS students decide whether they should pursue a CS PhD. First, you should make sure you actually enjoy programming. I know this seems like a silly thing to say, but I have met CS academics who actually find it really weird that I enjoy programming enough to do open source work in my spare time. But if you don't have that kind of love for programming you might end up going nuts.

Second, make sure you love research. Not everyone can stand to read research paper after research paper on the same topic. I know way too much about security in PHP for a person who has not programmed in PHP in years. But that's what happens when you have to be thorough.

Third, realize that you will have to do publications and that you will not enjoy it. Publications are just part of the game of academia. You will be expected to put the time in and it will be not a highlight of your academic career. If you want to become a professor you better hope that you can at least tolerate the publication aspect.

Fourth, don't expect your research to make any sort of impact. While the entire point of your PhD is to push the boundaries of mankind's knowledge, the amount you will push it is small. And the importance of the push is even smaller. I know I don't expect any of my work to ever be used for anything other than as something to cite in other publications.

Fifth, you need to be self-driven and organized. If you are not then the freedom afforded to you in a PhD will lead to you wasting a lot of your own time, postponing your graduation that much more.

My failure was liking research but not loving it combined with not knowing how much I would hate trying to get publications. But at least I met Andrea through all of this so that's a perk. Plus I get a spiffy title.

2010-01-21

Paper accepted for the WWW2010 conference

My latest research has been accepted as a research paper to presented at WWW2010! This is a big deal for me as it get me a publication covering the second half of my thesis work (the first half was published at AOSD 2009 earlier this year). Having both halves of my thesis published alleviates a good amount of burden for my thesis as I don't have to work quite as hard to prove it has good ideas to my thesis committee; other peers have already said the work is good. So I will be graduating some time this year once my thesis is finished!

2008-08-01

Poster of my thesis work is online

The abstract and poster that I presented while at SOUPS in Pittsburgh are now up. If you are not into programming you probably won't get much out of either thing, but at least people finally have something to look at. =)

2008-02-14

I wonder how much time my thesis will take?

[please note all names are people I know from PythonLand, so if you don't recognize them, that's why]

Jeremy shared on Google Reader, which I picked up on FriendFeed, a post by Ping on how much time his thesis took. The graph he generated was rather interesting. It made me start to think about whether I would have any interest in such a thing.

I figure I could use my Jaiku feed to keep track of the timestamps. Since I already micro-blog about what I am up to anyway, it wouldn't be too hard to just add a little marker to my posts to denote that I am doing work on my thesis and then a second message saying I have stopped. It could be as simple as "thesis paper ... editing latest draft" or "thesis research ... reading about Java's memory usage" and signaling I have stopped thesis work with "thesis stopped ... doing a blog post on something". I could then just pull down my Jaiku feed and write out the timestamps to a text file. I could even write a Dashboard widget for OS X that fetched the information and then aggregated the data for me so that I could see how things were going. That way I wouldn't have to even remember to pull down the data. Otherwise I would have something launch in my terminal.

Yes, this is extremely nerdy. But knowing the amount of time it took to go from ABD (All But Dissertation) to someone with a Ph.D. would be kind of interesting. I would start once I defended my thesis topic instead of right away as it gives a very specific start point as well as giving me time to get everything in place to actually do this.

Anyway, this is just an idea I currently have. With the amount of other projects I have going I have no clue if I will have the determination to keep it up for as long as I would need to for complete data.