Using open-source issues to learn a new programming language 💡
Tags: opensource, github, beginners, programming
Published: 2020-05-13 14:06:40

> _Originally published on [WorksHub](https://www.works-hub.com/learn/using-open-source-issues-to-learn-a-new-programming-language-575fe)._

So you've decided you're gonna dive into the world of Open Source [as described previously](https://dev.to/vaibhavkhulbe/networking-and-open-source-the-what-and-the-why-3n1h) and you hear terms like "PR", "repo", "commits" etc. You also get to hear about "issues", "merging" or "branching". Well, other terms can wait but in this article, I'll tell you all about what an _issue_ is and how you can take advantage of this nifty feature of the open-source environment to start learning a new programming language! Who's excited?

****
<!-- BODY -->
## What is an issue and how it can be helpful? 🤔
Whenever you visit a project on an open-source platform like [GitHub](http://github.com/), you are presented with it's 'homepage' called the _repository_ or simply a _repo_. Next to that, you can see a few other tabs, the first one being labelled as "Issues". You see a list of different issues that exist in the project currently. 

![WorksHub issue tab image](https://dev-to-uploads.s3.amazonaws.com/i/xp6izk10l1k0yqqzqqgh.jpg)
<center>_[Issues tab](https://github.com/WorksHub/client/issues/) of the WorksHub client repo._</center>

> **Issues** are one of the best ways to pitch your idea to start an open-source contribution to a project.

It can be anything from a _feature request_, giving your _idea_, adding a _bug report_ or advising an _enhancement_ to the repo owner. As you can see, issues can have several aspects to them. One may be of really low importance, the other a 'critical' one which should be fixed ASAP. Therefore, they're marked with 'labels' so that other people contributing can know the importance of each issue. 

Issues can simply be used to kick off a conversation or discussion. Did you get an idea? Unable to understand how a specific module works? Open an issue and talk about it. This is one of the great ways to take your _idea_ and making it a 'move' towards a _contribution_.

****

## Why are issues important? ❗
Having an issue tracker in an open-source project helps a lot. Its main aim is to manage and maintain lists of issues. Let's see how much value they provide with their important features:

1. **As a contributor**, you will be _updated about_ the recent and upcoming _changes_ the repo is heading towards.  
2. **As an owner**, you can create an [issue template](https://help.github.com/en/github/building-a-strong-community/about-issue-and-pull-request-templates#issue-templates), which gives a newbie the confidence to quickly create a new issue by filling out the requirements and important information.
3. You can work on enhancements, track ideas, fix bugs and more.
4. The best part is you and the repo owner(s) can **collaborate** in a seamless environment with features like **linking a Pull Request (PR)**, **upvoting/downvoting** a comment, **mentioning** someone, getting **personalised notifications** and of course, adding **code snippets**. 
5. Some issue trackers go further and let you **transfer an issue** to another repo or **pin** important ones, thereby setting a clear roadmap of what's currently happening in the project.

****

## How can you learn a new programming language with issues? 👨‍💻
### > Here's an example with [WorksHub Issues](https://www.works-hub.com/issues/).

![WorksHub issue tracker](https://dev-to-uploads.s3.amazonaws.com/i/vc7c2jdbk25z0hswl6km.jpg)
As you may see, it's an issue tracking system built within the [WorksHub](https://www.works-hub.com/) platform. Let's open an issue and see what we get.

![WorksHub issue tracker 1](https://dev-to-uploads.s3.amazonaws.com/i/gpvqhwxv3zsqc80nv5s4.jpg)

We have the following important things to look in [this issue](https://www.works-hub.com/issue/1a6a2d20-5e08-4077-8879-2b0de8be2680):

- **Issue title**: _"When uploading an image fails, there is poor/no error message."_ This clearly defines what this issue is about.
- **Issue level**: _"Intermediate"_. Solving this will require an intermediate level of knowledge.
- **Issue description**: A _summary_ which expands upon the title and tells you what are the problems related to it.
- **Issue tags**: _"bug, good first issue and help wanted"._ By listing tags, we know that this is a bug which is a good one to solve for those who are new to contributing to this open-source platform.

And most importantly, you can see the **programming language** required to work on this. WorksHub is built upon the listed language i.e. Clojure so it's obvious that this issue is also available on [GitHub](https://github.com/WorksHub/client/issues/35).

To start working on an issue, you must know what's required and what the issue is about. We know two things are required here, first the **Clojure** programming language and second, the issue is about the **image upload failure**.

If you don't know these, you can not solve this issue. Let's imagine you're new to Clojure, you've never worked on it before. Here are some steps you can take to learn it and then implement in an open-source issue:

- **Step 1**: **_(Always) start with the official documentation._** 
Head over to the [Clojure documentation website](https://clojure.org/guides/getting_started) and get to know about the language, how it works, how to install on your platform. Once you're familiar with the language, [learn its syntax](https://clojure.org/guides/learn/syntax), practice on [repl.it](https://repl.it/languages/clojure) or on your local system. Search for some online resources making small programs at first. The aim is to _familiarize yourself_ with a language you just got to know about.

- **Step 2**: **_Visit some online/offline resources and make projects._** Refer to some video tutorials, articles or read some books based on the Clojure programming language. These resources will help you to _make a few projects_ by yourself and you will feel more confident working on a new project.

- **Step 3**: **_(Optional but highly recommended) Work on some open-source projects._** This one isn't required to learn a programming language but it will be very useful to solve some issues like above. Search for those repos which are built primarily on the Clojure language. If there are some issues need to be fixed, read them thoroughly, make note of the important terms as listed above of that issue and start working on it. Not only you will implement on your learning but you'll also get a great _exposure working in an open-source environment_.

- **Step 4**: **_Deep dive in other features of the language_.** You can always go through Clojure's [APIs](https://clojure.org/api/api), [releases](https://clojure.org/community/downloads), tools and frameworks when you feel confident. This is so that _you're able to work on a large-scale project_ which may use these features in their repo.

****
<!-- CONCLUSION -->
Further reading:

- [Mastering Issues - GitHub Guides](https://guides.github.com/features/issues/)
- [About issues - GitHub Help](https://help.github.com/en/github/managing-your-work-on-github/about-issues)
- [Browse good first issues to start contributing to open source - The GitHub Blog](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/)
- [First Timers Only - Get involved in Open Source and commit code to your first project!](https://www.firsttimersonly.com/)