Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update config.json to match new specification #125

Closed
kytrinyx opened this issue Aug 18, 2016 · 11 comments
Closed

Update config.json to match new specification #125

kytrinyx opened this issue Aug 18, 2016 · 11 comments

Comments

@kytrinyx
Copy link
Member

For the past three years, the ordering of exercises has been done based on gut feelings and wild guesses. As a result, the progression of the exercises has been somewhat haphazard.

In the past few months maintainers of several tracks have invested a great deal of time in analyzing what concepts various exercises require, and then reordering the tracks as a result of that analysis.

It would be useful to bake this data into the track configuration so that we can adjust it over time as we learn more about each exercise.

To this end, we've decided to add a new key exercises in the config.json file, and deprecate the problems key.

See exercism/discussions#60 for details about this decision.

Note that we will not be removing the problems key at this time, as this would break the website and a number of tools.

The process for deprecating the old problems array will be:

  • Update all of the track configs to contain the new exercises key, with whatever data we have.
  • Simultaneously change the website and tools to support both formats.
  • Once all of the tracks have added the exercises key, remove support for the old key in the site and tools.
  • Remove the old key from all of the track configs.

In the new format, each exercise is a JSON object with three properties:

  • slug: the identifier of the exercise
  • difficulty: a number from 1 to 10 where 1 is the easiest and 10 is the most difficult
  • topics: an array of strings describing topics relevant to the exercise. We maintain
    a list of common topics at https://github.com/exercism/x-common/blob/master/TOPICS.txt. Do not feel like you need to restrict yourself to this list;
    it's only there so that we don't end up with 20 variations on the same topic. Each
    language is different, and there will likely be topics specific to each language that will
    not make it onto the list.

The difficulty rating can be a very rough estimate.

The topics array can be empty if this analysis has not yet been done.

Example:

"exercises": [
  {
    "slug": "hello-world" ,
    "difficulty": 1,
    "topics": [
        "control-flow (if-statements)",
        "optional values",
        "text formatting"
    ]
  },
  {
    "difficulty": 3,
    "slug": "anagram",
    "topics": [
        "strings",
        "filtering"
    ]
  },
  {
    "difficulty": 10,
    "slug": "forth",
    "topics": [
        "parsing",
        "transforming",
        "stacks"
    ]
  }
]

It may be worth making the change in several passes:

  1. Add the exercises key with the array of objects, where difficulty is 1 and topics is empty.
  2. Update the difficulty settings to reflect a more accurate guess.
  3. Add topics (perhaps one-by-one, in separate pull requests, in order to have useful discussions about each exercise).
ricemery added a commit to ricemery/xscala that referenced this issue Sep 20, 2016
ricemery added a commit that referenced this issue Sep 20, 2016
add zipper and change to exercises list. Refs #125
ricemery added a commit to ricemery/xscala that referenced this issue Dec 15, 2016
…d Allergies.scala to src dir - refs exercism#137. Add topics to config.json - refs exercism#125
ricemery added a commit to ricemery/xscala that referenced this issue Dec 15, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 15, 2016
… Add CryptoSquare.scala - refs exercism#137. Add topics to config.json - refs exercism#125
ricemery added a commit to ricemery/xscala that referenced this issue Dec 15, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 15, 2016
…d Raindrops.scala - refs exercism#137. Add topics to config.json - refs exercism#125
@ricemery ricemery mentioned this issue Dec 15, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 26, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 26, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 26, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 26, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Dec 26, 2016
abo64 pushed a commit that referenced this issue Dec 27, 2016
abo64 pushed a commit that referenced this issue Dec 27, 2016
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
…config.json - refs exercism#125. Change Suite to Test to remain consistent with other exercises.
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
ricemery added a commit to ricemery/xscala that referenced this issue Jan 28, 2017
ErikSchierboom added a commit that referenced this issue Jan 29, 2017
Add topics to config.json - refs #125.
@ErikSchierboom
Copy link
Member

Due to the amazing work of @ricemery, all exercises now have topics associated with them.

@ErikSchierboom
Copy link
Member

The only thing remaining is to add difficulties.

@kytrinyx
Copy link
Member Author

For what it's worth, on a couple of tracks we've discussed just leaving the difficulties at 1 until we actually decide to do something with them.

@ricemery
Copy link
Member

It may make sense to add difficulties now so that we can perform some logical exercise reordering. I am betting that we have some pretty easy exercises ordered later in the list. And, some difficult exercises early.

But, honestly I wasn't very thrilled trying to come up with the numeric difficulty values for all of the exercises.

@ErikSchierboom
Copy link
Member

@ricemery That's the exact reason why I did go through with assign difficulties in the C# and F# tracks: to make it easier to order them.

@abo64
Copy link
Contributor

abo64 commented Mar 2, 2017

@ErikSchierboom Perhaps we could then take your F# difficulties as a starting point for discussion?
Scala might not be so much different?

@ErikSchierboom
Copy link
Member

@abo64 Great idea. Overall,I found the difficulty comparable. I'll extract the F# difficulties for the Scala exercises and post them here so we can discuss them. I'd love that as in the F# track there was nobody to discuss the difficulties with so they're just my estimates.

@ErikSchierboom
Copy link
Member

I've just created a little script to map the Scala exercises to the corresponding exercise's difficulty in the F# track. I've ordered them as they appear in the config.json file:

  • hello-world: 1
  • bob: 1
  • sum-of-multiples: 1
  • run-length-encoding: 5
  • hamming: 2
  • word-count: 4
  • pangram: 2
  • anagram: 4
  • nucleotide-count: 2
  • phone-number: 3
  • strain: 3
  • grade-school: 2
  • robot-name: 3
  • leap: 1
  • etl: 2
  • meetup: 4
  • space-age: 1
  • grains: 2
  • gigasecond: 1
  • scrabble-score: 3
  • difference-of-squares: 1
  • accumulate: 2
  • sublist: 7
  • rna-transcription: 1
  • triangle: 3
  • roman-numerals: 5
  • binary-search: 3
  • prime-factors: 4
  • raindrops: 2
  • allergies: 4
  • atbash-cipher: 5
  • all-your-base: 4
  • bank-account: 5
  • crypto-square: 5
  • kindergarten-garden: 3
  • robot-simulator: 3
  • isogram: 3
  • bracket-push: 7
  • queen-attack: 3
  • binary-search-tree: 5
  • largest-series-product: 4
  • luhn: 5
  • perfect-numbers: 3
  • clock: 3
  • matrix: 4
  • house: 4
  • zebra-puzzle: 8
  • minesweeper: 7
  • ocr-numbers: 5
  • wordy: 7
  • food-chain: 5
  • linked-list: 5
  • custom-set: 5
  • nth-prime: 6
  • palindrome-products: 6
  • pascals-triangle: 4
  • pig-latin: 6
  • pythagorean-triplet: 4
  • saddle-points: 4
  • say: 8
  • alphametics: 9
  • secret-handshake: 3
  • series: 4
  • sieve: 3
  • simple-cipher: 5
  • change: 7
  • connect: 8
  • rail-fence-cipher: 6
  • dominoes: 7
  • parallel-letter-frequency: 5
  • sgf-parsing: 9
  • acronym: 4
  • zipper: 10
  • forth: 10
  • lens-person: 9
  • bowling: 6

@abo64
Copy link
Contributor

abo64 commented Mar 3, 2017

thx @ErikSchierboom great job!

Now how shall we proceed in regard of the sheer number of exercises?
My suggestion: Everybody compiles his own list of deviating difficulties (perhaps with a short reason why), and then we compare and discuss them?

@ErikSchierboom
Copy link
Member

@abo64 I was having the same thought. To make comparing easier, I've created a Google Sheets document where we can collaborate on by adding the difficulties. You (and @ricemery) should both have received an e-mail with the link.

ricemery added a commit to ricemery/xscala that referenced this issue Apr 20, 2017
ricemery added a commit to ricemery/xscala that referenced this issue Apr 20, 2017
@ricemery
Copy link
Member

Done...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants