Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Anagram exercise placement #126
First of all, I'd like to say "thank-you" for the effort that has gone into creating the Exercism exercises for Rust, so far they've been a great facilitator for me getting used to the language.
I recently started working on the "anagram" exercise (exercise 3) in the Rust Exercism suite and I've found the learning curve to be vastly steeper than I have encountered so far. The first two exercises took me around 45 minutes to an hour, combined, to complete and required reading some simple documentation. However, I've been working on the "anagram" exercise for approximately 3-4 hours now!
I must be clear: I, personally, am not complaining about the difficulty since I appreciate challenges and they motivate me to work harder. However, I think that exercise 3 may introduce too many new and difficult concepts specific to Rust that may cause people to become demotivated and unwilling to invest the time required to complete the exercise. Ultimately, this may result in them giving-up learning the language. Currently, the exercise seems to introduce the following concepts "all-at-once":
Some anecdotal evidence of the learning curve: simply implementing the main function declaration took me around an hour due to the fact that lifetimes have to be declared and one has to declare variables as being borrowed! Following on from that, I've managed to hit a complete wall when it comes to implementing the anagram checking functionality since I'm used to using Strings as indexes where string is the first character in the String.
Essentially, I think the exercise may produce cognitive overload in people and I would like to suggest that the individual concepts be given their own, simpler, exercises. The "anagram" exercise could then be a concatenation of the concepts learned in the previous exercises. I'd propose this since I believe it would help keep users motivated since, if anyone else has had the same experience I've had, comparing the relative amount of time taken to complete exercise 3 compared to the previous 2 may cause some people to "give-up" and that would be a shame!
If anyone has had a similar experience, I'd be interested in hearing your thoughts :)
I don't have experience with Rust, but I did want to say that we've seen this in other language tracks, and have later moved exercises that we found to be simpler into earlier positions in the track.
I would be very interested in seeing individual exercises to address the concepts that you mention if none of the existing ones are focused enough. They probably aren't to be honest, since we just kind of make up random puzzles and problems to solve and hope that they have interesting concepts in them. Sometimes they do, sometimes they don't. Sometimes they do in some languages but not others.
I think we might have several exercises that are simpler than Anagram.
Some possible candidates (you can say
If I understand the UI correctly (and correct me if I'm wrong, @kytrinyx ) about 410 people have done Leap, while 277 have done Anagram. That's about 1/3 of our students not making progress.
Other tracks do have completion rate decline between exercises, which is expected. But having also dealt with the Lifetimes Hurdle, I agree that it can be hard. And I think the numbers show that.
So, I'm agreed that Anagram comes too early. I think there are other, gentler Rust exercises we could put before it. Such as (roughly in order)
I think there's still an issue (and a long standing one at that) of setting up some problems specifically to introduce Lifetimes. I'm kind-of in the middle of writing a Rust workshop, and I'm hoping some lifetimes exercises will result from that. To Be Determined, I guess.
I'm going to close this because I want to tackle problem ordering all at once (or at least take a good run at it) in #127.
Thanks so much for the fantastic write up @mlk5060. Even though it took me 4 (yes, 1, 2, 3, 4) blog posts to describe how I handled this exercise I never thought, "Huh, maybe we could just move that exercise to later". Because I am super dumb.