Problem: We like to ask each other for our rankings, like “What are your favorite books?” or “Rank the top 10 Michael Jackson songs.” There should be a tool to help you methodically compare each item in a list two by two and return the final ranking.
Solution: A simple web app where you input a list of items you want to rank in order (such as the seven Harry Potter books) and compare the items to each other.
Users: Anyone, especially avid list-makers
React JS (original tutorial by Michael Cheng), Materialize, Github Pages, Python
Understand & Explore
As an avid list maker and budding programmer, I wanted a more scientific way to rank a list by comparing the items to each other. I did research to see if anyone had already built tools to accomplish this goal. The closest thing I found was a forum thread asking if anyone had built such a tool.
Define & Ideate
At this time I was learning about sorting algorithms in class. These algorithms can easily sort a list of numbers, but for a list of non-numeric items, I’d have to adapt them to ask for a user’s preference every time they compared two items. I decided to use Shell Sort, which gives you a general overview of the entire list before combing through it in more detail.
My first step was to build a Python program that accepted user input through the terminal. After some agonizing over the algorithm on a whiteboard, I got it to work on my local machine and asked for advice on my blog on how to adapt it for the web.
Implement, Test, Iterate
My next step was to recreate the program using ReactJS and deploy it through Github Pages. I tested with people, fixed bugs, styled it, and fixed more bugs.
Some computer scientists who tested the tool pointed out that there are faster algorithms that require fewer comparisons to sort a list. In the future I could experiment with using alternative algorithms for Ranker.
The Ranker tool also highlights a flaw in the transitivity of preferences. People don’t always prefer x over z even if they prefer x over y and y over z. That’s fine! The limitation of this tool is that it uses subjective human preferences as data, which can change at any time.