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

Reordered exercises for Round 1 of track anatomy. #804

Merged
merged 2 commits into from
Mar 17, 2019

Conversation

TheDarkula
Copy link
Contributor

No description provided.

@TheDarkula TheDarkula self-assigned this Mar 5, 2019
@TheDarkula
Copy link
Contributor Author

Output of ./bin/configlet tree . --with-difficulty:

Rust
====

core
----
├─ hello-world [1]
│  ├─ gigasecond [1]
│  ├─ leap [1]
│  ├─ raindrops [1]
│  ├─ reverse-string [1]
│  ├─ nth-prime [1]
│  ├─ bob [1]
│  ├─ beer-song [1]
│  ├─ proverb [1]
│  ├─ difference-of-squares [1]
│  ├─ sum-of-multiples [1]
│  ├─ grains [1]
│  ├─ prime-factors [1]
│  └─ armstrong-numbers [1]
│
├─ bracket-push [1]
│  └─ luhn-from [1]
│
├─ clock [4]
│  ├─ dot-dsl [4]
│  ├─ simple-linked-list [4]
│  ├─ pascals-triangle [4]
│  ├─ paasio [4]
│  ├─ nucleotide-count [4]
│  ├─ etl [4]
│  ├─ acronym [4]
│  ├─ sieve [4]
│  ├─ rna-transcription [4]
│  ├─ triangle [4]
│  ├─ grade-school [4]
│  ├─ binary-search [4]
│  ├─ robot-simulator [4]
│  ├─ queen-attack [4]
│  ├─ bowling [4]
│  ├─ tournament [4]
│  ├─ alphametics [4]
│  ├─ two-bucket [4]
│  ├─ spiral-matrix [4]
│  └─ palindrome-products [4]
│
├─ saddle-points [4]
│  ├─ isogram [4]
│  ├─ say [4]
│  ├─ run-length-encoding [4]
│  ├─ isbn-verifier [4]
│  ├─ perfect-numbers [4]
│  ├─ hamming [4]
│  ├─ scrabble-score [4]
│  ├─ pangram [4]
│  ├─ all-your-base [4]
│  ├─ allergies [4]
│  ├─ variable-length-quantity [4]
│  └─ pig-latin [4]
│
├─ atbash-cipher [4]
│  ├─ crypto-square [4]
│  ├─ rotational-cipher [4]
│  ├─ simple-cipher [4]
│  └─ rail-fence-cipher [4]
│
├─ anagram [4]
│  ├─ protein-translation [4]
│  ├─ robot-name [4]
│  ├─ ocr-numbers [4]
│  └─ react [4]
│
├─ space-age [7]
│  ├─ luhn-trait [7]
│  └─ wordy [7]
│
├─ sublist [7]
│  └─ custom-set [7]
│
├─ minesweeper [7]
│  ├─ rectangles [7]
│  └─ circular-buffer [7]
│
├─ luhn [7]
│  ├─ largest-series-product [7]
│  ├─ word-count [7]
│  ├─ phone-number [7]
│  ├─ diamond [7]
│  ├─ accumulate [7]
│  └─ roman-numerals [7]
│
├─ pythagorean-triplet [10]
│  ├─ series [10]
│  ├─ collatz-conjecture [10]
│  └─ diffie-hellman [10]
│
├─ parallel-letter-frequency [10]
│
├─ macros [10]
│
├─ poker [10]
│  ├─ grep [10]
│  ├─ scale-generator [10]
│  ├─ decimal [10]
│  ├─ book-store [10]
│  └─ dominoes [10]
│
└─ forth [10]
-> Cannot find any bonus exercises, this track may be missing a nextercism compatible configuration.

@coriolinus
Copy link
Member

coriolinus commented Mar 5, 2019 via email

@petertseng
Copy link
Member

petertseng commented Mar 5, 2019

I don't know what "round 1 of track anatomy" is, or what its goals are. It is possible that people who want to review this PR, whether before or after it is merged, will also not know. Such reviewers will be unable to evaluate or discuss whether this PR has met its stated intent.

The way to acquire the aforementioned knowledge is also unknown to me. To receive reviews that are able to evaluate upon this dimension, you may find it wise to include that knowledge in the commit messages.

I offer this as a general statement, rather than in the "I want to review this and am otherwise unable to" sense, since I am unlikely to personally do that review. While I suppose that therefore makes it possible to say "Since you're not reviewing this PR, you have no place to give advice. Get lost.", it would still mean the git log history will contain no record of the intent.

However one will notice that it is stil possible to say what this PR does, even if it is not possible to evaluate it against its intent:

diff -u <(ruby ../problem-specifications/tree.rb --flat <(git show master:config.json)) <(ruby ../problem-specifications/tree.rb --flat config.json)
--- /dev/fd/11	2019-03-05 23:09:23.000000000 +0000
+++ /dev/fd/12	2019-03-05 23:09:23.000000000 +0000
@@ -3,19 +3,19 @@
 [deprecated] hexadecimal
 [core]
 hello-world
-pythagorean-triplet
-saddle-points
+bracket-push
 clock
-luhn
+saddle-points
 atbash-cipher
-bracket-push
-sublist
-space-age
-macros
-poker
 anagram
+space-age
+sublist
 minesweeper
+luhn
+pythagorean-triplet
 parallel-letter-frequency
+macros
+poker
 forth

 [side]

however notice that this script didn't monitor for any difficulty or topic changes since it was focused on showing the layout.

@petertseng
Copy link
Member

Huh. Rereading my message makes me realize that a reader might read it in an aggressive tone because (among other things) because I started it out with the strong "I don't know", even when I didn't mean to be aggressive.

My intent was instead to describe the current situation and suggest a beneficial change.

@petertseng
Copy link
Member

There are no changes in exercise topics.

diff -u <(ruby ../problem-specifications/topics.rb  <(git show master:config.json)) <(ruby ../problem-specifications/topics.rb config.json)

These are the changes to exercise difficulties.

diff -u <(ruby ../problem-specifications/difficulties.rb  <(git show master:config.json)) <(ruby ../problem-specifications/difficulties.rb config.json)
--- /dev/fd/11	2019-03-06 04:31:30.000000000 +0000
+++ /dev/fd/12	2019-03-06 04:31:30.000000000 +0000
@@ -1,26 +1,26 @@
-accumulate difficulty 4
+accumulate difficulty 7
 acronym difficulty 4
 all-your-base difficulty 4
 allergies difficulty 4
 alphametics difficulty 4
-anagram difficulty 7
+anagram difficulty 4
 armstrong-numbers difficulty 1
 atbash-cipher difficulty 4
 beer-song difficulty 1
 binary-search difficulty 4
 bob difficulty 1
-book-store difficulty 7
+book-store difficulty 10
 bowling difficulty 4
-bracket-push difficulty 4
-circular-buffer difficulty 10
+bracket-push difficulty 1
+circular-buffer difficulty 7
 clock difficulty 4
-collatz-conjecture difficulty 1
+collatz-conjecture difficulty 10
 crypto-square difficulty 4
-custom-set difficulty 4
-decimal difficulty 7
-diamond difficulty 4
+custom-set difficulty 7
+decimal difficulty 10
+diamond difficulty 7
 difference-of-squares difficulty 1
-diffie-hellman difficulty 1
+diffie-hellman difficulty 10
 dominoes difficulty 10
 dot-dsl difficulty 4
 etl difficulty 4
@@ -28,64 +28,64 @@
 gigasecond difficulty 1
 grade-school difficulty 4
 grains difficulty 1
-grep difficulty 7
+grep difficulty 10
 hamming difficulty 4
 hello-world difficulty 1
 hexadecimal difficulty 0
 isbn-verifier difficulty 4
 isogram difficulty 4
-largest-series-product difficulty 4
+largest-series-product difficulty 7
 leap difficulty 1
-luhn difficulty 4
-luhn-from difficulty 4
-luhn-trait difficulty 4
-macros difficulty 4
-minesweeper difficulty 10
+luhn difficulty 7
+luhn-from difficulty 1
+luhn-trait difficulty 7
+macros difficulty 10
+minesweeper difficulty 7
 nth-prime difficulty 1
 nucleotide-codons difficulty 0
 nucleotide-count difficulty 4
-ocr-numbers difficulty 10
+ocr-numbers difficulty 4
 paasio difficulty 4
 palindrome-products difficulty 4
 pangram difficulty 4
 parallel-letter-frequency difficulty 10
 pascals-triangle difficulty 4
 perfect-numbers difficulty 4
-phone-number difficulty 4
+phone-number difficulty 7
 pig-latin difficulty 4
-poker difficulty 7
+poker difficulty 10
 prime-factors difficulty 1
-protein-translation difficulty 7
+protein-translation difficulty 4
 proverb difficulty 1
-pythagorean-triplet difficulty 1
+pythagorean-triplet difficulty 10
 queen-attack difficulty 4
 rail-fence-cipher difficulty 4
 raindrops difficulty 1
-react difficulty 10
-rectangles difficulty 10
+react difficulty 4
+rectangles difficulty 7
 reverse-string difficulty 1
 rna-transcription difficulty 4
-robot-name difficulty 7
+robot-name difficulty 4
 robot-simulator difficulty 4
-roman-numerals difficulty 4
+roman-numerals difficulty 7
 rotational-cipher difficulty 4
 run-length-encoding difficulty 4
 saddle-points difficulty 4
 say difficulty 4
-scale-generator difficulty 7
+scale-generator difficulty 10
 scrabble-score difficulty 4
-series difficulty 1
+series difficulty 10
 sieve difficulty 4
 simple-cipher difficulty 4
 simple-linked-list difficulty 4
-space-age difficulty 4
+space-age difficulty 7
 spiral-matrix difficulty 4
-sublist difficulty 4
+sublist difficulty 7
 sum-of-multiples difficulty 1
 tournament difficulty 4
 triangle difficulty 4
 two-bucket difficulty 4
 two-fer difficulty 1
 variable-length-quantity difficulty 4
-word-count difficulty 4
-wordy difficulty 4
+word-count difficulty 7
+wordy difficulty 7

Now, it's true that https://github.com/exercism/rust/blob/master/_test/verify-exercise-difficulties.sh ensures that exercises appear in config.json in difficulty order. Given this, I acknowledge the necessity of changing the difficulties of the core exercises. Perhaps one might even consider removing the monotonically-increasing difficulty check altogether, if necessary.

I do not see any reason why a difficulty N exercise must be unlocked by a difficulty N exercise though. This means I have a difficulty understanding the change in difficulty of all the side exercises. It seems to me like all side exercises could keep their same difficulty.

Are these side exercise difficulty re-evaluations necessary to complete Round 1 of track anatomy? (I observe that my inability to know what Round 1 of track anatomy entails again will prevent me from being able to answer this question myself)

It seems to me that React should stay 10, and that series shouldn't be 10, for example.

@emcoding
Copy link

emcoding commented Mar 6, 2019

As a side:
Sorry that the info on the The Track Anatomy Project is still sketchy. This blogpost explains a bit: https://exercism.io/blog/track-anatomy-project

Maybe this helps to scope out this PR:
This Round 1 is meant as a quick fix for the most obvious obstructions.
Round 1 explicitly asks to leave the side exercises, difficulties and topics alone, unless it's explicitly needed to pass tests.
All finetuning, including a scrupulous evaluation of each exercise and its relation to other exercises will be systematically addressed in next Rounds. So, nothing is final.

@petertseng
Copy link
Member

I am very grateful for the notes on expected scope!

I highly recommend, therefore, that at a minimum all side exercise difficulties remain untouched in this PR. After all, the more changes in a PR, the harder it is for anyone to review.

If it is necessary to remove the monotonically-increasing difficulty check in https://github.com/exercism/rust/blob/master/_test/verify-exercise-difficulties.sh to accomplish the above points, I do not object to its removal.

@petertseng
Copy link
Member

I have another suggestion relevant to making reviewers' lives easier.

Notice that in an equivalent reordering for a different track, exercism/javascript#590, there is a section labeled "The most notable changes are:" that explains some changes made, and provides rationale for why some new positions are better than the old.

Doing so here would help reviewers because it reveals more about the premises that we should hold and how we should understand "better": Knowing that everyone is on the same page w/ the premise "An ordering is better if it is more P" would allow us to agree with "this ordering is more P than the old one, therefore it is better".

If such premises are not stated, then I believe there's some famous quote that says something like "then not only is [this PR] not capable of being right... it is not even capable of being wrong"

Note that while I would not refuse this PR if such rationale isn't provided, because it's not collaboratively helpful to hinder progress by imposing bureaucratic red tape, I hope I have explained the rationale for why rationale is desirable (meta-rationale) in such a way that it can be seen as providing a concrete benefit, not useless paperwork.

@emcoding
Copy link

emcoding commented Mar 9, 2019

I have another suggestion relevant to making reviewers' lives easier.

Great suggestion! I will add it as an example to the Tool.

@TheDarkula
Copy link
Contributor Author

As @F3PiX previously mentioned, this Pull Request is the result of work being done to structure the exercises in the Rust track according to the Track Anatomy Project.

This is work in progress. This first step (of several rounds) attempts to fix obvious problems with the sequence of the existing core exercises, and tag the Math and DIY (reimplementing standard methods) exercises for removal from the core track.

Side exercises have been completely untouched. With that, I had to comment out the "$exercise_order" != "$sorted_order" check in the verify-exercise-difficulties.sh file.

Here is the output of ./bin/configlet tree . --with-difficulty:

Rust
====

core
----
├─ hello-world [1]
│  ├─ gigasecond [1]
│  ├─ leap [1]
│  ├─ raindrops [1]
│  ├─ reverse-string [1]
│  ├─ nth-prime [1]
│  ├─ bob [1]
│  ├─ beer-song [1]
│  ├─ proverb [1]
│  ├─ difference-of-squares [1]
│  ├─ sum-of-multiples [1]
│  ├─ grains [1]
│  ├─ prime-factors [1]
│  └─ armstrong-numbers [1]
│
├─ bracket-push [1]
│  └─ luhn-from [4]
│
├─ clock [4]
│  ├─ dot-dsl [4]
│  ├─ simple-linked-list [4]
│  ├─ pascals-triangle [4]
│  ├─ paasio [4]
│  ├─ nucleotide-count [4]
│  ├─ etl [4]
│  ├─ acronym [4]
│  ├─ sieve [4]
│  ├─ rna-transcription [4]
│  ├─ triangle [4]
│  ├─ grade-school [4]
│  ├─ binary-search [4]
│  ├─ robot-simulator [7]
│  ├─ queen-attack [4]
│  ├─ bowling [4]
│  ├─ tournament [4]
│  ├─ alphametics [4]
│  ├─ two-bucket [4]
│  ├─ spiral-matrix [4]
│  └─ palindrome-products [4]
│
├─ saddle-points [4]
│  ├─ isogram [4]
│  ├─ say [4]
│  ├─ run-length-encoding [4]
│  ├─ isbn-verifier [4]
│  ├─ perfect-numbers [4]
│  ├─ hamming [4]
│  ├─ scrabble-score [4]
│  ├─ pangram [4]
│  ├─ all-your-base [4]
│  ├─ allergies [4]
│  ├─ variable-length-quantity [4]
│  └─ pig-latin [4]
│
├─ atbash-cipher [4]
│  ├─ crypto-square [4]
│  ├─ rotational-cipher [4]
│  ├─ simple-cipher [4]
│  └─ rail-fence-cipher [4]
│
├─ anagram [4]
│  ├─ protein-translation [7]
│  ├─ robot-name [4]
│  ├─ ocr-numbers [10]
│  └─ react [10]
│
├─ space-age [7]
│  ├─ luhn-trait [4]
│  └─ wordy [4]
│
├─ sublist [7]
│  └─ custom-set [4]
│
├─ minesweeper [7]
│  ├─ rectangles [10]
│  └─ circular-buffer [10]
│
├─ luhn [7]
│  ├─ largest-series-product [4]
│  ├─ word-count [4]
│  ├─ phone-number [4]
│  ├─ diamond [4]
│  ├─ accumulate [4]
│  └─ roman-numerals [4]
│
├─ pythagorean-triplet [7]
│  ├─ series [1]
│  ├─ collatz-conjecture [1]
│  └─ diffie-hellman [1]
│
├─ parallel-letter-frequency [10]
│
├─ macros [10]
│
├─ poker [10]
│  ├─ grep [7]
│  ├─ scale-generator [7]
│  ├─ decimal [7]
│  ├─ book-store [7]
│  └─ dominoes [10]
│
└─ forth [10]
-> Cannot find any bonus exercises, this track may be missing a nextercism compatible configuration.

The most notable changes are:

  • pythagorean-triplet: moved to 11th place for now and will ultimately be removed from core and made a side exercise (because of the policy to exclude math-y exercises from core track)
  • saddle-points: moved to 4th place
  • luhn: moved to 10th place for now and will ultimately be removed from core and made a side exercise (because of the policy to exclude math-y exercises from core track)
  • bracket-push: moved to 2nd place
  • sublist: moved to 8th place
  • space-age: moved to 7th place
  • macros: moved to 13th place
  • poker: moved to 14th place

Upcoming Rounds will focus on evaluations of each exercise. In this Round the focus is on a quick fix of the reordering and removals only.

We're aiming for small and fast PR's that cause (huge) improvements for the majority of the students and mentors.

The current ordering is not final, and there is still lots to improve, but I feel it is definitely an improvement over the current situation. I'm interested in hearing your thoughts!

@petertseng
Copy link
Member

I do not have objections to the current state of this PR, so I'm officially out of your hair. I do, however, have a few things that I think would be good.

  1. When this is to be merged, it should be manually rebased such that these changes are in separate commits:
    • One commit that either removes or comments out the sorted difficulty check (as well as the comment line above it). Since it remains in git history, we do not need to comment it out to keep it, so I have no reason to prefer one or the other. I believe it is cleaner to remove it completely, not comment it out. I leave this as dealer's choice.
    • One or more commits that contain the changes to config.json. The commit message for these commit(s) should contain what has been written in Reordered exercises for Round 1 of track anatomy. #804 (comment) (and any other relevant rationale).
    • The purpose of this is so that the rationale is available in git log, even if GitHub is unavailable, and so that if we ever restore the difficulty check it can be done with a git revert of just that single commit, instead of manual operations.
  2. While it is indeed necessary to move the positions of the core exercises (since their order in config.json is their order in the core track), I think it is no longer necessary to move the positions of the side exercises in config.json. Check whether the diff is as minimal as it could be. For example, diffie-hellman used to be before isogram in config.json, now it comes after. This ordering change doesn't seem necessary since both are side exercises (therefore their order in config.json doesn't matter). The diff may actually be made easier to review if this is done in two commits (you may find it easier to simply start from the state of master rather than changing what's currently here):
  3. If there is any other rationale for the other ordering changes other than the math exercises, it would be good to include. Notice how Curriculum change: track sequence (round 1) javascript#590 has items such as "gigasecond... quite simple to understand and as its goal is to introduce the Date type early on", "space-age... far simpler", "simple-cipher... great exercise, but not this early on in the track.... mentors don't like mentoring this"
  4. Since the difficulty check is removed, it may be feasible to also keep the core exercise difficulties untouched, if we are to believe that the scope of this reordering is meant to leave difficulties untouched completely, including core. A reminder of the current difficulty changes:
diff -u <(ruby ../problem-specifications/difficulties.rb  <(git show master:config.json)) <(ruby ../problem-specifications/difficulties.rb config.json)
--- /proc/self/fd/11	2019-03-11 04:53:38.252722106 +0000
+++ /proc/self/fd/12	2019-03-11 04:53:38.252722106 +0000
@@ -3,7 +3,7 @@
 all-your-base difficulty 4
 allergies difficulty 4
 alphametics difficulty 4
-anagram difficulty 7
+anagram difficulty 4
 armstrong-numbers difficulty 1
 atbash-cipher difficulty 4
 beer-song difficulty 1
@@ -11,7 +11,7 @@
 bob difficulty 1
 book-store difficulty 7
 bowling difficulty 4
-bracket-push difficulty 4
+bracket-push difficulty 1
 circular-buffer difficulty 10
 clock difficulty 4
 collatz-conjecture difficulty 1
@@ -36,11 +36,11 @@
 isogram difficulty 4
 largest-series-product difficulty 4
 leap difficulty 1
-luhn difficulty 4
+luhn difficulty 7
 luhn-from difficulty 4
 luhn-trait difficulty 4
-macros difficulty 4
-minesweeper difficulty 10
+macros difficulty 10
+minesweeper difficulty 7
 nth-prime difficulty 1
 nucleotide-codons difficulty 0
 nucleotide-count difficulty 4
@@ -53,11 +53,11 @@
 perfect-numbers difficulty 4
 phone-number difficulty 4
 pig-latin difficulty 4
-poker difficulty 7
+poker difficulty 10
 prime-factors difficulty 1
 protein-translation difficulty 7
 proverb difficulty 1
-pythagorean-triplet difficulty 1
+pythagorean-triplet difficulty 7
 queen-attack difficulty 4
 rail-fence-cipher difficulty 4
 raindrops difficulty 1
@@ -65,8 +65,8 @@
 rectangles difficulty 10
 reverse-string difficulty 1
 rna-transcription difficulty 4
-robot-name difficulty 7
-robot-simulator difficulty 4
+robot-name difficulty 4
+robot-simulator difficulty 7
 roman-numerals difficulty 4
 rotational-cipher difficulty 4
 run-length-encoding difficulty 4
@@ -78,9 +78,9 @@
 sieve difficulty 4
 simple-cipher difficulty 4
 simple-linked-list difficulty 4
-space-age difficulty 4
+space-age difficulty 7
 spiral-matrix difficulty 4
-sublist difficulty 4
+sublist difficulty 7
 sum-of-multiples difficulty 1
 tournament difficulty 4
 triangle difficulty 4

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

Successfully merging this pull request may close these issues.

4 participants