You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Create inventory of concepts lacking exercises #1906
Exercism v3 Practice Exercises (of which most are implementations of exercises in this repo) have a practices field.
This field list the concepts that can be practiced in that exercise.
What several maintainers found was that for concepts, there are very few exercises that can be used to practice that concept.
One example concept that comes to mind is dates, for which we have (out of the top of my head) just two exercises: meetup and gigasecond.
Contrast that with the number of string exercises (anagram, isogram, pangram, bob, the song-related exercises, and so on).
The idea of this issue is to somehow compile a list of those concepts we feel could benefit from having more exercises.
We can do this several ways:
Create a list with all exercises and their concepts.
Create a list with the concepts with few (or no) exercises
The first option is a lot more work, but would have the benefit that it could be used as a reference for track maintainers when choosing an exercise to implement.
The second option is easier to do.
Elixir has most of the exercises implemented (minus a few foregone and some exercises without canonical data) and they are all tagged with prerequisites, concepts and practices, so looking at config.json might be a good start for creating a full list.
I don't know all the practice exercises but the first thing that comes to mind is concurrency. Learning about the currency features of a language is often requested by students, so in Go and JavaScript we are in the process of adding the respective concepts. I know of parallel-letter-frequency and bank-account but since languages can have multiple aspects/features related to concurrency (e.g. for doing something in parallel, waiting for all the things to finish, thread safe data structures, communication between threads) that doesn't seem like a lot to practice all of those.
Besides that, here some other candidates from looking at the Go/JS concept lists (we don't have prerequisites/practices yet):
date/time/duration (as Erik mentioned)
dealing with non-ascii characters (chars, codepoints, ...); there were discussions about extending some exercises in that direction, not sure what the status is there
inheritance / OOP beyond 1 class with a couple of methods / "abstraction" more generally speaking; my feeling here is that exercises rarely describe a situation that warrants multiple entities that have some relation etc., C# has a only 1 practice exercise listed there
JSON might be relevant for enough languages, not sure
Advanced error/exception handling, anything beyond just returning some error, e.g. checking for error types
very long integers (bigint)
Please correct me if I mentioned something that has enough exercises already. As I said, I don't have all the exercises in my head.
As for the lists, I think both versions would be very helpful. @ErikSchierboom Is it really that much more work to create list 1? There are only a couple of tracks that have prerquistes/practices filled out and for those the config.json could be parsed to create a map of exercise slug to concepts (the result does not need to show which track has which concept).
One could also scrape ALL the config.json files and gather all the (unique) concepts/prerequistes/practices attached to each exercise, and clean that up.
One could also scrape ALL the config.json files and gather all the (unique) concepts/prerequistes/practices attached to each exercise, and clean that up.
I'm unsure if this is about collection concepts that lack exercises already or not. Feel free to mark my comment as off-topic if it isn't.
Linear algebra related concepts are desperately lacking exercises, e.g. exercises that deal with matrices/multi-dimensional arrays or vectors. There are obviously exercises that require arrays of some sort but they rarely make use of their properties beyond using them as a collection of values. Some, like transpose, are really just string exercises in disguise.
dealing with non-ascii characters (chars, codepoints, ...); there were discussions about extending some exercises in that direction, not sure what the status is there
I think just about any string exercise could benefit from scenarios that include non-ascii characters. Assuming that any string is ascii is a bad but very common practice. Something like pangram would be an obvious exception because it relies on a specific definition of an alphabet.
@SaschaMann I also thought about these math topics, not only matrices but also things like being able to use a trigonometric function, understanding in what format the argument needs to be supplied etc. I wasn't really sure about this but my gut feeling is the only thing from "math" packages we make use of is abs and pow most of the time.
For example, there is probably some nice exercise that could be built around rotation matrices which would combine trigonometric functions and matrix multiplication (e.g. similar to day 19 in this years advent of code, just easier).
Of course we should ensure good resources for the respective topic are linked at it is clear that the exercise involves some math etc. like we discussed on Slack recently.
Re the string exercises, I am not sure all that could be extended should be extended to non-ascii characters. I think there is also value in keeping some very simple so they can unlock early in the track, e.g. before the details of the character encoding of the respective language etc were covered. Of course maintainers can remove some tests again but that's extra work so I would aim for a good mix here.
I also thought about these math topics, not only matrices but also things like being able to use a trigonometric function, understanding in what format the argument needs to be supplied etc. I wasn't really sure about this but my gut feeling is the only thing from "math" packages we make use of is abs and pow most of the time.
Do you think those would qualify as a concept? To me they largely seem like any other function while vectors and matrices often have special syntax or behaviour. (I'm not opposed to adding more exercises with those obviously, just curious)
Re the string exercises, I am not sure all that could be extended should be extended to non-ascii characters. I think there is also value in keeping some very simple so they can unlock early in the track, e.g. before the details of the character encoding of the respective language etc were covered. Of course maintainers can remove some tests again but that's extra work so I would aim for a good mix here.
For me it's similar to return vs print. If you let students assume things are ascii early on, they get used to it and will develop a bad habit to always do so. It depends on the (age of the) language but I think in general having those cases in prob-specs is worthwhile. Maintainers won't have to remove them as every test case is optional so the default is that they don't implement it anyway.
Maintainers won't have to remove them as every test case is optional so the default is that they don't implement it anyway.
That is not necessarily true, as test generators might by default implement all test cases :) I'm not opposed to having additional, non-ascii test cases as long as we have a separate scenario with which tracks can easily exclude them if they don't want to deal with non-ascii test cases.
@SaschaMann I would phrase it this way: I think both topics we talked about count as "it would be good to have practice exercises for them". The specific concept those exercises would practice depends on the language.
a matrix related exercise might belong to the concept matrices in a language that has those as a built-in/std-lib type and to the concept arrays in a language that does not
math functions beyond abs and pow can be the concept "math" package, another language might have different packages for different function categories, the reason I think it makes sense to practice those is that some languages have quirks in there that are good to know about (JS returns wrong results for some functions/arguments) and languages might or might not support some concept of units when providing the arguments (e.g. deg vs rad)
@ErikSchierboom JavaScript did not assign any "practices" keys yet so it should not be included in the list. Not sure whether this also applies to some other track as well.
@ErikSchierboom We set prerequisites for like 20% of the exercises in JavaScript. I thought this might result in a wrong picture above to include tracks like that. E.g. it looks like we would need more exercises for "template-strings" or "type-conversion" from the table above but there are plenty of those, they have just not been labelled yet.
You can set up the table however you see fit, I just wanted to be sure you are aware that the track is not that far along with the prerequisites/practices assignment issue.
@ErikSchierboom It seems currently the numbers do not reflect distinct exercises, is that intentional? If 3 tracks have some exercise implemented and labelled with the same concept, the table would show "practiced 3" even though we only have 1 exercise for the concept. I noticed this because I wanted to check the 2 exercises for "big-integers" that are mentioned and saw it is the same one.
🤔 It was intentional, but it might not be a great idea. The idea was to get an indication how wide-spread a concept was used. I'll work on a distinct count tomorrow.
Wow, that's quite the comment :) I totally agree that the above list is only marginally helpful, but that was what I was going for: to just have some idea of what is being practiced. Looking at that list and using my own experience from the tracks I maintain, I'd like to see more exercises about:
Activity
jiegillet commentedon Jan 6, 2022
Elixir has most of the exercises implemented (minus a few foregone and some exercises without canonical data) and they are all tagged with prerequisites, concepts and practices, so looking at
config.jsonmight be a good start for creating a full list.junedev commentedon Jan 7, 2022
I don't know all the practice exercises but the first thing that comes to mind is concurrency. Learning about the currency features of a language is often requested by students, so in Go and JavaScript we are in the process of adding the respective concepts. I know of
parallel-letter-frequencyandbank-accountbut since languages can have multiple aspects/features related to concurrency (e.g. for doing something in parallel, waiting for all the things to finish, thread safe data structures, communication between threads) that doesn't seem like a lot to practice all of those.Besides that, here some other candidates from looking at the Go/JS concept lists (we don't have prerequisites/practices yet):
Please correct me if I mentioned something that has enough exercises already. As I said, I don't have all the exercises in my head.
As for the lists, I think both versions would be very helpful. @ErikSchierboom Is it really that much more work to create list 1? There are only a couple of tracks that have prerquistes/practices filled out and for those the config.json could be parsed to create a map of exercise slug to concepts (the result does not need to show which track has which concept).
jiegillet commentedon Jan 7, 2022
One could also scrape ALL the
config.jsonfiles and gather all the (unique) concepts/prerequistes/practices attached to each exercise, and clean that up.ErikSchierboom commentedon Jan 7, 2022
This is a great idea!
junedev commentedon Jan 7, 2022
@jiegillet Yes, exactly.
SaschaMann commentedon Jan 9, 2022
I'm unsure if this is about collection concepts that lack exercises already or not. Feel free to mark my comment as off-topic if it isn't.
Linear algebra related concepts are desperately lacking exercises, e.g. exercises that deal with matrices/multi-dimensional arrays or vectors. There are obviously exercises that require arrays of some sort but they rarely make use of their properties beyond using them as a collection of values. Some, like
transpose, are really just string exercises in disguise.I think just about any string exercise could benefit from scenarios that include non-ascii characters. Assuming that any string is ascii is a bad but very common practice. Something like pangram would be an obvious exception because it relies on a specific definition of an alphabet.
ErikSchierboom commentedon Jan 9, 2022
I can imagine how this would be really useful, especially for tracks which language is often used in machine learning.
junedev commentedon Jan 9, 2022
@SaschaMann I also thought about these math topics, not only matrices but also things like being able to use a trigonometric function, understanding in what format the argument needs to be supplied etc. I wasn't really sure about this but my gut feeling is the only thing from "math" packages we make use of is
absandpowmost of the time.For example, there is probably some nice exercise that could be built around rotation matrices which would combine trigonometric functions and matrix multiplication (e.g. similar to day 19 in this years advent of code, just easier).
Of course we should ensure good resources for the respective topic are linked at it is clear that the exercise involves some math etc. like we discussed on Slack recently.
Re the string exercises, I am not sure all that could be extended should be extended to non-ascii characters. I think there is also value in keeping some very simple so they can unlock early in the track, e.g. before the details of the character encoding of the respective language etc were covered. Of course maintainers can remove some tests again but that's extra work so I would aim for a good mix here.
SaschaMann commentedon Jan 9, 2022
Do you think those would qualify as a concept? To me they largely seem like any other function while vectors and matrices often have special syntax or behaviour. (I'm not opposed to adding more exercises with those obviously, just curious)
For me it's similar to return vs print. If you let students assume things are ascii early on, they get used to it and will develop a bad habit to always do so. It depends on the (age of the) language but I think in general having those cases in prob-specs is worthwhile. Maintainers won't have to remove them as every test case is optional so the default is that they don't implement it anyway.
ErikSchierboom commentedon Jan 10, 2022
That is not necessarily true, as test generators might by default implement all test cases :) I'm not opposed to having additional, non-ascii test cases as long as we have a separate scenario with which tracks can easily exclude them if they don't want to deal with non-ascii test cases.
SaschaMann commentedon Jan 10, 2022
That's their choice to not follow the spec and cause issues for themselves then. There's a scenario for it anyway.
junedev commentedon Jan 10, 2022
@SaschaMann I would phrase it this way: I think both topics we talked about count as "it would be good to have practice exercises for them". The specific concept those exercises would practice depends on the language.
matricesin a language that has those as a built-in/std-lib type and to the conceptarraysin a language that does not"math" package, another language might have different packages for different function categories, the reason I think it makes sense to practice those is that some languages have quirks in there that are good to know about (JS returns wrong results for some functions/arguments) and languages might or might not support some concept of units when providing the arguments (e.g. deg vs rad)ErikSchierboom commentedon Jan 12, 2022
I've gone and checked all practice exercises across all tracks to count the number of times they are practiced and used as a prerequisites:
junedev commentedon Jan 12, 2022
@ErikSchierboom JavaScript did not assign any "practices" keys yet so it should not be included in the list. Not sure whether this also applies to some other track as well.
ErikSchierboom commentedon Jan 13, 2022
@junedev I also included the prerequisites key, which some tracks have included but don't yet have any practices.
junedev commentedon Jan 13, 2022
@ErikSchierboom We set prerequisites for like 20% of the exercises in JavaScript. I thought this might result in a wrong picture above to include tracks like that. E.g. it looks like we would need more exercises for "template-strings" or "type-conversion" from the table above but there are plenty of those, they have just not been labelled yet.
You can set up the table however you see fit, I just wanted to be sure you are aware that the track is not that far along with the prerequisites/practices assignment issue.
ErikSchierboom commentedon Jan 13, 2022
@junedev Right. I could exclude JavaScript if you think that makes sense?
junedev commentedon Jan 13, 2022
Yes, I think that would give a better picture here.
ErikSchierboom commentedon Jan 13, 2022
I've updated the list
junedev commentedon Jan 13, 2022
@ErikSchierboom It seems currently the numbers do not reflect distinct exercises, is that intentional? If 3 tracks have some exercise implemented and labelled with the same concept, the table would show "practiced 3" even though we only have 1 exercise for the concept. I noticed this because I wanted to check the 2 exercises for "big-integers" that are mentioned and saw it is the same one.
ErikSchierboom commentedon Jan 13, 2022
🤔 It was intentional, but it might not be a great idea. The idea was to get an indication how wide-spread a concept was used. I'll work on a distinct count tomorrow.
ErikSchierboom commentedon Jan 14, 2022
Wow, that's quite the comment :) I totally agree that the above list is only marginally helpful, but that was what I was going for: to just have some idea of what is being practiced. Looking at that list and using my own experience from the tracks I maintain, I'd like to see more exercises about:
BethanyG commentedon Jan 14, 2022
Yup. The comment was too much. I've removed it. 😄
ErikSchierboom commentedon Jan 14, 2022
FYI this is the list of new exercise idea issues