← All posts

Competitive programming didn't get me the job. It rewired how I debug.

7 min read
Competitive ProgrammingC++Learning

I should say this up front: I did not become a Grandmaster. My rating graph looks like a heart monitor during a mild panic attack. I still open Codeforces on weekends sometimes, and I still think the practice was worth it for reasons that have almost nothing to do with trophies.

What CP actually trains

People sell it as “dsa for interviews.” That’s a side effect. The main thing it trains is working under a weird combination of:

  • a problem you don’t fully understand yet
  • a clock
  • a judge that only says wrong answer / TLE / accepted
  • no teammate explaining the editorial in your ear (until after)

You learn to form a hypothesis fast, test it on samples, throw it away, try another. That’s debugging. That’s also a lot of real engineering, just with uglier variable names.

The skills that transferred

Reading the problem before touching the keyboard. In contests, misreading constraints costs an hour. At work, misreading the ticket costs a week. Same muscle: slow down for sixty seconds at the start.

Complexity as a habit, not a flex. You feel n² in your bones after enough TLEs. When a dashboard endpoint “randomly” dies at 50k rows, you don’t need a profiler to suspect the nested loop you “meant to clean up later.”

Edge cases as a lifestyle. Empty input. Max n. Duplicates. Off-by-one. The sample is not the distribution. Production data is never the sample.

Staying calm when the first three ideas fail. Contest mindset: this is information, not identity. Hard to learn from a textbook. Easy to learn when a red WA sits on the screen and the round ends in twelve minutes.

What didn’t transfer (and that’s ok)

Nobody at work cares that you can write a segment tree from memory. I have not bipartite-matched a production bug. Most days are APIs, logs, and “why is this env var different in staging.”

CP also rewards clever short solutions. Work often rewards boring clear ones. I had to unlearn the urge to golf everything into a 15-line miracle.

How I practiced without burning out

Early on I did what everyone does: open a Div2, solve A, stare at B, read editorial, feel dumb, close laptop.

What worked better:

  • Topic days. One day only binary search on answer. Next day only graphs BFS/DFS. Depth over random suffering.
  • Upsolve the next day. The problem you failed yesterday is worth more than a fresh easy A.
  • Write the idea in one sentence before code. If I can’t, I don’t understand it yet. Coding becomes typing noise.
  • Stop when tilted. A bad night of contests teaches ego, not algorithms.

I used C++ because the ecosystem expects it and the STL is a cheat code once you know which cheat you’re picking (priority_queue, lower_bound, unordered_map footguns, etc.).

Virtual rounds

Live contests are stressful in a useful way. Virtuals are where I actually improved — same problems, less adrenaline, time to notice why I got stuck. Live is exam mode. Virtual is practice mode. I needed both.

If you’re starting

Don’t begin with “I will hit specialist in 3 months.” Begin with:

  1. finish 50 easy problems without editorials if you can
  2. learn a small set well: prefix sums, binary search, two pointers, basic graphs, greedy-with-proof-sketch
  3. upsolve one problem harder than your level every few days

Rating will move when the skills move. Chasing color changes first is how you get stuck refreshing the standings.

Why I still open a round

Not for the job market. Interviews have their own meta (more on that when I compare Codeforces and LeetCode).

I open a round because for two hours the problem is self-contained. No Slack. No flaky staging. Just me, a statement, and a judge. It’s gym for a part of my brain that work doesn’t always hit.

Also, occasionally, an Accepted on a problem that cooked me last month. That still feels stupidly good.

got thoughts?

Let's talk

© 2026 Prashansa Soni