What started as Hello World in Every Language has blossomed into a fairly sizable project. During Hacktoberfest 2019, we managed to rack up 25+ projects. In this article, I’ll talk about exactly what that means.
Table of Contents
As always, you’re welcome to check out the official release page on GitHub. Otherwise, let’s learn more about this release!
As always, I like to share metrics about the repo at the point of tagging. In terms of languages, here’s the breakdown:
- Python (17.4%) — due to the migration of glotter
- C (10.3%)
- C++ (9.2%)
- Java (9.1%)
- PHP (6.9%)
- Haskell (6.7%)
Beyond that, here are a few repo-wide statistics:
- 3,533 commits
- 165 contributors
- 5 releases
Feel free to head on over to the tag to see the state of that repo at that time.
Due to the chaos of Hacktoberfest, there were actually 27 projects added by the time I realized we hit the milestone. As a result, here’s the official list:
- Bubble Sort
- Convex Hull
- Even Odd
- File IO
- Fizz Buzz
- Game of Life
- Hello World
- Insertion Sort
- Job Sequencing with Deadlines
- Longest Common Subsequence
- Longest Palindromic Substring
- Merge Sort
- Minimum Spanning Tree
- Prime Numbers
- Quick Sort
- Reverse a String
- Roman Numeral Conversion
- Selection Sort
- Sleep Sort
As you can see, there’s a nice mix of projects. From sorting to mathematics, there’s a lot to get your hands on. Of course, you’re welcome to contribute programs that haven’t been added yet! In the next section, we’ll take a look at just how to do that.
How Can I Help?
In case you’re interested in adding a project of your own, there are a few rules. First, we need documentation. In other words, each new project needs its own project page. For an example, see our official projects page.
Currently, each project page features three main sections:
In the description section, we ask that you describe your program at a high level. For example, the description for a palindrome program might describe what a palindrome is and why we might want to detect them.
Meanwhile, the requirements section explains exactly what the program must do from a black box point of view. In other words, the requirements should outline program behavior from an input/output perspective. In addition, the requirements should list an assumptions we’re making. For example, a reverse a string project might assume ASCII strings.
Finally, the testing portion should provide a table with thorough test coverage for all the expected behaviors outlined in the requirements section. For example, if a program accepts input, the testing table should outline behavior for both bad and good inputs.
Finally, keep in mind that we want our programs to be testable. As a result, we try to restrict programs to command line interfaces only. Of course, not all programs and projects fit the bill, so we handle those exceptions on a case-by-case basis.
Next Stop: 50 Projects
As always, the plan is to continue to grow the project. Beyond that, I’m really just depending on the community to help grow our current projects.
At the moment, there are a ton of project pull requests but not a ton of documentation. Once we can get those solutions documented, we’ll start accepting more projects. Of course, without help, it’s a tough job for one person.
That said, thanks again for your support. We appreciate the help!