Why I Love Exercism.io
I started doing code practice on exercism.io back in 2014 when I was a student at Turing. I now still find myself doing exercises there when I have some free time and I find it to be one of the most enjoyable coding activities I do. Why do I enjoy it so much? Well for one thing it allows me to focus on just the code. Quoting from the “values” page of the site:
“In programming terms, becoming fluent in a language is critical because it frees up cognitive resources for the more advanced parts of software development.”
For me this really resonates. Looking back, I have sometimes (ok, many times) found that I get so caught up in the goal of completing a task, that I don’t take the time to explore code features(of whatever language I’m working in). I figure out how to make the feature happen, refactor and then move on. Maybe that’s because I only have so much cognitive bandwidth and I have to prioritize, or maybe I place too much pressure on myself to get the task done. Likewise, I have found that generally in code review, I get some feedback if I have gone too far astray, but if things seem to be working and the code is readable, it usually passes code review. It’s then on to the next feature without exploring too much.
But with Exercism, I’m not invested in the task. Sure I want the specs to pass, but I can give way to my desire to ask questions about the code - how does this function actually work under the hood?, is there another way to do this?, can I do this using tail recursion? - and if the task doesn’t get finished today, who cares?
Another feature of Exercism that really works for me is the ability to see numerous other solutions. It’s so helpful to see the same problem solved 10 different ways immediately after submitting your own solution. This allows me to analyze all those solutions, compare them with my own, and then synthesize what I feel is the best way to solve in my final iteration. Just the other day I wrote a 54 line solution to a code problem. I sensed that it could be more concise, but I also thought it was a good solution because I wanted the code to be explicit and self-documenting. My mind was quite blown(in a good way) when I saw an elegant community answer that solved the problem in 10 lines and was still very readable! This process really highlights the different ways to solve problems and the comments/feedback really help me to process what is going on in the code and why the solution was done in a particular way.
Exercism has been a great way for me to learn and as I reflect on why that is, I am also reminded that I can always improve the balance of focus on process vs product in my day to day work in such a way that I add value through my work while also continuing to grow as a programmer.