Three months later, I’m done with my OPW internship with GNOME Music.
I’ve learned that open-source contributing isn’t as scary and impossible as it once seemed, and that IRC is full of nice people who are happy to help! But I’ve also learned that diving into a new codebase is challenging, at best, and nearly impossible at worst. pdb
, for x in dir(foo): print(x)
, traceback.print_stack()
, and inspect.getargspec(myfunc)
have become good friends of mine in the past three months. Good documentation, it turns out, is essential—the project I was working on had very little, and the libraries it utilized (at least, the Python wrappers for those libraries) were similarly sketchily documented, and all this made learning the code waaaaay tougher than it needed to be.
I’ve learned how much I benefit from writing things down. I took notes when I was learning SPARQL, and color-coded my questions so I could come back to them later. I kept track of all the weird dependency problems I ran into during my build—which turned out to be way more useful than I’d even imagined when I ended up having to JHBuild my program all over again on a different machine. I made a to-do list at the beginning of every work day, with a macro-goal or two and manageable sub-steps that I could check off as I did them, to keep myself on-task and non-overwhelmed. I kept a list of bugs as I ran into them so I didn’t get side-tracked—I could finish the task at hand, then go back and report all the intervening bugs at once. Similarly, I tried my best to jot down any real-world distractions—like that email I needed to send, that form I needed to mail…—so that they were out of my head and on paper, and I could come back to them whenever I was done with work.
I’ve learned how important task-setting and accountability is to me. If I don’t know what task I’m doing at any given time, I have the potential to just mess around in the source code for a good few hours without really getting anything done. Having “Bug X: Put Y in the Z” written at the top of my notebook, or telling my mentor Vadim, “Okay, I’m gonna work on foo today,” clarified my purpose and kept me from trying to do 5 things at once, or from doing nothing at all.
I’ve learned that working from home is hard! I need to be pretty firm with myself to get out of bed in the morning, shower, eat a good breakfast, and sit down to work, instead of lazing around in bed with a book for ages and messing around on Facebook. But for the most part, I managed to stick to the rules I laid out for myself at the beginning of all of this, to great positive effect. (Having codified rules definitely helps!) (Disabling Facebook on my work machine, and disabling my Facebook newsfeed on my personal machine, have both been very good choices as far as my productivity goes.) Having a space that is my work space (my desk, with an external monitor) helps a lot—if I find myself distracted, I get up, wander away, and take a break, and come back when I can actually think straight.
I’ve learned that the toughest part of any project tends to come right at the very beginning: the system set-up is always stupidly, grossly difficult, and learning a new codebase (as I mentioned above) is hard! For the first month, I felt like I’d hardly accomplished anything—I could barely write patches because I was still trying to figure out how everything worked.
And of course, I learned a bunch of concrete skills. I know a fair bit (though by no means everything) about how GNOME Music works, I know about Tracker and SPARQL, I know a little something now about open-source workflow, bug reporting, and bugzilla, and I’ve acquired some new git-fu by necessity (since I’m working on a multi-contributor project, need to make my commits as self-contained as possible, etc.). I’m so grateful to the GNOME Foundation and to OPW for this fabulous opportunity, and to Vadim Rutkovsky for being the most friendly, helpful, and laid-back mentor I could have hoped for!
What’s next? At the end of the month, I’ll be starting as a software engineer at Spring, a mobile shopping app startup based in NYC. I’m beyond psyched to join their team, and to put to use all of the skills I’ve gotten from OPW. And I’ll certainly stick around GNOME Music/GNOME/the open-source community—you’ll probably see me poking my head into various IRC channels from time to time (nick = maiamcc
). If anyone wants to talk about GNOME Music, or OPW, or SPARQL, or anything, really: come say hi!