Last month, I had the chance to participate as a mentor for the GeoGit project at Facebook Open Academy, a program designed to give students practical software engineering experiences while working on open source projects.
The program was organized Jay Borenstein, a Facebook employee and lecturer at Stanford University, and brought together students from 25 universities, including Carnegie Mellon, Columbia, Harvard, MIT, Princeton, Stanford, University of Illinois at Urbana-Champaign, University of Washington, Universidade Estadual de Campinas, University of Singapore, Tampere University of Technology, Waterloo, University of British Columbia, University of Tokyo, Imperial College London, and others. Students and mentors met in person at the beginning of the term to help students gain software development experience by working on specific open source projects.
Day One: Getting Started
Jay Borenstein gave a kickoff at Stanford University that was very clever, enthusiastic, and even a bit charming. Then Scott Chacon, of GitHub, gave an introduction to git by going through fundamental versioning concepts and describing online collaboration.
On the shuttle bus, I met the five students I was mentoring as we returned to Facebook’s campus. Since it was the day Facebook was celebrating their tenth anniversary, absolutely no pictures were allowed and there were almost as many security guards as attendees. Towards the end of the weekend they allowed us to take some pictures, though not of some gadgets they have in there.
We managed to set up a workspace and introduce ourselves. There was Jill from Waterloo, Ben C. and Ben G. from Cornell, and Xin (Rickie) and Xinlong (Simon) from Sichuan. We talked a bit about GeoGit and what they were interested in. I realized that we needed to take advantage of our time together with some constrained tasks as they familiarized themselves with the project.
All the students were very smart and we managed to get them doing something useful:
Ben G. and Rickie tried to homogenize the
WriteTree2commands into one. While we didn’t succeed, it was tremendously helpful as they got to dig deep into what’s going on in several aspects of the library and it helped them ask the right kind of questions.
Simon and Ben C. were assigned the task of “fixing” the design of the
statuscommand, which was thus far only in the command line interface (CLI). Since the CLI is supposed to have no logic other than argument parsing and output to the console, they had to move the logic into a new internal operation in core library.
Day Two: Coding is Social
By Saturday afternoon, we were all set with the assignments. I spent the day supervising, explaining things, and giving directions while at the same time encouraging them come to the correct answer by themselves. I found it to be a great learning experience, especially since I’m no teacher. As it was supposed to be a time for them to learn about open source development, I taught them to create pull requests and showed them that peer review often meant having code commented out and constructively criticized until the reviewer was satisfied. It was ok for things not to be perfect on the first try.
Andrew Ross, the Director of Ecosystems at the Eclipse Foundation and a founder of the LocationTech working group, shared our table and was very nice and helpful. He introduced me to Rob Emanuele from GeoTrellis, who I wish I’d on my team. At Saturday’s dinner, I found myself by chance sitting besides Guillermo Rauch, another Argentinian, and close to Jay and others. Guillermo created Socket.io, lives in San Francisco, and launched a startup in the Bay Area at the age of 19 that was acquired by Automattic, where he now works.
Day Three: Next Steps
On Sunday, the students and I agreed to sit down and talk about future plans, as they seemed worried about the scope of the longer-term assignments. We agreed that we were going to build new features, as that’s more interesting than documentation or bug fixing, as well as reduce scope in the face of a steep learning curve and limited time. Unfortunately, an early lunch, the early end time, and a lot of people going back and forth taking group pictures left us a bit vague about next steps, but we did conclude that:
Being mostly math oriented, Jill, Ben, and Ben will pursue spatial indexing instead of focusing on Hadoop parallelization.
Xin and Neelesh will pair on the implementation of alternate storage backends (such as HBase)
Xinlong and a group of four students back home will build a mobile app to make edits to geographical information in the field and sync back to remote repositories using GeoGit.
All in all, it was a great experience and I have high hopes that we’ll have more storage backends, cool spatial indexing on the feature graph, and a mobile app to gather and version information from the field by the end of the semester — and hopefully one or two more regular contributors to the project!
“Always pass on what you have learned.”
Gabriel Roldan is a core committer to GeoGit, GeoServer, and GeoTools and a founding GeoServer Project Steering Committee member.