Hi, this post was originally written on Codeforces competitive programming contest website. And it aims to reach former competitive programmers. I usually write more on the human level rather than just being technical (which is the main purpose of blog posts there).
The fate of every competitive programmer is someday (hopefully far for now) to retire! The reasons behind it can be multiple.
- You got a fulltime job
- You graduated
- You are too old to compete on ICPC
- You got kids or
- You are just sick of getting hacked on 2 out of the mere 4 questions you passed on every god damn contest!
The unfortunate fact is that now you are getting rusty, slow and dumb. You may think that's not that bad. Your coworkers still didn't put as many struggling hours of problem-solving as you did in the past, you can still solve hard questions that everyone just gives up right away, you are really good in understanding the mind of your partners in code and can fix their bugs by just clearing their heads and helping them out. But maybe that's just you lowering the bar and getting used to the software development life unconsciously.
If you think about it, you are not as sharp as you used to be. You take longer to figure out optimization solutions, you are getting sloppy and code slower. Let's face it, not every day you encounter an interesting problem just like the old times. That's not the case for everyone, of course. Some of you have the privilege of getting constant interesting problems, but they are not small and constant as they used to be. I mean, you were used to solve 6~8 problems a day which at least half of them had an interesting solution, a different point of view, a new adhoc data structure that you'll never see again.
And that's normal, the software industry is more focused on developing a scalable, fast and reliable product instead of targeting a new problem every day. And that's not all bad. You are learning new things. Software development useful stuff. But your heart is the same, right? The competitive flame inside of you still burns. You are eager to get your hands on an amazing insight. You still want to feel that sensation of solving something hard cleverly. You want to still be able to solve those questions with the same (or maybe close to) speed of thought as you once had.
But for that to happen, we all know that practice is needed. And fitting practice time as we did in the past is totally impracticable. You just don't have the time for it. You need to take care of your health (that you neglected for so long during competitive studying days). You need to invest time in your relationships with your family, spouse, kids, and dogs (or kittens (; ). And on top of all that you still have to work and learn new things to be productive on your current job.
You are maybe reading this while still on your prime and you won't get the feeling, and I hope you never do. Maybe you are retiring just now and in your head it's completely possible to maintain the same habits as you used to, but that's the mistake that every former competitive programmer commits. Thinking they will have the same urge to compete as they used to when there is no goal ahead (like a championship), instead of just the knowledge and fun.
If you are feeling down with all that I just laid out, don't! The perks of being a competitive programmer is not the algorithms, data structures, medals, competitive shirts, experiences and etc. It's something bigger!
If you competed in something like ICPC, you know that teamplay is a big, I mean BIG quality. While working, researching, contributing to opensource and etc, one thing that stands out is seeing someone that knows how to code in group. It's one of the most welcoming abilities someone on your working team could have.
Having someone that tries their max to understand your thinking process instead of just shoving their own it's a big advantage and it ships code way faster! That person is going to code review the sh*t out of your code and try to make a resourceful contribution. That person cares more about the code rather than having the last word. Which leads me to the next quality: believing on your peers.
To survive under a competition that thrives on teamplay, the players must understand that their teammates are just as capable (if not more) of doing a beautiful code as you are. And by knowing that you start to give people more responsibilities, harder tasks and decision making that provides them the opportunity to grow professionally.
And that, my dudes, makes a great leader! Having someone that trusts, listens and guides your solutions to greatness creates a hospitable environment!
Another great characteristic is not giving up. Whomever spent enough time solving competitive programming questions knows how good it feels to see that little green text of Accepted.
It's a highly addictive drug. As long as the problem exists a competitive programmer will not rest. And I mean, forget to eat kind of not rest (An interesting side note: One of my teammates actually believed that being hungry helped him solve questions quicker, made him focused and other stuff, he also used that during contests).
The last one is, of course, thriving under pressure. Seeing people beside you on the same contest solving questions successfully, your team going down on the rankings, people shouting on purpose (yea it happens) while you try to think on some dynamic programming f*cking question is nerve wracking. Competitive programmers are used to this. So, when everything is falling down on a high traffic service you'll be lucky to have a team of calm thinking people beside you.
Fear not my fellow retired friends! All your previous experiences were not in vain. Receive my virtual hug!
Those are my perspectives on acquired special skills that will live on to the software industry life. What other abilities you think I must have forgotten? What other software development skills do you think competitive programming lacks on?
I'd love to read them! Be nice in the comments and thank you for sharing!