Closed Insti closed 6 years ago
@Insti Thanks for opening.
So this is probably the biggest and maybe most controversial change we've made to Exercism and, as you can imagine, it's been one of the biggest areas of thought and discussion for us. It's really important for me to emphasise at the beginning of this post that this hasn't been a decision we've taken lightly. We've put literally hundreds of hours into surveying people, reading research into learning behaviours and reward mechanisms, and debating and discussing this topic. My opinions and thoughts on this have evolved dramatically over the last 8 months, and if you'd told me at the beginning that I would be defending the position of "you can't do exercises until a mentor says so" I probably wouldn't have believed you.
Our implementation decision around this point might be wrong, and there are various other different approaches we could have taken, and I am always open to discussing new ideas and thoughts. However, I strongly feel like this discussion must be framed in the understand of what we are trying to achieve with Exercism, not what it has been like previously, and not what you and I as individuals want. It is important to remember that we are experienced, top-notch programmers, who are faster and more knowledgable than the vast majority of others who are using Exercism to learn, and it is critical that we design Exercism for those who need it the most, not just for ourselves. I'd ask everyone to keep that in their minds as we discuss this.
This post is an overview of the journey we have gone on over the last 8 months, and why we've ended up where we are.
The only thing I'd ask (for anyone that gets involved in this thread) is that you understand that these positions are thought out and that this is a deeply complex issue where gut feelings are problematic and open mindedness and reason are essential. This is the meatiest question around product design that I've faced in 10yrs of doing this.
When reconceiving Exercism, our starting point was our values, mission statement and principles. There are two key points in here that everything in this discussion derive from:
Exercism is about learning through [practice and code review], not about learning through [practice or code review]. In exercism previously, code review was a second-class citizen. You could work through lots of exercises, and ignore the mentor side of things all together. We felt strongly that that was wrong and that mentorship and discussion was what made Exercism a learning site, not a "code-golf" site - that this discussion is the most valuable way Exercism help someone learn. In our document on Emotional Stages and in referencing this Viking school post we emphasised that Exercism's place in the learning journey is around supporting people through mentorship. There are dozens of courses that take you through exercises, but that Exercism stands in a unique position of helping people through providing code-review, mentorship and support.
A critical part of learning is reward. Everything we do is reward-driven. Our brains learn through Dopamine. When designing any product, it is therefore crucial that one decides where rewards occurs in order to motivate people the most. In Exercism we could choose to either reward on submission of code, or at the end of a positive mentor discussion. We decided that "completing an exercise" is not about making the tests pass and uploading it - completion is about learning something new through discussion and review with your mentors. Once you've achieved this (i.e. mentor signoff) you are then rewarded, and the method of reward is to unlock more exercises. We talked about this unlocking mechansim a lot in the progression document.
Now, our one big concern from day one has been that this blocks people from spending a couple of hours on exercism attacking different problems. That was a huge problem for me at the beginning and I was very against this whole idea because of it. The way we decided to mitigate that problem (and what changed my mind) was to make sure that tracks were designed in a way that means there should always be side exercises available. So take the C# track for example (as @ErikSchierboom is a maintainer). When you start that you have one core exercise and 9 side exercises available from the start. So you have 10 exercises worth of work to do. Then completing the next core will unlock another wad of side-exercises. So at any given time there should be loads of different exercises available to work through. Getting this track design right is therefore absolutely critical, and will take time to perfect.
One piece of feedback that has been really valuable in this is the that it's not clear that there are multiple exercises available, as people tend to only see the next one in the core-track that's locked and not scroll down to the side exercises. We'll definitely consider how we can make this more clear on the "track progress page" and when we work that out, I suspect it might nullify some of the issues around this.
So that's my quick overview of how and why we've got here. I still worry about the whole blocking people thing - I have done for months - but I feel that for the 99% of people who use Exercism it won't be a problem as they're never going to get through 5-10 exercises before a mentor approves the first. I really want to try this with real users (as opposed to expert maintainers) and see what happens. If it turns out that those "real users" are hitting the same wall, then we will have to think about how we can tweak or change things to avoid this, but so much thought and effort has gone into this (and the discord it has struck was not unexpected) that unless someone can raise a new argument or POV that we've not debated previously, I feel like we should test this path out before rolling back our thinking.
To sum up in one sentence: We want to ensure that people using Exercism are actually making progress in their learning, not just ticking the boxes of making the tests pass. This is the way we feel is best to achieve that goal.
It's a little hard to organize my thoughts here - so bear with me. Apologies for the very long reply!
I too had an initial "Hard No" to the mentor lock. But the above from @iHiD has me thinking in detail about this.
Yes - I fully agree that (for me) one of the core values of Exercism is the discussion around code - it sets the site apart, accelerates learning, and empowers learners to turn around and share with others what they've learned. It's the reason I point new learners to the site, as opposed to sending them to HackerRank.
That being said, I think there needs to be some concentrated discussion around 'leveling' in various languages, and which exercises are 'milestones'. I think it's problematic to lock the very first exercise (hello world). ....this is hard for me to articulate here.... It feels unwelcoming? for me as a learner to signup, download and figure out the CLI, get through the first exercise..and then have to wait for a stamp of approval before I am a 'full' community member. But maybe I am putting way to fine a point on it.
I do think locking the first exercise encourages people to do one of two things:
They wander away because they want to do something right now, and they don't see available 'optional' exercises (so...maybe a message? a highlight? a move to the 'optional' section of the page?). Or maybe there is a role for the bot to play here - where it steps in to re-enforce or explain how all this is going to work initially - then a mentor gives feedback for the second exercise?
They see the optional exercises (and I am going to use the Python track here as an example - it looks like right now all the optional exercises are all unlocked, instead of being tied to milestones) - and excitedly plow through them while waiting for mentor review.
Let's say the mentor review takes long enough (I'd like to think it wouldn't - but we don't know really) that they've completed several of the optional exercises...and then the next exercise milestone unlocked is actually easier, or is 'earlier' in an 'ideal' sequence. For example (and I am just pulling something at random here), they complete the Rotational Cipher (looping) - only to have Leap (if-else) unlocked but Pangram (looping) stays locked as a milestone that's two 'steps' ahead.
Conversely, they pick something like Robot Simulator and run straight into the weeds because they don't know anything about Classes - and so could use a mentors help - but the mentor would probably be focused on the milestone in this case - not the optional exercise. Or worse - the learner gets feedback on the optional exercise, and abandons the 'milestone' path in favor of doing the optional exercises only and then wanders away.
So it feels to me that in order to make it work - especially at the start of a language track - there needs to be solid grouping of exercises so that someone going through the sequence has things to work on (optional exercises) while waiting for mentor feedback - but that any set of optional exercises ties in, and re-enforces the concepts laid out either in the next milestone or the last milestone - and that the tie-in be explicit (either via messaging or tagging), so the learner doesn't lose interest or momentum.
@BethanyG Really appreciate your considered thoughts. I want to give some time before replying properly, but I just want to focus on one thing.
I think it's problematic to lock the very first exercise (hello world). ....this is hard for me to articulate here.... It feels unwelcoming?
"Hello World" should be unlocked on all tracks, and it should not need mentor-approval to complete. It should automatically be approved as soon as a solution submitted. If you're not seeing that behaviour, then that is a bug, not by design.
For clarity, the expected starting process should be: 1) Join track 2) Download and complete Hello World on the CLI. This is auto-approved. 3) Go into the exercise and "Complete" it. 4) Be presented with a modal that shows the next core exercise and various side-exercises have been unlocked.
If you're not seeing that, please tell me on which track, and I'll dig into why that's the case!
Thank you again for your comments. I will reply properly tomorrow.
@BethanyG Thank you so much for sharing your thinking here—this is really valuable.
I think there needs to be some concentrated discussion around 'leveling' in various languages, and which exercises are 'milestones'.
I think this is the key thing. I don't want us to prevent people from practicing. So I think one of the key things to get right, is always having at least a handful of exercises that you can do right now, without having to wait around for feedback/sign-off.
As @iHiD mentioned above, we don't lock down hello world, because it's really just a way to make sure that you've got everything set up right. One question that I keep coming back to (and this is a tangent to the discussion about being blocked, but relevant because it's about being stuck) is what if someone gets stuck on hello world, not because it's hard (it's not) but because they weren't able to install the testing library or some such thing. I would love to find a way to pull in a mentor in this situation.
On a broader level, though, once you have submitted Hello World you should immediately have more things you can do. I think this is where there's an important interplay between the user interface (you see that you have stuff to do), and curriculum (the track is actually set up so that you always have plenty of stuff you can do).
I think we have some design work to do in order to make it clear that you have optional exercises that you can do immediately.
I'm going to dig into the 4 years worth of historical data to see some of the patterns around people diving into a language and solving several exercises in a row in one sitting.
Just for reference, here's a gif that shows what happens for me with Hello World on C#. You'll notice there are 9 side exercises unlocked to start with, and that "Hello World" is auto-approved and enables you to unlock a few more, as well as the next core exercise. If people are having different experiences on different tracks, then this is down to track configs, which we can all hopefully get right over the next couple of weeks :)
@iHiD @kytrinyx - entirely missed the flow, having not done the CLI loop initially (yeah - I deserve a talking-to for being a lazy-butt). I'd only taken a look at all the 'hello-world' exercises that were pending approval in the mentor interface. I really apologize for that! Thank you both for your patience with me. :-)
But having now done that flow for Python and JS ... I still think that maybe there needs to be more up-front prompting to a new user anyway when they hit hello-world for the first time. Instead of a [Begin Walk-Throug] button for that Hello-World, maybe an automatic modal with the CLI instructions? ....and maybe next to the already-existing [continue] button, there could be a [ask mentor for help] button? Really just thinking out loud here...
Additionally - the modal for Python on completion of the hello-world exercise didn't show any optional exercises (maybe display those in a section under the core track message?)
I also submitted a solution for 'leap' in python - and found it very easy to miss that I could do optional exercises while I waited for feedback (and which optional exercises were available to me). Especially since I'd just done an upload from my command line...and so hadn't interacted with the window. Call it a variant on the original issue. I know I should be curious as a user...but once I get messaged & taken out of the exercise track back to the main listing, it doesn't really feel intuitive to then scroll down to look at optional exercises - and nothing above the fold strongly indicates to me that there are additional things I can do. So it feels like I'm ... done.... and in wait mode.
Don't know if it's possible to take a user directly to the optional exercises (with available ones highlighted) when they click the '
Another thought is to have the 'Extra Exercises Completed' section in the YOUR PROGRESS IN column on the language track page have available exercise squares outlined, non-available exercise squares in grey, and ... some other color or checkmark for completed extra exercises? Again, thinking out loud....
OK - I've harassed you both enough. :-) Thank you both for all of your thoughtful work. This is really an incredible project, and I'm really grateful it exists!
The explanation given by @iHiD has convinced me that we should give this new setup a chance to see if it works. However, I do think the track page could perhaps do a bit more to help the user know that he/she also has extra exercises to complete (I missed it at first). I like this suggestion by @BethanyG :
Another thought is to have the 'Extra Exercises Completed' section in the YOUR PROGRESS IN column on the language track page have available exercise squares outlined, non-available exercise squares in grey, and ... some other color or checkmark for completed extra exercises? Again, thinking out loud....
I think perhaps it would also help if the "Extra exercises completed" section would also mention the number and percentage completed, just like for the core exercises.
Just want to add my two cents: I like the unstructured old version because it placed trust in users to work at their own pace and progress however they saw fit for themselves.
I feel very strongly that this 'mentor approved' roadblock should not apply to everyone. And instead of dividing the 'needs MA' and 'doesn't need MA' users by skill level (very bad idea IMO), I propose letting users choose how they proceed: would they like this MA barrier because they'll find it helpful and instructive, or would they like to opt out?
As for me, this idea with requited mentor approval seems like a good one for at least two reasons (in short):
code review
and this experience is very valuable since it cannot be taughtMoreover, mentor can help in resolving some language syntax related issues for example. Because if we want to target people without programming experience or without solid knowledge of language syntax, it is probably the only way
I like the unstructured old version because it placed trust in users to work at their own pace and progress however they saw fit for themselves. [emphasis mine]
@medwards1771 I've been pondering your comments for the last couple of hours. (Thanks for them). I've especially been thinking about the two bits I've emphasised. I then considered the following (from the other thread):
It's more it's that I'm looking for something a little unpolished or weird or different in the design :)
This design (especially the color scheme) doesn't do justice to the weirdness of our community -- we're warm and friendly and believe strongly in mentorship YES, but we're also wacky and funny and unusual.
Thinking about this really resonated with me about what we're trying to do with Exercism. You might be familiar with the technology/product adoption lifecycle mode. For those reading who are not, it basically says that products start out by gaining a small group of early-adoptors, who can deal with rough-edges and missing core features, but who love the product-market fit. As products evolve, they remove those rough edges and evolve into something that's more accessible for the mainstream market.
At the moment, Exercism has an amazing group of innovators and early adopters who have formed a solid community, put up with (and maybe as you said even like) the rough edges, and like that Exercism is different in its look, feel and rigidity to other things. However, Exercism in it's current design is really hard to use for people who don't fit into that "early adoptor" category. In fact for many (I think the large majority but I don't have data to support that) the lack of structure and edgey-design is actively offputting. That's not a criticism of what Exercism is today, it's just the way it has evolved so far.
If Exercism is going to be able to help millions of people improve their coding skills, it can't be as weird and as rough-edged as it feels now, in the same way VIM can't be the first code-editor everyone learns, even though it might be "better" or feel edgier. I remember for years been drawn to weird distributions of linux because I wanted something weird and edgey. I didn't mind compiling custom drivers or running kernel patches, because the rough-edges of that attracted me. Most early linux users were similar, but Linux's road to the mainstream has through Ubuntu - through making the product accessible to people, making it feel safe and familiar.
150k people have signed up Exercism. Of those about 30% have managed to complete a solution. About 10% of those 30% have gone to be "power users" who have taken deep dives into languages, and used Exercism as a big part of their world. So we're left with 96% of the total signed up users who haven't used Exercism in this way, haven't gone on deep dives, and often haven't stuck with it. In my eyes we're letting down the 96% of the population that could massively benefit from Exercism and this process has been around how we can make Exercism accessible to those 96%.
The reason learning sites look similar is because they're all based in the same research about where most people feel safe and comfortable in a learning mindset, they use the same colours and the same language to put people at easy, and are heavy in pretty icons and design _(sidebar: as you probably know, this is a reason that a red icon is bad - colour psychology tells us that red means danger and is immediately scary and offputting)_. Although it's frustrating, a rough-edged site with a edgey dev[ie]l logo will put people off, and if we want to help mentor the world, we have to work out how to feel softer and more approachable.
The problem with this is that it risks spoiling it for the early-adopters, who are the lifeblood of this whole thing and have given so much to it. Without this community, Exercism is nothing. So I 100% agree that we need to try and find a way to not destroy this experience for people such as yourself, and I'm entirely committed to doing that. Your comment of "I like the unstructured old version because it placed trust in users to work at their own pace and progress however they saw fit for themselves." has really helped me understand what it means for us to not spoil this.
However, the moment you offer multiple value propositions in a product it all falls apart. This is where so so many sites go wrong - where they have great initial traction then blow it. They try and cater for both sides and fail at both. The site's people use in abundance and adore (e.g. Reddit and Facebook for the two mainstream sides of that coin) choose a side and nail it. For example, the moment you start giving options to people about how they want to approach a track, all of the simplicity of how "this is how to use Exercism correctly" goes out the window.
Exercism's vision is to bring the values, quality-exercises and mentoring to the all the people in the world who could benefit from it - we want to help people whatever their experience, confidence-levels, background, etc, and we believe that the path of structured, guided, learning journeys is the route that we can achieve that. There's a significant amount of research on learning theory that shows this and that has found that too much freedom is a demotivator and stress-inducer. For the majority of people choice is hard and offputting, so by creating paths for people to follow with variable rewards (unlocking) and some amount of explorability (side-exercises) is an approach that we feel very confident will work for the majority of people. The early-adoptors of Exercism (myself included) are the exception to this rule, and I feel passionately that we need to understand about that about ourselves and not think other people will cope well with the freedom that Exercism currently gives.
So right now, I don't know how we get there. We have various ideas, ranging from a separate Playground site without the restrictions or learning journey, through to having "Power User Mode" and various other ideas. We're dedicating lots of time this week as a product team to working on this question and trying to find solutions that make sense, but I'm strongly of the opinion that in achieving this we must not compromise the learning journey that we really believe in based on our research.
What you've said has helped me understand more about what many of the people contributing here don't want to lose. I really passionately want to get this right for everyone, but feel so strongly that the decisions we have made are grounded in research and will be the right ones for 95% of the people who could benefit from Exercism, that I don't want to lose that. I hugely appreciate your comments and you probably didn't expect this mini-essay as a response. I know you said that you liked the new logo and design etc, but I felt it helpful to discuss that as part of this. I am also really not trying to be defensive or mansplainy. Sorry if anything comes across in those ways!
This thread is a very helpful conversation and is generating huge discussion among the product team :)
150k people have signed up Exercism. Of those about 30% have managed to complete a solution. About 10% of those 30% have gone to be "power users" who have taken deep dives into languages, and used Exercism as a big part of their world. So we're left with 96% of the total signed up users who haven't used Exercism in this way, haven't gone on deep dives, and often haven't stuck with it. In my eyes we're letting down the 96% of the population that could massively benefit from Exercism and this process has been around how we can make Exercism accessible to those 96%.
That actually explains a lot about Nextercism. Hadn't heard this before.
The only big issue I can see about mentoring is the availability and accessibility of mentors. What happens if a track has no mentor, or the mentor can only check-in once a week? That could stop a lot of progress, especially binge-style progress.
Is there some point where, if no mentor shows up, the next thing just unlocks?
The only big issue I can see about mentoring is the availability and accessibility of mentors. What happens if a track has no mentor, or the mentor can only check-in once a week?
Yeah, this is probably our biggest concern with launching the new site. We're working on a plan for mega-recruitment of mentors, and also thinking really hard about how we can make it possible to support a new track even if we don't have mentors yet.
Thank you @iHiD for your thoughtful response. At the end of the day, I will always support exercism because I believe in the people behind this project, especially @kytrinyx :) (Shout out to 99 Bottles of OOP!) You guys aren't going to lose me as a devoted fan + user anytime soon.
As it seems, mentors need to have the exercises they mentor having solved. This will artificially decrease the number of available mentors for each exercise…
In the current website this is the case, I didn't think we had made the decision to continue this for the new prototype.
If you have signed up to be a mentor, then you should be able to mentor anything in that language.
I do think that we might consider an opt-in to only mentor exercises you've completed yourself. This will let people sign up to mentor a track that they are in progress with, and be able to immediately turn around and start mentoring people in the exercises they've worked on, which is a powerful learning experience.
Ah, OK, I just implied, that current behaviour will be carried over.
Got it—no I'm pretty sure we decided that mentorship is its own thing. Thanks for bringing it up, though—I think we do need to consider whether or not we should give people the option of opting in only to exercises they've completed.
I think we do need to consider whether or not we should give people the option of opting in only to exercises they've completed.
I've created an issue for the product team to discuss. I think it's a good idea.
I have only just discovered exercism and it seemed like a great tool that I could show my partner to get her to practice and evolve her currently very limited programming skills and something I could use to play around with go or elixir. I didn't want to get started with v1 and then have to switch to v2 in a month or two (or however long nextercism takes :D), so I started looking at nextercism and specifically noticed the mentor "block" and was immediately turned off.
However, it's already been said that there is an obvious need to have extra, unblocked exercises and that the tracks should be already doing that, which reduced my apprehension a lot.
The real thing that convinced me that this might actually be a good idea, though, was reading @iHiD's response which made it very clear to me that this is EXACTLY the type of tool that would be most useful to my partner. I'm a professional developer, if I want to just plow through exercises in languages I'm already comfortable with or skip through challenges to toy with a new language, I can use codewars or hackerrank or any of the other sites out there. But my partner can't. And if I'm not really happy with how I solved a problem, or comfortable with some language quirk, who do I ask?
iHiD has convinced me that a community like exercism that embraces mentoring so seriously that it actually requires it to advance, if built right, could provide the incentive for both beginner and advanced users to continue engaging and grow together.
I'm also curious to see if the need for mentors will create a positive feedback loop within the community that will encourage people to mentor because they know they rely on others to keep advancing and others may be relying on them.
tl;dr: I came here mad, I'm leaving excited. It's clear that a lot of time, effort, and love are going into this and I look forward to it.
I'm a big fan of the current version of Exercism and I'd like to chime in my few thoughts to @iHiD's response.
(sidebar: as you probably know, this is a reason that a red icon is bad - colour psychology tells us that red means danger and is immediately scary and offputting). Although it's frustrating, a rough-edged site with a edgey dev[ie]l logo will put people off, and if we want to help mentor the world, we have to work out how to feel softer and more approachable.
Exercism's logo is iconic. By making it PG13 and trying to have it appeal to everyone, it loses part of what makes it special. The icon is a representation of the name, and the name is a play on words of exorcism. The new icon is good, but it's pales in comparison to the existing one. Just because it's red, doesn't always mean it's dangerous. Lets look at brands and logos that are red and use the color to stand out: Coca Cola, YouTube, CNN, Target, etc... By taking away the logo, you're crushing part of what makes Exericsm special and what makes it stand out.
Exercism's vision is to bring the values, quality-exercises and mentoring to the all the people in the world who could benefit from it - we want to help people whatever their experience, confidence-levels, background, etc, and we believe that the path of structured, guided, learning journeys is the route that we can achieve that
I think this is where the root of all problems are coming from:
Is Exercism for people who are new and want to get into programming?
Is Exercism for seasoned professional developers who want to brush their skills and learn a new language?
150k people have signed up Exercism. Of those about 30% have managed to complete a solution. About 10% of those 30% have gone to be "power users" who have taken deep dives into languages, and used Exercism as a big part of their world. So we're left with 96% of the total signed up users who haven't used Exercism in this way, haven't gone on deep dives, and often haven't stuck with it. In my eyes we're letting down the 96% of the population that could massively benefit from Exercism and this process has been around how we can make Exercism accessible to those 96%.
We should deep dive into these numbers. Who are these 96% that we are letting down? Are they college students trying to figure out Java so that they can ace the test? Are they professional developers trying to learn a new language?
Wherever Exercism ends up going, I want to thank @kytrinyx for creating this wonderful site that's helped me improve as a developer.
I wanted to say that we've been doing design work to address this concern, and I think that we have a solution that will be suitable. We'll have a write-up soon. The TL;DR version is that we completely understand from this discussion that mentoring needs to be optional for the experienced folks doing deep dives, and we are making it so.
Is Exercism for people who are new and want to get into programming? Is Exercism for seasoned professional developers who want to brush their skills and learn a new language?
Exercism is for people who want to ramp up in a programming language. Exercism helps people cross the awkward chasm between Hello, World! and feeling fluent and productive in the basic syntax, idioms, and standard library of a language.
Both new folks and experienced folks can benefit greatly from it. That said, Exercism is not for the complete beginner. If you have never assigned a variable or written an if statement then Exercism is not a good fit. However, once you've dipped your toes in, then Exercism is a very good fit.
As I mentioned, we will be addressing the mentorship issue in such a way that Exercism can be used successfully by both of the groups that you mention.
We have done the basic implementation of the "independent mode".
We will tweak this moving forward as we start seeing how it's used.
Thank you, everyone, for taking the time to discuss, debate, and help think through all of the implications of this. It's been incredibly valuable, and I think the v2 experience will be much better for power users as a result.
Issue created at suggestion of @iHiD
I very strongly dislike that you need mentor "approval" to move to the next problem.
I'm trying to use Nextercism to learn a new language, but my enthusiastic progress has hit a brick wall because I cannot continue to the next problem.
@ErikSchierboom wrote: