- The scores can be increased by contributing more on public repositories or increase the stars of your public repository or answering questions in StackOverflow.
- A commit in a repository will increase the score by the ratio of the programming languages of the repo you committed into.
- Scores are aging, so by the time, their value is decreasing.
What do we measure?
The goal of our scoring algorithm is to measure the experience of the developers. It means if somebody has a higher score she is probably more experienced than someone else with less score. I cannot stress enough; this is a possibility. Creating a 100% percent objective and accurate scoring is impossible because the experience is not just the number of years.
Somebody who started to code 10 years ago in Java and writes code only once a weekly is most likely less experienced than someone who started 3 years ago but writes code every day.
Moreover, assume there are 2 developers both with 5 years of experience but one of them stopped coding 5 years ago. In this case, the second developer who is still active is probably more experienced than another developer whos knowledge might get rusty during the last 5 inactive years.
When we calculate your score, we use two sources: GitHub and StackOverflow. Let’s check both of them how we use them.
Right now we only consider the public repositories. Because of this, our scoring algorithm is biased against opensource developers. We know there are a lot of developers who are very experienced but they are not active on any public repository. We will fix this by introducing private repository integration. But now let’s talk about the GitHub.
You can do several things on GitHub. Like you can open issues, comment on issues, code review, etc. For scoring, we consider only two events: “PushEvent” and “PullRequestEvent”. So only the commits and pull request will affect your final score. When we calculate the score for an event we consider the following parameters:
- Number of stars of the repository
- The age of the commit
Here is the exact formula we use to calculate the score for an event:
Score = Weight * Aging
Weight = 2^(log10(S+1))
Aging = e^(-D/1000)
Where “S” is the number of stars of the repository where the event happened.
D is the days passed since the event happened.
For example, if you have committed into a repository which has 99 stars 200 days ago you will get this score for that event:
Weight = 2^(log10(99 + 1)) = 4
Aging = e^(-200/1000) = 0.818
Score = 4 * 0.818 = 3.272
Here is a chart of how the score of the events’ is aging:
Basically, a score for an event after 1 year will worth about 67% and after 3 years 33% of the original score.
Scoring programming languages
Scores are distributed between the programming languages of the repository. So if you commit into a repository that consists of 500 bytes of PHP code and 500 bytes of Shell, then the score will be shared 50%-50% by the two languages. According to the previous example. The 3.272 scores will be split like this: PHP: 1.636 and Shell: 1.636.
We use the GitHub API to get the ratio of the programming languages for a given repository. Here is an example: https://api.github.com/repos/vuejs/vue/languages
The total score is equal to the sum of the scores of all the programming languages you used.
GitHub tracks the primary language of a repository. However, sometimes GitHub cannot recognize the language of a repository but fortunately, you can change it manually.
You can add topics to your GitHub repository. For example, you have a PHP repository where you use Symfony and composer. You add the Symfony and composer topics to your repository then we can recognize you use these technologies and get scores for them.
Let’s take the previous example. You got 3.272 scores for your commit which was split between PHP and Shell. Each topic you set for the repository will get 3.272 scores. So Symfony will be 3.272 and composer will be 3.272. But the topics are not included in the total score (see below).
Why do we do this? If we split the scores between the topics then you would not be motivated to add all the topics that are related to the repository. If we added the topics scores to the total score, it would be very easy to increase your score by adding more and more topics to your repository.
White list of topics
Since there are hundreds of topics and some of them are not very meaningful. Such as “programming”, “good” and programming languages are also represented as topics. So we use a white list of topics we will consider.
This list is available here and you are welcome to contribute: https://github.com/codersrankOrg/tags_white_list/
If you think some technology is missing from the list and you want to highlight it on your profile, first send a pull request suggesting the new technology. After merging it to master and regenerating your profile you will see the new technology on your profile.
StackOverflow is the second and most recent implemented integration. The score calculation is very simple. We get the scores calculated by StackOverflow for your tags (not reputation, but score) and add them to the GitHub scores.
Here is an explanation of how the scores are calculated by StackOverflow
If you have 100 scores in Java from GitHub and you have 20 scores from StackOverflow from Java your score will be 120.
How total score is calculated?
Total score = GitHub scores + StackOverflow scores.
When we calculate the GitHub scores we consider only the scores from the programming languages (see above), the scores from topics are ignored.
Refreshing your scores
Every week we regenerate the scores by default for everybody who registered. But if you want to refresh your scores you can do it manually too.
Just go to your profile and press the refresh button under the Total ranking number.
However, keep in mind that if you make commit it takes about 24 hours until our system will recognize that commit.