Closed kuza55 closed 9 years ago
@kuza55 I'm still at work, so I can't address this at the moment, but I saw that you closed it. Did you find an answer somewhere else?
Ok, done for the day.
Exercism absolutely does aim to create a pathway to mastery in each language--but the tracks are community contributed, and it often takes a bit of time (and feedback!) to figure out how to smooth out the rough edges and improve the exercises.
Usually when launching a new language track the exercises are based off of exercises in other language tracks--thing can be a useful way to get started, but it also means that there's a good chance that some things won't really show off the language features really well, or that something that is easy in one language is harder in another.
In languages like haskell, elixir, go, and ruby, we've tweaked and re-arranged. Rust, PHP, and Java are still very new, and so it's more likely to not quite have found a good balance.
Here's the current progression: https://github.com/exercism/xrust/blob/master/config.json#L7-L29
We're grateful for suggestions on how to rearrange things to improve the experience.
I closed it since I felt like I was just complaining with no real point.
I have some more concrete things:
a) Rust's string handling is pretty crappy; lots of the exercises require lower casing things, and the library support for this is pretty terrible, if you check out the anagram solutions you'll see that it takes at least 4 functions, or two nested loops to lower case a string. You can see the steep drop in completion rates (35 -> 10), though I'm not sure if that's typical
b) The Allergies exercise is particularly non-obvious since you need to realise that you need to add #[derive] declarations to your enum for equality and casting to work. Again there's a drop in completion from 8 -> 10
c) In general, the tests do not give function signatures. Eventually you figure out what the tests are looking for, but this seems completely backwards, in one case making the definition was actually interesting (specifying lifetimes), but mostly it's trying to figure out what types the tests are expecting from their implicit type usage.
d) Nucleotide Codons is particularly badly documented. The mappings should be explicit.
Out of all the exercises I have done (15 so far), the grade-school one has been the most enlightening, not because of any code I wrote, but because of code I was not able to write. I tried to write a test that would result in a data race with my implementation, but Rust wouldn't let me. I'm not really sure how to capture this here though.
Regarding nucleotide-codons, that was a bit of an oversight on my part. I meant to add a link to the relevant wikipedia page but forgot that. Should be fixed soon.
I don't think you should link to the wikipedia page, you should put all the details there, I don't care to have to learn anything about DNA when I'm trying to learn rust. Just put the shortcode mappings right there.
I would say that isolating the technically important bits from a problem statement and background information is part of the skills you need to be a programmer. As exercism aims to teach programming and not just "how to do X in language Y" making you practice this skill is sensible.
Fine, maybe I'm not your target audience, but I would point out that I get enough of that in my day job, I just want to learn about rust specifically.
You're absolutely welcome to contribute exercises, or modifications to exercises, that you feel would do a better job introducing someone to Rust. Exercism is all community sourced after all. One of the best ways to learn something is to (attempt to) teach it. I've gotten a lot of value out of building out the Haskell track and providing code review.
In the first pass of implementing most of these exercises I found it much quicker and easier to do a shallow port from one language to another, rather than reconsidering the design to suit the language. It takes the efforts of people like you to take it to the next level and make specific suggestions or pull requests to improve the track.
The same happened in the Ruby and Go tracks. At first it was completely slap-dash, and then as people got stuck or frustrated or bored we moved things around and made them more rubyish or goish, or just more interesting.
I decided I wanted to learn rust due to it's marketing of being a memory safe systems language with the concept of lifetimes baked in.
I've done the first 8 exercises and I feel like I've been lead into some random sharp corners of rust with no guidance (allergies in particular and the #[derive] bits) and I still haven't really been able to evaluate the interesting parts of the language.
I just started looking into the nucleotide-codons exercise, and there seems to be more work there wrt figuring out what the actual rules are than actually implementing them.
Maybe I haven't fully understood the point of this site, but I don't feel like I'm learning much about rust here beyond the syntax.