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

Restructure Haskell core track #798

Closed
2 tasks done
sshine opened this issue Feb 26, 2019 · 6 comments
Closed
2 tasks done

Restructure Haskell core track #798

sshine opened this issue Feb 26, 2019 · 6 comments

Comments

@sshine
Copy link
Contributor

sshine commented Feb 26, 2019

In an effort to restructure the Haskell core track I have followed @F3PiX'es Track Tool in its current incarnation. Step 1 took me through the current core track and yielded the initial proposal listed below.


  • Switch "Bob" and "Pangram".

    They're both about handling textual data.

    Pangram has fewer gotchas, is quicker done, has more alternative solutions, and doesn't lend itself as well to Data.Text. (See pangram 1.4.1.10: Add test case: determine pangram lazily #795.) Bob often involves more refactoring, has more learning objectives and has the extra "You could do it with Data.Text, too!" part.

    This way people don't try to solve Pangram with Data.Text which is possible but not ideal without mono-traversable, and they get an exercise more under their belt before being thrown into a lot of refactoring.

  • Switch "Nucleotide Count" and "Sum of Multiples".

    Eventually I think we should delete "Sum of Multiples" and "Grains" (see Replace Difference Of Squares and Grains on the core track #761).

    But since the Track Tool does not address removal yet, I want to make "Nucleotide Count" come immediately after "RNA Transcription", since they're both thematically related and Nucleotide Count uses Either while RNA Transcription uses Maybe for monadic error handling, so they practice the same thing in progressive difficulty.


The proposed track reordering looks like:

  1. hello-world
  2. leap
  3. space-age
  4. pangram
  5. bob
  6. collatz-conjecture
  7. rna-transcription
  8. nucleotide-count
  9. sum-of-multiples
  10. grains
@sshine
Copy link
Contributor Author

sshine commented Feb 26, 2019

Related:

@petertseng
Copy link
Member

I don't know what this Track Tool is or what steps comprise it, so it doesn't appear possible to evaluate whether the proposals meet any of its stated goals.

However, each proposal has been justified standalone and can be evaluated independently of knowledge of this Track Tool. I encourage that future proposals should continue to be justified in such a manner!

I agree with introducing Maybe before Either. This seems like a logical progression. I suspect (but don't have data to support) that other projects that educate also order them in this order.

I had to think a lot harder about pangram vs bob but I've come to agree. Both ask "is property P true of text T?" but pangram has only one P, where Bob has multiple (and not all mutually exclusive).

@sshine
Copy link
Contributor Author

sshine commented Mar 6, 2019

I don't know what this Track Tool is or what steps comprise it, so it doesn't appear possible to evaluate whether the proposals meet any of its stated goals.

I've added the following description to the first commit message:

As part of The Track Anatomy Project, the Haskell core track is restructured in #798 using @F3PiX'es multi-stage framework referred to as "The Track Tool".

Since The Track Tool is still under development, it isn't documented yet. But the execution of the first step can be viewed for other languages, e.g. exercism/javascript#590.

And I also don't know exactly what this Track Tool is or what all its steps are.

But the first step is to reorder existing exercises and remove any "mathy" ones.

I've not removed any "mathy" ones; there's only leap and collatz-conjecture. They're not difficult by the standard of our current core track, and I don't think their degree of "mathiness" discourages the average Haskell learner. Surely it can get too "mathy", like nth-prime.

I agree with introducing Maybe before Either. This seems like a logical progression. [...]

The right order was already there.

Having them in straight succession is perhaps better.

My main motivation was to group them by learning goal.

I don't know if this is optimal in later steps of The Track Tool; I supposed that I could always propose to add other exercises in between them if there were any good reasons to do so. For example, another more dominant learning goal.

I had to think a lot harder about pangram vs bob but I've come to agree. Both ask "is property P true of text T?" but pangram has only one P, where Bob has multiple (and not all mutually exclusive).

That's a good way to put it.

@emcoding
Copy link

emcoding commented Mar 6, 2019

As a side note:

I don't know if this is optimal in later steps of The Track Tool; I supposed that I could always propose to add other exercises in between them if there were any good reasons to do so. For example, another more dominant learning goal.

That's correct. This first Round is a quick fix for the most obvious obstructions. Next rounds go from coarse to fine, and from easier to more advanced exercises.
More info on the Track Anatomy Project coming soon!

@petertseng
Copy link
Member

I agree with introducing Maybe before Either. This seems like a logical progression. [...]

The right order was already there.

Having them in straight succession is perhaps better.

My main motivation was to group them by learning goal.

Yes, it appears I misunderstood because of misreading the exercises that are being swapped vs the exercises mentioned in the rationale. (Without specific reference to exercises, A and B got swapped, and the rationale mentioning A and C). Therefore it wasn't possible to judge my position on the change, since my rationale targeted an incorrect premise.

So my actual evaluation on that change:

I think I'd be okay either way, so let's indeed go with the general principle of putting exercises with similar goals together.

sshine added a commit that referenced this issue Mar 8, 2019
As part of [The Track Anatomy Project][1], the Haskell core track is
restructured in #798 using @F3PiX'es multi-stage framework referred to
as "The Track Tool".

Since The Track Tool is still under development, it isn't documented
yet. But the execution of the first step can be viewed for other
languages, e.g. exercism/javascript#590.

---

Proposal:

 - Switch "Bob" and "Pangram".

   They're both about handling textual data.

   Pangram has fewer gotchas, is quicker done, has more variations among
   its alternative solutions, and doesn't lend itself as well to `Data.Text`.
   (See #795.) Bob often involves more refactoring, has more learning
   objectives and has the extra "You could do it with Data.Text, too!" part.

   This way people don't try to solve Pangram with Data.Text which is possible
   but not ideal without mono-traversable, and they get an exercise more under
   their belt before being thrown into a lot of refactoring.

 - Switch "Nucleotide Count" and "Sum of Multiples".

   Eventually I think we should delete "Sum of Multiples" and "Grains" (see #761).

   But since The Track Tool does not address removal yet, I want to make
   "Nucleotide Count" come immediately after "RNA Transcription", since
   they're both thematically related and Nucleotide Count uses Either
   while RNA Transcription uses Maybe for monadic error handling, so they
   practice the same thing in progressive difficulty.

The proposed track reordering looks like:

1. hello-world
2. leap
3. space-age
4. **pangram**
5. **bob**
6. collatz-conjecture
7. rna-transcription
8. **nucleotide-count**
9. sum-of-multiples
10. grains

[1]: https://exercism.io/blog/track-anatomy-project
sshine added a commit that referenced this issue Sep 10, 2019
* Update topics for core exercises in config.json

Before continuing to restructure the Haskell core track in #798, this commit
adds more topics to the core exercises in particular. This should both make
the core track overview more indicative, and provide a better overview for
what to look for in replacement exercises.

The following topics were changed:

 - `leap`: Add "guards". One recommended set of solutions split the three
   predicates into each their guard. So while the exercise can be completed
   adequately without the use of guards, one can anticipate trying them out.

 - `space_age`: Replace "discriminated_unions" with "sum_types". This should
   sound less academic. Because "discriminated_unions" is also used in `yacht`,
   replace it there, too.

 - `pangram`: Add "higher_order_functions". There is a number of acceptable
   solution strategies that all have in common that explicit recursion is
   removed. One could also consider adding "predicates", but I've found it
   a little too general and not so indicative of what the exercise is about.

 - `bob`: Add "guards". This is probably the most significant core exercise
   wrt. the use of guards, since it contains so many different conditions.

 - `collatz-conjecture`: Add "guards" and "recursion". I thought about also
   applying "higher_order_functions" here, but since one popular solution
   here uses `iterate`, I thought more in the lines of recursion schemes.

 - `rna-transcription`: Add "traversable". Besides "either", the only point
   to make in this exercise is to use `traverse`. One could also consider
   "higher_order_functions" or "recursion" depending on how specific one
   wants to be.

 - `nucleotide-count`: Add "data_structures" and "higher_order_functions".
   This exercise can go in a lot of directions wrt. mentoring, cf. [1].
   But importantly, it deals with `Data.Map`, monadic error handling (so
   "either") and higher-order functions.

[1]: https://github.com/exercism/website-copy/blob/master/tracks/haskell/exercises/nucleotide-count/mentoring.md

* Fixed alphabetical order of topics
@sshine
Copy link
Contributor Author

sshine commented Nov 9, 2020

Closing this issue as the effort described in it has played out.

@sshine sshine closed this as completed Nov 9, 2020
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

3 participants