February 22, 2017

[Exercism: Behind the Scenes] Delving into cross-cutting curriculum concerns

In many ways, each language track is a stand-alone thing. People might sign up to Exercism and do exercises in Haskell, and never see those in C# or Python or JavaScript. Likewise on the open source side of things, people can contribute to the Haskell track without knowing anything about the other repositories that make up the project.

At the same time, each track is part of a greater whole. We're implementing canonical test inputs and outputs for all of the exercises to help make it easier to improve the exercises in all the language tracks. We're working on improving the processes around how we maintain tracks, and writing documentation to make it easier for people to get involved, no matter which track they are interested in.

And yet—too much consistency could defeat the purpose of Exercism. We want to introduce people to the idioms of each language, we don't want to shoehorn languages into an Exercism mold.

Here are some of the questions that have come up recently as we explore this boundary between individuality and commonality:

Stub files / Skeleton files

Should we provide stub files for exercises? If so, what should they contain? What problem are we trying to solve? What are the trade-offs?

There have been at least 20 different discussions about this in various tracks, and last month Peter Tseng opened an issue where we can discuss this globally (https://github.com/exercism/discussions/issues/114).

Hello, World!

Hello World is the classic first program. Should all the tracks have a Hello World exercise? If so, then the current Hello World exercise, as defined, is too complex in some languages. A very lively discussion (https://github.com/exercism/x-common/issues/520) concluded that we should have a Hello World exercise, and that it should be much simpler than it currently is. The goal should be to make sure you've got everything wired up and configured correctly, and that you're able to fetch and submit.

Some tracks, notably the Java and Kotlin tracks, have written detailed and intricate tutorials for their Hello World exercises. It would be a shame to lose these. These tutorials are about Test-Driven Development, though, not about Exercism. A new discussion (https://github.com/exercism/x-common/issues/548) is looking at which exercise we could invent as a drop-in replacement for the old Hello, World, which would let us repurpose the tutorials without too much work.

Standardizing Canonical Data

There's been a very lively discussion (https://github.com/exercism/x-common/issues/336) about whether or not we can standardize the format for all of the canonical data well enough to bootstrap an entire track using generator scripts. The answer, so far, is "not really". That said, we're well on our way to a number of improvements, even if we can't get all the way to 100% automation.

Linearity, Progression, and Completion

An interesting question that has come up recently is what to do about exercises that are similar but have varying levels of complexity. In particular, a lot of people find House, Twelve-Days, Beer Song, and Food Chain to be tedious and repetitive (https://github.com/exercism/x-common/issues/326). One idea that has surfaced before and which is relevant to this discussion is whether or not tracks on Exercism should be linear at all. Perhaps we can have sub-tracks (https://github.com/exercism/x-common/issues/71) that delve into particular domains.

A broader question is what it even means to progress in a track. When are you done with an exercise? When are you done with a track?

Build Systems

Is it worth making a simple, consistent way to run tests for all the tracks? On the one hand we want to make it as easy as possible for people to get started. On the other hand we want people to be using the tooling that is typical for the language. This discussion (https://github.com/exercism/discussions/issues/117) digs into the trade-offs that we're wrestling with.

And more...

There are more and more high-level questions being raised, as more people contribute to and maintain the various language tracks. People are running into new and interesting questions, because languages are quirky and singular, despite having so much in common.

If you want to get involved in these discussions, watch the exercism/discussions repository.