Quickly ramp up in new programming languages.
Ruby HTML CSS JavaScript CoffeeScript Shell
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.github Stale Configuration for Probot (#3461) Apr 18, 2017
api Reject solutions with empty files Dec 29, 2017
app Escape only the paths in the redirect param Mar 31, 2018
bin Only test ruby when bumping trackler version Dec 26, 2017
config Increase the database connection pool in production May 28, 2017
db Add GitHub data fields to user Aug 24, 2017
docker Docker for Windows supports Windows 10 Education Aug 10, 2017
docs Update location of moved documentation Dec 18, 2017
frontend Fix food for thought typo Dec 31, 2017
lib Add cleanup task for empty solution files Jan 2, 2018
public Word-break links in all comments, fixes #3746 Apr 1, 2018
scripts Add script to set up git hooks Jul 27, 2016
test Allow case insensitive tag search in /teams endpoint Mar 19, 2018
x Fix links to shell completion scripts Apr 1, 2018
.coveralls.yml Add coveralls. Setup travis to run with coveralls code coverage. Jan 18, 2014
.dockerignore Reduce docker build context size by ignoring node_modules Jul 20, 2017
.editorconfig initial editorconfig file Dec 6, 2013
.gitignore Remove all compiled assets from public directory Oct 1, 2016
.rubocop.yml Match Rubocop TargetRubyVersion with .ruby-version (2.3.3) Mar 19, 2017
.rubocop_todo.yml Rubocop with no enforcement no checks Oct 11, 2016
.ruby-gemset update dependencies 2 Jul 4, 2014
.ruby-version.example Coordinate Gemfile with .ruby-version Jan 4, 2017
.simplecov Add coveralls. Setup travis to run with coveralls code coverage. Jan 18, 2014
.travis.yml Upgrade Ruby to 2.3.3 Nov 30, 2016
CHANGELOG.md Add an un-changelog Mar 25, 2015
CODE_OF_CONDUCT.md Update COC to latest Contributor Covenant version May 16, 2017
CONTRIBUTING.md Updated CONTRIBUTING.md - also marked the words 'rebase', 'squash', a… Jan 9, 2018
Dockerfile Install the version of bundler specified in Gemfile.lock Jul 25, 2017
Dockerfile.dev Introduce a base docker image for layer caching purposes Jul 20, 2017
Gemfile Upgrade rouge Sep 19, 2017
Gemfile.lock Update trackler Apr 22, 2018
LICENSE License under AGPL. Fixes #286. Jul 31, 2013
Procfile Don't start mailcatcher in production Jan 22, 2014
Procfile_Vagrant.example Add Procfile_Vagrant.example, add to .gitignore, and update CONTRIBUT… Sep 1, 2015
README.md Update the contributing guide Jun 6, 2017
Rakefile Auto-correct RuboCop offenses and re-gen todo May 12, 2016
STAGING.md Add more staging notes Apr 8, 2015
app.rb Upgrade activerecord and activesupport to 5.0.3 May 19, 2017
config.rb Move public dir out of lib Nov 22, 2015
config.ru Require the english library May 27, 2017
docker-compose.yml Merge pull request #3591 from nilbus/docker-default-port Jul 21, 2017
lineman.json Move public dir out of lib Nov 22, 2015
package.json Add testem to npm dependencies for lineman's spec-ci task to work Sep 12, 2017
static.json Fix heroku lineman buildpack for cedar-14 Oct 1, 2016
x.rb Delete traces of Xapi Nov 24, 2016



Build Status Code Climate Gemnasium Coverage Status Supporting 24 Pull Requests Join the chat at https://gitter.im/exercism/support

Programming is hard. With practice it gets easier.

Exercism gives you hundreds of practice problems in over 30 programming languages, and a place where you can get feedback on your solutions.

Exercism is especially well-suited for three types of practice:

  • gaining fluency in your first programming language
  • ramping up in a new programming language
  • developing the skills to be a great lead developer: code review, refactoring, and mentoring

Using Exercism

The process happens in two places.

  1. Solve exercises in your local development environment.
  2. Discuss solutions on the Exercism website.

Once you submit the solution to an exercise you can:

  • learn by listening: receive feedback on your code.
  • learn by reading code: browse all the other solutions to exercises you submitted solutions to.
  • learn by sharing your experience: provide feedback on other people's code.

Even in the most trivial exercise, there are many important things to discuss. Simplicity, naming, readability, idioms, good use of existing libraries, performance, and much, much more.

Get started using exercism on the exercism.io website.

Getting Help

Are you stuck trying to solve an exercise?

Submit the unfinished solution and describe in a comment on the website what you tried, and where you're stuck.

Or jump into the support chat, and we'll try to help you out.

Did you find a bug?

That's always frustrating. Go ahead and open a GitHub issue, and we'll help figure out what's going on.

Is someone being unpleasant?

We have a Code of Conduct.

If you need to report something, please email @kytrinyx.

Contributing to Exercism

There are many ways to contribute to Exercism, and only a few of them involve writing code.

Use our guide to finding your way to help you find the right spot to start.

Setting up your development environment

If you want to work on the Exercism website, check out the installation instructions in the Contributing Guide in this repository.

What's Going On at Exercism?

We send out a weekly "behind the scenes" update about new language tracks, bugs that crop up, features that people are working on, and other Exercism-related tidbits. You can sign up for the newsletter here.

Thank you

Exercism.io is free and open source, and many, many people have contributed to the project. This is a project that started by accident and could never have gotten off the ground by the efforts of any single person.

Thank you! ❤️