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

Copying the Ruby track structure #1614

Closed
iHiD opened this issue Dec 3, 2018 · 20 comments
Closed

Copying the Ruby track structure #1614

iHiD opened this issue Dec 3, 2018 · 20 comments
Assignees

Comments

@iHiD
Copy link
Member

iHiD commented Dec 3, 2018

Hello @exercism/python

Python is one of two tracks that we're really struggling to mentor. The main reason seems to be that the structure of the track isn't massively easy for beginners to upramp on, so mentors are having to solve a lot of issues on each exercise.

We're currently working on a project to build a system to make structuring tracks easier. We'd like to work on the Python track for that as soon as it's ready. However, in the meantime, I think we should re-order exercises to be the same as in Ruby, which has had a huge amount of effort put into it in terms of thinking about structure.

If anyone massively disagrees then please speak up. Otherwise we'll do this in the next week or so. If anyone would like to volunteer to do the PR for this, then that would be super helpful, otherwise I'm tentatively assigning this to @kytrinyx .

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

A lot of the exercises in the core Ruby track will have a significant amount over overlap in the Python track.

Personally I would eliminate two-fer entirely; I'd rather see the ability to handle a default argument be a bonus challenge on hello-world, and plenty of the other exercises have string formatting and concatenation.

I would ten to put isogram before acronym,

The raindrops exercise has already been deprecated in Python and I wouldn't bring it back. It again has a lot of overlap with exercises above it and we really don't want to front-load just string methods in all the exercises.

I would suggest we keep leap and book-store and binary-search, while I wouldn't consider twelve-days or any of the other "song" ones for inclusion.

@iHiD
Copy link
Member Author

iHiD commented Dec 3, 2018

@yawpitch Superhelpful. Thanks. The point of two-fer in Ruby is to teach the very simple things like indenting (two spaces), conditionals, etc. The default argument is in many ways incidental to the point of the exercise. Is there another exercise that is as simple as two-fer that could achieve the same thing?

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

Also I'll add in a vote for sieve and run-length-encoding both being better core exercises than rest-api, which I would argue really isn't ready for prime time, much less core.

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

@iHiD though I personally dislike bob, I think it covers all those bases for Python; it requires proper indentation and introduces simple control flow with if and elif; I'd say it's certainly more useful than two-fer at weeding out those issues.

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

I'd be happy to see kindergarten-garden and allergies leave core ... they both soak up quite a bit of time and again have a lot of overlap one with the other ... if I were to keep either it would definitely be allergies because it introduces bitwise operators -- quite possibly the least reached for tool in the Python standard lib -- but I don't think that's enough to save it.

@rpalo
Copy link
Contributor

rpalo commented Dec 3, 2018

Personally, I'm OK with Two-Fer -- it's a good confidence builder, but it's weird that it's so far back in the course. Should probably be right after Hello World.

While I like both Kindergarten Garden and Allergies, I agree that they're very similar. I agree that allergies would be a good one to be core, because if it was a side-exercise, I'm pretty sure a big segment of the students who try it would miss the binary entirely. Kindergarten garden's gotchas could be picked up as community comments on a side exercise probably.

I personally really hate mentoring Book Store. However, it's a good exercise, I enjoyed it when I went through it on the track, and I really benefited from having a mentor there. But maybe it would be ok to leave as a side exercise that people could opt into?

I really like Markdown and REST API as core exercises. They're kind of like the track master's theses, or, at least, that's what it feels like as both a student and a mentor on them. They present a little bit of design/architecture thinking as well as the idiomatic Python stuff.

I'd have to comb through the side exercises to see if I think they would be good core ones, but, overall, I think you probably couldn't go wrong with mirroring the Ruby track for most things. It feels well-laid-out and each exercise introduces something important and new.

@cmccandless
Copy link
Contributor

cmccandless commented Dec 3, 2018

Just in case there was any lingering concerns about this from a maintainer's point of view:

When I reordered the exercises in this track for the new Exercism, I based the ordering mostly on the C# track. I think Ruby is a much better fit for a starting model than C#, so I have no problem with a significant reorder.

A few other thoughts:

  • hello-world should remain as simple as possible (no optional parameters)
  • two-fer has always seemed a little redundant to me
  • rest-api still needs a good deal of work, and should probably not be a core exercise (for now)

@iHiD
Copy link
Member Author

iHiD commented Dec 3, 2018

Personally, I'm OK with Two-Fer -- it's a good confidence builder

This is my strong feeling too. I feel like it is a nice gentle step up from Hello World, gives mentors the first opportunity to iron out newbie problems (inconsistent indenting, weird variable names, etc), and in 50% of cases can be approved in 20secs.

@cmccandless
Copy link
Contributor

in 50% of cases can be approved in 20secs.

Do we actually have/track this metric (or is it anecdotal)? If so, that's awesome!

@iHiD
Copy link
Member Author

iHiD commented Dec 3, 2018

It's anecdotical but I've mentored >50 twofers and so I think it's a pretty authoritative anecdote :) @kytrinyx has similar experience in her tracks and @ErikSchierboom in his.

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

I suppose my issue with two-fer is that it's basically hello-world with the added twist of a default argument ... if we actually verified that hello-world passed the test we'd eliminate most of the problems you're describing as well, and such problems are currently being addressed in leap with just one iteration as is.

That said part of my issue with it is that -- where it's currently placed in the order -- if it takes more than 2 seconds to approve, it's too much.

@iHiD
Copy link
Member Author

iHiD commented Dec 3, 2018

Yeah. When we moved it to after hello-world in Ruby, it fixed so much stuff, because it made the first interaction for students and mentors very pleasant and easy. I actively look for two-fers at the end of a hard day, because I know that I can either be positive and encouraging, or immediately helpful to someone who is starting out from a pretty beginner position - both of which feel nice.

Leap is good too for its simplicity - it's just much harder as a learner as there's actually something to solve that's logic-based, not code-based, and it hurts my brain every time to look at as a mentor still :)

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

Right ... personal bias then. I'm now pretty certain I'm among the world's foremost experts on "what is a bloody leap year", but I'll readily admit I'd prefer to not have to walk so many complete beginners through 6-7 iterations on it, with 3-4 just on basic setup issues.

I remove my objection to two-fer ...

@cmccandless
Copy link
Contributor

I remove my objection to two-fer ...

Seconded. I don't currently mentor, so I don't have that personal perspective. Thanks @iHiD.

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

As for markdown and rest-api, I too like the "thesis" projects ... but I personally think either forth or react are both more fully fleshed out, better described, and cover a broader range of topics than rest-api.

I'm all for leaving markdown in though.

@kytrinyx
Copy link
Member

kytrinyx commented Dec 3, 2018

Personally, I'm OK with Two-Fer -- it's a good confidence builder, but it's weird that it's so far back in the course. Should probably be right after Hello World.

Two-Fer is kind of the perfect exercise to have right after Hello World (at least in most tracks). That's what it was intended to be. It has a single conditional, and is a good opportunity to talk about style things without blocking their progress. I've found that it gets a lot of people progressing without taking up too much mentor time, at least in the Go track where it's directly after hello world.

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018

Yeah, in modern Python it's most sensibly implemented like so:

def two_fer(name="you"):
    return f'One for {name}, one for me."

Compare that with a decenthello-world:

def hello_world(name="World"):
    return f'Hello, {name}!"

And you see my reasoning.

@cmccandless
Copy link
Contributor

I do see your reasoning. The only issue I take with it is that hello-world is meant to be as simple as possible: no optional parameters, no string interpolation, etc. Just "Hello, World!"

@yawpitch
Copy link
Contributor

yawpitch commented Dec 3, 2018 via email

@iHiD
Copy link
Member Author

iHiD commented Dec 17, 2018

Just making #1633 visible to contributors to this thread.

cmccandless pushed a commit that referenced this issue Dec 18, 2018
This is to get you all started with the rearrangement of the track, as proposed in #1614
Please note that I don't know Python; this was done based on the changes I made to the Ruby track. 
Hope it helps!
 
1. Copy Ruby's core exercise progression as a first step to help decrease the mentoring workload.
2. For easy reference, I put all the core exercises at the top of the file. 
3. Removed Leap as a core exercises, and choose other cores to unlock the side exercises that used to depend on Leap
4. Raindrops was marked 'deprecated', but is part of the Ruby core; I reinstated it for now.
5. In Ruby Difference of Squares and Grain are still cores, but will be changed to sides. As Python didn't have them as core, I left it like that. 
6. In Ruby, Robot Name is a core, but it is not an exercise in Python. To avoid extra work, I added Word Count instead. 00d5afa
7. Extra cores that are in Python, not in Ruby:
Bob, Allergies, Sum of Multiples, Kindergarten, Grade School, Saddle Points, BinarySearch, List ops, Bookstore, Markdown, Rest-api.
I added commits for each of them, so that you can easily revert them. My changes are based on either considerations I made to the Ruby track, or a rough estimation in regard to the changes in this PR. 
- [ ] Kept as core: Kindergarten Garden; Grade School; Book Store; Markdown.
- [ ] Changed into side: Bob, Allergies, Sum of Multiples, Saddle Points, Binary Search, List Ops; Rest-API.


*Closes #1614*

Maintainers To do :
- [ ]  Squash PR before merging
- [ ]  Ping Jeremy and ask to un-deprecate Python/Raindrops
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

5 participants