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

Improve ordering of content #340

Open
milesfrain opened this issue May 16, 2021 · 2 comments
Open

Improve ordering of content #340

milesfrain opened this issue May 16, 2021 · 2 comments

Comments

@milesfrain
Copy link
Member

Some of the book's content is presented in a non-ideal sequence which frustrates beginners in the following ways:

  • We present exercises that cannot be solved idiomatically using only the material covered so far - and even worse, is that some of our reference solutions use techniques that are only covered in later chapters.
  • We refer to stuff that has not been explained yet. Chapter 4 is a pretty bad offender (references Maybe before ADTs, Unit with no explanation, do notation and pure without discussing bind and related typeclasses).

One simple improvement is to cover pattern matching (ch5) before recursion (ch4) (highlighted in #303). We should also cover ADTs (and Maybe) before do notation (proposed in #212).

But I think the book would really benefit from a more systematic restructuring where we do something like the following:

  • Create a list of all topics we want the book to cover.
  • Identify which topics depend on other topics.
  • Create new (or classify existing) exercises for each topic and note what other prerequisites are required for writing idomatic solutions.
  • Assemble these topics in the book where we're respecting all prerequisites.

We could also push more of these topic explanations to other language reference locations (e.g. docs repo and library docs), then link to those from the book. That way, the book will serve more as a guide on learning sequence with accompanying exercises to avoid duplicating content.

I think there would also be value of distinguishing a minimum set of "core" concepts that all users must know (e.g. functions, ADTs, typeclasses, etc. - noted in https://discourse.purescript.org/t/guide-to-learn-purescript/2308/4) from the supplemental topics (e.g. generative testing, canvas graphics). This could be noted in the book's introduction.

@klarkc
Copy link

klarkc commented Sep 1, 2021

I just found this case right here. I was reviewing the solutions that were made to compare to my solutions, and did not expected a pattern matching solution that only appears on the next chapter. Worth mentioning that my solution did not use pattern matching, of course. (duplicated #303)

@Zelenya
Copy link

Zelenya commented Jul 10, 2023

I did a pass through the issues collecting all the suggestions and through code gathering the topics.

TLDR. I don’t think we need to redo or move a lot of stuff around. I propose a few swaps (for example, swap chapters 4 and 5) and then extend content based on the existing (or future) issues and confusions.

Additionally, I’d like to break (some) chapters into subchapters to make it easier to navigate and digest. (see Rust book

Note that I’ve been focusing on content – not exercises; I think these could be added ad-hoc afterwards.

Context

Current topics

  • Chapter 3. Functions and Records
    • Types
    • Quantified Types
    • Indentation
    • Records
    • Type Constructors
    • Kinds
    • Functions
    • Curried Functions
    • Infix Function Application
    • Function Composition
  • Chapter 4. Recursion, Maps, And Fold
    • (uses maybes, while they are introduced in chapter 5)
    • Recursion
    • Map and filter
    • Array Comprehensions
    • Do Notation
    • Folds
    • Tail Recursion
  • Chapter 5. Pattern Matching
    • Pattern Matching
    • Array Patterns
    • Row Polymorphism
    • Record Puns
    • Algebraic Data Types
    • Newtypes
  • Chapter 6. Type Classes
    • Show, Eq, Ord, Field
    • Semigroups, Monoids, Foldable
    • Functor
    • Deriving Instances
    • Type Class Constraints
    • Multi Parameter Type Classes
    • Functional Dependencies
    • Superclasses
  • Chapter 7. Applicative
    • Applicative
    • Traversable
  • Chapter 8. Effect
    • Monad
    • Side-Effects and Purity
    • Exceptions
    • Mutable State
    • DOM Effects
  • Chapter 9. Asynchronous Effects
    • Aff
    • Parallel Computations
  • Chapter 10. The Foreign Function Interface
    • Asynchronous Functions
    • JSON
    • Calling PureScript from JavaScript
  • Chapter 11. Monads
    • State
    • Reader
    • Writer
    • Monad Transformers
    • mtl
    • Alternatives
  • Chapter 12. Canvas Graphics
  • Chapter 13. Testing
  • Chapter 14. Domain-Specific Languages

Current/open issues

This was referenced Oct 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants