-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
[Support][Yacht] Concerning the lambdas and the sequence in which exercises are solved #3205
Comments
This comment was marked as resolved.
This comment was marked as resolved.
Hi @fabiorzfreitas 👋🏽 Thank you for filing this issue and sharing your perspectives on the Python track ordering and our (very much a work in progress!!) syllabus. We really appreciate the feedback. First things first:
my solution to For the other points:
(click to expand)I was surprised too! And it is completely valid to feel like you want specific instruction before trying something advanced. We never intended to push you into a specific strategy with this. Practice exercises are intended to be open-ended and challenge the student to try multiple strategies from where they are in their learning journey - there isn't any one "expected" answer or any "required" techniques. For the most part (with a few exceptions), we encourage students explore as many methods as they'd like in making the tests pass & solving the exercise. This can involve multiple iterations that range from super-basic to really convoluted and esoteric. Once a student is done with those iterations, they're free to publish one or all of them to The thing with our community solutions is that they aren't curated. They are also not checked to make sure that they are using specific techniques, or even solve the most recent version of the exercise. We have attempted to do some flagging in the UI: So when I go to look at community solutions, I typically filter on those that pass the most recent tests. I might even sort on "most recent". But neither of those things guarantees excellent code.
(click to expand)Apologies for that syllabus vs overview dissonance. We used to have it the other way around, where that first row in the overview was grouped the way the syllabus tree groups things. But that created massive confusion as well, so we reverted putting all of the learning exercises in the top row of the exercise chart, followed by all the practice exercises in ascending order of difficulty. The reason we group the learning exercises together is that students are allowed to opt-out of them entirely by turning off learning mode. Having them disabled as a group looks better than the alternative. But I agree that either strategy can be confusing. We're working on it. Thank you for sticking through to the end! I know that was a LOT. 😅 I wanted to leave you with on last thing: Our new community process for bugs and support going forward is to have you to post in our community forum, which is full of enthusiastic and friendly people who are eager to discuss things and help you out. I am absolutely sure you'd find many people to talk Thanks again for sharing your thoughts, and I hope I had some useful answers for you 💙 |
Hi, @BethanyG , First of all, allow me to thank you for this very gentle, yet thorough response. I was a bit afraid I would be "yelled at" or treated harshly, as it often happens in the internet when you're not very knowledgeable on a given subject. This makes me want to engage even more in the community! Onto the answer itself, now I'm feeling really better about Concerning the community solutions and the example in the repo, I believe there's an opportunity for improvement here: that's the first time I've been told there are example solutions. Perhaps every exercise should have a curated example pinned as the first community solution. This example solution shouldn't be a test per se (i. e. the student is not required to provide a solution that resembles the example) , but it could illustrate what the student could have done given only what they already know. For instance, in my first mentoring I found that whenever I needed to iterate both the items of a list and their indexes, I would always use the the cumbersome Finally, I may have a suggestion for the Syllabus vs Overview dissonance as well, although that would probably mean proposing a change beyond a single track's scope: perhaps we should add another dimension to overview and start thinking about it in rows and columns instead of a single sequence. This opens a lot of possibilities, like having empty spots on the grid in order to be able to draw arbitrary lines grouping exercises (e.g horizontal lines dividing by difficulty). Phew, that was a lot. I'm aware my suggestions could be new issues, but I thought I'd rather propose them here first before cluttering the very busy Issues tab! Thanks again for your time and effort to help me, this exchange certainly improved my experience with Exercism! tl;dr: My questions were answered and I'd like to suggest that 1) every exercise has a curated example solution pinned as the first in the community tab and 2) exercises in Overview are grouped in columns and rows instead of a single multi-line row. |
I was about to start my own issue about this but I'll piggy back on this one. The reason why everyone is using lambda's is because of the pre-written code. Also I think is non-sense to have the second argument be called as "yacht.CATEGORY", the category name as a string would give the person doing the exercise more freedom to pick and choose how to use this. I thought I couldn't use normal functions because I didn't realize you could call I feel even the example solution is very convoluted and strange. Assigning the categories to numbers which are then found in a list? This sounds like a dictionary with extra steps. Sorry that I'm a little exhalted, is just that I was helping someone with this exercise and they were very confused with all the lambda solutions. |
Just to add to what I said, I would also like to point out that the user of this yacht.py module, should not need to know that the module has a method/constant defined that should be passed as the second argument. A string with the name of the category should be the expected. Then the module should handle assigning that string to an operation. |
If there's a consensus of agreement on what I wrote above I can create a pull request with a fix. I need other POV's because I feel I definitely have a bias here. |
Hi @AlvesJorge 👋🏽 Thank you for chiming in on this discussion! A few quick points before I get into the details:
So, given the points above, let me dig into it. The TL;DR: This is an old exercise that needs some love, but we're still struggling with how to update it without invalidating 9,114 already existing solutions.
If you look at the notes at the top of the stub from the earlier version of the exercise, the constants were an attempt at prompting students to play with/practice the use of enums. But since As "silly" as assigning an arbitrary value to a constant is, that's what Now that Python versions below I think right now, given the amount of maintenance needed, the easiest and quickest change is to bury the exercise farther down the tree, and buy some time to rework it in the least disruptive manner. An alternative would be to deprecate the current exercise version, and replace it with a similarly named but new version that better enforces either But overall, I will have to ask/think about it. Some mentors have argued strongly to keep the exercise. I think that's ... OK.... but I want to avoid giving beginners a foot-gun. And those Alright. I hope that sets some context. 😄 Thanks for reading to the bottom! |
Thanks for the very detailed answer, I didn't even consider the actual implications of changing the exercise. |
Adding a Note I have un-hooked Meanwhile, I have opened issue #3472 to think through re-working the exercise so that Thank you to everyone who has chimed in here! 💙 |
I got to Yacht after completing all previously available Bool, Numbers and Basic exercises. It felt weird to me that this sequence didn't correspond to the first n exercises in the first row on the track's overview.
I couldn't seem to grasp the solution intended for Yacht. If I were to design on from scratch, I though I wouldn't be using the given variables at all. So I decided to compare to community solutions just to get mine started.
I was a bit shocked to find most of the most starred involved using lambda for each given variable. Due to learnpython.org, lambdas are not an entirely new concept to me, but I don't feel knowledgeable enough to use them in my code without being taught through a Concept or the instructions for an exercise.
This had me thinking I might be solving the exercises in a wrong order and that I ended up skipping learning lambdas and more on the way, although I couldn't find any order except from the one at the Syllabus, which doesn't correspond to the overview.
The other possibility is that I'm expected to fully understand lambdas even with no prior mention to them, in which case I believe lambdas deserve a proper lesson!
The text was updated successfully, but these errors were encountered: