🕹 How To Use Exercism To Learn Programming Languages
Tags: beginners, career, programming, exercism
Published: 2022-06-14 15:11:03

---
title: 🕹 How To Use Exercism To Learn Programming Languages
published: true
date: 2022-06-13 00:00:00 UTC
tags: beginners,career,programming,Exercism
canonical_url: https://www.codecraftr.nl/learning-programming-languages-with-exercism/
cover_image: https://www.codecraftr.nl/assets/images/24-babel-tower.jpg
---

Want to learn a new programming language, but don’t know where to start? Exercism might be what you’ve been looking for…

## 🧠 Exercism Simplifies Learning a Programming Language

_What is the last programming language you learned?_

Learning a new programming language is a great way to expand your horizons and improve your skills as a developer. In the _[Pragmatic Programmer](https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer?ac=1&from_search=true&qid=DWcIeeqwBr&rank=1)_ they even recommend you learn a new one each year! The important questions here are:

_How did you go about learning it?_

_Did your learning feel effective?_

If you want to learn a new programming language, you just want to get started, and get learning. You want a quick way to start practicing. Wrapping your head around the new language is challenging enough by itself!

I used to learn a new language by going online, reading about the basics of a language, and then start doing [code katas](www.codecraftr.nl/improving-with-codekatas). Recently I have found a much nicer way, using Exercism.

[Exercism](https://exercism.org) is a fun learning platform with some nice tricks up its sleeves. It excels at guiding you through mastering programming languages, but more on that later. Let’s see what Exercism is all about.

## 🏫 How Exercism Works

Exercism is a free, and [open source](https://github.com/exercism) learning platform for Software Development. The idea behind it is to make mastering programming fun, and accessible to anyone.

To use Exercism you first need to create an account, after which you can embark on your learning journey (pun intended, you’ll see). You start by enrolling in one of their language tracks, of which there are a staggering 57 at this time of writing!

![Exercism Track Overview](https://www.codecraftr.nl/assets/images/24-exercism-dash.png)

_Exercism offers a lot of learning tracks_

Once enrolled, you can select a track and start learning. Tracks start with the obligatory “Hello World”, after which a few basic exercises are available. This progression continues: each assignment you complete “unlocks” new ones, like levels in a game.

There are two ways you can work on assignments:

1. In the [Web Editor](https://exercism.org/docs/using/solving-exercises/using-the-online-editor), or
2. Locally using the [Exercism CLI](https://exercism.org/docs/using/solving-exercises/working-locally)

Exercises usually come with a short explanation, a file to put your code in (with comments), and some tests to see if your program is working. Once you’re satisfied with your work you submit your solution.

After submitting your code, automated checks like tests, and formatting checks are executed. After receiving the all-green, the exercise can be completed, and you can compare your solution to those shared by others.

Besides pouring over the code of others, you can also request mentoring by a real-world volunteer. These mentors are well-versed in the language at hand. Not dissimilar to a code review, they will assess what you submitted and give you feedback on how you can improve.

That’s how Exercism works, but what makes it so great for learning?

## 🚀 The Awesomeness That Is Exercism

Exercism is one of the best ways to learn programming languages in my opinion. It’s major pro’s are:

- **Syllabuses** with supporting exercises offer a logical progression of core language concepts, which are introduced in a piecemeal manner.
- **Gamification** makes learning fun. Unlocking harder exercises, earning _reputation_ and _badges_, and seeing your learning journey unfold makes using Exercism an enjoyable experience.
- **Fun exercises** make for puzzles that you can’t resist. Best of all, you don’t have to search around the internet to find them (unlike with code kata’s). They’re all available in the platform, and you can even contribute new ones!
- **Compare solutions** easily. Want to know if there is a different, or better way to solve an exercise? Reflect on what others did! It’s built right into the platform.
- **Practice reading code** by looking at what others did. Code reading is a crucial, often overlooked skill. One reason for this is that its hard to get started. Exercism makes it easy, because you know the _context_ of the code, and you don’t have to scour the internet for code of others.
- **Be mentored** by real-world, and skillful people. Finding someone who can teach you to solve solutions in an idiomatic way, who provides tailor-made feedback can give your learning journey a boost. Best of all, Exercism has this facility built in!
- **Mentor others** deepening knowledge about a language you are proficient at, and grow your teaching skills. A great way to give back to the community, and a win-win for both you and the mentee.
- **Strengthen your resume** by showing off your solutions, languages you’re working with, and reputation you earned. These can all easily be shared with a public profile.
- **Great tools** like the web editor and cli make working Exercism friction-free, allowing you to focus on your learning journey.

![Syllabus for Python](https://www.codecraftr.nl/assets/images/24-exercism-syllabus.png)

_Syllabuses structure your learning journey_

Phew… What a list. As you can see, there is a lot to like about Exercism, but I do think it has a few downsides. Let’s find out what those are.

## 👀 Exercism’s Drawbacks

As amazing as it is, there are downsides to using Exercism. To name a few:

- **Varying level of language support**. More popular languages, like Python or Go, Exercism has better platform support, and a more in-depth learning journey. Whereas a language like Scala has a learning track that’s stripped down to the very core: exercises and the community. It pays off to see what level of support is offered for the language of your interest.
- **Test code is supplied**. If all you’re trying to do is learn to program in a new language that’s fine, but if you want to become a _better programmer_, writing tests is a crucial skill to master. Exercism is not well suited for that purpose.
- **Ecosystem / tooling** knowledge are not mandatory. As Exercism offers tooling for the popular languages, that saves you from having to learn about them. That’s great starting out, but eventually that too should be part of learning a new language.
- **Helps learn languages, not craftsmanship.** Exercism’s focus is on learning languages, not necessarily on writing better software. Realize that learning a language does not make you a good programmer. As the saying goes: _the ability to speak English does not make you a great writer_.

![Learning Journey in Exercism](https://www.codecraftr.nl/assets/images/24-exercism-journey.png)

_Exercism alone does not improve your craftsmanship_

These downsides can be easily mitigated, by also doing [code katas](www.codecraftr.nl/improving-with-codekatas) and [breakable toys](https://redsquirrel.com/dave/work/a2j/patterns/BreakableToys.html). These force you to dive more into the ecosystem of a language, require you to write your own tests and become a better software craftsman altogether. How’s that for a great learning experience!

## 📝 Wrapping Up

Exercism is an effective way to get your feet wet with a new programming language. It offers learning tracks for a ton of languages, and is a lot of fun to use!

The best way to use Exercism, is to use it for understanding language basics, and idioms. After that it is important to complement your learning journey with code katas and breakable toys. This way you will master a new programming language, and become a better software craftsman in no time!

_What do you think about Exercism? What language will you learn using it? Let us know in the comment section!_