There’s a particular joy in learning something (a programming language, how to use a tool, an algorithm), then perfecting it through practice and teaching.
Today I’ll talk of two ways to do both things while building your programmer cred and helping the community. Also, it’s very likely that you’ll hone additional skills while engaging in these activities.
Make sure you learn your tool, task, or algorithm properly. Understand the tradeoffs and caveats. Get it to break a couple of times in different ways, so you get a feel for failure modes. Once you find yourself feeling confident enough, carry on.
Method #1: Hack on random people’s projects
GitHub is a great place to be at. If you find another place like it, please let me know. The main feature here is discoverability. Some months ago I was preparing a talk about a particular module of python’s standard library, argparse.
My main use case for python is writing tools for myself, so I use argparse often. But to make sure I didn’t have the wrong end of the stick, I went into GitHub and looked for python projects which may need argparse. How? I searched for “argparse”, and filtered by issues.
You can further filter for the open ones, which is what you’d want for the excercise. Which is get into a project, read up on it, clone it, add argparse support, and open a pull request. Rinse and repeat a couple of times.
Then follow through: you’ll probably be asked to make some changes, maybe document the usage (if you changed the way the tool is used), maybe write some tests. Ideally, you’ll get the hang of it and start looking for the right things when trying to contribute to more projects, thus needing a fewer interactions for the one feature you learned how to implement to get into the projects which need it.
This helps you grow as a software developer and as a communicator, thus, as a contributor to open source projects. Besides honing your ability to implement whatever you chose to learn.
Method #2: Get involved personally
Find a local user group, and prepare a talk on whatever it is you learned. Teach it to people personally. If not at the local user group, then maybe at school, or at work. Pass the knowledge on, and make sure to note any and all questions that come up, especially if you don’t know the answers right away.
This will help you cement your knowledge, and hopefully earn you a reputation for knowing, teaching, and being cool in general. If there are no local user groups, or for some reason you can’t get involved as much as you want to, consider writing on the subject.
Hopefully someone will stumble upon it when they need it, and that’s more than you bargained for when just learning. Additionally, this kind of public writing gives you some cred.
Just please, please make sure you learn what you want to teach. Don’t copy and paste, and don’t pass along partial knowledge.
A bonus tip: if there are knowledgeable people you can reach (personally, through e-mail, through IRC), then reach out and make sure you have your facts straight. Read the docs. Write code. Only then pass it on.