-
Notifications
You must be signed in to change notification settings - Fork 529
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
Conversation
Output of
|
There are several surprises in this data:
- luhn-from (1) is apparently much simpler and easier than luhn (7).
- luhn-trait also appears before luhn, which feels like a poor ordering.
- in general it looks like the difficulties have been rebalanced,
broadening the curve at the low end of the scale and compressing it at the
high end.
- macros, at least at the level presented in the exercise, are something
any reasonably competent rust programmer should be able to write. I
strongly feel that it should come sooner in the track.
- Pythagorean triplet is in no way as difficult as, say, forth. Likewise,
collatz conjecture can be solved in just a few lines, far more easily than
poker. Neither of these should have difficulty 10.
I could keep nitpicking, but I don't want to impose too much: you are doing
this work, and I am not. I'm aware also that the state at the end of round
1 is likely not the final state.
I do want to suggest that in future rounds we consider compressing the
front end of the track. What you have looks good for someone who is new to
programming entirely, but I believe that it is too slow to ramp up for
someone experienced in programming: you have to get through eight exercises
minimum before encountering the first that I'd consider really interesting,
minesweeper. Because Rust has its reputation for difficulty, I believe that
it is likely to have a larger portion of learners already familiar with
basic programming concepts than more familiar teaching languages such as
Python or JS. We should tune this for our audience, rather than that of
exercism as a whole.
(This assertion about our audience would be pretty easy for the exercism
team to check, if they created an introductory quiz after beginning the
track. It's always better to operate according to real data, when
possible.)
…On Tue, Mar 5, 2019, 19:55 Meade ***@***.***> wrote:
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.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#804 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AHdeTn2WUmJtYX-vniAk2tweJtN7kXDrks5vTr22gaJpZM4bfG2I>
.
|
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 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. |
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. |
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. |
As a side: Maybe this helps to scope out this PR: |
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. |
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. |
Great suggestion! I will add it as an example to the Tool. |
…d order' check from the CI tests.
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 Here is the output of
The most notable changes are:
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! |
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.
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
|
No description provided.