I have worked across various domains in my Software Development career spanning close to a decade. In every domain I worked, it required me to rapidly ramp up on the new products, familiarize with the development environment & tech stacks, learn the internal tools & frameworks, understand the business ecosystem, and start contributing & get productive as quickly as possible.
The career as a Software Engineer is all about problem-solving and being up-to-date with the latest technologies. Software Engineers are often required to work on the new problems, hence one of their important skill is their ability to pick up a new framework, tool, language, codebase, domain and get comfortable at it quickly.
They have to apply the analytical skills and critical thinking to come up with the best solution for a given problem. The best way to learn any technical skill like Coding or Software Design is by doing and solving a problem. It is imperative to enjoy the problem-solving and keep learning new things in order to grow a technical career.
Technology is ever-changing, so as a Software Engineer you can never stop learning. You need to get your hands dirty, do the heavy lifting, and break things frequently to master the coding and debugging skills. Sometimes it is hard to crack down the root cause of a problem and it really gets on your nerves.
At times you will spend days or even weeks trying to think through a problem and finding the right solution. A narcissist or a person who gives so much importance to himself will not be able to survive long in the tech field as it’s a very humbling experience. You may feel like a dumb and think that you can’t solve the problem at all.
The Impostor Syndrome is quite prevalent among Software Engineers. In reality, you don’t have to be a genius to be a Programmer, anyone can do coding. It is important to possess traits like perseverance and tolerance to be able to continue despite difficulty and struggle. Good programmers never give up unless they come to the solution. It’s important to follow clean coding standards and best coding practices.
Ways to grow the Technical skills and Tech career
Brace for the struggle
Learning to Code, System Design and Debugging may seem to be overwhelming at the outset. You have to brace for the struggle and discomfort. It is an inevitable part of the learning process. Anything looks to be impossible when you don’t understand it.
Break down the problem
The approach of breaking down a large complex problem will help you in solving a problem. Problem-solving is about breaking through the large impediments. When you break down anything then it gets easier to understand and comprehend. I remember when I was learning to swim, how fearful I was of water. I thought Swimming was impossible for me and I would never be able to swim. I used to develop cold feet at the mere thought of getting into the water.
When I broke down the Swimming into small tasks like Floating, Breathing, Kicking and Stroking, I discovered how easy it was to learn one part at a time and practice the same. Gradually, I learned all the tasks individually and would practice them all together. For onlookers, it looked like Swimming, but for me, it was an amalgamation of four tasks being performed together.
Use multiple Tech stacks
A Software Product can be developed using multiple tech stacks like LAMP, MEAN or Java tech stack. There are various other Open Source stacks around. You must have a passion for software craftsmanship and a deep interest in learning new technologies in general, to grow in the technical field.
Take Online Courses
You can take the help of MOOCs like Coursera and Udacity to build your tech skills. Essentially it boils down to your own willingness to learn and a strong desire to excel in your tech career. With the growing competition and oversupply of engineers, it has become essential for your profile to stand out.
Contribute to Open Source
In order to make your profile impressive, you have to do things like contributing to Open Source, participating in hackathon & competitive coding online, building your GitHub profile, and contributing to programmer sites like StackOverflow.
Take Ownership of Work
In any Software Company, it is essential for engineers to grow and take ownership going forward. Project Managers and Product Owners must understand that they can’t just focus on the Products to grow without thinking about the team’s growth. People are a significant part of the Product’s growth strategy. The team grows when employees are encouraged to experiment, fail, try something new and given ownership.
Don’t be afraid to make mistakes
It’s natural for Software Engineers to commit mistakes or break things while learning a new Product or technology. If you did not commit any mistake, that means you did not learn anything new. In a company where the structure is so stringent where a mistake is discouraged or can come with a dire consequence, an employee will be wary & conscious of trying new things. It deters them from getting rapidly productive.
They will not think outside the box or work beyond the defined structure. It is likely to set a precedent against an innovation culture, thereby an individual engineer and the team will not grow, let alone the Product.
In the tech field, you are considered skilled only when you’re able to solve the technical problems and demonstrate the skills to pull off the deliverable. You know nothing if you know only the theoretical concepts. Software development skills like coding and debugging cannot be developed in a day or month. It’s a long journey.
Be patient with Debugging
You have to burn the midnight oil in order to develop such skills. Sometimes debugging an issue is more complex than actually writing the code. While debugging a problem, you need to take a break in between and go for a walk if you have spent enough time on the problem but could not come to the solution yet. You need to restart after a break with the fresh mind and perspective.
Many times ideas may pop up while you’re walking or taking a shower. It is important to have fun while you are solving a problem. When learning a new technology, you have to start small, slow and take small steps at a time. You can’t learn a new tool or framework overnight. Just spend 1-2 hours daily to learn and progress gradually. Make sure you practice the same and create small POCs and Prototype or it will not stay back in your mind.
Don’t depend your company to grow skills
You must understand the fact that you can’t depend on your company to always give you the works you like or help you improve your technical skills. Company’s priority is meeting the business goals, which may not be consistent with your interests & growth. Your manager is not responsible for growing your career. Your career is your responsibility.
Most of the time you have to explore on your own and figure out the skills gap which you would like to fill yourself. You may get trivial works like some configurations, build issues, documentation which will not directly help you in your coding skills.
You may be simply put on the maintenance projects where you don’t get a chance to develop features for the product or write enough code. In this case, you should be proactive in growing your skills by doing side projects and building small products on your own in order to keep yourself updated. Otherwise, you will be outdated soon and lose confidence in your ability to grow your career. Take control of your career by continuously updating your skills.
Develop passion for technical growth
You must have heard of “do what you love” cliche doing the rounds, that got famous following the Steve Jobs speech at the Stanford University. But the reality is pretty different. You build your career by doing what you hate the most. The majority of your tech career will be spent by doing what you don’t like, by grinding hard and mostly working on the legacy code written by previous programmers who have left the organization.
When you are starting out your career as a beginner, you don’t know what your passion is and what you like the most. You discover everything along the way. When I started off my career I had nobody around who can guide me to build my career, to show the absolute path to move into, or give the clear idea on the right technology to learn.
I learned everything through experimenting, failing, and trying multiple things. When you continue to do what you hate and work your way through shit for long, gradually you tend to start liking your work. So the actual mantra is “love what you do”, not do what you love.
Learn about Technology trends
Ever since the advent of computing, there has been a technology trend every 5 years that shapes the landscape of the Tech world. There was an Internet and Dot Com boom in the 90s, an Open Source boom around 2000 and now the current technology trends are AI & Machine Learning, Data Science & Big Data, Cloud Computing, DevOps, IoT, Blockchain & Cryptocurrency, et al.
You have to figure out your area of interest and choose the career path in accordance with that. Be aware that these are mere buzz words and fancy names, the fundamentals are always the same. Get your basics right. Your ability to learn anything new and pick up the tools & frameworks as you work anywhere is the way to go.
The perk of working in the tech industry is that once you fix any coding issue or solve a hard problem, it gets sort of addictive to solve more problems and write more codes. It increases your confidence in your ability. You start enjoying the process and get a sense of fulfillment.
Work on your “Why”
Enough discussion on “How” to grow technical skills, but these all learning won’t be possible without your strong “Why”. Around 90% of folks are not willing to learn new skills, either they have become complacent in their current job or they are too lazy to upgrade themselves. The vast majority of the folks don’t want to break their status quo.
There are hundreds of resources already available online to learn Coding, System design, Tools & Frameworks, and latest technologies, but how many folks try to learn those. They watch some random YouTube videos or waste their time on social media instead. Chronic procrastination seems to be looming large.
Though it is true that the life of a Software Professional is full of challenges in almost all metro cities. Apart from the usual 8-9 hours of office time and 2-3 hours of traffic time, you hardly get any time to update yourself on new technologies or work on the side projects. It’s not easy to manage the time & energy to keep up with the demand for a technological career.
There is a steep learning curve for any technical skills. You will have to steal some time from your personal family time or deprive yourself of some sleep or try to squeeze time on weekends amidst personal works.
There must be strong reasons to be able to upgrade yourself. No amount of resources or suggestions will help unless you have an intrinsic motivation for the same. Extrinsic motivation like money alone can’t help you survive in the technical field for long.
In the days of super busyness and instant notifications, it has become less about the time management and more about the energy management and attention management. Look around, resources are everywhere, its how much you are willing to sacrifice on your comfort that matters.
You must get a clear sense of “why” are you doing what you are doing. Your “why” must be bigger than your discomfort. You can either crib & complain or grind & grow, but not both !!