The devil is in the details

Why GitHub?

Deep Practice

Deliberately focus on improving your skills.

Gain a deep understanding of the fundamentals of your craft.

Experiment in a place where bugs don't inconvenience anyone.

Crowdsourced Mentorship

Practice providing useful critique.

Discuss code in both subjective and objective terms.

Strengthen your problem-solving skills by guiding others through the process.


Focus on expressive, readable code.

Work in your local development environment using your usual tools in multiple languages. We give you a test suite, and you make the tests pass... but that's just the first step.


The code is a conversation starter.

Have a thoughtful discussion with your peers about the choices that you made. Take this opportunity to explore idioms, style, and trade-offs. There's no right answer, and many good questions.

Pay it Forward

Explore other people's solutions.

Articulate what you like and dislike in other people's code. Have a thoughtful, nuanced discussion, deepening your own understanding of the design choices that you make every day.

Better code through conversations.

Thousands of conversations are happening on exercism. Here's one of them.

You start with some code. Talk about it a little. Rewrite the code a bit, then post the new version. Make it better. After a few cycles you've got improved code, and perhaps even a new friend!

Browse the Code

The project is open source, and all the code as well as the exercises are available on GitHub.

Browse through the various language tracks, or the code for the CLI. If you have a strong stomach, check out the code for this prototype.

For a quick-and-dirty overview of which languages and problems are available, we've got a synopsis. You'll notice that some languages have more exercises than others. If you'd like to help remedy that, or if you'd like to contribute exercises in a new language, check out the contributing guide.

If you're not into the whole code review thing and just want to work through small programming problems, then you don't need the CLI. Just clone the language track that you're interested in and work through the problems locally.