Skip to content

Exercise classification #63

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

Closed
pminten opened this issue Mar 29, 2015 · 12 comments
Closed

Exercise classification #63

pminten opened this issue Mar 29, 2015 · 12 comments

Comments

@pminten
Copy link
Contributor

pminten commented Mar 29, 2015

(Not quite sure if this should go here or on exercism/exercism.io, but since it's track/exercise related this seems to be the best fit.)

This is a bit of a brainstorm. I've been thinking about how to improve the quality of the tracks and it seems that the first step would be to get some kind of shared classification to apply to exercises, a shorthand to quickly get an idea of where an exercise fits.

The main categorization I've been able to come up with is focus/practice/challenge.

  • Focus exercises are simple and intended to make the user familiar with specific features of a language. For example leap teaches people about if-statements or boolean logic (depending on how they implement it), Hamming is all about looping over a collection/string. The key point of a good focus exercise is that it steers the user in a particular direction and has little to distract from that.
  • Practice exercises take multiple concepts and let the user experiment with different approaches. Practice exercises are complex enough to enable multiple approaches but simple enough that the user doesn't have to think hard to find at least one possible approach. Bob is a good practice exercise, it involves conditionals and string operations and some fairly simple logic, but there are quite some different ways to implement it (regexes, splitting into different functions, etc).
  • Challenge exercises go beyond practice exercises in that challenge exercises require the user to come up with a non-trivial algorithm or require the user to think of lots of edge cases. These are usually longer exercises, though I would rate prime-factors as challenge as well (since it's a bit tricky to do efficiently).

On top of this there seems to be a kind of "natural" flow, roughly in three phases.

  • Phase 1 uses numbers, conditionals and loops. No classes, higher order functions or anything like that. Functions are used as the way to structure code. Few standard library functions/classes are used.
  • Phase 2 introduces "natural" collections, the basic collections supported by the language, such as lists, maps/dicts and possibly sets. It also introduces some higher organizational concepts like classes or higher order functions, depending on what fits with the language. Core standard library functions/classes are used.
  • Phase 3 brings the full power of the language with features like threads/goroutines, generators, continuations, etc. Less well-known standard library functions/classes can be used.

These phases are very vague unfortunately and they differ a bit for each track since what's basic in one track (anonymous functions in Haskell) may be more advanced in another track (anonymous functions in Go).

Does this make sense as a classification system? Is this a useful way to think about exercises?

@kytrinyx
Copy link
Member

I think this does make sense as a classification system. I have no idea whether or not it will apply to all (or even most) of the languages, but I think it would be useful and interesting to make an attempt at using the classification.

If we could classify things roughly we might be able to provide people with a somewhat more randomized/interesting progression.

This might also have a (small) effect on the bottlenecks that we're seeing in some language tracks where people are all submitting the first few exercises and it's hard to get feedback because of the overwhelming numbers.

@pminten
Copy link
Contributor Author

pminten commented Mar 31, 2015

Regarding the overwhelming numbers, here's a crazy idea. What if we would try to prod people into doing 5 reviews a day. Why 5? Because that's a number that's low enough to not be overwhelming and since people usually won't do this with any luck you'll end up with 2 reviews per submitted exercise, which is enough to get all exercises reviewed.

The way I imagine this is that in the top bar of the page there's a visually distinctive number. Click on it and you get five exercises that you can review. When you've interacted with the exercise the number goes down, at zero it becomes a checkmark. Every day the number is reset to five. The number never goes higher than 5 so you'll never face an overload (which is offputting).

The 5 review exercises are put in other places as well, when you complete an exercise the system will suggest 5 (or whatever your "left daily reviews number" is) exercises with links.

The idea is to always have this small bit of work easily accessible.

@kytrinyx
Copy link
Member

Yes, this is doable and I bet it will work. It has the same element of pseudo-gamification that streaks and inbox zero have without putting you in competition with others.

@wobh
Copy link

wobh commented Aug 27, 2015

Coming in from exercism/racket#22 (comment)

I have been thinking about what it would be like if we had an exercise tagging system. I've mostly considered variations of intricate, multi-layered, exercise networks which would emerge from and be used for personal tags, shared tags, language track tags, combinatorial tags, permutative tags, progressive difficulty tags, tagged tags, but also ordered tags for defining "sequences" and "trees" or alternate routes through the exercises. You might think of them as curriculums, but basically, tags.

Anyway, I doubt we really need anything like that, I just like complicated things. I do think a simple tagging system that could be used by the CLI to help a user choose what exercises they might be interested in next would add a dimension to the exercism experience that would be appreciated by some, if language maintainers wished to setup the connections.

@ghost
Copy link

ghost commented Jul 17, 2016

Coming from exercism/exercism#2976, tags would have worked for me. I wanted to do exercises involving recursion. I've since found out from support chat that there are some exercises involving recursion (even if they're not just about recursion), so if they were tagged with it I could have searched for it.

It would also then be helpful to know which of those exercises is simpler (e.g. Focus) than others, but this is something I might be able to work out easily by myself.

@kytrinyx
Copy link
Member

Ideally the exercises are progressively more difficult as you go through the track, so the order listed in exercism list $TRACK_ID should be a reasonable guess. It's not always perfect, though.

@jtigger
Copy link
Contributor

jtigger commented Nov 1, 2016

This idea feeds into the discussion around improving discoverability/search: exercism/discussions#83.

@kytrinyx
Copy link
Member

kytrinyx commented Jun 4, 2017

We are doing a complete redesign from the core principles and questions up. Today we published the first set of documents that explore questions around enhancing and supporting people's motivation to learn and practice on Exercism: https://github.com/exercism/docs/blob/master/about/conception/README.md

In particular, this issue is relevant to the section on "expectancies of success" and the related document which explores a new take on how to structure exercises, which will require a lot of work to classify exercises.

I'm going to close this issue as there has not been any new movement in it for quite some time, but we've tagged it so that we can find it when we start exploring the classification part of the redesign.

Thanks, everyone, for helping think this through.

@kytrinyx kytrinyx closed this as completed Jun 4, 2017
@kytrinyx
Copy link
Member

kytrinyx commented Jun 4, 2017

Oh, also: We have an issue open requesting thoughts and feedback on these design documents: exercism/discussions#154

@ghost
Copy link

ghost commented Jun 5, 2017

As long as I can get all the recursion exercises, I'm happy. I came to Elm from JavaScript, so I had to learn recursion to work with lists (Elm doesn't have loops).

@kytrinyx
Copy link
Member

kytrinyx commented Jun 5, 2017

@willnwhite That should be possible :-)

@kotp
Copy link
Member

kotp commented Jun 5, 2017

Yes, both that you can do it and that they are solveable! It will be a good day when these are classified and goals such as "focus on X style solutions" can be traversed easier.

emcoding pushed a commit that referenced this issue Nov 19, 2018
Never used delegate library removed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants