I’m doing research this quarter with a grad student in the graphics lab. Mainly, I’m trying to figure out if research is something I’d want to do in the future and so far I think it’s still too soon for me to tell. Research for me right now has a lot of neat perks. I get to sit in on meetings with some pretty big names in graphics, and I get a little desk and a big monitor on the third floor of Gates. I just acquired a new chair—a hand-me-down after one of the grad students brought his chair in from home. It’s the worst chair in the office, but far superior to the one in my dorm room.
Probably one of the most valuable parts of this whole experience is interacting with the grad students. Grad students are very good at sorting out the good from the bad. Most of them have spent years reading papers and so when a paper makes it through their filter, you can be sure its not crap.
Most of this quarter has been spent on getting acclimated to the code base and understanding how the algorithms work, though recently, I was assigned the task of making a portion of the code fast. It’s a small kernel of code but ends up running for 80% of the time so speedups in this area are quite fruitful. (I optimized two lines of the code and gained 10% speedup!) While it was interesting and not completely trivial, it was definitely on a different spectrum from what I was reading in papers.
As much as I’ve seen, there are two types of work in research. One is these is incremental work. You take some existing implementation or idea and you iterate. It’s like the steepest descent algorithm. You look for areas that can be improved, improve them, then repeat. I suppose this isn’t strictly limited to CS or work even. After a presentation from Mozilla, I talked to an old friend working there about professors switching their research interests. We hypothesized that some professors switch areas of interest into new fields, where incremental progress can be considered a huge gain. A little cheap, but efficient.
The other type of work is much more alive. It’s refreshing. For example, this one paper my grad student recommended me to read. It was extremely well presented, so well that after reading it, the ideas just seemed obvious. It took a well known problem that people have wrestled with, tilted it on its side, and exposed some new angle to attack it.
It is usually progress in the former often what leads to progress in the latter work. The good papers generally pay respect to the incremental work, noting how each one contributed to a piece of the puzzle and provided a hint to the final answer. I can only hope that the work I’ve done gives us some similar insight, more than just: “Oh, that was hard.” At least I helped them cull out one bad idea and learned about vectorization along the way :). I think the next quarters I’ll be doing more independent work and hopefully I can trudge some new grounds there. If I’m lucky (or good enough), I won’t have to hear the words “exercise in futility” ever again.
yay, optimizing code. i spent most of this week making Apture's javascript code smaller and faster. it's a lot smaller now. and i think a little bit faster, although we don't really have a good way of measuring that. it was fun, but i'm kind of OCD and it kind of consumed my life. i think i dreamed about code the last couple of nights. i'm not too happy about that.