Hi all Friends,
I have completed 200 questions in August 19th.
I was longing to write this article and I finally completed it.
I feel very happy. Not all my expectations were met but I've done my best and I'm happy with it.
I was able of maintaining my job, and still do leetcode mostly everyday. And made it feel unoticed to the outside world.
Undertaking this challenge is being so much worthy that I feel it was the most important decision I made professionally in the past years.
I feel the need to share with the community even though I might not land a job offer in the upcoming mounths, even though I never made it to a FAANG, even though I ultimately fail to achieve my dreams.
We should never forget that this is about the journey and not so much about the end goal, the path we go throught to be what we want to be is what make us stronger.
I always have this in mind, and that's why I find it important to be posting instead of coming with a singular success post which fails to address the real struggles I went throught.
I'm probably starting interviews this month, so I'm moderately excited.
I also feel the need to thank Leetcode community, without you it would be much harder.
So without further ado let's see some event highlights of the past 100 questions, starting with the expectations I had.
If you like this article you might like my 100 Leetcode Problems Celebration
If you like this article you might like my 300 Leetcode Problems Celebration
If you like this article you might like my 400 Leetcode Problems Celebration | The Awakening
EXPECTATIONS
I still remember when I started solving problems and I saw a guy with 200 and 300 hundred questions. I was just mind blowned. This problems were so hard, I took so much time to solve them, how come this guys solved 200? That guy should be like Van Gogh of programming. 331 questions solved? God damn that's Wozniak right there. He must be doing the next big thing in his dorm room. So I started fantasizing about me having 200's and 300's, and wondering what type of people I would became. Which type of problems I would be able to solve How fast I would be able to crack them. And how much value I would deliver to projects.
With 200's solved I was expecting:
Being able to smacking all easy questions in leetcode under 20 minutes.
Being able of smacking 70% of medium questions in 35 minutes with optimal solution.
Being able of brute forcing a solution in 30% of Hard questions withing 45 minutes.
I was expecting to have all the algotithms learned in my mind at the same time. (did not happened you will read more shortly)
I was expecting all the problems I repeat I can easily recall and smack it in the second time (failed, there are problems that continue to be difficult even at the second time, specially if I have done them long ago)
I was expecting to be knockig Down the majority of questions with 85% faster than the rest.
I was expecting to be already able of doing contests and finish them in time.
But none of this things happened in full. I improved but still far from this expectations.
Actually at 150's I felt like I was just getting started, which is the feeling I kinda have now.
I Also was expecting that at 200 questions I would return to be very good at math, which obviously didn't happened, but I recalled many things and I can do somethings and enjoy.
But at mental level I met and exceeded my expectations.
My mental goals were:
RIDICULOUS AMOUNT OF INFORMATION
Data Structures and algorithms by itself is a ridiculous amount of information. I realized that to go throught the various pieces of information, at the time I'm finished I already forgot the first pieces I've studied and practiced.
At first this was frightening, but after a couple of situations like this I realized that, after a second pass I learned something new I haven't notice in the first time. I also realized I didn't needed that much time to recall the subject.
This ridiculous amount of information showed me that conventional methods of learning would not work. I need to pass information multiple times. I needed a systematic way of studying this information repetedly. And that's the direction I'm taking right now. I'm transforming my learning process so I can do systematic space repetitions, instead of a full long cycles where by the time I finish I cannot recall the begining.
STRUGGLING TO HAVE SOCIAL LIFE
A side effect of this dedication is that my social life have been diminished. Fortunately I've coronavirus as excuse.
But still, I barely see the news. It feels like I live in another planet. I'm focused in a single thing, and very little attention is left for things outside work, doing exercise, and leizure. But I'm becoming better, increasingly better at managing this social complexity and little by little I'm leaving the cage, without losing the focus. Being conscious about my timings and decisive in every task I have. The time is very very precious and I cannot waste it. Despite initial struggle I'm now collecting some gains.
Which reflects in being the kind of person which has little time left for leisure, but is really present when those little pieces of joy happen. So the next step is to be able get a bit of world and national news.
IMPROVED SOLVING TIME PER QUESTION
I've improved the time per questions, it's not perfect though.
I do easy questions much quicker , as well as medium and hard questions.
But there is always a black swan, and I cannot do all the easy questions in 15 minutes, maybe 60%.
For medium questions the percentage is lower, maybe 30% I can do in half an hour.
Hard questions I do them in about 3,5hors, 2hours, some in 1h30. With a good number of trials in between (A black swan can go 6-8h).
I generally don't repeate questions but When I do I get ridiculously faster.
That's actually the only situation so far where I can do Hard questions in 45 minutes or less.
BIASED TO SKIP BRUTE FORCE SOLUTIONS
In the past I was biased to do the hardest questions I could possibly do. This meant I skipped easy questions in the beginning and then when I was able of doing hard questions I started avoiding Medium questions. But I realized that each level teaches you something.
I cannot get from hard questions what easy questions give me, I cannot get from medium questions what hard questions give me. I cannot get from easy questions what the other levels offer. they are all important in theirs own way when it relates to problem solving. And they all have their unique flavor. So mixing might be a good approach. you can adjust the ratios of easy, medium and hard questions for your level. but to me it has being good to mix.
Once I have overcame the bias to avoid "easier" questions, I came up with another one, and this is my current bias.
And I believe it can hurt me bad. Very often I see a problem, easy or medium and I see a bruteforce solution and Instead of implementing I just think how I would implement it and just jump after the optimal solution. I fear that this might hurt me when the solution looks like a bruteforce solution. it my hurt me in an interview because I spent too much time searching optimal, and then with little time I might not be able to implement the bruteforce solution, or implemented it very badly.. Because sometimes even the bruteforce solution is hard. So I think I need to change this bias. so in case I cannot find a better solution I should implement it. better something than nothing.
I'm kinda okay with this but I should pay attention to not avoid all bruteforce solutions from now, else I'll risk to lack that basic skill.
LITTLE PARTICIPATION ON CONTESTS
I would like to be participating in contest but I'm too slow, I think I never made more than 1 question in time.
The best I did happened in my forth constest where I have "hypothetically solved" all 4 problems.
Generally just comming up with a logical solution is a nightmare, but for the first time, after probably ~150 problems I was able of coming up with something. but I had to keep going with the plan and I had to cover a number of subjects, and contests where not part of the plan.
So I tried 3 If I'm not mistaken, and hypothetically solved a forth, just mentally, and that was it.
I plan to enter contests in the future with the goal of finishing them only. but maybe I need about 2 months or so.
I recognize how valuable they are, the only downside is that You will not have solution readily available, not only that but you have not the faintest idea whether or not it is a popular question. so for produtivity purposes I decided to not focus on contests for time being. However It's an environment where you surely will grow and if you are reading and are one of those who start doing contests please share your experience, I would like to know. Even if you started like me and slowly entered in contests it would be great to hear.
LIMITING TIME
I capped questions time for all difficulties. Easy at most 30 minutes. Medium at most 45-1h. Hard 1h30.
I can always extend this time but it really depends if I feel I'm close to get a solution or not.
It was not always like this, in the beginning I only stop when I finished the question, but now I know I can solve most questions at least with strength and sweat. So I can allow myself to take shortcut's because I know I can have a logical and critical thinking.
The fundamental thing is to not deceive yourself into thinking you are learning when you are memorizing.
PROCESS DETERIORATION
I'm a guy that focuses in processes, and at the beginning my focus was to create a process to attack questions.
As I decrease the number of questions per day as a result of being studying another things. My process deteriorated. I started forgeting steps, other times consciously skipped them, and in general this has translated in more basic errors which the process dealt with.
I need to revise my process and have the discipline to apply it consistently, this is also a signal of tiredness which I am steadily recovering from (more shortly).
ACCEPTING TEMPORARY DEFEAT
I learned to accept temporary defeat. As I already told. In the beginning I only stopped when I had the question solved.
Whether it took 1h or 6h. It was quite exausting and sometimes it consumed way too much energy. It would overflow to the next day and my performance would sink. One of the most important things I learn with this process is that it is okay to loose the battle.
I accepted temporary defeat. The exercise might not be completed today, or even tomorrow. There were problems I had solve them in 3 consecutive days. others I just failed to solve them even though I felt I was close. Regex Pattern, Strong Password, And Divide Chocolate where some of those I could not solve.
But not solving the problem is not synonymous of losing the war, so you can always comeback. I had to let go my pride to achieve a greater good. And new doors open for me. I felt much better as a person, and as a professional.
This subject is very linked with Resting. Accepting temporary defeat might give you the rest and peace of mind you were needing to comeback stronger.
PARALLELISM
If you have some years of experience you have to study a little bit more, you are going to be tested, at DS, Algo, but also System Design, which I was and still am not bright. So At some point I had to divide my energy between system design and algorithms.
It brought good and bad. Starting with the bad. My Problems solved per day diminish significantly. I was doing perhaps 3-4 questions a day.
And started doing one question a day. Despite it was expected to have higher thoughtput I was always learning new things and doing new exercises every day, but not only, I started doing hard questions and hard questions are very hard sometimes and I could not solve them at first, had to try multiple times. sometimes it took 8hours of dedicated effort to solve a problem. my throghtput really went down. but that was it. the rest were good things. I was used to this new idea where I was doing one exercise a day, I was able to be discipline and respect timings for system design and doing problems.
sometimes I skip system design, in few ocasions I skiped leetcode questions. but I was able to maintain some consistency.
As You know life is not only leetcode and System design so other things where added. I was doing a lot of stuff at the same time and I was delivering. slowly but steadly. I was feeling it, my softskills were soaring. I was evolving as a person, as a professional, as a man. I was eager to have more time again to enjoy my extra focus and do only one thing at a time. But I knew I would still need to endure for some months. I'm still parellelizing, But I'm becoming good at it. and I know I'll have the time to focus in only one thing someday and that's when I'm going to see all the fruits I've cultivated.
So Yes, I was and am solving maybe one problem per day, but I am delivering in many areas of my life. And that's important too.
It was a step for better fitness, better nutrition, better reading, better computer science, it was my renaissance.
LITTLE REST, MAJOR FATIGUE
At my hundreds and something problems I started to feel major tiredness, It was too much to handle. I was dealing with marginal anxiety, but it was enought to messed up my sleep, I was going to bed thinking in problems I was unable to solve, thinking in the next problem to solve, thinking in my weaknesses. There was always something about DS or Algorithms that could come up in my mind before bed.
And it would be worst if I solved a problem before going to bed, "how would be the solutions?" or "I have to check the solutions tomorrow and compare with mine right after waking up". It looks worst than it actually was but I was always thinking in code challenges, and when everything was going well and my confidence was rising a black swan appeared and remembered me that I was still not where I wanted to be.
So, mental unrest was the norm and with it I got physical fatigue. I slept like 5h30 per day for many days and weeks but never gave up.
I kept fighting and fortunately I stumbled in the solution.
A friend of mine almost forced me to take vacations, I limited them to 4 days vacation, where I would still do one exercise a day. I would do no more training other than leetcode, just one exercise per day at the morning and then enjoy my leizure time with my homies.
It was a hell of a turning point. That break was the glue that joined all the dots. That 4 days vacation allowed me to solve issues I was figthing for 4 years, it allowed me to solve much of my mental disorders, and allowed me to see clearly. where I was at, in what state of mind I was in, and what I was feeling for the past 3 to 4 weeks. It was the most important moment of this year to me so far.
And despite what you might be expecting, my produtivity didn't suddently increased. It continued about the same, I was and still am parallelizing. The major difference is that I can rest, now I have no doubts, I can shut down the training mode, I feel no pressure. This is extremely valuable and liberating.
SUMMARY
I met and surpass my expectations at mental level, but lag behind at technical level, I improved though.
the rhythm at which I made this hundred questions was much slower because not only I was doing more difficult question but I was also doing less questions per day because I was studying multiple per day. I Still take a lot of time per questions but I've improved my timings in general. still not optimal for interviews but I'm happy with the progresss. Regarding contest the best I could do was to hypothetically solve one. by finding the solution in my mind only. it was a millestone because generally I wasnt able of doing it. other than that past contests I only did 1 question in time, almost two. There is still a long way to go but the good news is that I'm going to start interviews soon. And I'll have the opportunity to test my Skills. I also need to improve how I deal with information by adopting a space repetition scheme for memory management
CURRENT TECHNICAL WEAKNESSES
NEXT STEPS & EXPECTATIONS
CELEBRATION PROBLEM 200
FOLLOW UP