I really like a specific open source project and would like to contribute to it. Unfortunately I don't know anything about programming. What are meaningful ways in which a non-programmer can contribute in a meaningful way to an open source project?
There are lots of things to do around open source projects which do not require any programming knowledge at all. Among them are things like:
- User Documentation: Programmers love writing code but hate writing documentation. And if we like to write documentation it's mostly the technical documentation for other developers. As a result, many open source projects have a user documentation which is hard to understand for non-technical users, full of gaps and in many places out of date. As an experienced user you can help to keep the documentation useful.
- User Support: Programmers are already very busy programming, so they are glad about people who keep the newbies off their back by answering their questions. This goes hand-in-hand with user documentation, because by listening to the user's problems you learn where the documentation needs to be improved.
- Artwork: Do you have artistic talent? Then you could work on the art assets of the project like icons or logos. Not just the software itself but also its website and promotional material can certainly benefit from your skills.
- Internationalization: Are you fluent in a different (non-programming) language than the primary language the developers communicate in? Then you can help with translating the software and its documentation into that language.
- Making good bug reports: We can only fix issues we are aware of. Unfortunately many bug reports we receive from users are of very poor quality. To fix a bug we must know exactly what steps must be taken to reliably cause the bug to happen. When you take the time to research a bug, isolate the exact conditions which make it appear and provide us with exact instructions, you can save us a lot of time.
You don't have to be a programmer to test a program. Use the program as it's designed to be used, but also use the program at the extremes or with "corner cases" to try to break it. In either case keep detailed notes as you work so when it breaks or misbehaves you know how you got there and can make it happen again. Conscientious programmers will love you ( I say this as a programmer) if you can give them a reproducible bug where there are clear steps on how to make it happen.
Make your bug reports programmer-friendly: A clear description of the bug, a clear (hopefully simple) set of instructions on how to make it happen, a complete description of the environment (OS, versions, hardware, whatever) and any necessary files or data.
You might want to check out e.g. Fedora's page on how and for what to join. You'll see plenty of tasks for non-programmers. Some of the highly regarded members of the Fedora community don't do any programming.
Fedora looks for people interested in content writing (tutorials, write articles for their magazine, documentation in general), design (artwork, flyers, icons), development (programming, bug fixing, package maintenance), people contact (give talks, help recruiting new members, mentoring), translators (help with i10n in general), web development and administration (develop and keep the web presence of the project running). Those are just some of the tasks listed, and there are clearly other specialized rôles that are welcome.
You'll probably find similar calls elsewhere.
Disclosure: I'm a long time Red Hat and then Fedora user, currently an Ambassador for Chile, part of the "people contact" crowd.
An addition to @Philipp's answer is developing User Interfaces (UI's). A lot of programmers are absolutely terrible at designing good user interfaces, and know it. If you are good at such things, many would likely be delighted to have a designer to plan their UI's so they just have to implement them.
One of the greatest assets are people experienced in web design/development.
I find that this can be incredibly underestimated: websites are the platform for many projects to advertise. But they are also relatively underused. While some projects such as Github Pages make the job easier, it can be very hard to have a site that is both unique and attractive, while also serving its primary goal: to advertise the project.
Many websites need a great deal of effort, and it's an effort that many developers don't want to put, or don't have the time to put. For prospecting end users of a project that may take the project themselves and use it, the website is the place where a list of features can be culminated with. No developer will look at the code base just to figure out what a project does.
"Website Builders" such as Google Pages, Github Pages, or Wix offer templates, which can be difficult to extend with designs of your own, or with other functionality. Projects such as Django can also be difficult: it may involve learning another programming language, or familiarizing yourself with another code base, which can be very time-consuming.
This is also arguably a project within the project. But the asset of a proper website will assist you, and others in having a clean, central place to discuss ideas, present yourselves, and to collaborate. They can host your documentation, community resources, contributor resources and more.
Here's some attractive sites for various projects (you'll see the difference):
- Django (Imagine having to read the codebase instead!)
- Requests (Imagine having to read the codebase instead!)
Sites may arguably be better for more-used projects, but the benefits of a site can be applied for any project, big or small.
There's one thing that I hadn't seen proposed yet: ideas. You might actually have some good ideas that can be discussed on the project's mailing list and end up getting implemented - the more thought over, the better. By not being a developer you're more likely to be the "regular user" kind of man and you can use it to your advantage by proposing things that you would like to see.
Another activity that comes to my head is advertising. Write a blog article and post it to Slashdot and Hackernews. Find related StackOverflow questions and make people aware of the tool if it's programming related (or do the equivalent thing if it's not). Write a Wikipedia article. All of those can help people find the project.
UI specialist: you could download the open source software and tell devs what problems you have with it (is it easy to install, etc.). You could even make a Google Survey about if users who installed or used the software have ideas on what was hard to do and what made sense to them. If you have a background in psychology or sociology UI studies will be perfect for you.