Let me start off by this simple quote:
The Only Way to Do Great Work is To Love What You Do - Steve Jobs
The best way to inherently learn more is by doing what you really like. Say it’s software dev, farming, carpentey or any task. If you enjoy/like it, you would love doing it and also learn from experience. This is what we already know. Our mind simply grasp things that we really like and if we put in more work in the same, we will become better on that. I thought I would say this first because, this is something I always told myself in my head.
Understanding the problem well
This is infact the starting point to any thing we do in life. To understand the problem so well so that, given any question from that domain in question, you would come up with what we can do to solve it. Infact, we don’t need to “learn” anything for this. It’s just standing within the dot, look where you are standing and look in all directions and see where you can go from there.
This is the one thing I’m still working to improve. To understand the problem/need very well. Because, in the end everything used to be simple. And most of the times, things boils down to very basic questions when we are stuck at something big. Another thing which might lead to the same situation is when the question/problem/need is unclear or something is not clear somewhere. See, things will come down to the very basic thing. Everything used to be like that. So understanding that is the first thing to do. I would not mind if I take more time in understanding the problem than brining up the solution. Because sometimes the question itself may be complex. This depends on people/experience.
Breaking down the problem
I wish I could share my experience here. But it’s always good to give the high-level view to make this idea broader. I remember I wrote one blog on this same topic. But I’m going to add one more point here. And that is to take any project/problem X and try to understand in which part of X you are working on. Say that you are working in OpenCV. And you have never worked in this library before. But you have given this giant project of thousands of lines of code and you are given a task to plot a rectangle on capturing humans from camera.
Given this task and you don’t know where to start. This is where breaking down the problem comes. Understand the need. Then before you start to touch the actual code base, create one on your own by implementing the same. Say you’re working in Python, you would:
- Install Python venv and requirements
- import cv2 lib
- look and see available methods
- Start off by doing what you are trying to achieve in the interpreter itself or in a fresh new file
Note, you don’t have to read the entire manual. I will say just to get feel comfortable with the lib and understand what it can actually do by reading the function description. The rest of the the things are googling and Stackoverflow. Again, if you know what exactly to look for, we’ll have no trouble finding it. This is where people who understood the problem will take advantage on what to look for.
Be flexible and ready to do everything
Obviously, we cannot do everything in life as we have no super power or no such crap. The word “everything” here means to do everything within your domain or this can also change if you are confident in something. You see, it’s not very easy to express the meaning of “everything” here. It can go in-depth. Infact, I used to think some quotes are misleading or missing some important aspects within those short words. In the end, meaning of such quotes are interpreted differently by each individual.
In my opinion, everyone who does something by studying/planning before committing is an engineer by definition. It could be that someone is planning to farm 2 acres of banana plantation. Professionally, if you are a software engineer, you should be flexible to do things within the domain. Say one day you have to work in a Machine learning project, or a Java project or say any such thing. It’s easy to say that we don’t know it. I understand. I felt the same way. But said you don’t know X because it’s hard for you. But thing should be that, no-one will expect you to complete the stuff in given time. Infact the team might be expecting you to support the project because they know that you don’t really have good understanding in X. This is a chance for you to learn something new. This again goes to the starting point, which is to love what you do. But hey, if you can simply opt out from the choice/decision, then it’s good to work with what you already know.
Where I work, I saw few senior devs who are jumping into different projects after one is done. Java, Js, Kotlin and so on. I kept wondering how do these people are so productive. This was a thought in my head. One time, I got a chance to meet with one of those kinds. And I’ve asked this. “How do you manage multiple projects in multiple languages tho you didn’t choose to do”. What he said is remarkable.
“These programming languages are just tools. I worked in Java for 3+ years. That’s enough me to know how programming language is built. Few weeks back, I was added to a new team and they were working in a Kotlin app. I didn’t know Kotlin. Infact, I started to do things. I felt it’s a mixture of Java and Js somewhat. In the end, these are just tools. We can look up the syntaxes in Google and start doing the actual thing. Syntax change is the only thing taking a little bit time for me to do the actual thing "
This is what made me think a lot. Truly, once we learn one thing, it’s very easy to switch to another language. Take your mother-tongue and English as a foreign language. We express the same thing in just 2 different languages.
Since programming is English, it’s only a matter of learning the syntax and we’re done with the new one. This is when I came to know what it means to be “flexible” as an engineer. But I accept the fact that learning a framework can have its own learning curve.
You’re always learning
This is the takeaway. You gotta find enjoyment in whatever you’re doing and don’t forget to take a moment to think about what all things that you have managed to learn after doing X for few day(s)/hours, and appreciate yourself. Sometimes, acknowledging that we don’t really know something will open up chances to become better at it, infact opportunities will come to you if you’re willing to do so. In the end of the day, take everything easy and slow. Don’t push ourselves into burnout. This is something we should really care about.
As always, send your suggestions, opinions - [email protected]
All right! A pleasent week is coming up. Do your best guys!
Remember, you’re awesome!