I love games. Rankings. Progress. Scoreboards. Winning things.
Thus, Codewars was right up my alley as soon as I could, you know, pass that first entry question (hint: parameters). It took me awhile to orient myself (read: find a problem I could actually solve). Once I understood the leveling system, which was counterintuitive to me (why is level 8 the easiest?), I was on my way to racking up points.
Codewars was an essential tool for me in passing Launch School’s RB109. I spent I-have-no-idea-how-many hours finding, solving, and sharing problems from the site. Funny enough, though, ever since passing RB109’s interview, I haven’t touched it once (well, aside from revisiting old problems for study groups sometimes).
Even though I love it, there are some definite ways that Codewars sidetracked me in my pursuit of a passing score in the interview. Thus, although I’d love to say it’s perfect and necessary for everyone, it’s not. Here are some of the pros and cons that I found.
- Fresh Problems
I have an issue where I have really great memorization skills. Sounds great, but it’s not sometimes: once I solve a problem (or have studied the solution), it’s really hard for me to forget the solution even if I don’t understand it. Thus, I needed new problems outside of the Small Problems to practice my understanding, syntax, PEDAC, etc.
Remember though: before venturing outside of the Ruby Small Problems & study guide, make sure you’ve really mastered all of those problems. It’s all you technically need.
2. Countless Given Solutions
After you solve a problem (or you get frustrated, give up, and click “Unlock solutions”), you’re taken to a page of all the submitted solutions. There are so many. It was through these pages that I found a lot of new methods or learned new ways to use already-known methods. It was also great practice in reading other people’s code! The LS Small Problems have solutions, too, but not as many (usually just one or two).
3. Gaming Motivation
Can’t lie — the added bonus of my score in the top right increasing definitely motivated me to push through some harder problems at the beginning. If you like extra gaming motivation, Codewars might help with that.
- Poorly Written Problems
For some reason it surprised me when I encountered my first poorly written problem. Terrible grammar, confusing details, and edge cases that make zero sense to me to this day. When you leave the safety of LS, you may encounter some disappointment with other problems.
This can eat up valuable study time because you’re not really learning to program, you’re just trying to decipher a problem where someone was trying to be overly clever.
2. Too Many Options
Within the LS Small Problems, you know that all of them are worth your time. But what about in Codewars? You don’t need to know Regex for the 109 assessments, but you definitely need it for plenty of Codewars problems; but you only really know that once you start working on the problem.
Some problems say they’re level 7 but hit your confidence like a level 5. Some problems say they’re level 5 but you solve them faster than a level 7. Does that mean you should only solve level 7s? 5s? Leveling is inherently subjective, so it can be hard to know if you’re spending your time in the right place or not.
3. Gaming Solutions
After you finally wrangled a problem into obedience and all the test cases glow in the beautiful green, you click through to the solutions page and see….that your 23 line solution could be a one-liner.
But here’s the thing: many of those solutions are focused on being clever, not readable or reusable code. Their parameters have names like
ii , and their one-liner still has 15 chained together method calls. It looks sharp, intimidating even, but it’s not good code for a software engineer in the real world. It’s not the goal.
Codewars can trick you into thinking that the shorter the better, when readability is much more important.
I still like Codewars, and I would still use it if I had to go back. But, I also don’t think it’s for everyone. If you decide to try it, make sure to keep the items above in mind.