Starting open source

How can I best get students started with an open source project that they would be interested in and welcomed to? I'd prefer that the project is focused on building a piece of software, perhaps a command line based one. My students are high schoolers and are interested mainly in Python, though they are open to exploring other languages.

(I'm self-teaching, but this is rephrased as if I was teaching a class.)

• Just use self-teaching and phrase it for yourself, then. There's no need to word around that :)
– Ben I.
Jun 25 '17 at 21:24
• The question is very opinion based. This is simply a matter of which open source project you like best, with "welcoming" as the only criterion. This question invites discussion because there is no real answer. As stated in the close reason: "Answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise." Jun 25 '17 at 21:30
• We also may have an expertise issue: CS educators are not de facto experts in open source. As such, we might not be the best community for providing quality answers for this topic. Jun 25 '17 at 21:45
• I originally thought this wasn't a good question for the site, but I changed my mind when I saw Scimonster's answer. Jun 25 '17 at 23:52
• Years and years ago, before Software Engineering SE figured out its scope, a very similar question was asked there. It's locked now, and there's a lot to read through, but there's still some good info there: How can I find a good open source project to join? Jun 26 '17 at 3:00

Since you specifically mention high-schoolers getting started with open source, i have to recommend the Google Code-In. I participated all 4 years as a high-schooler and really learned a lot about open source.

The contest essentially has a dozen or so open-source organizations provide "bite-size" tasks. Each task is mentored, so the students have someone specific to ask questions of. There are both coding tasks and non-coding tasks (documentation, QA, outreach).

The contest itself lasts for only a month and a half (December-January), but the hope is that people get into it and stick around with the open-source projects they contributed to. Many of the grand prize winners do exactly that. See, for example, this blog post by one of the 2014 winners. You can also read my blog post, though i didn't win.

For university students, there is the Google Summer Of Code, which is a similar idea with a rather different format. You must apply to be accepted, and do a single large task, and get paid a stipend.

• I just visited the Code-In site and it looks great. Does anyone know of something similar for university students? Jun 26 '17 at 8:31
• @BrettBecker Google Summer Of Code. Added a bit of info to the post. Jun 26 '17 at 8:40

Before contributing to an open source project it can be useful to become familiar with the tools and concepts involved in version control systems.

1. Write some code that is unfinished with some deliberate mistakes and share it with your students on GitHub

2. Get your students to clone / download your code, find and fix the bugs then talk about the problems with having so many different versions of the same code in the classroom.

3. Get your students to fork your code into their own repositories and commit their own changes.

4. Discuss code and commenting conventions and why they're necessary (e.g. PEP8)

5. Get your students to go back and recommit their code in line with the conventions discussed

6. Ask your students to issue a pull request on your code so that their changes can be contributed to the original resource.

Once they've been through that process in a safe and controlled environment they'll be much more confident joining in with an open source project. It can be intimidating jumping in for the first time, no matter how friendly and supportive the contributors are.

You might also want to look at GitHub Classroom which automates the process of creating, sharing and collecting programming assignments from students.

Another possibility, assuming that you can find someone with more experience to mentor you, is to explore organizations in your town/city. There are many public and service organizations that do good work but may be a bit overcome by technology. If you explore possibilities with one or two of them you might be able too come up with a project of suitable scope that will help them do some good. In my town, for example, we have an agency dedicated to helping people through difficulties, financial and otherwise. Any funds they obtain (grants, donations) are dedicated to the work they do, not their own infrastructure.

With a mentor, you could start your own project and make it open source. Elsewhere here you asked a question about projects for a CS Club. This might be a possibility for such a group.

Managing your own project yourselves, however, is a lot of work. You will need a mentor, perhaps someone who can give you initial credibility. It could be one of your teachers, but it could also be someone at a local computing firm. Explore the possibilities.

Acknowledgement. Ward Cunningham (http://www.c2.com) once suggested something like this. He was focused on tax supported public utilities (local water companies, say) that have unmet computing needs and little expertise. They also pay a lot for their IT needs that could be better spent on their main goals.

There's some upfront work before you can contribute to an open source project. First, you have to find one. There are tons of open source software projects on GitHub. Another source is the Apache Software Foundation. Keep in mind that the complexity of the software and the students' skill sets will play factor in finding a match. Next, you need to learn how to contribute. To contribute on GitHub, you need a good understanding of the GitHub website and of course Git itself. In GitHub, you typically fork the repo that you want to contribute to, make the changes to your forked version, create a pull request to the original owner, discuss the changes with the owner, make more changes, repeat. When ready, the owner accepts the pull request and the contribution is official. This process alone can be intimidating to a new programmer. One easy way to contribute to open source is to fix errors in documentation (e.g., a README.md file). The Apache Software Foundation offers different ways for people to contribute too, not just coding. Once you have some experience, you can make more substantial contributions.

• Welcome to Computer Science Educators! Jun 28 '17 at 21:20

The OpenHatch wiki has an excellent article on finding an Open Source project. I summarize their recommended process here:

Step 1: Brainstorming Projects

Make a list of potential projects by doing some searches inspired by the following:

• What open source software do you use? Consider that software and related projects.
• Is there a project whose goals you find compelling? For instance, humanitarian projects or projects relating to a hobby or field of interest.
• Are there any people you know who work on open source projects? Maybe you can join them.
• Check out curated lists, like the Google Summer of Code mentoring projects.

Step 2: Researching Projects

Now look up key information about each potential project:

• website url
• source repository url
• mailing list
• IRC channel
• contributor guide
• installation guide

Step 3: Evaluating Projects

Use that information to evaluate the project:

Is this project active?

• When was the last issue reported?
• When was the last commit?

How responsive are the maintainers?

• How long does it take a maintainer to respond to an issue?
• Is the maintainer giving feedback on pull requests and helping people submit appropriate requests?

Is the community welcoming?

• Read through their mailing list archives, or lurk on their IRC channel to see how newcomers are treated.
• When people have questions, are they answered patiently or ignored?
• Check out a Code of Conduct, if the project is large enough.

Step 4: Contacting Projects

At this point you probably have a favorite project or two.

Say hello on the IRC channel

Tell them you're new to the community and interested in contributing. You can ask:

• What do they like about the project? How long have they been involved?
• Are there any issues that people are especially keen to see being worked on?
• Is there anything particularly complicated or difficult that might be an obstacle to contributing? How would they suggest dealing with that?

Find an issue you might want to tackle or a bug to reproduce

Read through the project's issue tracker. If you find an issue you'd like to work on, leave a comment on the thread saying you'd like to do so.

You can also leave a comment on the tracker about reproducing a bug. Make sure to include relevant information about the version of the project you're using, the system you're on, and other potential factors.

A final word from OpenHatch:

A quick note: you might wonder why we asked you to find multiple projects. The truth is that finding a good open source project is a lot like dating or finding a job. It often doesn't work out on the first try. That doesn't mean you're a bad contributor or that the project is a bad project - it may just be a bad fit, or bad timing. So keep an open mind, and keep trying projects until you find one that you really enjoy contributing to.

GitHub has good-first-issue and help-wanted labels that indicate issues that would be particularly good for novices. More info:

Here is a link to a search page that lists every open issue with the help-wanted label. Here is one for the good-first-issue label. You can further refine these lists to focus on a specific language or look for keywords that you're interested in.

Another way you might approach this is to find an open-source project that's maintained by something you already use. For example, did you know that Spotify and Netflix both have GitHub accounts with a bunch of repos?

Finally, keep in mind that there is no such thing as too small of a contribution. Found a typo in the documentation? Cool, make a pull request that corrects it! Have a feature request or bug report? File an issue for it! Then start commenting on other people's issues. Maybe start looking into the code if you find one that sounds manageable.

Depending on what you are trying to teach, Java has a very extensive and comprehensive open source community, and one way to introduce students to this is to come up with a technology "stack" which will probably be made up of 5-10 different open source technologies. You could either start from scratch and introduce one open source technology after another to build up a full working application, or start with a partial project and add new technologies to it.

A typical stack is a database such as MySQL, an application lawyer such as Spring, and a front end / HTML technology such as Angular. This kind of application might be more accessible to students because they'd be writing a web application that they can view in their browser.

I would start by ensuring that you have a system with a good command line: Such as Gnu/Linux (A implementation of Unix, with freedom). It is also Free Software. While using it you may discover some piece of software, that you would like to improve.

You could do what I did at Uni. We were asked to re-implement the basic Unix tools: cat, ls, grep, etc, this is good practice, and a good place to start. It will also help you learn about what Unix can already do. (What can be a 3 month project on windows, can sometimes be a single line of shell code in Unix.)

You might want to look at these two sites, which are specifically designed for getting students involved in open source projects:

http://teachingopensource.org/

http://foss2serve.org

• Hi, Dave. Thanks for contributing and welcome to Computer Science Educators! Right now, this is a bit of an answer stub. Would you mind editing your answer here and including just a little bit more information about those two links?
– Ben I.
Jul 1 '17 at 11:37