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

Anagram exercise placement #126

Closed
mlk5060 opened this issue May 26, 2016 · 5 comments
Closed

Anagram exercise placement #126

mlk5060 opened this issue May 26, 2016 · 5 comments

Comments

@mlk5060
Copy link

mlk5060 commented May 26, 2016

Hi there!

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":

  1. Lifetimes (as far as I'm aware, a Rust idiom and from what I've heard from other people, difficult to understand)
  2. Ownership of variables
  3. String/&str and all other associated String "quirkiness" (number of chars != number of bytes etc.)
  4. Loops
  5. Vectors

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[0] 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 :)

@kytrinyx
Copy link
Member

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 exercism fetch rust $EXERCISE if you want to fetch individual exercises)

  • word-count
  • hamming
  • nucleotide-count
  • raindrops
  • etl
  • scrabble-score

@IanWhitney
Copy link
Contributor

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)

  • Difference of Squares (can introduce fold, depending on implementation)
  • Hamming (Result)
  • Word Count (HashMaps, filter)
  • Nucleotide Count

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.

@IanWhitney
Copy link
Contributor

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.

So, ✋ high five to you for taking the time to write that up here and help a bunch of future Rust students on Exercism.

@kytrinyx
Copy link
Member

about 410 people have done Leap, while 277 have done Anagram.

This doesn't include archived solutions, but the ratio is about right.

@mlk5060
Copy link
Author

mlk5060 commented Jun 7, 2016

If you're interested, I finally got around to finishing the exercise today. I know a lot more about Rust now but that was brutal! My solution

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants