I've been marking student submissions in my open source course this weekend, and with only a half-dozen more to do, the procrastinator in me decided a blog post was in order.
I layer a few extra requirements on the students, some of them to deal with things I've learned in the past. For one, I ask them to set some personal goals for the month, and look at each pull request as a chance to progress toward achieving these goals. The students are quite different from one another, which I want to celebrate, and this lets them go in different directions, and move at different paces.
Here are some examples of the goals I heard this time around:
- Finish all the required PRs
- Increase confidence in myself as a developer
- Master git/GitHub
- Learn new languages and technologies (Rust, Python, React, etc)
- Contribute to projects we use and enjoy on a daily basis (e.g., VSCode)
- Contribute to some bigger projects (e.g., Mozilla)
- Add more experience to our resume
- Read other people's code, and get better at understanding new code
- Work on projects used around the world
- Work on projects used locally
- Learn more about how big projects do testing
So how did it go? First, the numbers:
- 62 students completed all 4 PRs during the month (95% completion rate)
- 246 Pull Requests were made, consisting of 647 commits to 881 files
- 32K lines of code were added or modified
I'm always interested in the languages they choose. I let them work on any open source projects, so given this freedom, how will they use it? The most popular languages by pull request ere:
- HTML/CSS - 11%
- C/C++/C# - 11%
- Python - 10%
- Java - 5%
Web technology projects dominate GitHub, and it's interesting to see that this is not entirely out of sync with GitHub's own stats on language positions. As always, the long-tail provides interesting info as well. A lot of people worked on bugs in languages they didn't know previously, including:
Swift, PHP, Go, Rust, OCaml, PowerShell, Ruby, Elixir, Kotlin
Because I ask the students to "progress" with the complexity and involvement of their pull requests, I had fewer people working in "Hacktoberfest" style repos (projects that popup for October, and quickly vanish). Instead, many students found their way into larger and well known repositories and organizations, including:
Polymer, Bitcoin, Angular, Ethereum, VSCode, Microsoft Calculator, React Native for Windows, Microsoft STL, Jest, WordPress, node.js, Nasa, Mozilla, Home Assistant, Google, Instacart
The top GitHub organization by pull request volume was Microsoft. Students worked on many Microsoft projects, which is interesting, since they didn't coordinate their efforts. It turns out that Microsoft has a lot of open source these days.
When we were done, I asked the students to reflect on the process a bit, and answer a few questions. Here's what I heard.
1. What are you proud of? What did you accomplish during October?
- Contributing to big projects (e.g., Microsoft STL, Nasa, Rust)
- Contributing to small projects, who really needed my help
- Learning a new language (e.g., Python)
- Having PRs merged into projects we respect
- Translation work -- using my personal skills to help a project
- Seeing our work get shipped in a product we use
- Learning new tech (e.g., complex dev environments, creating browser extensions)
- Successfully contributing to a huge code base
- Getting involved in open source communities
- Overcoming the intimidation of getting involved
2. What surprised you about Open Source? How was it different than you expected?
- People in the community were much nicer than I expected
- I expected more documentation, it was lacking
- The range of projects: big companies, but also individuals and small communities
- People spent time commenting on, reviewing, and helping with our PRs
- People responded faster than we anticipated
- At the same time, we also found that some projects never bothered to respond
- Surprised to learn that everything I use has some amount of open source in it
- Surprised at how many cool projects there are, so many that I don’t know about
- Even on small issues, lead contributors will get involved in helping (e.g., 7 reviews in a node.js fix)
- Surprised at how unhelpful the “Hacktoberfest” label is in general
- “Good First Issue” doesn’t mean it will be easy. People have different standards for what this means
- Lots of things on GitHub are inactive, be careful you don’t waste your time
- Projects have very different standards from one to the next, in terms of process, how professional they are, etc.
- Surprised to see some of the hacks even really big projects use
- Surprised how willing people were to let us get involved in their projects
- Lots of camaraderie between devs in the community
3. What advice would you give yourself for next time?
- Start small, progress from there
- Manage your time well, it takes way longer than you think
- Learn how to use GitHub’s Advanced Search well
- Make use of your peers, ask for help
- Less time looking for a perfect issue, more time fixing a good-enough issue
- Don’t rely on the Hacktoberfest label alone.
- Don’t be afraid to fail. Even if a PR doesn’t work, you’ll learn a lot in the process
- Pick issues in projects you are interested in, since it takes so much time
- Don’t be afraid to work on things you don’t (yet) know. You can learn a lot more than you think.
- Read the contributing docs, and save yourself time and mistakes
- Run and test code locally before you push
- Don’t be too picky with what you work on, just get involved
- Look at previously closed PRs in a project for ideas on how to solve your own.
One thing that was new for me this time around was seeing students get involved in repos and projects that didn't use English as their primary language. I've had lots of students do localization in projects before. But this time, I saw quite a few students working in languages other than English in issues and pull requests. This is something I've been expecting to see for a while, especially with GitHub's Trending page so often featuring projects not in English. But it was the first time it happened organically with my own students.
Once again, I'm grateful to the Hacktoberfest organizers, and to the hundreds of maintainers we encountered as we made our way across GitHub during October. When you've been doing open source a long time, and work in git/GitHub everyday, it can be hard to remember what it's like to begin. Because I continually return to the place where people start, I know first-hand how valuable it is to be given the chance to get involved, for people to acknowledge and accept your work, and for people to see that it's possible to contribute.