I find it to be one of the great challenges in life: gauging progress. I experienced it a lot during my multi-year pursuit towards fluency in Korean. It always seems like there's a shortage of time to learn things deeply. I notice this ever so frequently now as I immerse myself in the world of all things programming.
This past week provided me with many opportunities to not only realize the numerous gaps in my own knowledge, but to pick the brains of several different individuals with a modicum (or more) of expertise in their relative fields. Starting with a trip down to Seattle to spend the weekend with a group of Tor Project developers and fans, continuing with a deep discussion about the fundamental research questions that remain unanswered in the space of web tracking, and ending with a personal tour of my university's network operations center (and yes, it's insane).
Wanting to challenge myself more, I decided that the next task I'll be taking on in Privacy Badger is exploring WebRTC. WebRTC is an interesting protocol used by many peer-to-peer web-based services (think Google Hangouts, etc.) which makes it easier for people to interact with others in real time. It does, however, have some weak points. In particular, there is a way in which the local IP address, even when being loaded over a VPN or the Tor network, can be visible to the other side. In the Privacy Badger project, we've been talking about this, trying to find a way to provide better protection against WebRTC fingerprinting while simultaneously allowing users to enjoy the benefits of WebRTC for useful web tools like Google Hangouts.
Over the next week, I've got some exciting things lined up. Firstly, I have to read a bunch of papers for my research project to better understand the current state of the art and the extent of current research in the area. I'm discovering quickly that finding an appropriate research question is no small task. Secondly, I've got a bunch more reading and hacking to do in order to figure out how to handle the WebRTC related functionality. Thirdly, I need to curate some material for the Korean learners that I'm tutoring. It shouldn't be too hard to write up a few simple dialogues to get the ball rolling. Fourthly, I agreed to join a book club a few weeks ago, and our book is "For Whom The Bell Tolls". It's turning out to be an awesome story, and I'm really enjoying reading it on the commute to school.
With all this, though, the question is always how to effectively gauge my progress. It's hard to see any improvement when I constantly encounter frameworks, tools, projects, etc. that I have no experience with. The barriers to entry often seem insurmountable, especially as I've been working closely with some very experienced people. What I've found, however, to be a good metric, is how I compare with myself from six months ago. Six months is enough to make noticeable progress, and when I look back to six months ago and think what I knew then, I'm happy with how far I've come. Certainly not enough to rest on my laurels (though I doubt that day will ever come), but enough to know that I'm moving in the right direction. Oh, and that all this programming stuff takes time.