Many of us have a 2017 goal to improve our programming skills or to learn how to program in the first place. While we have access to many resources, practicing the art of code development independent of a specific job requires some planning. Exercism.io is one resource designed for this exact purpose.
Exercism is an open source project and service aimed at helping people level up in their programming skills using a philosophy of discovery and collaboration. Exercism provides exercises for dozens of different programming languages. Practitioners complete each exercise and then receive feedback on their response, enabling them to learn from their peer group's experience.
And what a lot of peers there are. Exercism racked up some impressive stats in 2016:
- Participants from 201 different countries
- 29,000 participants submitted exercises since June 2013, with 15,500 of them submitting exercises in 2016 alone
- 15,000 participants provided feedback on exercise solutions since June 2013, with 5,500 of them providing feedback in 2016
- 50,000 visitors a month and over 12,000 each week
- 33 programming languages are currently supported by exercises, with another 22 in the works
The project provides a series of small wins to participants of all levels, allowing them to develop "a high degree of fluency even at a low level of proficiency," said Katrina Owen, founder of Exercism. While Exercism does not aim to teach participants enough to become employed as a programmer, its exercises give them a deep familiarity with a language and its foibles. This familiarity removes the cognitive burden of language from learners (fluency), allowing them to focus instead on the more difficult problems of architecture and best practices (proficiency).
Exercism does this through a series of (what else?) exercises. A programmer downloads the command line client, retrieves the first exercise, adds code that fulfills the exercise, and then submits the solution. After submitting a solution the programmer can study the solutions of others and learn from different approaches to the same problem. More importantly, each solution receives feedback from other participants.
Feedback is the super power of Exercism. All participants are encouraged not only to receive feedback, but also to provide it. According to Owen, members of the Exercism community learn more from providing feedback than from completing the exercises themselves. "It's a powerful learning experience. You're forced to articulate gut feelings and to examine your assumptions, habits, and biases," she said. She also pointed out that feedback can take many forms.
"Just go in and make observations and ask questions," said Owen.
Those who are new to programming, or even just to a specific language, can provide valuable feedback by questioning assumptions while also learning through collaboration and dialog.
Beyond just enabling bite-sized learning of new languages, Exercism itself strongly supports and encourages new contributors to the project. In an article on SitePoint.com, Owen stressed that, "If you want to contribute code to open source, the level of skill you need is 'good enough.'" Exercism not only encourages new contributors, but as a project it does everything possible to help new contributors land their first patch. To date nearly 1,000 people are contributors to the Exercism project.
New contributors will have plenty to keep them busy. Exercism is currently reviewing the health of its language tracks with an eye toward making all tracks sustainable and avoiding maintainer burnout. It's also seeking donations and sponsorships to hire designers to improve the usability of the site.
These improvements are necessary for the health of the site and for the well-being of Exercism's participants, but also these changes encourage and ease the path for new contributors to join, said Owen. "The product side would be much more maintainable if we could get this redesigned... When the user experience is a mess, there really is no point in having gorgeous code," she said. The project has a very vibrant discussion repo where community members collaborate to discover the best new approaches and features.
Those who want to keep tabs on the project but not yet participate can follow along on the behind the scenes mailing list.