HackerRank (hackerrank.com) is the go to tool for enhancing algorithm skills. It's a website that allows you to perform coding exercises with any popular programming language at varying levels of difficulty. But what if you want to improve your code review and debugging skills? This is where DebugRank comes into play, a native Android app built to challenge your ability to find and fix bugs in existing code. DebugRank gamifies debugging code by giving you a time limit to add that extra challenge.
About DebugRank
DebugRank is our own extension of HackerRank's concept with a focus on debugging code. Get the DebugRank app directly from Google Play now to start having fun enhancing your debugging skills!
How DebugRank Works
The possible programming languages and puzzles are pulled directly from the GitHub repository (using Retrofit2), meaning any developer can add new languages or puzzles. The code is compiled and executed in the cloud by utilizing HackerRank's API (hackerrank.com/api). Their API is very easy to use, and it allows for you to execute test cases and get the results. How do we achieve an awesome bi-directional code editor with syntax highlighting and inline editing? We use our very own Xuni FlexGrid. Some technologies that DebugRank uses include:
- Realm
- Dagger2
- Retrofit2
- Picasso
- Gson
- RxJava / RxAndroid
- Butterknife
- Dart
- Mockito
- Robolectric
- Espresso
- SVG Assets
- Xuni
Contributing to DebugRank
Want to help improve DebugRank? There are two ways to help:
- Provide updates to the actual app itself
- Help create more code puzzles for developers to debug
Head over to the github page to learn more about contributing or to just checkout the code. https://github.com/grapecity/DebugRank
Blog Series
DebugRank will serve as a case study app for a blog series to analyze architecture and popular android open source libraries. First we will cover what the Model View Presenter (MVP) pattern is and how/why it was used for the primary architecture of DebugRank. After covering MVP itself this series will dive into other blogs about:
- Using Realm on Android
- Dependency Inversion using Dagger2
- REST services using Retrofit2
- Async / Observables using RxJava / RxAndroid
- Reducing boilerplate code using Butterknife / Dart
- Mocking dependencies when unit testing using Mockito
- Functional testing with Espresso
- Sharing code between unit tests and instrument tests in Android Studio
- Injecting test dependencies with Dagger2 in Android Studio
- Loading web images with Picasso and using Supportv4 SVG Assets
- Dumbing down CLEAN architecture in regards to Android
- Creating a code editor using Xuni's FlexGrid