Together with Soedar, Scott (Kaizhi), Minqi, Joel, Camillus, we took part in Facebook Open Academy under the module CP3101A Open Source Project. In my opinion, CP3101A was definitely one of the most memorable modules this semester. The cool stuff we did:
- Went on an all expenses paid trip to Facebook HQ in Menlo Park and participated in a hackathon there.
- Worked with students from MIT, CMU and other prestigious universities on open source projects.
- Hacked on an open source project (Galaxy in my case) for 9 weeks.
- Leveled up in web development.
The 4 MCs I'm getting from CP3101A will go towards my UEM credits, which doesn't count towards my graduation because my UEM MCs are already overflowing from Mech Eng and NOC modules. However, no regrets there, because it was this open source stint was still a very valuable experience, one that is extremely relevant to all software engineers in their career.
Here are the combined reflections from us, the 2nd batch of NUS students who participated in Facebook Open Academy, with input mainly from Soedar, Joel, Prof Ben and myself:
Open Source Reflections
Participating in Facebook Open Academy allowed us to explore open source development in a guided environment under experienced mentors. From the program, we gained deeper insights into working in remote teams, improved our Git-fu, and gained first-hand experience on how to apply them on a real-world project.
Submitting pull requests is like riding a roller coaster - there is a sense of thrill when pull requests are approved and merged into the repository, yet a sense of disappointment when we receive negative feedback and have to make major changes. As the code that we have written is open to public scrutiny, it is extremely fulfilling when our code is accepted and deemed to have met the standards of the community. In this sense, working on an Open Source project definitely beats working on school projects, where the main emphasis is often to simply make the code work, and there is little emphasis on the quality of the code.
We became familiar with common open source workflows, making frequent use of Git features such as branching, rebasing, cherry picking, reset, etc, and saw a significant improvement in our Git-fu. Some of us had teammates who were unfamiliar with Git and we were frequently helping them clean up their pull requests and teaching them the proper Git workflow for the project. We saw that as a personal achievement because at the start of the program, we were only familiar with the common Git commands, but at the end of it, we are able to understand and execute complicated Git workflows. We have also come to appreciate Github as a well-designed platform that aids in the development of open source projects.
A main challenge that we faced was having to work with teammates who were in different locations and time zones. We were used to working with teammates who are physically present (such as during school projects or on an internship), and never had the chance to work in remote teams. In our projects, we found that the communication overhead often reduced the momentum of our projects considerably. This is especially evident for the code reviews of pull requests: it would often take days before a pull request was thoroughly reviewed and merged.
We felt that we could probably have been more effective if we were more aware on how our actions would have affected our teammates. Upon reflection, there were times where our actions might have made some of the work done by our teammates obsolete, usually by implementing features that supersede what they have done or causing their work to be irrelevant. We should have been more aware of this, and probably clarified our intentions with each other, as well as worked more closely to resolve issues. We have also been able to apply some of the ideas that we have learnt into our school projects. We found ourselves adapting the open source workflow into our school projects, and imparting the knowledge that we had gained to other schoolmates who did not have the opportunity to participate in the program. It was especially rewarding when others begin to appreciate the need for code review, and come to understand the open source workflow as well.
To conclude, we have often relied on many Open Source projects in our work. It is only natural that we should give back and contribute to the growth of open source projects. The Facebook Open Academy program has provided us with the opportunity to take the first step in contributing to Open Source, under the guidance and supervision of capable project mentors. We would definitely want to continue developing for our projects or joining other interesting projects, and play a more active role in helping the Open Source community grow.