Skip to content

Exercise classification #63

@pminten

Description

@pminten

(Not quite sure if this should go here or on exercism/exercism.io, but since it's track/exercise related this seems to be the best fit.)

This is a bit of a brainstorm. I've been thinking about how to improve the quality of the tracks and it seems that the first step would be to get some kind of shared classification to apply to exercises, a shorthand to quickly get an idea of where an exercise fits.

The main categorization I've been able to come up with is focus/practice/challenge.

  • Focus exercises are simple and intended to make the user familiar with specific features of a language. For example leap teaches people about if-statements or boolean logic (depending on how they implement it), Hamming is all about looping over a collection/string. The key point of a good focus exercise is that it steers the user in a particular direction and has little to distract from that.
  • Practice exercises take multiple concepts and let the user experiment with different approaches. Practice exercises are complex enough to enable multiple approaches but simple enough that the user doesn't have to think hard to find at least one possible approach. Bob is a good practice exercise, it involves conditionals and string operations and some fairly simple logic, but there are quite some different ways to implement it (regexes, splitting into different functions, etc).
  • Challenge exercises go beyond practice exercises in that challenge exercises require the user to come up with a non-trivial algorithm or require the user to think of lots of edge cases. These are usually longer exercises, though I would rate prime-factors as challenge as well (since it's a bit tricky to do efficiently).

On top of this there seems to be a kind of "natural" flow, roughly in three phases.

  • Phase 1 uses numbers, conditionals and loops. No classes, higher order functions or anything like that. Functions are used as the way to structure code. Few standard library functions/classes are used.
  • Phase 2 introduces "natural" collections, the basic collections supported by the language, such as lists, maps/dicts and possibly sets. It also introduces some higher organizational concepts like classes or higher order functions, depending on what fits with the language. Core standard library functions/classes are used.
  • Phase 3 brings the full power of the language with features like threads/goroutines, generators, continuations, etc. Less well-known standard library functions/classes can be used.

These phases are very vague unfortunately and they differ a bit for each track since what's basic in one track (anonymous functions in Haskell) may be more advanced in another track (anonymous functions in Go).

Does this make sense as a classification system? Is this a useful way to think about exercises?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions