I have recently gave a talk about being a lead developer in consultancy. I have stressed there the importance of learning in the role of a software consultant. Beyond that, it is good to stay “in shape” when it comes to algorithmic coding. You never know when it may be important- a difficult problem at work or a short notice interview. Let me introduce you to one of my all-time favourite “tools”. Ladies and Gentlemen- HackerRank!
In this article I want to share with you ideas on how I use HackerRank to stay “in shape” when it comes to coding. Before we do that, for motivation, a quote from an ancient Greek poet Archilochus:
“We don’t rise to the level of our expectations, we fall to the level of our training.”
I use HackerRank for training with coding problems. I think it makes good sense to do that from time to time!
Why work with algorithmic problems?
A lot of people look at a tool like HackerRank and pose the following questions: “Why would I practice with these algorithmic problems when this is not what I do at work?”. Fair question. Here are a few reasons to do that:
- Solving algorithmic problems teaches programming techniques that can be applied in different contexts.
- Non-trivial efficiency problems come up from time to time in most projects. When you work with algorithmic challenges, you are well equipped to handle them.
- You may be asked similar questions in an interview. Even if you are not looking for a new job, you may be required to participate in an interview. This is common for us in the consulting business, but it may also happen for start-up employees, as their company is being bought.
- It makes you a better interviewer. Expert skill in solving these kinds of problems helps you to quickly understand what others are trying to write and debug their code in your head.
- You may get to practice parts of your programming language that you are not using that often.
- It can be really fun.
I am sure there are many other benefits of doing these kinds of problems. If I missed something important, let me know in the comments.
Why HackerRank?
There are quite a few websites that let you practice your coding and solve an algorithmic challenge. Why do I like HackerRank the most? A few reasons:
Clean, modern user interface. Maybe it sounds trivial, but it really matters. It is really easy to navigate the website and find problems that are interesting to solve. Once you find your problem, the editor is clean and useful. The whole website is pleasant to use.
Multiple languages allowed. HackerRank lets you chose multiple different languages. At the time of writing, you can use over 30 programming languages for most of their problems. This is great! Learning Rust, Go, Kotlin? Get your hands dirty by solving some challenges!
There is more to it than just solving algorithms. Many similar websites focus entirely on competitive coding. HackerRank gives you more! If you want to learn specific areas such as Functional Programming, Data Structures, even Distributed Systems- there are challenges for that!
Fun competitions. My favourite competition on HackerRank is Week of Code. The idea here is that for a whole week you are getting a new question each day. They get progressively harder as the week progresses. You can then solve them in your own time without crazy time pressure (you still have some less-crazy time pressure though!).
What you can gather from these points is that these guys are really trying to build a great platform and in my eyes- they are succeeding!
How to use HackerRank?
There are multiple ways to use HackerRank effectively. I found the following to work for me and be the most fun:
Get better in specific areas. HackerRank does a great job at splitting tracks by subdomains. If you know that you need to get better at Graph Theory- you have a section dedicated to that. In fact, the Algorithms are divided by the following subdomains:
- Warmup
- Implementation
- Strings
- Sorting
- Search
- Graph Theory
- Greedy
- Dynamic Programming
- Constructive Algorithms
- Bit Manipulation
- Recursion
- Game Theory
- NP Complete
And these are just the Algorithms… There are other tracks there as well!
Take part in competitions. Taking part in competitions makes sense for a few different reasons.
It is good to push yourself and see how you perform in a more life-like scenario. Competition can provide that by not having a solution waiting for you. You have to either solve it or wait for the competition to be over.
Taking part in competitions can highlight weaknesses in your coding. Maybe you will find that particular type of questions give you always the most difficulties. With that knowledge, you know what to improve and what to work on.
Competitions can be very fun and motivating. Suddenly, learning becomes a game.
Trying different languages. You can solve problems in multiple different languages. This can be very useful when learning new languages and looking for practical problems to solve!
Any other websites worth recommending?
HackerRank is the website that I use the most for practising my coding skills. There are a few others worth mentioning:
https://www.codingame.com – for programming competitions based around game AI. Very easy to get into, very fun. They really deserve their own blog post for the amazing stuff there are doing. If you have kids- they will love the website as well.
https://www.topcoder.com – for more serious competitive programming
http://codeforces.com – similar to topcoder, good challenges, plenty of competitions
https://www.codechef.com– even more competitive programming. I heard good opinions about it but I did not try it yet
https://www.interviewbit.com– recently recommended to me. It gamifies the experience of practicing for your interview and includes lots of sample problems.
Summary
If you like coding, learning new stuff and a bit of competition (optionally) I think you will really enjoy HackerRank. Personally, I found it very helpful in improving my interviewing skills and general algorithmic competencies.
I have an account on HackerRank. If you want to beat me in a coding competition, sign up and follow me. I will take part in Week of Code 37 – see you on the leaderboard? Good luck!
Also, to be clear- nobody paid me to write this, I am sharing with you my honest and unbiased opinions here.