My First Hacktoberfest - Hacktoberfest 2023 Recap
Tags: hacktoberfest23, opensource, beginners, programming
Published: 2023-10-29 05:17:20

## Hacktoberfest 2023

As part of my Open Source class I participated in Hacktoberfest 2023, a yearly event hosted by DigitalOcean meant to encourage contributions to open source projects. This was my first time participating in Hacktoberfest, and when starting I only had limited experience in open source contributing from practicing on my classmates' projects. 

Although primarily meant for my class submission, this recap includes information useful for those interested in Open Source development but have limited experience, as I am on the same boat at the time of writing. I hope sharing my experience can provide insights and advice for Hacktoberfest and for your own Open Source journey.

## You can do Hacktoberfest with limited experience!
As mentioned before, I started Hacktoberfest with limited open source experience. The open source experience I started with came from contributing to classmates' projects for my open source class.
I think having some experience making a pull request would be ideal, but is not necessary. If you have no open source experience, [this blog post](https://dev.to/rjwignar/using-git-remote-566n) I wrote for my class describes a couple workflows you can follow - one for working contributing to an issue/feature and another for working on a topic branch for an issue/feature.

## Impostor Syndrome is temporary (for now)
Before participating in Hacktoberfest, the idea of contributing to random projects intimidated me. In my open source class, my classmates and I practiced contributing to each other's projects, which was slightly intimidating but bearable. The thought of contributing to projects outside of class, written by people I don't know, was more intimidating. "I'm only a programming student - why would anyone want to take my code?" was what I thought to myself. [Impostor Syndrome](https://en.wikipedia.org/wiki/Impostor_syndrome) or not, these feelings gradually disappeared over the month as I made contributions to various projects.

Because of this, I encourage those still unsure to contribute to open source projects, regardless of your experience. During my journey, I found that there is always an Issue or feature you can contribute to. Even if there is something you are unsure about or need help with, project maintainers will be more than happy to guide or advise you.

 
## Tips for Hacktoberfest and first Open Source Contributions

### Know what makes a valid Pull Request
Due to past abuses, Hacktoberfest participation is now opt-in for maintainers. This means for an approved Pull/Merge Request to count towards Hacktoberfest, they have to fulfill **one** of the following requirements: 
- The approved PR/MR was made on a project repository with the `hacktoberfest` topic (not recommended)
- The approved PR/MR must have the `hacktoberfest-accepted` label (recommended)

#### Avoid Repos with the `hacktoberfest` topic
In my experience, the `hacktoberfest` repository topic attracts a lot of what I call "cheat repositories" - repositories that are just a list of words, movies, or algorithms that aren't really open source projects. These repositories typically require you to contribute a line of text, or even one word, in a Pull Request and will not teach you anything valuable. The `hacktoberfest` topic is flooded with these repositories, and because of this I recommend avoiding these repositories. My class was advised against contributing to these repositories and I advise the same for the sake of your personal development. You will not gain or learn anything by contributing to these projects.

#### Do this to contribute to real Open Source projects!
If you are looking to make meaningful contributions for Hacktoberfest, I suggest to use [GitHub Advanced search](https://github.com/search/advanced) to search for open issues with the "Good First Issue" or "Beginner" label. After being assigned to an Issue and writing a Pull Request, you can **politely request the maintainers to add the `hacktoberfest-accepted` label** if your PR is approved. I did this for 3 of my 4 Pull Requests, and in all cases the maintainers had no objections.

#### Try This Advanced Search Query
I personally found all of my Issues using the following search query on GitHub:
```state:open no:assignee label:"good first issue",beginner```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qq55ebxteuj0jezzhpr8.png)

This query searches for open, unassigned issues that have at least the "good first issue" label or the "beginner" label. You can narrow this search by programming language, or adding more labels such as "documentation", "bug", or "enhancement". Issues with the "enhancement" label are a good start, as they often involve simple code refactors or small changes to documentation. Due to this, Issues with the "enhancement" label can often be a good first contribution for new contributors.


## My Hacktoberfest 2023 - Observations and Lessons
By the end I contributed to the following four different projects:


| Project Name  | Primary Language  | Contribution Type
|---|---|---|
| Skyrim Community Shaders| C++  | Code Enhancement |
| PrimedKeys | C++  | Bug Fix  |
| timeloom  | TypeScript  | Feature Addition |
| view.py | Python | Feature Addition |

### Blog Posts
I wrote a blog post to showcase each contribution and what I've learned by working on them. You can see them below if you'd like:
\#1: https://dev.to/rjwignar/hacktoberfest-skyrim-community-shaders-5553
\#2: https://dev.to/rjwignar/hacktoberfest-2-primedkeys-imgui-bugfix-3d2p
\#3: https://dev.to/rjwignar/hacktoberfest-3-timeloom-typescript-h10
\#4: https://dev.to/rjwignar/hacktoberfest-4-viewpy-linting-and-static-type-checking-5f9g

### I worked on cool projects!
In Hacktoberfest I had the opportunity to work on awesome projects. [Skyrim Community Shaders](https://github.com/doodlum/skyrim-community-shaders) is a popular Skyrim mod that provides advanced graphics. I helped enhance menu tooltips by changing how an external library method is used. [PrimedKeys ](https://github.com/GudBoiNero/PrimedKeys)is a configurable hotkey menu created to provide digital artists hotkey support on a touchscreen laptop. In PrimedKeys I helped fix a bug that prevented the exit button from closing the window and ending the program. [timeloom](https://github.com/inclinedadarsh/timeloom) is a web app that lets users document their technical career journeys in a timeline-style. I am working with the author to add a light mode version of the web app. [view.py](https://github.com/ZeroIntensity/view.py) is a Python Web Framework in early development. My contribution to view.py is adding dependencies for linting ([ruff](https://docs.astral.sh/ruff/)) and static type checking ([mypy](https://mypy.readthedocs.io/en/stable/index.html)).

### There is always something to learn
If you read the blog posts above, you will see most of my contributions were not made immediately, but were instead made over a couple of days. In fact, completing my Pull Requests required me to learn about many many concepts, technologies, and libraries. I'm most comfortable writing code in C++, but even then I needed time to learn and experiment with [Dear ImGui](https://www.dearimgui.com/), a C++ GUI library. Dear ImGui was the focus of my contributions to Skyrim Community Shaders and to PrimedKeys.

### You can make meaningful contributions even if you're not the best at something
I'm not very good at web development, but I was able to add light mode support to timeloom because I researched the following:
- different dark/light mode support strategies (and how to choose the most appropriate one)
- [Tailwind CSS configuration for light/dark modes](https://tailwindcss.com/docs/dark-mode), and
- how to apply inline styles to React Components.
Additionally, the author was cooperative in guiding me or pointing me in the right direction.

### I know more about Python Package Management
I've never worked on a web framework before, let alone a large Python project. While knowing little about developing web frameworks, I was able to add dependencies that will provide crucial development support. To do this I researched Python linting and static type checking packages, Python package management using a `pyproject.toml` file, and how to add optional dependencies to a Python project via the `pyproject.toml` file.

### You get as much energy as you give
One thing echoed in my Open Source class is that in Open Source Development you get as much energy as you give. Maintainers of Open Source projects are often passionate about these projects, and would be more than happy to work with and assist someone willing to contribute. I observed this when working with the maintainers of these various projects. For anyone new to Open Source development, one piece of advice I can give is that any enthusiasm and interest in contributing to a project will be returned in kind by the maintainers. For this reason you should not be afraid to volunteer on an Issue, to submit a Pull Request, or to reach out to maintainers.

### Simple changes aren't necessarily easy
If you read some of my Pull Requests, some of the changes appear to be really simple.
For example, in my Pull Request to view.py you'll see I only added a couple lines to one file, the `pyproject.toml` file. Adding a couple lines sounds simple, right? Well, before I could make these changes I had to answer a few questions, such as:
- What are some methods to add dependencies to a Python Project?
- What dependency management method(s) are being used in view.py? Based on the method used what file(s) do I need to change?
- What linting/type checking packages are available for Python?
- What's the most appropriate package to use to support convenience and ease maintainability for future maintainers?

To find the answers to these questions, I had to read over package documentation, Python Enhancement Proposals, and watch a couple YouTube videos.

### Everyone starts somewhere
For someone already experienced with making Python packages, adding dependencies to a Python project is probably trivial. But for someone working on these for the first time, I think finding answers to questions like the ones above are required to build this experience and knowledge. For those who have prior Python project experience, did you have similar experiences when you first learned about new packages, and package management using `pyproject.toml`?

### Conclusion - Don't be afraid!
Working on these projects required me to step out of my comfort zone by reaching out to strangers, reading unfamiliar codebases, learning about new concepts and libraries. Researching enough information to make my contributions took a lot of time, more time than I'd like. But it was worth it.

I don't say this to discourage people from Open Source Development or from working with new languages, libraries, and frameworks. Rather, I say this to show that there's always something to learn if you're working with something new, even if it's the most trivial thing. I would not have learned any of the above if I stayed in my comfort zone and contributed to simple projects or "cheat repositories". For those new to open source development, I encourage you to challenge yourself and work on Issues involving a new library, programming language, or new feature. Even a simple Issue will teach you more than you'd expect.