Contribute your time, expertise to Go

Read what Gophers from across the world had to say to the question — “Most beginners in Go would like to contribute their time, skills and expertise to a project but invariably are unaware of where and how to do so. Could you suggest some?

Andrew Gerrand — My advice here is to start somewhere that matters to you; where you can be the domain expert. Then as you gain experience you will naturally use libraries and tools from the open source ecosystem, and find ways to improve them by contributing fixes, new features, or documentation.

Docs are one place where people can start contributing earliest. It’s often the newbies who can best see where the documentation is lacking.

Anthony Starks

  • First, lurk in the golang-nuts mailing list for a while to get a view of the kinds of questions concerns of the community, and then ask for help and guidance when you need it.
  • You can also find a project that turns you on or scratches some itch, and dive in. Make sure to follow best practices so that your code is “go gettable” so that others can use and contribute as well. Any code is just an import statement away, right next to standard library.
  • I also recommend attending local meetups, often you can catch presentation from members of the Go team or other advanced members of the Go community. I’m fortunate to be close to New York, which has an active set of Go enthusiasts.
  • Finally, listen, absorb, ask questions, code.

Baiju Muthukadan —There are many trending projects on Github. Before selecting a project, check the activity of the community. Do the core developers comment on pull requests? Is there any active discussion forum/mailing list existing? How friendly is the core team?

BTW, I welcome contributions to my pet project.

Ben Johnson — I like keeping project scope to a bare minimum so I don’t suggest developers seek out existing projects to contribute to. I find that porting libraries from other languages to Go is incredibly educational. It allows you to break apart someone else’s code and glue it back together in a way that fits with the Go language. For example, I ported LMDB to what became Bolt and learned about database internals in the process.

Brian Ketelsen — I frequently find new Go projects using this Github filter. I’d recommend looking at new projects that interest you and reaching out to the authors asking them to suggest small bugs or features that you can work on. Most open source project maintainers will be glad for the help, and a pull request is a great way to learn good Go style.

Damian Gryski — Look at the libraries you use in the languages you’re familiar with and help out with the equivalents (if appropriate) for Go. Some may not exist, in which case you get to start from scratch. If they do exist, submit some patches.

Eleanor McHugh — Rather than suggest particular projects I recommend checking what’s trending on GitHub and other popular collaborative repo sites for projects that look interesting, as well as checking out the announcements on the mailing list and on Twitter/Google+ etc. There’s lots of stuff out there, all of which could use additional contributors. In general Gophers are a friendly bunch and the community’s young and politely evangelical so being new is considered a good thing.

Elliott Stoneham — The best project to contribute to is one where you can add the most value. That means choosing a project in an area in which you are already something of an expert. So search github.com and the like for “golang” projects in your comfort zone.

Use your search for the right project to contribute to as a learning experience, try a number out as you go, “go get” them, play with some code to see how they work. In your travels, you will see what works, and also what does not work so well, learning all the while.

Gabriel Aszalos — I didn’t have anyone to collaborate with on Go initially, but I loved the language so much that I just started writing anything with it. GitHub is the best place to do this. Follow the community, join the discussion groups, look out for open-source projects, use the ones you like and never hesitate to contribute or shout-out if you notice improvements you would like to see. In other words, be active and get involved. You are bound to find like-minded people doing so! This shouldn’t be hard for anyone!

Jason Moiron — If you have specialized skill or knowledge in a niche problem domain for example crypto, then I’d recommend just jumping into any project in that problem space and helping out. Otherwise, I suggest just writing something on your own. In the process, you’ll find libraries that you want to use and also contribute to.

Julia Allyce Poladsky — My best recommendation is GitHub. Look for projects written in Go that pique your interest or that you are using yourself. Is there something you wish it could do, wish it did better or maybe there is just a small bug you can squash. There is no shame in forking the project and making a PR. Most maintainers of open source projects appreciate any help.

Jyotiska NK — The best way is to start small and keep writing code regularly no matter what your project is. Most newbie Gophers will come from other programming languages. So why don’t you take up your favorite packages or libraries and try to write a mini version of it in Go? How about a small wrapper on top of “encoding/json” package? How about some GUI applications using the Qt binding? Or if you are feeling adventurous, how about an ORM library? Start small and keep experimenting.

Kelsey Hightower — I have a sysadmin background so I tend to contribute to projects that I use in my day-to-day work. Lucky for me Go is becoming the dominant language for automation tools such as Packer, Kubernetes, confd, and Docker. I have no trouble finding great Go projects to contribute too. I would also recommend checking out projects such as etcd, consul, and the Go programming language. A lot of people forget the Go project. That itself is a pretty large Go project with tons of outside contributors.

If you are just getting started with Go one of the best ways to contribute is to start with improving a project’s documentation and test coverage. Both activities will help you learn Go by reading other people’s code and offers tons of value since most projects can use some help with test coverage and documentation.

Levi Cook — That’s a great question. For a start, I would suggest, please don’t try to port Rails or Django. There’s been a lot of time and energy spent on that and there are no clear winners or advantages to doing so. Instead, spend time documenting how you’re getting things done with existing projects, like the Gorilla Web Toolkit, BoltDB, Goconvey and other popular and useful projects. Also spend time learning and blogging about the core go tools. They do a number of really cool things already and there’s not enough communal information out there on using them for things like refactoring, benchmarking and writing good examples for your documentation.

Marcel van Lohuizen — godoc.org is a good starting point to find out more about existing open-source Go projects.

Matt Aimonetti — Go Bootcamp is a great place for beginners to help others while learning at the same time. Another one is Exercism a great project by one of our brilliant team members: Katrina Owen. Both of these projects are very centered on education which I find to be a great place to contribute. A more controversial idea might be to provide more examples to the Go’s standard library which is done by adding example tests.

Matt Heath — There are loads of interesting open source projects which are under heavy development including Kubernetes, CockroachDB, Weave, GoLearn’s machine learning, and more web related projects like Revel and Negroni. But I’d suggest working on a small project is the best way to learn the language — as an example there are lots of client libraries which would really benefit from extra help.

Matthew Holt — Start with small packages. Even if a package seems finished, it probably needs more tests. New packages are frequently announced on/r/golang and golang-nuts. Watch #golang on Google+ and Twitter. Scour GitHub and SourceGraph for code that you feel you could learn from or contribute to. Just make sure to open an issue before spending lots of time on the big changes that may not be in harmony with the author’s vision.

Nathan Youngman — Look at your dependencies and what you use — and don’t be afraid to challenge yourself. I started working on fsnotify because I was writing an autotest tool, even with nascent knowledge of file system notifications. My first contribution to Go had a fair learning curve, but it was incredibly rewarding as well.

Or just scratch an itch — I contributed to GoDoc because I wanted a badge for my README.

Nate Finch — Hugo is a great place to cut your teeth on Go, because the project is a manageable size, and it doesn’t take much to get in there and fix a bug or two. There are a lot of other projects which are also worthy but require a lot more ramp-up and Go knowledge.

Piyush Verma — Check out the Go package management. Follow some trending Go repositories. Start with bug fixes and some documentation to get a hang of the language, big project practices and a chance to code with seriously skilled people.

Ron Evans — Documentation and tests are always a great place to start a new project. It may not be as glamorous as developing new features, but writing tests or documentation for a project helps everyone and is always greatly appreciated by the project maintainers. Reading existing code well enough to write good tests for it is a great way to really learn how something works.

Sau Sheong Chang — The best place to look for an open source project to contribute to is in GitHub. Beginners should try their hand at an area that they are interested in. For example, if he or she is interested in writing web applications, they should look at the various open source web application frameworks. First approach the framework by contributing to documentation and testing for the open source project, reading through the existing code and getting familiar with the roadmap of the project. Try to contribute feature pull requests only when comfortable.

Sriram Srinivasan — Sure. Here are some that occur to me.

  • Take an existing project that interests you, and insert logging statements liberally. Then selectively enable the logs of different subsystems to figure out how they work and interact. For the benefit of others, you could put together an “internals” document. In a short time, you’ll have enough insight to contribute productively.
  • Take a field that interests you and do something simple but non-trivial. If you are interested in databases, build a simple consistent key-value store, for example. This is akin to picking up speed on the highway on-ramp in order to merge seamlessly with fast-flowing traffic on the highway. I prefer this approach to learning because the insights you get from doing something from scratch helps you see both the clever aspects and misfeatures. Even a well-known architecture will have bugs and accidents of history, and may be forced to propagate a bad design in the interest of backward compatibility. It is good to approach the problem from a clean-slate.
  • My third suggestion is to write an efficient Go wrapper for a C library. This can be a useful contribution to the community.
  • Finally, take some of the performance shootouts (search for “golang vs. … performance”) and try to improve upon the answer.

Steve Francia— I’m so glad you asked. Hugo is a website creation system I started writing a couple years ago. It has the second largest contributor base of any Go app or library I’m aware of (Docker has the most). We are approaching nearly 100 different contributors. This is quite an accomplishment for such a young project. For a significant majority of contributors it was their first contribution to a Go project. On behalf of the entire Hugo team we would love more contributors. We would be happy to mentor anyone who would like to gain experience and contribute.

Verónica López— My recommendation would be to look in Github for a project written in Go that has to do with other technologies that you already like or work with (e.g. Raspberry Pi, Linux, Mobile…)


Note: This year I had the privilege to organize GopherConIndia 2015 and also interview a number of Gophers. The above advice is extracted from my interviews with these Gophers.