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

Add prerequisites to Practice Exercises #320

Closed
Tracked by #326
ErikSchierboom opened this issue Jan 29, 2021 · 7 comments
Closed
Tracked by #326

Add prerequisites to Practice Exercises #320

ErikSchierboom opened this issue Jan 29, 2021 · 7 comments
Labels
x:action/improve Improve existing functionality/content x:knowledge/intermediate Quite a bit of Exercism knowledge required x:module/practice-exercise Work on Practice Exercises x:priority/high Has a higher priority than other issues x:size/large Large amount of work x:type/content Work on content (e.g. exercises, concepts)

Comments

@ErikSchierboom
Copy link
Member

ErikSchierboom commented Jan 29, 2021

This issue is part of the migration to v3. You can read full details about the various changes here.

Exercism v3 introduces a new type of exercise: Concept Exercises. All existing (V2) exercises will become Practice Exercises.

Concept Exercises and Practice Exercises are linked to each other via Concepts. Concepts are taught by Concept Exercises and practiced in Practice Exercises. Each Exercise (Concept or Practice) has prerequisites, which must be met to unlock an Exercise - once all the prerequisite Concepts have been "taught" by a Concept Exercise, the exercise itself becomes unlocked.

For example, in some languages completing the Concept Exercises that teach the "String Interpolation" and "Optional Parameters" concepts might then unlock the two-fer Practice Exercise.

Each Practice Exercise has two fields containing concepts: a practices field and a prerequisites field.

Practices

The practices key should list the slugs of Concepts that this Practice Exercise actively allows a student to practice.

  • These show up in the UI as "Practice this Concept in: TwoFer, Leap, etc"
  • Try and choose 3 - 8 Exercises that practice each Concept.
  • Try and choose at least two Exercises that allow someone to practice the basics of a Concept.
  • Some Concepts are very common (for example strings). In those cases we recommend choosing a few good exercises that make people think about those Concepts in interesting ways. For example, exercises that require UTF-8, string concatenation, char enumeration, etc, would all be good examples.
  • There should be one or more Concepts to practice per exercise.

Prerequisites

The prerequisites key lists the Concept Exercises that a student must have completed in order to access this Practice Exercise.

  • These show up in the UI as "Learn Strings to unlock TwoFer"
  • It should include all Concepts that a student needs to have covered to be able to complete the exercise in at least one idiomatic way. For example, for the TwoFer exercise in Ruby, prerequisites might include strings, optional-params, implicit-return.
  • For Exercises that can be completed using alternative Concepts (e.g. an Exercise solvable by loops or recursion), the maintainer should choose the one approach that they would like to unlock the Exercise, considering the student's journey through the track. For example, the loops/recursion example, they might think this exercise is a good early practice of loops or that they might like to leave it later to teach recursion. They can also make use of an analyzer to prompt the student to try an alternative approach: "Nice work on solving this via loops. You might also like to try solving this using Recursion."
  • There should be one or more prerequisites Concepts per exercise.

Although ideally all Concepts should be taught by Concept Exercises, we recognise that it will take time for tracks to achieve that. Any Practice Exercises that have prerequisites which are not taught by Concept Exercises, will become unlocked once the final Concept Exercise has been completed.

Goal

Practices

The "practices" field of each element in the "exercises.practice" field in the config.json file should be updated to contain the practice concepts. See the spec.

To help with identifying the practice concepts, the "topics" field can be used (if it has any contents). Once prerequisites have been defined for a Practice Exercise, the "topics" field should be removed.

Each practice concept should have its own entry in the top-level "concepts" array. See the spec.

Prerequisites

The "prerequisites" field of each element in the "exercises.practice" field in the config.json file should be updated to contain the prerequisite concepts. See the spec.

To help with identifying the prerequisites, the "topics" field can be used (if it has any contents). Once prerequisites have been defined for a Practice Exercise, the "topics" field should be removed.

Each prerequisite concept should have its own entry in the top-level "concepts" array. See the spec.

Example

{
  "exercises": {
    "practice": [
      {
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "slug": "leap",
        "name": "Leap",
        "practices": ["if-statements", "numbers", "operator-precedence"],
        "prerequisites": ["if-statements", "numbers"],
        "difficulty": 1
      }
    ]
  }
}

Tracking

exercism/v3-launch#6

@ErikSchierboom ErikSchierboom mentioned this issue Jan 29, 2021
10 tasks
@mpizenberg
Copy link
Member

Are prerequisites going to be hard or soft constraints? I can totally see people working in pairs for example on one account and then wanting to continue practicing on their own but not being able to because they haven't "unlock" the exercise by completing the concept. Meaning they need to redo concepts. Or people wanting to "share" a cool practice exercise but not being able to if the person shared with hasn't completed a given list of concepts first. What are you thought about this?

@ErikSchierboom
Copy link
Member Author

Prerequisites are hard constraints, unless there are no Concept Exercises that teach that concept, in which case the prerequisite is ignored.

I can totally see people working in pairs for example on one account and then wanting to continue practicing on their own but not being able to because they haven't "unlock" the exercise by completing the concept.

I think this would be more of an exceptional use case, but for pairing of students the new teams functionality will be great (which won't be there at launch).

Or people wanting to "share" a cool practice exercise but not being able to if the person shared with hasn't completed a given list of concepts first. What are you thought about this?

I can see how that would be useful, but we sort of already have the same experience in v2 where one would have to complete core exercises in order to unlock some non-core exercises. The reason why we want to have students do the corresponding concept exercises first is to reduce mentoring load. It is much more likely that a student will succesfully complete a practice exercise when that student has explicitly learned about the involved concepts first. This makes it less likely that the students requires mentoring and thus frees up valueable mentoring time.

@mpizenberg
Copy link
Member

The reason why we want to have students do the corresponding concept exercises first is to reduce mentoring load. It is much more likely that a student will succesfully complete a practice exercise when that student has explicitly learned about the involved concepts first. This makes it less likely that the students requires mentoring and thus frees up valueable mentoring time.

Right I understand that. I still personally don't like to put a barrier to some learning material, and believe that you should be able to access any exercise as long as you don't ask for mentoring on it. To get mentoring you have to accept the "contract" and follow the path.

@iHiD
Copy link
Member

iHiD commented Feb 2, 2021

@mpizenberg Appreciate your perspective here. People have a whole range of different opinions on this. However, the way this works (prereqs) is a product-wide feature of Exercism, not something individual tracks have the ability to disable for their track. (It's had hundreds of hours of thought and work put into it by our product team, and it's what we feels serves our users the best)

@ErikSchierboom
Copy link
Member Author

⚠ The spec for Practice Exercises has changed. Besides having a prerequisites field, each Practice Exercise should now also have a practices field, which should list the slugs of Concepts that this Practice Exercise actively allows a student to practice. See the spec for more information.

The issue's text has been updated to reflect the updated spec.

@ErikSchierboom ErikSchierboom changed the title [v3] Add prerequisites to Practice Exercises Add prerequisites to Practice Exercises Aug 17, 2021
@ErikSchierboom ErikSchierboom added x:action/improve Improve existing functionality/content x:knowledge/intermediate Quite a bit of Exercism knowledge required x:module/practice-exercise Work on Practice Exercises x:size/large Large amount of work x:type/content Work on content (e.g. exercises, concepts) labels Aug 18, 2021
@mpizenberg mpizenberg added the x:priority/high Has a higher priority than other issues label Sep 7, 2021
@DerTee
Copy link
Contributor

DerTee commented Jul 5, 2023

@ErikSchierboom Is there anything still missing here? It's marked as a duplicate of a closed task.

@ErikSchierboom
Copy link
Member Author

Nope, this can be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
x:action/improve Improve existing functionality/content x:knowledge/intermediate Quite a bit of Exercism knowledge required x:module/practice-exercise Work on Practice Exercises x:priority/high Has a higher priority than other issues x:size/large Large amount of work x:type/content Work on content (e.g. exercises, concepts)
Projects
None yet
Development

No branches or pull requests

4 participants