Staying Sharp with Exercism

If you’ve followed my summaries of the year, you know that I’ve been in a leadership role for a while. That means less code, more listening. But I still like to keep my coding skills sharp.

At first, I thought that I might be able to occasionally get involved in larger projects. Nope. A bad idea. For multiple reasons. The primary reason being that I can’t count on my schedule allowing me to give consistent hours of work to projects. I don’t want to be in a situation where I have to pick a project or something new and urgent. For example, one of the developers deciding that it’s time to look for greener pastures. A project suffers in that situation.

I still infrequently fix bugs. But “infrequently” does not really mesh with “keeping skills sharp”.

I also maintain Pronto and a couple of other open source projects. I make the most impact there also no longer with code. Reviewing issues and accepting pull requests contributes more to Pronto’s success than writing code myself. But I still do it. Happily. After all the issues are reviewed.

So, how else do coders keep their skills sharp and up to date?

By learning new programming languages. With that in mind, I’ve started reading The Go Programming Language week and a half ago. I’ve played around with Go before, but never really dug into it. I love reading books and I like how this one by Alan A. A. Donovan & Brian W. Kernighan is written. If you’ve heard of “K&R C”, K stands for this same Professor Kernighan. It was an easy pick when I looked at what books about Go are available.

There’s but one issue. I read books at various times and in various places, but rarely near a computer. Just reading about a programming language won’t really teach me to use it. Or contribute to my larger goal of keeping my coding skills sharp. And when I am in front of a computer, I don’t want to go back to the exercises suggested in a book. I think them through when I read them and actually implementing them afterwards is not really fun.

Afflicted with this quandary, this weekend I remembered exercism. I’ve tried it out in January of 2014, liked it and forgotten about it. It’s a perfect companion for learning a new language. Exercism provides lots of small self-contained practice problems for 30+ languages, each with an extensive test suite.

I’ve completed nine problems so far. Exercism CLI and the practice problems are great as they’ve been. But some parts of the website could be improved.

With Exercism, after a user submits a solution to a problem, that user can receive feedback and look at other solutions of the same problem. And there’s hundreds or thousands of them. Since I can’t know when someone will decide to look at my code, I always review solutions by other people. But it’s difficult to discover good solutions to learn from. I just have to go through them manually. I would love it if I could look at “shortest” and “most liked” solutions to the problem I just solved.

Reviewing a bunch of solutions by other people could also work for discovery. That might’ve been the idea, doing a push towards giving feedback. But there’s no strong incentive to do that. I think that there’s an opportunity to gamify the experience. Stack Overflow is a good example on how it could work and benefit the community.

The good thing is that Katrina Owen, the creator of Exercism and just an amazing human being, is aware of the website not being delightful. It gives me hope that this great learning tool will become even better.

Even with the website not being perfect, I would strongly recommend giving Exercism a spin to anyone learning a new programming language. It works for me.

UPDATE: Katrina pointed me to this incredible treasure trove of an issue about gamification. Contains actual research into intrinsic/extrinsic motivation and rewards.