Advice for 20 Years Old Self: 20 Lessons of 20th (Part 4)
Every one of us has some moments of life when we turn back and reflect on the past. Often it is the age milestones such as 20, 30, 40, 50, etc., that cause us to turn back and summarize the past experience and recall the main lessons learned from it.
I am sharing Part 4 with the things I would advise my 20 years old self. Things that were helping me during my journey as a Software Engineer and had the most profound impact on my life and career. You should read it if you want to learn the main insights of the 10years journey of a Software Engineer in just a few minutes. I hope you will find something useful for yourself here. Enjoy the read!
Lesson #10: Compare Yourself Only to Your Yesterdays Self
If you take a minute to think how often while scrolling a social media profile of your Facebook friends and some "successful" people, you feel jealous, sad, anxiety. It happens because you compare yourself to what you see. While doing that, you assume that many of them are top achievers, and they are far beyond your reach. And as a result, this drains your life energy.
As a Software Developer, you may work with more experienced colleagues who are more skillful than you. And without putting thought into it, your brain will try to compare yourself to them, which will cause mental discomfort and motivation leaks.
It is how I felt most of the time during my early 20th. But self-education helped me to reveal the truth. Most of what you see there is either not real or does not matter.
I realized that the only thing that matters is your progress compared to yesterday's self. That is all you need to make constant progress.Â
I decided that the only information I would consider to the comparison equation is my yesterday's self. I also quit using all social media. All of that had an irreparable positive impact on my mental well-being.
The book that pushed this paradigm shift was The Defining Decade: Why Your Twenties Matter and How to Make the Most of Them Now by Meg Jay. I highly recommend reading one.
Remember, you can't know the naked truth about people you compare yourself with. Take everyone's public image with a grain of salt. The truth is always behind the scene. Focus on your life at this moment and define what next step you can make to make one step forward towards the life of your dreams. And act on it!
Lesson #11: Goals vs Systems
A goal is a destination where you want to get. The system is a vehicle that will get you there. It is a series of consistent actions you need to execute recurrently. And it is the actions you can improve and adjust on the go.
People who focus on goals and miss the system rarely achieve them.
The goal is wanting to become a Software Engineer; the system is a written down plan for the next half a year with a list of courses and supplemental material for every day. It is a list of projects you plan to build during that time and allocated time in your calendar for that.
The goal is to lose 30 pounds. The system is scheduled time frames during a week for going to the gym. It is every day's choice of the right meals.
The goal is to read 50 books a year. The system gets those books and schedules uninterrupted daily time for reading.
When I was learning Software Engineering, I got a good abstraction for this life concept during studying algorithms. The algorithm is a set of steps a computer should execute to achieve the results. And each time the algorithm run, the result will be the same. If I wanted to change the output, I needed to change the algorithm.
The second notion is an Asymptotic Notation. Many algorithms do the same things, but some do it faster or consume less memory than others. This notation allows us to analyze the performance of algorithms and define how fast they are and how much memory they need.
Same with goals. To consistently achieve them, you need an algorithm or else the system that will get you there. Then you need to improve that system to get you there in the most efficient way.
Lesson #12: Simplify First, Optimize Second
Optimization is steps to make the process of doing certain things consume fewer resources. Simplifying is steps to make doing those things unneeded but still getting the same or better results.
Does optimization sound like a great thing to do? It only "sounds" like a great thing to do, but if applied prematurely, it could paralyze you and jeopardize your progress.
Premature optimizing is spending a lot of time defining which bicep exercise is the best out of all before even getting a gym membership. Simplifying is getting the membership and starting the habit of going to the gym.
Premature optimizing is building fine-tuned monthly budget optimizing each spent cent while earning a minimum wage. Simplifying is improving skills to increase income.
Premature optimizing is writing a software solution and trying to implement the most efficient algorithm possible to achieve the goal. Simplifying is using the existing solution that already solves that problem.
Premature optimizing is trying to go for a perfect and super optimal solution for a complex problem before even writing the first line of code. Simplifying is making a solution that works and optimizes it whenever necessary.
It may sound that I consider optimization as something not important. But it is not. I think it is vital, but it is crucial to understand when to apply it.
"Complex systems when optimized increase complexity, simple systems when optimized increase simplicity".
I see this often in Software Development. Many developers, including myself, when implementing new features trap into the flaw of trying to write the most optimal solution right away. This often causes the developer to sit at the pile of fast code that does not work. Have you been in such a situation? One of my favorite quotes from the pioneers in software development:
"Premature optimization is the root of all evil" - Donald Knuth
One other thing I noticed in software development. Many try to solve all the problems on their own to implement the most optimal solution for that problem.
Most of the time, the problems they are trying to solve are not unique. Hence, an optimal or at least good-enough solution for them is already available.
So the simplified approach would be to search for an existing solution first, and if one does not exist trying to implement your optimal solution.
So the next time when you face a new problem, take some time to understand the simplest ways to solve it. Then when you find a simple solution and make it all work, optimize it on demand.
"Make it work, make it right, make it fast"- Kent Beck.
There are currently no comments