I Failed Again! Therefore, I’m Restarting My Journey

I Failed Again! Therefore, I’m Restarting My Journey

It’s time to get back on the path

Photo by [Ole Witt](https://cdn.hashnode.com/res/hashnode/image/upload/v1633871285254/WTYuXWwt2.html) on [Unsplash](https://unsplash.com?utm_source=medium&utm_medium=referral)Photo by Ole Witt on Unsplash

“Do not be embarrassed by your failures, learn from them and start again.” — Richard Branson

Backstory

My name is Hassan. I’m a computer-science student at a university in Egypt. For over a year now, I’ve been trying to get a job as an iOS developer or get an internship at a big tech company like Apple, Google, or Amazon. But, sadly, I was constantly failing the interviews.

In order to maximize my odds to get my dream job at these big tech companies, I decided to start doing competitive programming. It’s fun for me, and I’m learning all of the algorithms and data structures needed to pass my interviews. So it’s a win-win situation.

The present

I interviewed with Google last month, and I got rejected. I also participated in Google Code Jam, and I only passed the qualification round and couldn’t pass any other round after that.

Last month, I qualified for the Egyptian Collegiate Programming Contest (ECPC) but, unfortunately, didn’t qualify for the Arab and Africa Collegiate Programming Contest (ACPC).

My team and I at ECPC 2019My team and I at ECPC 2019

What I did wrong

In order to improve my self — in my opinion — I should admit I did some stupid and wrong things and learn from them.

Like, for example, I procrastinated a lot and didn’t solve a lot of problems and just wasted a lot of time. I also worked really hard for just the month before the contest, and that’s really wrong. I should have been working all year — not just before the contest … it’s not a final exam!

My contest rating on Codeforces.comMy contest rating on Codeforces.com

As you can see from my contest rating on Codeforces, I wasn’t practicing contests for a long time, Then just right before the ECPC 2019 qualifications, I started participating in Codeforces rounds.

What Is Next

“I’m restarting my journey. It’s really the same journey, but it’s time to get back on the path. I will do this!”

tl;dr

I will study and solve problems, solve some more problems, and try again.

My strategy

Everything below is written with competitive programming in mind, but practicing for coding interviews is similar.

Your goal should be to get better in algorithms and data structures.

Solve problems

Solve problems slightly above your level — those that aren’t easy for you, but you can usually solve. If you’re stuck for 20–30 minutes (an hour in case of harder problems), read an editorial, and make sure you understand it. Implement a solution — and if you struggled, then go read other people’s code. See how they did it easier.

Note the word “stuck” in bold. If you aren’t out of ideas, then you aren’t stuck. You can give up only if you didn’t do any progress for some time.

Participate in online rounds as much as possible

You should participate in all Codeforces’ online rounds, and don’t be afraid if your rating drops down. Because even if it did, it will eventually go up again.

Upsolve contest problems

First of all, upsolve means solving the problems you couldn’t solve during the live contest. So you’ll upsolve problems you didn’t solve during a contest. Not all of them, just one or two more.

Don’t try something very hard because you likely won’t solve it. There will be a time when you can solve those much harder problems.

Practicing a particular data structure or algorithm

Use Google to find some tutorials, and read them. Solve problems on that topic. After a while, go back to solving random problems. You should now be able to recognize similar problems and apply the new algorithm/technique you learned.

For smaller algorithms/techniques, it’s enough to solve a few problems to understand it well enough. In the case of big topics, like dynamic programming, you should solve dozens of problems. But don’t spend months on that because you cheat a little bit by knowing what you should use in a problem. When you read a problem during a contest, you don’t know its tags/topics. Sometimes the hard part is to come up with what you should use.

Recognizing patterns is a valuable skill, and that’s why you need to mainly solve random problems.

Solving all of the problems in “Competitive Programming 3”

I know there are a lot of problems — around 1700 problems in this book — but honestly, they are really good problems, and the book is well organized. Competitive Programming Book This is the companion web site for a book: "Competitive Programming 3: The New Lower Bound of Programming Contests" and…cpbook.net

Training for ICPC 2021

I’ll focus on solving old problems from this competition preferably with a team. Don’t worry too much about it, though. It’s still just about being good at algorithms. You don’t waste time by solving problems from random platforms.

Conclusion

I’ll solve more and more problems, and, hopefully, I’ll qualify for the ICPC next year and maybe become red or yellow on Codeforces.

Resources and references

Some YouTube channels for tutorials:

Did you find this article valuable?

Support Hassan ElDesouky by becoming a sponsor. Any amount is appreciated!