Hi all!
I'm currently considering opening up a competitive programming training program of some sort. The details are definitely still in the works, though, and I wanted to discuss some preliminary ideas with the community to get feedback on what would be most helpful (and on whether there would be any interest in this).
I'm interested in starting a training program for three main reasons:
To make competitive programming more accessible to those without access to resources like college courses or training camps
To provide a space in which questions are encouraged and actively answered (especially since I think this generally isn't the case in the community at large)
To help competitive programmers build problem-solving skills and intuition, which I think aren't sufficiently emphasized by most contest training resources
I think one of the most frustrating things about being a new (or even intermediate) competitive programmer is that it's generally pretty difficult to get help from people more experienced than you. My hope is that creating a community with the explicit intent of training competitive programmers less experienced than myself will alleviate this problem, and perhaps will help establish a norm of helping newcomers within the overall competitive programming community.
However, I'm not sure exactly what such a program would entail, so I'd love to get some input from the community on what would be most helpful. I would most likely organize this through a Discord server, which would include places to ask for help with problems, to discuss competitive programming in general, and to discuss how best to train. However, I think it'd probably be best to incorporate some element of active training into the program--some preliminary ideas I've considered include:
Regularly published problemsets, including tasks of varying difficulties. Most likely, I'd publish relatively short problemsets a few times a week (something like one problem at each of three overall levels, with each trainee attempting one of the problems). For the next few days, those interested could work on solutions and message me for hints and feedback, and afterwards, I'd post my solutions, with a particular focus on outlining how I came up with my overall approach.
Topic lectures introducing important algorithms and discussing several problems applying them. These would probably be most useful for people with some experience (e.g. stably rated above 1400-1500), since below that there aren't really too many specific topics to cover.
Scheduled community virtual contests, with discussion sessions afterwards to talk through the problems and discuss ideas, especially with a focus on the intuition underlying the solutions.
For a smaller group of people with more competitive programming experience, I'd be open to providing personal assistance with training, problem/topic selection, overall contest strategy advice, etc.
If enough strong competitors are willing to get involved, it might make sense to have some sort of mentor-trainee program in which newcomers are matched with more experienced programmers in order to get help and advice.
The target audience for this would depend on who's interested--I think that at least in theory, I'd be able to work with anyone up to around (and including) the 2200s. My main goal would probably be to help novices have their questions answered and come up with a good general training plan while working more personally with more advanced competitors to focus specifically on building up intuition and shoring up weak areas.
Of course, all of this is very vague, since the above isn't any sort of finalized plan. At this point, though, I have a couple requests: 1. Post below if you would be at all interested in this. It'd be helpful for me to figure out how many people would want to be involved as I decide whether starting this up would be worth the effort. 2. If you have any thoughts on which (if any) of the above ideas you'd find helpful, or any other forms of training that would be useful to you, please share them--in the event I do decide to make this happen, I'd like to know what I can do to be of as much assistance as possible.
Thanks to everyone who read this far--if you have any questions or comments, please be sure to post them below!
I love any idea that tries to expand competitive programming participation and engage newcomers / people more susceptible to quitting early.
Being a novice myself, this would be extremely helpful. I think discussion of problems would be particularly helpful. This is a great initiative!
I have a question. How confident are you that this training plan of yours will not be diluted as the time passes because I saw many training plans that seem so good at the start and afterward there is nothing and we end up training the way we used to before the start program.
I've been pretty actively involved in the programming contest community (e.g. participating in CF contests, writing unofficial editorials for ABCs, actively engaging with the community on the USACO Discord) for a while now, so I think it's reasonable to expect that I'll continue this involvement in the long term.
I also think that one reason many training programs fail in the long-term is that there aren't really any concrete plans, so they just peter out due to lack of interest. This is why I've brought up a few ideas for specific ways this program might operate, and I'm open to any other thoughts people have.
This sounds like a huge effort, so thank you for your initiative. I struggle to work towards answers, most of the time it feels like I just stumble across solutions, so this sounds really beneficial.
I would be interested in this. I am trying all possible ways to get better at competitive programming, and I appreciate your effort on doing this if the program gets implemented.
Sounds interesting. Personally, what i'd find useful (that isn't really common) are hints for problems before the editorial. I think these are much more helpful than just telling the whole answer in the editorial, as it gives people the chance to solve at least part of the problem on their own.
Makes sense--thanks for the input!
I second that. I'd also like more generally to outline the thought process leading to the solution, especially in the cases where the solution is some formula or constructive algorithm or such, and the tutorial contains just the proof of the solution, while the main difficulty of the problem is about how to reach that solution, not how to prove it.
I'm interested.
But a small suggestion. Your target audience is around 2200 rating which I think you should reconsider. There are 1000-1200 people who lie in the range of 2300-2100. All of whom might not be active as well. Also people in this range are well versed with medium or medium-hard question. Since your target is to help new or intermediate Coders and make an impact at a good scale, I think you can make the rating threshold a bit low.
The 2200s are an upper bound, not a lower bound. My main intent of this boundary is to signal that people over 2300ish probably wouldn't get too much out of this program, but I would imagine that most people involved will be rated a good deal lower than 2200.
It would be great to have a topicwise set with editorials, which I feel is something lacking. There are a few groups which have such sets, but no editorials. Examples of the contests I'm talking about:
1) https://www.hackerrank.com/contests/5-days-of-game-theory/challenges helped me understand nim and it's variants much better. 2) https://atcoder.jp/contests/dp helped in keeping track of various standard dp variants.
Good thoughts--thanks for the suggestion!
If you can really build "a space in which questions are encouraged and actively answered", that'd be totally awesome :). Doing CP alone without friends to discuss can be pretty lonely.
I have always been a fan of you. Your editorials have been helping me a lot lately. So I am definitely in :)
Great Initiative. I am definitely in.
Good initiative. Though, you should say if that's free or paid.
And I strongly recommend using CF group & mash-up, it's a very convenient combo if you want to use old CF problems.
Thanks for the suggestions!
The plan is for this program to be free. I'm open to potentially launching some sort of paid program in the future, but that would probably be somewhat more involved than what I've described above--the main two forms of this that I've thought some about are described below:
1: Last summer, I started work on a complete competitive programming course, including lessons and problem sets on topics appearing commonly in programming contests. I quickly realized that this would be an absurd amount of work (order of magnitude, my plans would have involved about 1000 pages of writing) and set it aside, but I'm open to returning to the project in the future. If I do eventually finish this, it would probably cost some amount of money because of the large amount of original content it would require me to create.
2: If anyone contacted me seeking more long-term/time-intensive one-on-one tutoring, I would charge some fee for that, since with the portion of my free time I'm devoting to helping the programming contest community, I'd prefer to focus on projects like this or like writing solutions to AtCoder problems that benefit the whole community rather than certain individuals. I don't plan to advertise this kind of service, though, since I don't think the marginal benefit of this sort of training is worth the cost I would need to charge for it.
I'd like to opt in if it is going to happen. I guess the bottle neck for many people like me is about how to approach problems. Most of the time, problems to me are either know or don't know.
To me, problem solving is more like an art where experience comes to play a big part. If your program can help to reduce people's reliance on experience for solving problems or educate people on how to cultivate that experience, that will be greate.
Amazing idea :)
I'm interested too
I'd be super interested, mainly because I don't know how to train correctly and efficiently :P
I'm also interested.I wasted more than a year, practicing in unorganized and inefficient way, thus couldn't improve much (as you can see from my profile). Moreover, when I try problems of 1700+ rating, I often get stuck and if don't get help, I leave it due to demotivation. Many times, for some problems, editorials/comments are not that helpful for noobs like me.
Of course you will get overwhelmingly positive responses, who doesn't want free training. But I (of course, this stupid Um_nik again) don't think that it will work as you want, and here is why:
Many people believe that there is some magic formula how to train to become red. And you encourage these misconceptions by saying "discuss better training" or similar. Is there better training? Probably yes, but any problem solving is better than discussing "better training".
Many novices don't know how much time they should spend on a problem before asking for help. Moreover, most of the time answer is "until you have solved it". In my opinion, in 95% of cases, all the help that is needed is "yes, you are able to solve this problem, you know all the algorithms used in this problem". And any other hint (the one that really tells something about the solution) diminishes results of training process, because probably this hint will greatly reduce "possible solutions space".
Of course, there will be people who uses your help right. Let's say that 95% of people will be like that (that's waaaay over my real estimate). They will rarely ask something when they are really stuck, and they will formulate their questions in a verbose manner, etc. Other 5% will just spam you with stupid questions like "how to become red". 5% is not much, right? Wrong. These 5% of people will generate more than half of questions, they will be seeking for your attention all the time, they will become angry when you "don't share the secret how to become red".
3.1. You will probably think "I'm doing this in smaller version on USACO discord and everything is fine". There will be people of different culture, who doesn't see this behavior as abnormal.
Virtual contests with discussion is probably the best of your suggestions... but. I may be wrong, but it seems that people are much more willing to tell their solutions than listen to others solutions. And in chat-like format of Discord this will probably lead to chat having 15 different solutions nobody read, different problems will be mixed up and all of it will be gone in 10 minutes buried under some "orz"s and stickers.
I will be very happy to be wrong. I might even try to participate as a "mentor" though I don't think that I will last long.
i think you're right everyone needs the magical formula. when i joined codeforces and saw great people in CP, i started to ask them about how to become better, but don't get it wrong i DON'T HAVE A COMMUNITY in my university so i wanted a sheet or a website to practice from.
If you can read this text then you know at least one website for practice with THOUSANDS problems, many of which have thematic tags and (for a year or so) estimated difficulty.
you're right and i started searching and solving, i know that there's no magical stick and someone says"abra kdabra" and boom you're great, i know practice is the only way it's like asking first bench student how to solve in the exam he will say "study hard". but don't you think beginners with no community like me needs some help
I'm not sure if you NEED it in a sense that without help you cannot become better, but it can be a positive thing. And it is good that Geothermal is going to provide this to you and others. BUT. I say that you should use this help wisely. Ask specific questions about specific problems you tried to solve, not some vague shit like "how to become better".
Basically you are the confirmation of my words. You say that you understand everything but you still want to know "how to become better".
i didn't say "how to become better" i said we need help sometimes i face problems and i read the editorial and i don't get it
What if the admins establish some rules?
Then people will break these rules because they think they know better
The good thing about owning the server is you can kick anyone who thinks they know better than you.
Of course, people generally don't do it because of 3.1 (you will get a lot of angry people). But I think that's the only way you're not going to be flooded with bad questions...
Thanks very much for your comments--in the event I do end up doing this, having a better idea of what could go wrong should be very helpful so that I can plan around these issues and try to minimize their likelihood of occurring.
A few responses to these thoughts:
1: Even if we say that any form of training involving solving problems is equally effective, I think having a community and some sort of structure is likely to increase participants' propensity to solve problems. This is especially true in the case of novices--because they often don't have a great idea of how to get started with programming contests or where/how to train, many of them spend more time trying to figure out the best resources to use or some "magical" formula for success than they do actually training. In that sense, having some structured program will prevent wasting time on this part of the process, even if the program isn't actually some surefire path to a certain rating.
I do think, though, that there's some differentiation between forms of training, even if this is a second-order effect relative to solving problems at all. For example, problem selection matters to some extent--some problems are especially good at communicating certain problem solving strategies while others are challenging only because their implementation is ridiculously messy. I think the main way the program I'm considering would be differentiated, though, is its emphasis on understanding how one would think of the solutions to these problems, which I think is often neglected by problem editorials or by those practicing individually. Particularly when people spend a long time trying lots of possible ideas to solve a single problem, I think it's important to take some time afterwards to reflect and consider what insights eventually led to the final solution so that they can prepare to solve problems relying on similar ideas in the future.
2: Again, even in your worst case scenario, I think there's still some benefit to be derived here--it's probably generally beneficial to know whether you're theoretically capable of solving a certain problem or if it simply relies on some algorithm you haven't learned, for example. However, I think I'm probably not as strongly against other hints as you are--I think hints can be beneficial if someone is genuinely stuck on a problem, but only if the person receiving them would be able to make the same observation on their own when working on a similar problem in a future. (For example, this might work by telling someone to think about a specific part of the problem or a particular test case, and discussing after they solve the problem how they might have realized to consider that constraint/detail/edge case in the first place.)
3: I definitely agree that this is a risk, and because of that, I intend to set some reasonable standards for participants. I'll plan to post a set of guidelines on asking questions productively (e.g. working individually for some time before asking for help, including a description of the specific error/what you've tried so far, etc), and I'm open to simply restricting access to the training program to people who generally follow these rules (meaning that if, as you suggested, people don't follow these rules because they think they know better, they'll simply lose access to the program). If X% of people take up 90% of my time without putting in any effort themselves, the simplest solution is to just cut my losses and focus on helping the (100-X)% instead.
4: These are valid concerns, which is part of why I'm continuing to solicit feedback on how best to structure something like this. That said, if people are more interested in sharing the solutions they came up with, I don't have a big problem with that--that's what I enjoy about preparing my unofficial ABC editorials, for example. There are also a few ways to work around this--for example, I could use a moderated channel to lead interactive walkthroughs of solutions to the problems while a separate channel is open for discussions/responses to my prompts, which would keep the walkthroughs less cluttered and would ensure that they remain available for some time.
I agree these are generally reasonable things to worry about, but I do think there are plausible solutions to many of these potential problems. Thanks for your feedback!
OK, you really thought about many things and I'm starting to believe. In the event you end up doing this write me a PM if you want me to be one of "mentors".
i agree with you sir , it is best to sit down and practice.
Yes, most of the people already know a good enough training method, but there ARE some people who would benefit from discussing better training.
There is no science on "better training" as far as I know, but most of those who are good at this agree in some things, solve a lot of problems, for example, is a widely accepted rule.
Another widely accepted rule is to solve problems that are "on your level" (not too easy, not too hard).
This second rule is really obvious, but some common behaviors kind of violate it, for example, taking part in many contests, without doing any upsolving, is clearly far from being a good method, yet many people do it.
It isn't a good method because you spend 2 hours and get to solve 0-1 problems on your level, while using the same time in a different way would allow you to solve 2-3 problems on your level, extrapolate that to many contests, and the difference is considerable.
very good initiative , looking forward to learn from master coders. all the best Geothermal
I'd be interested in both teaching and mentoring.
I totally agree with Um_nik low rated users tend to ask a lot of questions when given the space, a lot of times even without thinking about the problem or the editorial itself, last week I wrote an editorial for a contest I made for beginners in my university, the editorial was just short hits to encourage them to work, for one of the problems I wrote.
Just write brute-force solution for small values of n. You will easily find the pattern.
You will get surprised to know that two different users asked me what should they do to solve this problem, even after reading the hint !!!I think the best way to organize this program is to make it a multi-level program, You can mentor a small group of high rated users, some of these high rated users mentor group(s) of medium rated users, and some of these medium rated users mentor group(s) of low rated users. You save yourself a lot of headache by working with small group of users and mentors.
Personally, I can take part in these mentoring process, and I am willing to keep doing it as long as I have free time ( which I have lot in the next couple of months ), and I am benefiting from this program by improving my CP skills.
I have an idea, for detecting level of someone you shouldn’t just use CF rating, Because many programmers i know are very strong in competitive programming but they are not fast enough to get a high rate on CF, so you should also design some sort of exam with like 3 problems and 5 hours to solve them, and then base on the CF rating and the result of the exam you can detect speed and skills of someone and use a proper training for him.
Sorry for my bad english :D
I am interested for both Mentoring and training Program. I loved the idea of topicset and discussion after virtual contest.
And Mentor-trainee that will works on basis of "Give and Take" and remove the load of lots of newcomers from you to keep the training program like big-orgainization level group.
But i have a sugeestion after reading other comments.
If you kept it free training then there must be some rules and those who break the rule after some fixed number of times will be kicked out of group. As Um_nik is rightly mentioned there would be some number of people who will transform the group into mess. so it is important to remove them to keep remaining group clean and helpful for everyone.
I'll love to get advice from more experienced programmers, especialy because in my university I there are none :(.
I am very interested in this program. I have been struggling at my current level/color for many years. definitely need some good training and coaching. This is just my idea about format.
prepare a good algorithm list
pick one from the list every week, and publish lecture video (video with whiteboard or screen is much easier than written material)
release some good topic related problems.
In midweek, you can publish hint video to answer the most frequent questions, meanwhile people can discuss about problems on the platform.
As other people saying, you cant follow up everyone (hundreds to thousands), so please focus on your videos and problem selection throughout the week. You will invest your time and resource, so you can charge some fee for this. Also by charging, you can filter the real ones from the crowd...
I am glad that ITMO is doing exactly what I wanted. https://codeforces.net/blog/entry/82545#comment-696611
Yes, interested!
I'm interested in this project.
I'm interested in promoting competitive programming, but I think we should know the novices well at first. This project can be a good experiment — to know what the new comers are actually seeking, and how they behave when they find competitive programming is actually different from their original imagination. Also, we can try to find what they need when they learn, practice, compete, fail and grow. We can share our experience to them, at the same time we can get to know them — so that we can build the community more friendly to those who are less experienced.
It's risky — yes, because I don't know them well yet. I'm not technically strong enough, but I hope I can give some help to this.
I've seen many good ideas in the comments. I'm looking forward to this training camp.
I love this idea and I am definitely interested , Unlike some others who provide help , u chosed a nice category , because most of the others pick people who have rating >= 2600
This is a great idea! Hopefully you'll end up doing it. Honestly I'll be even up for 1 on 1 tutoring with a fee. I've started cp as a hobby to improve my problem solving skill for like 4 months. It is definitely daunting and difficult a lot of the times, especially after spending hours trying to solve a problem. For me, it is either I don't fully understand why my solution does not work, or why the editorial solution works. I think proving a solution works definitely helps a lot for novices like me. Having an active community to share thought process and being able to learn from a different perspective is always helpful.
I am also interested in this. Will there be training for the olympiads? for example, ROI in Russia
Interested. I think I personally am in the sweet spot where I can both help others and be helped myself
Good Initiative Geothermal, really appreciate your consideration for the community! :)
I would be happy to be a part of this.
Interested.
Definitely interested, we can perform better under the guidance of experienced persons. It is upto us how to use this program...
I have a very little community in my college, so i really want to join it and want to interact with people. Want to solve pthers doubt and mine sometimes to be solve. Really into it.