Sazzon's blog

By Sazzon, history, 5 years ago, In English

Hi, it has been a long time since I've last posted anything here and, as usual, I'll talk more on the human level rather than just being a technical post.

The fate of every competitive programmer is someday (hopefully far for now) you'll retire! The reasons behind it can be multiple.

  • You got a fulltime job
  • You graduated
  • 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 fact is: 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 head of your partners in code and can fix their bugs by just clearing their heads and helping them out. But 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 ones. 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. 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 things. But your heart is the same, right? The competitive flame inside you is still burning. You are eager to get your hands on an amazing insight that solves a nice problem. 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). 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.

If you fit this profile that I just laid out, please share your everyday habits on how to still practice and maintain your sharpness from competitive days. How your teammates are doing today? Do you still get together and code? How these habits changed your work code?

I'd love to read them! Be nice in the comments and thank you for sharing!

  • Vote: I like it
  • +82
  • Vote: I do not like it

»
5 years ago, # |
  Vote: I like it +13 Vote: I do not like it

Would read a novel of that. Great writing!

»
5 years ago, # |
Rev. 2   Vote: I like it +48 Vote: I do not like it

I somewhat fit this profile, though in my case a bunch of things are still different.

I stopped doing any kind of structured training in May 2017, around the time I finished participating in ICPC. Unsurprisingly competitive programming works similarly to other sports/skills, and you are getting "rusty, slow and dumb" if you decide to stop practicing. Here are some random thoughts:

you are really good in understanding the head of your partners in code and can fix their bugs by just clearing their heads and helping them out.

I've never observed this; I'm clearly worse at software engineering than people with significantly more software engineering experience. I don't see how competitive programming skills are useful for software development, and I don't see how you can magically get software development skills without doing software development.

But that's just you lowering the bar and getting used to the software development life unconsciously.

I haven't observed this either; I find most of my day-to-day job really challenging; it can't be directly compared to competitive programming, but still — I may be dealing with some problem for months only to eventually prove that it is not solvable. You don't have stuff like this in competitive programming. My first thought on this line was "well, you should find a better job then".

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.

Similarly to what I said above, I'm somehow managing to get more than enough challenging interesting problems to deal with while doing my everyday job. Of course, they are usually not like theoretic CS kind of problems, but that doesn't matter here.

But your heart is the same, right? The competitive flame inside you is still burning.

Today I'm a different person than I was in 2017. And even more different than I was during my first World Finals in 2015. And even more different than I was back when I registered at this site ~9 years ago. Competitive programming memories and experience will always be there, but maturing/evolving/changing is a natural process.

You want to still be able to solve those questions with the same (or maybe close to) speed of thought as you once had.

Do I? I understand that in order to maintain that skill I need to constantly invest time into it, and I will naturally get worse without it. It is my choice to spend that time on something else that I want/enjoy more.

And fitting practice time as we did in the past is totally impracticable. You just don't have the time for it.

Again, as I said above — I do have time for it. It is my choice to use that time for something else. I would be able to change my routine in such a way that I regularly get 20+ hours of practice per week. I would likely get better at competitive programming by doing so. But I would also get much less happy about my life.

please share your everyday habits on how to still practice and maintain your sharpness from competitive days

I'm not trying to maintain my sharpness. I prefer optimizing enjoyment rather than performance. I solve random problems online once in a while, I participate in some competitions here and there, I take part in internal rounds of Google events (Code Jam, Kick Start etc.), I'm back to taking part in some OpenCup rounds this year, I read various discussions and editorials. I'm still doing something related to competitive programming every week. This is actually even better experience now — I have enough knowledge and experience to be able to enjoy nice ideas and tricks, I also enjoy the process itself, and at the same time I don't have any pressure on me regarding the performance — it doesn't upset you when you perform poorly in case you didn't expert to perform well anyway; I also have a clear understanding that my performance and my skills have little value — they don't really change anything in my life; my income, my health or health of people around me don't depend on my CF rating. Most of my coworkers don't even know what competitive programming is :) Yes, it is one of many random hobbies adults have. Great way to spend time for sure.

How these habits changed your work code?

I don't think they changed my work code in any significant way, as it is clear to me that my work code is totally different from competitive programming code, and it has different purpose and different expectations. Back when I was an intern I had a great experience when I optimized one small piece using random idea from competitive programming — I've been told that I should use slower version instead, because we cared about code health and not about code performance. That was a really good insight, and I can't really recall having any CP-related situations for code at my day-to-day job.

»
5 years ago, # |
  Vote: I like it +48 Vote: I do not like it

I have had a full-time job for 2 years, but I'm still competing. In fact, I only just realised how much I enjoy it.