Hi all Friends,
I have completed 300 questions today, January 5th. it was 139 days to complete 100 questions.
It was gruesome, with a lot of doubts and struggles but I still managed to carry on.
In this hundred I think I achieved the most important thing, the mindset needed to be consistent.
I was able of maintaining my job, and still do leetcode mostly everyday. and I made unoticed to the outside world, inspite of collapsing multiple times in the meanwhile.
We should never forget that this is about the journey and not so much about the end goal. the path is what make us stronger.
I always have this in mind, and that's why I find it important to post during the journey instead of coming with a singular success story post which fails to address the real struggles I went throught.
In this hundred I also started interviews and plan to continue.
So, I'll start with the feelings of the beginning of the 200's which was the toughest and darker side of my experience and then move to the brighter side of it which is more like today with 300.
So without further ado let's see some highlights of the past 100 questions
If you like this article you might like my 100 Leetcode Problems Celebration
If you like this article you might like my 200 Leetcode Problems Celebration
If you like this article you might like my 400 Leetcode Problems Celebration | The Awakening
EXPECTATIONS
The biggest challenge for expectations was that I had gone through the most common material and therefore my expectations were more about consolidation. But I had difficulties setting them in a way they would push me forward to the 300 problems. My expectations lacked concreteness, objetivity and it kinda set the tone of my (de)motivation specially from 200 - 260 problems. What allowed me to regain my motivation was recalibrating my expectations and mindset which you can read throught this article.
but for the record this was What I thought I would achieve when reaching 300 questions:
LEARNING PLATEAU
In this 3rd hundred I achieve my learning plateau, I've covered most subjects and doing exercises randomly was not helping me anymore.
I did about 260 questions and I was feeling like I did 200. It was not a new feeling, I felt this before, but the difference is that in the beginning (first 100's) you are always learning something new. but when you go over most subjects it is not like that anymore, because you are cycling through the same subjects over and over just to realize you cannot stick the concepts forever. that is very demotivating. it feels like you are stuck in a loop and you can't get out of it. I was doing one exercise per day consistently on various subjects but I was unable of showing progress. Hello Stagnation.
300 HUNDRED IS A DEALBREAKER
I can understand why many people stop at 200's. Most people prepare for the interviews in 100-200 problems and then stop doing leetcode. You do a couple of tradeoffs for a limited period and you get to 100/150 very quickly, if you do a lot of easy question you get there even quicker. 100 to 200 is indeed what I did to prepare for a Big Company. It was an intense and psychothic move to devour questions inorder to find my place between greatness and wealth. It was much more similar to a sprint than a marathon. But then the interview finishes, I continue sprinting. when the circunstances of the game clearly changed. I'm no longer preparing for "a interview", but trying to improve myself in the long run. I think this is why many people fail at going to 300's, 400's, 500's etc. Because they are sprinting in a marathon. And I had to realize this during the race. Sprinting gives you a great head start, but it will exaust you quicker. It was what happened to me. I had a lot of breakdowns till I found out I needed to stop sprinting and start jogging if I wanted to get to the finishline.
LOST OF MOTIVATION
Lack of progress, multitasking, a number of emotional struggles and a bad long term strategy contributed for dragging myself. for a long time I was doing leetcode like a zombie. Just doing it for the sake of doing it. without feeling any pleasure. One of the problems I had was that after my target interview I did not readjusted my strategy.
And I did not redefine goals. I had much more time in the beginning to prepare and overtime with added responsibilities, my time was more and more reduced but my strategy didn't change. everytime I needed to do leetcode I was lazy to think in the next best exercise. it took me about 3 months to redefine my strategy but in the meanwhile it was a battle for survival. I remember it was so tough to get to 250 That I seriously thought to make a 250 Celebration post. But I endured and here I am.
EXTREME TIREDNESS
Keeping up with Leetcode habit can be very rough, because you have a life and multiple responsibilities. I was and still am mustitasking a lot, and therefore the time I have to rest is pretty much non existent. I was forced to stop a couple of days in multiple occasions, because I couldn't physically take it. Only the words of a friend help out return. extreme tiredness was the most difficult problem to solve.
to solve it I can tell it is a mix between discipline, strategy and action. discipline to rest, to go to bed early, strategy to be productive, action to execute. We need the 3 of them. there were times where I had 1 of them which was action, other times I had 2 discipline and action, but strategy was always missing and for that reason tiredness kept with me.
PANDEMIC EFFECT
With the pandemic and remote work policies I spend more and more time at home. I started to forget to take breaks.
Overtime this lead to forget taking breaks, and doing more and more long hours of work.
I fortunately identified this thin separation between home office and home and started adding breaks.
but in the meanwhile this contributed to more tiredness.
MASSIVE DISTRACTION & PROCRASTINATION
During the demotivation stage I became really unproductive I was Distracted with youtube, facebook, games, other subjects. And I was in a condition where I had hard stuff to do, and a lot of "getting out of comfortzone" and that caused me a spike in procrastination.
I tackled this with meditation sessions right after waking up.
THE WILL TO COMPOUND
What kept me going was the desire of seeing the other side of the tunnel. the desire of compounding months if not years of practice. Because many problems overlap knowledge and I'm very curious to add loads of problems and algorithms to my skill set.
Which kind of problems I would be able to solve? which kind of companies I would be able to work with? which kind of product I could create?
This type of questions made me move forward inspite of lack of progress, tiredness, doubts, and insecurities.
STUDY BUDDY
One of the things that happened from 200 to 300 was that I won a buddy. this guy found me and we started sharing knowledge and later our struggles. It surely made my journey much more rewarding and pleasant. see him grow fueled me to not stop working, He provided me motivation with his words and wisdom too, and also we shared approaches and philosophy on how to tackle leetcode and studies. some of my struggles were solved thanks to him, and I also helped him solve his struggles. when we met he had probably 100 problems and I had 200's. and during this time he passed me by a large margin. so your buddy dont need to be someone on the same level or above. you can find great individuals at any level. Dont look down on nobody.
If you don't have a study buddy try to follow someone and try to learn from them, its important to see other approaches and other methods every once in a while.
IGNORING THE NUMBERS
I Was too concerned about getting 300 questions and very little concerned with learning and consolidating, despite my rethoric.
This didn't made sense at all. the goal is not reaching 300 or 500. you can do 500 easy questions and still can't do mediums. you can just work on 2 or 3 subjects and you dont know anything else. There are many things that can go wrong when you focus only on the numbers. The goal is to learn and be prepared so from 250's onwards I started doing questions for the sake of learning and not only try out or numbers.
LET THE FEAR OF REVISING MATERIAL GO
Everything you learn can be forgoten, and if you are studying this you probably realized that you can't remember it all. So it is important to revise material. But for ego reasons and fear of not meeting my own expectations I was too afraid of revising material and previous questions.
This fear was related to the misbelief that If i did not do well then I sucked. So I was just doing random exercises and switching category everyday and not revising. as you can imagine the results were poor. But I knew I needed to overcome this fear and let it go. and As my stagnation worsen I found the motivation to swallow my pride and revise material. recognizing that I'm not a machine nor a perfect being, I forget like everybody else. so I started saving a day per week to revise material.
IMPROVED AT BEING MODERATE
Moderation is a craft too. I'm very good at going all out, but very bad at going slowly. I'm good at sprinting but bad at marathoning. as said earlier I intend to go the distance. and therefore I need to improve the hability of being moderate. At the begining I was moderate because I had no alternative, at the end I was moderate because I wanted to be and it was the best move to be consistent.
TRANSITIONING FROM EVENT BASE TO LONG TERM HABIT PREPARATION
until 200 I was focusing on an event which was to prepare for an interview I had in august. from 200's to 300 it was a big leap, and I had to transition from event based preparation to a long term habit preparation.
long term habit means you have to be consistent regardless of how much you have to do in your day, it means you probably have a fixed time to operate, it means that probably you will not have time to solve all the questions in that time, and it means you might need to repeat question not only in the next day, but in the following days, it means that you cannot spend 14 hours doing leetcode per day, and you have to get used to a slower pace. Sometimes, a dramatically slower pace. which can lead to demotivation, because all of a sudden you move from 5 questions perday to 1 or 0.7 questions per day.
So you have to transform leetcode work not in an event, but an habit. focus on learning, your objectives, and do it. do it at your pace, not your friends, not at the community pace, but at YOUR pace. because the habit is yours. And the perfect rythm for you is your rythm, the rythm of your life.
It means you have to accept bad results and keep practicing, everybody fails. and many times those who fail the most are also those who win the most. Ask Michael Jordan or Stephen Curry how many triples they missed before starting to get in. Ask Cristiano ronaldo and Messi how many freekicks they missed before getting them right.
if you choose your preparation to be long term it means you have to change your mindset for marathon race, not sprint. You have to find your strategy and the system the suits your needs. for me it was about being moderate, dedicating time to master a subject and having the discipline to rest and respect timings.
DON'T EXPECT TO LEARN IT ALL AT ONCE
Learning takes time and I'm not be able to understand every subject in one pass. There are subjects the requires many passes until you get the right grip of it. a simple example is DP. you cannot come up in one day without ever hearding about it and master it in few hours. excuse me If you are one of those, you sure are special but if you are a normal individual you will need to practice a lot to master DP. and probably you will need to do multiple dedicated sessions, if you are not willing to dedicate 1 month to dynamic programming. do multiple spaced sessions and at each session you will see you will learn something new.
THIS IS NOT A INTELLECTUAL PROWESS TEST, THIS IS A PREPARATION TEST
In the beggining I though this was like an IQ Test, and your performence in this test would determined how smart you are. It turns out this line of thought was wrong. after 280+ exercises I realize this is not an intellectual prowess test but a Preparation test. Those who are more prepared are more likely to get it done, those who are more prepared are more badluck proof.
Algorithms like KMP, were not created in a job interview, algo's like those were created after years of investigation and often times by multiple individuals, so how can I come with this on my own? you can't. It's extremely unlikely. but if you are prepared you can. and that's why I think that what is being tested at least for very big companies is your preparation. there is of course an intellectual process taking part to identifying patterns and identify how to crack a problem, but preparation overshadows the intellectual prowess part of the process by a large sum. so yo don't need to be genius, you need to be prepared. As soon as I realized this I was able of improving my focus and focus more on patterns, and also started paying more attention and practice algorithms.
I also stop doubting myself, because I move from believing in a inate ability and intellectual prowess to a earnable status of preparation which is aquired through work. If you struggle too much with a problem it doesn't mean you suck it just means you have something to learn, you require preparation.
HARD WORK IS NOT ENOUGH
Another realization was that Hardwork is not enought. as I told you between 200-260 had very little progress. just doing questions will not take me far unless I have a good strategy.
if you want to dig a tunnel and you are doing it with a spoon, you can be the greatest hardworker in the room but a guy with a shovel can beat you any time. even if you worked 24h a day.
Your strategy and tools affect you probably harder then the amount of work. I read once that success is not proportional to hardwork and the genious who said it was right. There are people with 3 and 4 jobs, they work like hell but they are still poor, there are people that workout a lot and struggle to loose weight, I was doing a lot of exercises but I saw no progress.. hard work alone is capped, you need to add something else. In my case was able to improve my strategy a little bit.
I stop desiring to do that quantity of exercises to focus also on learning new algorithms and patterns as I felt it was what I needed. this was actually what allowed me be to break the learning plateau. to stop gridding on exercises and give time to learn new stuff. new algos, new patterns and then complement with leetcode. I also started accepting failure much quicker in the questions specially on hard question, in the past I could be doing a question for 8-10 hours, when it was a signal I needed to learn something new.
FEELING I'M HEADING IN THE RIGHT DIRECTION
After shifting from event base to long term preparation, after identifying hardwork is not enought, after identifiying the problem is not me being dumb but lacking preparation. after understanding that I forget just like everybody and I'm not special, after multiple breakdowns and overcoming multiple fears, I genuinely think that there is very little that can stop me. I feel I went through the toughest part I could ever face and from now on I just need to keep going and carry on. There is a lot of stuff I still need to improve. But Most importantly I no longer feel lost. I know I have to keep moving forward and I believe in my current strategy.
PROBLEM SOLVING SKILLS IMPROVED
With so many problems solved I saw myself solving tough problems at work easily and with tools that one year ago I wouldn't use, like using modulo to solve problems, introducing data structures that were strange to me one year ago. And it is a very cool sign that it was worthy. I feel that I solve problems much more professionally.
INTERVIEWS
Another good effect was that I was able of smash all the coding interviews I did, I failed at behavioral interviews though. Was cool to see the effects of my daily work on the interview but on the other side it was hard to see myself fall in the behavioral stages inspite thinking I did well. hopefully I can continue improving. funny fact, as companies heard about this new interviews processes they tend to jump in sometimes without even understanding what they are doing.
the funniest interview I had was from a company that send me a challenge with a easy and a medium to complete in 20 minutes, I timedout and laughed in their face. I passed the interview and I rejected the company, they clearly didn't knew what they were doing. I experimented different types of interviews: code challenges, code pair, domain questions, multiple choice, this is getting nuts. the coding problems where ranging from easy to medium (3 - 5)
GOING BACK TO BASICS
It is known in the past I refuse to do easy questions, I got better at it and as of now It's not that much of a brainer. but I identified something more subtle and is kinda related, which was not wanting to do basic stuff like, strings and arrays, sliding windows, two pointers problems. I was much more incline to invest in DP, or graphs, recursion or some Algorithm. but it turns out that as soon as I left this yet another ego problem behind, I was able to understand that those problems are beautiful and I suck at them. I could do the bruteforce way, but the optimal way is not easy many times. so I'm taking my time to enjoy this basic stuff to better consolidate my knowledge.
CONTESTS ARE GREAT BUT
Contests are great for me but I have little time. I'm doing contests mostly to test myself and see how I'm improving, but also to be up to date with newer questions once they are clearly getting harder. There is a couple of challenges associated to doing contests, there is no official solutions, you spend more time searching for one you understand, you might understand it but it my be a poor solution, in a nutshell it is less efficient to study to a question in a contest then a question that already has official solutions and many youtubers already shared a visual explanation. on the other side of the coin you have more communication when you ask something on a contest solution of someone. often times people respond, which is great. contests are great to strengthen the community, make new contacts and also evolve. but you evolve in a different way. I believe contests might be better after having a good idea of the subjects. For me at the moment contests are a way of being exposed to a different set of problems, algorithms and approaches that other way I might not got there, but I'm not willing to spend hours and hours trying to understand a niche algorithm. its more important to me as of now focus on the basics. I'll continue doing only 2 contests a month.
SUMMARY
This was the toughest moment in my leetcode experience after starting, I had multiple breakdowns, I felt terrible but I was able to endure. All this struggles joined with my will to presevere and win made me findout things that allowed me to incrementally improve and pass to the next step, and than the other step. I believe that getting to this 300 indicates that If I was able to survive this far It is very unlikely I'm not going to survive to the next 100 or the next 200. Arriving to this 300 is in my opinion the triumph of working smart over working hard. I also had multiple benefits, I spit blood but I also smash a couple of interviews and contrary to some people my daily practice reflected in my everyday job, not every time but sometimes.
This also marked the pivotal moment where I change my strategy to the long run instead of sprinting which allowed me to regained my confidence back. this is a new period of hope that makes me believe in the future.
CURRENT TECHNICAL WEAKNESSES
NEXT Expectations
CHECK MY PAST LEETCODE PROBLEMS CELEBRATION
Thank Leetcode community, without you it would be much harder.