Skip to content

Curriculum change: track sequence (round 1)#252

Merged
SleeplessByte merged 3 commits intoexercism:masterfrom
SleeplessByte:chore/round-1-curriculum
Apr 16, 2019
Merged

Curriculum change: track sequence (round 1)#252
SleeplessByte merged 3 commits intoexercism:masterfrom
SleeplessByte:chore/round-1-curriculum

Conversation

@SleeplessByte
Copy link
Member

@SleeplessByte SleeplessByte commented Apr 12, 2019

This PR is the result of work being done to structure the exercises in a track according to a predefined methodology (this work is not finished). This first step (of many rounds) attempts to remove Math and DIY exercises from the core track, and fix obvious problems with the sequence of the existing core exercises. The result is as follows:

Core (matches config.json) of this track:

- hello-world (1)
- leap (1)
- rna-transcription (2)
- space-age (2)
- pangram (3)
- bob (3)
- matrix (4)
- robot-name (4)
- grade-school (4)
- clock (4)
- secret-handshake (4)
- binary-search (5)
- linked-list (5)
- rational-numbers (5)
- atbash-cipher (6)
- simple-cipher (7)
- wordy (7)
- list-ops (8)

TypeScript
==========

core
----
├─ hello-world [1]
│  ├─ two-fer [1]
│  ├─ word-count [1]
│  ├─ difference-of-squares [3]
│  └─ gigasecond [3]
│
├─ leap [1]
│  ├─ reverse-string [2]
│  ├─ triangle [3]
│  └─ collatz-conjecture [4]
│
├─ rna-transcription [2]
│  ├─ etl [2]
│  ├─ protein-translation [2]
│  ├─ raindrops [2]
│  ├─ hamming [3]
│  ├─ nucleotide-count [4]
│  ├─ scrabble-score [5]
│  └─ allergies [6]
│
├─ space-age [2]
│  ├─ perfect-numbers [3]
│  ├─ complex-numbers [4]
│  ├─ luhn [4]
│  ├─ grains [5]
│  ├─ pythagorean-triplet [5]
│  └─ sum-of-multiples [5]
│
├─ pangram [3]
│  ├─ acronym [2]
│  ├─ anagram [2]
│  ├─ isogram [3]
│  ├─ roman-numerals [3]
│  ├─ series [3]
│  ├─ phone-number [5]
│  ├─ two-bucket [6]
│  ├─ variable-length-quantity [6]
│  └─ largest-series-product [7]
│
├─ bob [3]
│  ├─ food-chain [4]
│  ├─ house [4]
│  ├─ isbn-verifier [4]
│  ├─ pig-latin [4]
│  ├─ proverb [4]
│  ├─ twelve-days [4]
│  ├─ beer-song [5]
│  └─ say [6]
│
├─ matrix [4]
│  ├─ rectangles [4]
│  ├─ saddle-points [4]
│  ├─ spiral-matrix [4]
│  ├─ transpose [4]
│  └─ ocr-numbers [5]
│
├─ robot-name [4]
│  └─ nth-prime [5]
│
├─ grade-school [4]
│  ├─ alphametics [7]
│  ├─ connect [7]
│  └─ bowling [8]
│
├─ clock [4]
│  ├─ prime-factors [4]
│  └─ diamond [5]
│
├─ secret-handshake [4]
│  └─ pascals-triangle [5]
│
├─ binary-search [5]
│  └─ binary-search-tree [6]
│
├─ linked-list [5]
│  ├─ sublist [5]
│  ├─ custom-set [6]
│  └─ circular-buffer [8]
│
├─ rational-numbers [5]
│  └─ sieve [5]
│
├─ atbash-cipher [6]
│  └─ palindrome-products [7]
│
├─ simple-cipher [7]
│  ├─ diffie-hellman [3]
│  └─ crypto-square [9]
│
├─ wordy [7]
│  ├─ robot-simulator [5]
│  └─ kindergarten-garden [7]
│
└─ list-ops [8]

bonus
-----
armstrong-numbers [2]
run-length-encoding [2]
rotational-cipher [4]
strain [4]
accumulate [5]
all-your-base [5]
bracket-push [5]
flatten-array [5]
minesweeper [7]
queen-attack [8]

You can generate a similar output running bin/configlet tree . --with-difficulty (and make your own changes to config.json to see the effect).

The most notable changes are:

  • simple-cipher: has moved down considerably (3 -> 18). This is a change inspired by exercism/exercism#4577, mentoring and exercism/javascript#564. It's a great exercise, but not this early on in the track. The implementation differences and lack of knowledge of the standard library also makes it so that mentors don't like mentoring this. Both in JS and TS, the time to wait is between 1 week and 2 months (!). Moving this down should resolve this! The difficulty has been increased from 1 -> 7
  • atbash-cipher: has moved to before simple-cipher (20 -> 17). It's easier than simple-cipher to do right. In a later PR this will probably be dropped to side, or simple-cipher will be. The two exercises don't add to teaching TypeScript if they're both present.
  • clock: has (sorta) traded places with linked-list. It's far easier than list-ops. list-ops is actually not easy to do right (which should be a cons implementation).
  • prime-factors: no longer a core exercise. This is due to a recently added policy to exclude "mathy" exercises as core exercise.
  • pascals-triangle: no longer a core exercise. This is due to a recently added policy to exclude "mathy" exercises as core exercise.

My notes on the current core exercises are as follows and as you might be able to tell is that I'm trying to introduce a minimum number of subjects with each exercise. Bad or meh here refers to the test suite, the implementation or the exercise as a whole (in terms of teaching fluency of the language).

Exercise ✎ Notes Position after discussion in PR
hello-world   TBD
leap bad exercise, introduction to modulo / remainder TBD
rna-transcription introduction to objects, enumeration TBD
space-age date math, introduction to floating point math TBD
pangram introduction to charAt/charCodeAt, enumeration TBD
bob introduction to regex TBD
matrix   TBD
robot-name introduction to rand TBD
grade-school immutability, sort TBD
clock interesting immutable vs mutable solutions, with roll over using remainder TBD
secret-handshake interesting solutions with bit masks / modulo TBD
binary-search teaches nothing TypeScript specific. Gimmick test to see if it's sorted but otherwise a Wikipedia Pseudocode implementation TBD
linked-list almost a libcore, but not quite. easier than list-ops TBD
rational-numbers gcd is mathy, but the rest is straightforward from readme.md TBD
atbash-cipher with simple-cipher, I don't understand why this is also a core exercise ー only one of the two should be imo TBD
simple-cipher listed as easy, is actually hard to do righ t TBD
wordy interesting implementations (tokenizer) TBD
list-ops immutability, interesting implementations, classic exercise TBD

Here are the diffs for the track tree output. I separated structural changes (first one) from the consistency changes (second one).

Track changes diff
@@ -13,10 +13,6 @@    
   │  ├─ reverse-string [2]  
   │  ├─ triangle [3]  
   │  └─ collatz-conjecture [4]  
-
-  ├─ simple-cipher [1]  
-  │  ├─ diffie-hellman [3]  
-  │  └─ crypto-square [9]  
   │  
   ├─ rna-transcription [2]  
   │  ├─ protein-translation [2]  
@@ -27,15 +23,13 @@    
   │  ├─ hamming [3]  
   │  └─ scrabble-score [5]  
   │  
-  ├─ bob [2]  
+  ├─ space-age [2]  
-  │  ├─ twelve-days [4]  
+  │  ├─ perfect-numbers [3]  
-  │  ├─ pig-latin [4]  
-  │  ├─ isbn-verifier [4]  
-  │  ├─ proverb [4]  
-  │  ├─ house [4]  
+  │  ├─ luhn [4]  
+  │  ├─ complex-numbers [4]  
+  │  ├─ sum-of-multiples [5]  
-  │  ├─ beer-song [5]  
+  │  ├─ grains [5]  
-  │  ├─ say [6]  
-  │  └─ food-chain [4]  
+  │  └─ pythagorean-triplet [5]  
   │  
   ├─ pangram [3]  
   │  ├─ isogram [3]  
@@ -47,19 +41,16 @@    
   │  ├─ largest-series-product [7]  
   │  ├─ two-bucket [6]  
   │  └─ variable-length-quantity [6]  
-
-  ├─ space-age [3]  
-  │  ├─ perfect-numbers [3]  
-  │  ├─ luhn [4]  
-  │  ├─ complex-numbers [4]  
-  │  ├─ sum-of-multiples [5]  
-  │  ├─ grains [5]  
-  │  └─ pythagorean-triplet [5]  +  ├─ bob [3]  
-  ├─ prime-factors [4]  
+  │  ├─ twelve-days [4]  
-  │  ├─ nth-prime [5]  
+  │  ├─ pig-latin [4]  
+  │  ├─ isbn-verifier [4]  
+  │  ├─ proverb [4]  
-  │  ├─ sieve [5]  
+  │  ├─ house [4]  
+  │  ├─ beer-song [5]  
+  │  ├─ say [6]  
-  │  └─ palindrome-products [7]  
+  │  └─ food-chain [4]  
   │  
   ├─ matrix [4]  
   │  ├─ saddle-points [4]  
@@ -67,38 +58,45 @@    
   │  ├─ rectangles [4]  
   │  ├─ spiral-matrix [4]  
   │  └─ ocr-numbers [5]  
-
+
-  ├─ linked-list [5]  
+  ├─ robot-name [4]  
-  │  ├─ sublist [5]  
-  │  ├─ custom-set [6]  
-  │  └─ circular-buffer [8]  
-
+
+  ├─ grade-school [4]  
+  │  ├─ connect [7]  
+  │  ├─ bowling [8]  
+  │  └─ alphametics [7]  
+
+  ├─ clock [4]  
+  │  ├─ prime-factors [4]  
+  │  │  ├─ nth-prime [5]  
+  │  │  ├─ sieve [5]  
+  │  │  └─ palindrome-products [7]  
+
-  ├─ secret-handshake [6]  
+  ├─ secret-handshake [4]  
+  │  ├─ pascals-triangle [5]  
+  │  │  └─ diamond [5]  
+
+  ├─ binary-search [5]  
+  │  └─ binary-search-tree [6]  -  ├─ robot-name [6]  -  ├─ grade-school [6]  
   │  ├─ connect [7]  
   │  ├─ bowling [8]  
   │  └─ alphametics [7]  
   │  
-  ├─ wordy [7]  
-  │  ├─ kindergarten-garden [7]  
-  │  └─ robot-simulator [5]  
+  ├─ rational-numbers [5]  -  ├─ list-ops [8]  
+  ├─ atbash-cipher [6]  -  ├─ clock [3]  
+  ├─ simple-cipher [7]  
+  │  ├─ diffie-hellman [3]  
+  │  └─ crypto-square [9]  -  ├─ pascals-triangle [5]  
-  │  └─ diamond [5]  
   │  
   ├─ rational-numbers [5]  
   │  
-  ├─ binary-search [5]  
-  │  └─ binary-search-tree [6]  -  └─ atbash-cipher [7]  
+  └─ list-ops [8]  
   
   bonus  
   -----  
@@ -112,5 +110,4 @@    
   minesweeper [7]  
   queen-attack [8]  
   rotational-cipher [4]
Track changes + consistent order
@@ -5,112 +5,109 @@
   ----
   ├─ hello-world [1]
   │  ├─ two-fer [1]
-  │  ├─ gigasecond [3]
+  │  ├─ word-count [1]
   │  ├─ difference-of-squares [3]
-  │  └─ word-count [1]
+  │  └─ gigasecond [3]
   |
   ├─ leap [1]
   │  ├─ reverse-string [2]
   │  ├─ triangle [3]
   │  └─ collatz-conjecture [4]
-  |
-  ├─ simple-cipher [1]
-  │  ├─ diffie-hellman [3]
-  │  └─ crypto-square [9]
   |
   ├─ rna-transcription [2]
+  │  ├─ etl [2]
   │  ├─ protein-translation [2]
-  │  ├─ nucleotide-count [4]
-  │  ├─ allergies [6]
   │  ├─ raindrops [2]
-  │  ├─ etl [2]
   │  ├─ hamming [3]
+  │  ├─ nucleotide-count [4]
-  │  └─ scrabble-score [5]
+  │  ├─ scrabble-score [5]
+  │  └─ allergies [6]
   |
-  ├─ bob [2]
+  ├─ space-age [2]
+  │  ├─ perfect-numbers [3]
-  │  ├─ twelve-days [4]
+  │  ├─ complex-numbers [4]
-  │  ├─ pig-latin [4]
-  │  ├─ isbn-verifier [4]
-  │  ├─ proverb [4]
-  │  ├─ house [4]
+  │  ├─ luhn [4]
-  │  ├─ beer-song [5]
+  │  ├─ grains [5]
-  │  ├─ say [6]
+  │  ├─ pythagorean-triplet [5]
-  │  └─ food-chain [4]
+  │  └─ sum-of-multiples [5]
   |
   ├─ pangram [3]
+  │  ├─ acronym [2]
+  │  ├─ anagram [2]
   │  ├─ isogram [3]
   │  ├─ roman-numerals [3]
   │  ├─ series [3]
-  │  ├─ acronym [2]
-  │  ├─ anagram [2]
   │  ├─ phone-number [5]
-  │  ├─ largest-series-product [7]
   │  ├─ two-bucket [6]
-  │  └─ variable-length-quantity [6]
+  │  ├─ variable-length-quantity [6]
-  |
-  ├─ space-age [3]
-  │  ├─ perfect-numbers [3]
-  │  ├─ luhn [4]
-  │  ├─ complex-numbers [4]
-  │  ├─ sum-of-multiples [5]
-  │  ├─ grains [5]
-  │  └─ pythagorean-triplet [5]
+  │  └─ largest-series-product [7]
   |
-  ├─ prime-factors [4]
+  ├─ bob [3]
-  │  ├─ nth-prime [5]
+  │  ├─ food-chain [4]
-  │  ├─ sieve [5]
+  │  ├─ house [4]
+  │  ├─ isbn-verifier [4]
+  │  ├─ pig-latin [4]
+  │  ├─ proverb [4]
-  │  └─ palindrome-products [7]
+  │  ├─ twelve-days [4]
+  │  ├─ beer-song [5]
+  │  └─ say [6]
   |
   ├─ matrix [4]
-  │  ├─ saddle-points [4]
-  │  ├─ transpose [4]
+  │  ├─ rectangles [4]
   │  ├─ rectangles [4]
+  │  ├─ spiral-matrix [4]
   │  ├─ spiral-matrix [4]
   │  └─ ocr-numbers [5]
-  |
+  |
-  ├─ linked-list [5]
+  ├─ robot-name [4]
-  │  ├─ sublist [5]
+  │  └─ nth-prime [5]
-  │  ├─ custom-set [6]
-  │  └─ circular-buffer [8]
-  |
+  |
+  ├─ grade-school [4]
+  │  ├─ alphametics [7]
+  │  ├─ connect [7]
+  │  └─ bowling [8]
+  |
+  ├─ clock [4]
+  │  ├─ prime-factors [4]
+  │  └─ diamond [5]
+  |
-  ├─ secret-handshake [6]
+  ├─ secret-handshake [4]
+  │  └─ pascals-triangle [5]
+  |
+  ├─ binary-search [5]
+  │  └─ binary-search-tree [6]
   |
-  ├─ robot-name [6]
   |
-  ├─ grade-school [6]
   │  ├─ connect [7]
-  │  ├─ bowling [8]
-  │  └─ alphametics [7]
   |
-  ├─ wordy [7]
-  │  ├─ kindergarten-garden [7]
-  │  └─ robot-simulator [5]
   |
-  ├─ list-ops [8]
   |
+  ├─ rational-numbers [5]
-  ├─ clock [3]
+  │  └─ sieve [5]
   |
-  ├─ pascals-triangle [5]
+  ├─ atbash-cipher [6]
-  │  └─ diamond [5]
+  │  └─ palindrome-products [7]
   |
+  ├─ simple-cipher [7]
+  │  ├─ diffie-hellman [3]
+  │  └─ crypto-square [9]
   ├─ rational-numbers [5]
   |
-  ├─ binary-search [5]
+  │  ├─ robot-simulator [5]
-  │  └─ binary-search-tree [6]
+  │  └─ kindergarten-garden [7]
   |
-  └─ atbash-cipher [7]
+  └─ list-ops [8]
   
   bonus  
   -----  
   armstrong-numbers [2]
   run-length-encoding [2]
+  rotational-cipher [4]
   strain [4]
-  bracket-push [5]
+  accumulate [5]
-  flatten-array [5]
+  all-your-base [5]
   accumulate [5]
   all-your-base [5]
   minesweeper [7]
   queen-attack [8]
-  rotational-cipher [4]

Not all of these have mentoring notes -- that will be next up.

The current ordering is still not perfect 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!

s part of the ongoing curriculum update, this re-orders the core exercises according to perceived difficulty. Most notably, this moves simple-cipher down, move atbash in-front of cipher and shuffle the mid-levels around -- re-orders the list loosly according to this:

hello-world,leap,rna-transcription,space-age,pangram,bob,matrix,robot-name,grade-school,clock,secret-handshake,binary-search,linked-list,rational-numbers,atbash-cipher,simple-cipher,wordy,list-ops

```
core
----
├─ hello-world [1]
│  ├─ two-fer [1]
│  ├─ gigasecond [3]
│  ├─ difference-of-squares [3]
│  └─ word-count [1]
│
├─ leap [1]
│  ├─ reverse-string [2]
│  ├─ triangle [3]
│  └─ collatz-conjecture [4]
│
├─ rna-transcription [2]
│  ├─ protein-translation [2]
│  ├─ nucleotide-count [4]
│  ├─ allergies [6]
│  ├─ raindrops [2]
│  ├─ etl [2]
│  ├─ hamming [3]
│  └─ scrabble-score [5]
│
├─ space-age [2]
│  ├─ perfect-numbers [3]
│  ├─ luhn [4]
│  ├─ complex-numbers [4]
│  ├─ sum-of-multiples [5]
│  ├─ grains [5]
│  └─ pythagorean-triplet [5]
│
├─ pangram [3]
│  ├─ isogram [3]
│  ├─ roman-numerals [3]
│  ├─ series [3]
│  ├─ acronym [2]
│  ├─ anagram [2]
│  ├─ phone-number [5]
│  ├─ largest-series-product [7]
│  ├─ two-bucket [6]
│  └─ variable-length-quantity [6]
│
├─ bob [3]
│  ├─ twelve-days [4]
│  ├─ pig-latin [4]
│  ├─ isbn-verifier [4]
│  ├─ proverb [4]
│  ├─ house [4]
│  ├─ beer-song [5]
│  ├─ say [6]
│  └─ food-chain [4]
│
├─ matrix [4]
│  ├─ saddle-points [4]
│  ├─ transpose [4]
│  ├─ rectangles [4]
│  ├─ spiral-matrix [4]
│  └─ ocr-numbers [5]
│
├─ robot-name [4]
│
├─ grade-school [4]
│  ├─ connect [7]
│  ├─ bowling [8]
│  └─ alphametics [7]
│
├─ clock [4]
│  ├─ prime-factors [4]
│  │  ├─ nth-prime [5]
│  │  ├─ sieve [5]
│  │  └─ palindrome-products [7]
│
├─ secret-handshake [4]
│  ├─ pascals-triangle [5]
│  │  └─ diamond [5]
│
├─ binary-search [5]
│  └─ binary-search-tree [6]
│
├─ linked-list [5]
│  ├─ sublist [5]
│  ├─ custom-set [6]
│  └─ circular-buffer [8]
│
├─ rational-numbers [5]
│
├─ atbash-cipher [6]
│
├─ simple-cipher [7]
│  ├─ diffie-hellman [3]
│  └─ crypto-square [9]
│
├─ wordy [7]
│  ├─ kindergarten-garden [7]
│  └─ robot-simulator [5]
│
└─ list-ops [8]

bonus
-----
armstrong-numbers [2]
run-length-encoding [2]
strain [4]
bracket-push [5]
flatten-array [5]
accumulate [5]
all-your-base [5]
minesweeper [7]
queen-attack [8]
rotational-cipher [4]
```
This orders the track config.json as follows:

- core exercises, in current orders
- side exercises, in order of their unlocked_by core exercise
- bonus exercises
- deprecated exercises

If there are multiple in a group (side or bonus), they are sorted by difficulty and then by name lexographically. This way we can keep the config.json order consistent.
@SleeplessByte SleeplessByte added enhancement 🦄 Changing current behaviour, enhancing what's already there track-anatomy config.json, new exercises labels Apr 12, 2019
@SleeplessByte SleeplessByte self-assigned this Apr 12, 2019
@SleeplessByte SleeplessByte changed the title Chore/round 1 curriculum Curriculum change: track sequence (round 1) Apr 12, 2019
These side exercises were unlocked by removed core exercises. This re-assigns them to core exercises still present.
@pacman-bot
Copy link

1 Warning
⚠️ Big PR

Generated by 🚫 Danger

@masters3d
Copy link
Contributor

lgtm

@SleeplessByte
Copy link
Member Author

@masters3d awesome. I've also asked mentors to take a look. Let's wait the weekend and have it merged if nothing weird comes up. Subsequent re-orderings, additions, removals will come later as part of round 2 and beyond!

@SleeplessByte SleeplessByte merged commit 508ba8a into exercism:master Apr 16, 2019
@SleeplessByte SleeplessByte deleted the chore/round-1-curriculum branch April 16, 2019 10:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement 🦄 Changing current behaviour, enhancing what's already there track-anatomy config.json, new exercises

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants