An honest confession and a strong commitment.
27 June 2021.
It is 3:10 am on a Sunday night and I got something to confess. And something to commit.
I read somewhere that making confession public takes away the guilt and making a commitment public adds social pressure to fulfil it. So let's see if this psychological trick works:
--------------------------------------------------------------------
FIRST, THE CONFESSION:
After gaining 4 years of industry experience, I tried my hands again on Codechef last Wednesday. I had almost quit solving problems there. It felt like I am back in college.
And what I realised is that I cannot solve a single problem now. June cook-off started yesterday and reading the very first problem, I got immobilized. I got anxious reading the problem statement and I closed the tab. I didn't even try. Went back under "beginner" section and solved a very silly problem just to butter my ego. Just to say to myself "I am not that bad yet". But deep down I knew that's not true.
In short, My coding skills have become complete GARBAGE!
I have no idea how I cleared my job interview.
Back in 2017, I was very active on Codechef and a little on Hackerrank. I had solved more than 250 on Codechef but discontinued after I started my first job. It didn't interest me much after that. I am still a 2-star coder. When I quit coding there in 2017, I had solved almost 250 problems in a year or so. And my total submissions today are only 300+. In other words, I solved only like 50 problems in past 4 years (Under "beginner" category ofcourse).
Now honestly, I was not that good back then as well. I could solve only a few "medium" level problems back then. But atleast I was consistent. I was coding everyday. I was getting better everyday. Had I continued, my skills would have been at another level today. I quit something that I enjoyed and also something which career required me to do.
The worst part - The more touch I lost, the more useless I felt Codechef was. A tiny part in my brain knew that I am just running away coz I can't keep up with the new coding geniuses. It would require me to learn a lot to keep my game up. Infact it would require me to re-learn a lot of things from my academics again. And my ego kept me away from learning more. The ego kept saying "I already have a job. And a good one. Why should I study more? I don't need it." And I believed this coz I could always hide behind my job title.
The realisation got worse when I tried reading a solution to some "medium" problem. I realised that I had not only lost touch from competetive coding, I have forgotten things like fundamentals of algorithm design (DP, Divide and conquer, Backtracking, etc.) and also a lot of data structures. Also, I learnt analysing algorithms in a very hacky manner in college. So I was never good at it even before. I never learnt the theory well. My fundamentals were never that strong. I simply memorized in worst case a Quick Sort algorithm runs in O(N^2) time. Never understood "why?".
Wednesday was a sad day. I realised I had slowed down as an engineer all this while.
-----------------------------------------------------------------
NOW, THE COMMITTMENT:
Next day, it took some time to cheer myself up. I gave myself a small pep talk.
Things have to change. And it has to start changing now. Not tomorrow, not on the weekend, not next monday, not in the evening, but NOW. RIGHT NOW. At this very instant. On a thursday morning.
I pulled out my old CLRS, CTCD, The Algorithm Design Manual, and Programming Pearls from the back of my bookshelf. Just holding the books in my hand was making me excited. :D
Setting the ego aside, I committed to myself to re-learn everything again from algorithm design and analysis to basic math to basic problem solving to every college stuff and beyond. At the same time, to start coding on Codechef again starting with "beginner" level problems.
Coz if going back to college days and re-learning the fundamentals and gradually moving to more advance stuff would mean in 1 year from today my knowledge would compound to much higher levels, I am ready put all my time and effort into it.
It has been 3 days and I re-learnt algorithm analysis, recurrence relations using mathematical induction and master theorem again. And much faster coz I still have muscle memory. :D.
Infact I understand stuff even better now. Better than every. I didn't just memorize tricks to analyze time complexities. I got the fundamentals clear. I spent time solving 100s of analysis problems on paper. I have proved more than 100 recurrence relations on paper.
I made mistakes, I learnt, I corrected, made more mistakes, learnt more, and so on. In just 3 days. The notebook does not have pages anymore. :D
And Computer Science is even more exciting now. More than it ever was. It is so much easy when the theoretical fundamentals are clear.
I realise that competetive coding is about how many problems one can solve practically. But to do that practically, and to do that well, one needs these fundamentals.
Honestly speaking, master theorem is something very new to me. And is f'ing interesting. I ignored this beautiful piece of Computer Science literature back in my college days. I didn't even know what it is. I believed it is some theorem that can give you solution to any problem and is only practical in theory.
While learning the masters theorem, I learnt about different kinds of functions like decreasing and dividing functions. Something I didn't even know it existed. And it is so interesting. I learnt something so fundamental like how to calculate a logarithm on paper.
This is now giving me adrenaline rush. It is time to dive into algorithms design techniques starting with Divide and Conquer. I just started with something as simple as Binary Search. And trust me, I am looking at Binary Search from a very different angle now with the backing of all the theory I learnt in the past 3 days. Never knew Binary Search could be so amazing. :D
Dividing a large topic over multiple days and focusing on learning 1 thing in a day is the plan now. Plus, the muscle memory is helping. :D
Just writing this article is giving me chills.
Lets see what happens in a year :D
Just for reference - My 2-star below-average Codechef profile: https://www.codechef.com/users/adisingh007
Software Development Engineer In Test @ Priceline
3 年That’s a really honest and the most relatable confession Aditya! The best part about this is that you are consistent in your approach and as they say “Consistency is the killer of self-doubt”. Good luck and Thanks for sharing your journey of getting back at it. It helps :)
Assistant Professor at Shree L. R. Tiwari College of Engineering
3 年Brilliant article...?
Software Engineer at MSS | Payments & Stable Coins.
3 年Very well written.!
Cloud Application Modernization Engineer @ Google | CNCF Kubestronaut | Google Cloud | Azure | AWS
3 年There is nothing bad in losing touch, but it’s much more great that you self instropected this problem and decided to work on this solution. And knowing you from then I believe it will be a sinch for you. Good luck
Senior Software Engineer ?? JavaScript ?? Python ?? Go ?? API & Distributed Systems
3 年A very honest introspection! Even though I have half your experience, I can relate to most of what you said. Time to restart the grind!!