Today I want to share with you the best lessons I learned from completing two 5+ hour long coding challenge livestreams. Then Iâm going to share some tips on setting up your own challenge so you can get stronger at whatever programming/engineering area you want to.
If you havenât attempted a challenge like this before then youâll want to stick around because there are just some things youâll never learn unless you truly test yourself.
Most people are afraid to test themselves because itâs uncomfortable to face the truth on a lot of things we think about ourselves.
Those who fail to truly test themselves and push their limits and the ones who will truly fail.
In this newsletter Iâm going to cover:
I decided to take on two challenges:
I wanted to take these challenges on because Iâve been in a rut.
I wanted to push myself and test myself to see what I was capable of.
And hereâs what I learned.
Itâs easy to say weâve mastered a programming language after using it for so long but the truth is unless weâre using all the aspects of the language day in day out the chances are youâre going to forget a lot of it.
Especially over time, our brain is always forgetting things and as we get older our brain leans towards generalising knowledge gained instead of specifics for efficiency.
This article by the Harvard Gazette goes over the concepts of memory and forgetting.
Thereâs also the Pareto Principle, the 80/20 rule (I wrote about the Pareto Principle in another newsletter in more detail relating to software engineering.)
Most people will only use around 20% of a programming languages features and thatâs absolutely fine.
If thatâs all you need to do your work then no problem.
But there will be a natural imbalance in what programming challenges you can tackle.
Programming language features are tools and like tools theyâre better at certain jobs compared to others.
I didnât really know the Math functions in JavaScript very well. I didnât even know what was in the toolbox.
This next lesson is kind of the antidote to this one.
Even if you code for a living chances are youâre working in the same sorts of problems and similar kind of technical problems most days.
Whether itâs front end, back end or infrastructure youâre most likely tackling problems youâve already faced before.
I know thatâs the case for me. Iâve been doing mainly front end work for quite a number of years even though I started out as a true full-stack developer.
This means when I came across more data and algorithmic based problems I struggled once the examples started getting harder.
Specialisation is a double-edged sword.
Youâre very good at what you do but what you can do is smaller in scope.
Tackling a wider variety of problems sharpens your pure problem solving skills. You have to critically think about the problem as you canât just rely on experience to solve it.
I plan to keep doing challenges that take me out of my comfort zone for this reason. I want to become more versatile and anti fragile.
This was my first attempt at taking on a challenge with full transparency of the public eye of YouTube.
The fact that anyone watching was going to see how bad my code was, how much Googling I was doing (tried to minimize this and practice recall but letâs not kid ourselves) and where I was getting stuck.
This gave me motivation to really zone in and concentrate on this challenge because my pride and reputation are on the line for this one.
Itâs also authentic and shows what really happens behind the scenes when people are working. Something you donât normally get to see unless you work with that person.
Coding live also gave me the opportunity to reach out for help to anyone who was watching through the chat. There werenât many people on but simply being live in public gave made it a possibility.
Itâs also kind of scary to do these things openly which adds a different kind of motivation and fuel. Similar to when people get up on stage to present at a conference etc.
Hey Tom, thereâs evidence on this! Yerkes-Dodsons law:
- Things you are mostly good at or simple tasks (speaking), the higher stress helps you (no mistakes)
- Low stress make your performance on simple tasks worse
- However, difficult tasks, the high stress would make you worse pic.twitter.com/bSwUSwcLNBâ Zach Highley (@ZachHighley)
October 29, 2024
The majority of people respect someone who is willing to get up and take a chance. They know itâs not easy to do and most people will not mock them for trying.
Itâs a challenge! Itâs a chance for crazy, funny things to happen!
We choose to take on the challenge and as much as we want to beat the challenge itâs not the end of the world if it doesnât work out.
People perform better when theyâre having fun.
Theyâre relaxed, they focus better, they get in the flow and the best version of themselves gets to shine.
Youâre setting yourself up for failure if your challenge is not at least enjoyable in some way.
It doesnât mean it has to be easy, quite the contrary, if it was easy it wouldnât be a challenge but make it an enjoyable or find a way to enjoy the process in some way.
Use your favourite tools and frameworks, use a new tool youâve wanted to use for ages, make the output something you really want or the inputs something you really like doing.
Your brain remembers far better when emotion is attached to an experience of learning.
Good or bad emotions work just as well.
I remember the absolute cringe I felt when I had to admit Iâd never written a Fibonacci function before! Iâll not forget that in a hurry.
Kobe Bryant was known for being obsessed with the fundamentals on basketball.
Heâd be up practicing and drilling the absolute basics over and over again.
You canât build on weak foundations, only a solid base of fundamentals will allow you to truly grasp the more difficult and advanced concepts and techniques.
This goes doubly and more for software engineering and programming.
After a 90 minute working on fundamentalsâat 4 amâKobe Bryant was asked, âYou are the best player in the world. Why are you working on fundamentals for 90 minutes?â
Kobe responded, âHow do you think I became the best player in the world?â pic.twitter.com/McFNXFuaAE
â Jacob Espinoza (@MrJacobEspi)
October 1, 2021
You never truly master the fundamentals, you always need to practice to keep things sharp and clean.
These challenges revealed gaps and areas where I know I need to strengthen.
I can go away and target those to build up my fundamental base and become a much better engineer overall.
Each of these challenges had a strict time limit. That was the main part of the challenge
And because of that I had to be smart and deliberate on where I spent my time. I had to balance code quality with timeliness.
If I was completely stuck on a challenge I could move onto something else and give my brain space to think about it in the background and get some wins elsewhere.
I wanted to win so I had to focus and stay as productive as possible.
Parkinsonâs Law states that âwork expands so as to fill the time available for its completionâ. So if I have less time to do something Iâm going to have to find a way to get it done.
As much as Iâve improved I still struggle to get things done. If I know I have time Iâll naturally ease off a bit. But if I donât then Iâll make sure I get it done, especially if the consequence is adequate enough.
if youâre struggling to make progress in whatever endeavour it might be try setting a time limit and a no way out clause.
For example writing this newsletter can take up to a couple of hours (Iâm a slow typist and improving writer) so I set myself a deadline of 10pm on the night I write it and if I go over I either miss it or publish it incomplete.
Give it a try.
I did not complete either of the challenges I set for myself.
Some of the work was embracingly bad for my own standards. No excuses, I just failed.
But Iâm still here.
The sky did not fall down, the world didnât end, the fact that very few people were watching is a benefit but nobody mocked me or anything like that.
We keep moving forward.
Confucius says:
âA man is great not because he hasnât failed; a man is great because failure hasnât stopped him.â - Confucius
And I wonât let it stop me from doing more challenges.
Learning and growing can be painful, not always, but definitely can be.
The real failure is never testing yourself and giving yourself the chance to grow.
Iâve grown plenty from these two experiences and also at the end of the day, who really cares if I failed?
Chance are, nobody, except me.
I wonât stand in the way of my own progress because of my own vanity or pride and neither should you.
Read the lessons Iâve share here. Choose a challenge linked to something you truly care about doing. It can be:
Donât do 100 LeetCode challenges just because someone told you too.
Make it relevant and make it meaningful.
Donât forget to enjoy the process no matter how difficult or painful it feels.
Remember the saying, âstrong men create good times, good times create soft men, soft men create hard times and hard times create strong men.â
Do the hard things, eventually youâll become strong.
Thanks again đ
Sign up to my weekly newsletter for software engineers/developers that want to grow. I share my past successes and failures so you can get a head of the rest.