5 career tips for a software engineer
Background
“Choose a job you love, and you will never have to work a day in your life.” — Confucius
This is a summary of my learnings over the past decade - those I learned on the job as also those I learned from others. This is what I have would have told my younger self (assuming he doesn’t freak out on seeing me ).
Five major tips
Plan on moving from breadth to depth of knowledge
“If you don’t know where you are going, any road will get you there.” - Lewis Carroll
As a newbie, you might not have a clue on the vastness of the software field. There are so many things to explore - programming languages, databases, networking, security, cloud computing, Ops, DevOps, applications (web, desktop, mobile etc), frontend, backend, design, product specialization (eg: ERP) etc.
You should explore as much as possible in the first couple of years to get an idea of what you like or dislike. Go for a breadth of knowledge. Be a generalist of sorts. A one man army !
After a while, you should consider specializing. Why? After a few years in the field, its good to become an expert at a few things to participitate in the communities around them or guide others or just to form your own unique sphere of influence. Eg : A full stack engineer with a breadth of tech in the frontend and the backend and a depth of frontend frameworks (React, Angular, Vue.js).
On the other hand, you can remain a generalist but its extremely hard to be well versed with tech developments on too many fronts.
Check out roadmap.sh to get an idea of a variety of tech paths.
Focus on learning every year. Let it not resemble another
“By far the best investment you can make is in yourself.” - Warren Buffett
The software field is unlike most other fields. The landscape keeps changing swiftly. Something better keeps coming along. Thats due to the power of competition as well as the efforts of the open source world. If you want to learn one thing and keep at it for most of your career, then you will have a hard time here (exceptions will always be there…like Cobol).
At the end of a decade, you want to have a rich experience of 10 years…not the same 1-2 years experience repeated multiple times.
This is the golden age of learning. With the Internet, you have so many avenues of learning - video, ebooks, blogs, books etc. No excuses for getting outdated.
A handy trick to ensure this - update your resume every 6 months. If there are 2 or more times when you haven’t been able to add much to your resume then you know its time to switch to something else.
Every job has pros and cons. Choose wisely
The ideal job would have the following features :
- High salary
- Loads of learning
- Smart and friendly colleagues
- Supportive management
- Great work conditions
- Less commute (or remote work)
- Minimum politics
- Attractive work policies (eg: insurance, car lease)
- Good deal of automation !
Unfortunately there is no such thing as an ideal job. There will always be a few hits and a few misses. You have to decide on which features combo works for you.
The first few years are usually the ones where you will work the most…..you will struggle with maintaining a balance, keeping up with crazy deadlines..even getting 7 hrs of sleep will seem like an achievement at times. But it will be something you will likely look back on with pride. So I would always recommend learning to be the main criteria at this stage.
Every tech/job has a shelf life. Do not ignore the signs
There are those of us who tend to stick around an organization for a long time. It can be 5 yrs for some…or 10 yrs for another. A solid reason could be that you are getting internal opportunities to re-invent yourself ie to keep learning. Other reasons could be big changes in personal life (eg: marriage), high salaries, an established work life balance, the comfort factor etc. However the likely disadvantages of sticking around for a long time are lesser learning (compared to a new job) + your salary might not be at market value anymore.
Automation/AI has arrived. A lot of old jobs are getting redundant due to it. You can decide if you want to be brushed aside by it or gain skill sets for the new type of jobs coming up.
You are your greatest investment. If your learning isn’t at the right level even after repeated attempts then its time to quit.
Have a routine to maintain the balance
“A champion doesn’t become a champion in the ring, he’s merely recognized in the ring. His “becoming” happens during his daily routine” - Joe Louis
We usually divide our time amongst the buckets of :
- Work
- Family and friends
- Health
- Sleep
- Hobbies
- Entertainment
If you don’t set limits, then your work will likely take a good chunk of time from the other buckets. Having a daily routine is the single most important activity you can do to ensure all round happiness. Maintaining a journal is a good way to reinforce this habit while ensuring you don’t spend too much time on Netflix !
Five minor tips
Take care of your digital profile
With the power of the internet, everything you post online is likely to exist forever and searchable. Take care to ensure a clean incident free social media presence - from LinkedIn to Facebook to Instagram to Quora. You dont have to respond to things you disagree with. Most people are likely to enter a debate with closed minds and its likely to be a waste of your time to try and change opinions.
Sites like LinkedIn, StackOverflow and GitHub can help build your brand and provide insights which even your resume might struggle with.
Take pride in your contribution to work while remaining humble enough to learn from criticism
“Try and leave this world a little better than you found it.” - Robert Stephenson Smyth Baden-Powell
Similarly, Uncle Bob says “Always check a module in cleaner than when you checked it out”. Every work you do is a signoff from you. It represents you. As such, you would want it to be in a good state after you are done with it.
Being proud of your work ensures a high quality. But do ensure that it doesn’t have an impact on your ego. If someone points out some issues in it, then you should be humble enough to learn from it and improve further.
Also do note that good quality code requires time. Pay heed to sound architecture principles (SOLID, DRY, KISS etc) while working. Tight deadlines can lead to functional but crappy code. Communicate this proactively before starting out on the project.
Keep it simple
The complexity of the software field with the various options out there can make things difficult.
We should take care that we try to keep it simple - whether its architecture or implementation or even explanations. If we cannot explain the concepts of the work done in a simple way then its likely that we haven’t implemented it in a simple way.
Have mentors and be part of a community for knowledge sharing
“Learn from the mistakes of others. You can’t live long enough to make them all yourself.” - Eleanor Roosevelt
The fastest way to learn is through the experience of others. You are responsible for the decisions you take in your career. Have mentors who can guide you to take well informed decisions.
To get a variety of viewpoints and knowledge in a short time - join a community(eg: reddit group or meetups). Nothing else can give you a 360 degree overview of all that is happening out there.
Also take some time to join the opensource community by contributing to existing projects or having your own side project. Having a project of your own gives you the opportunity to try out things without being bounded by work rules and to unleash your creativity and ideas on a blank slate.
Automation is the key
Taking efforts to automate things ensures that your efforts are not wasted in mundane repetitive tasks. Automating things also can be a great activity to learn and give knowledge sessions on.
Eg : Having an automatic dev workstation setup on your Mac like Formation.
Thats the summary of my learnings I felt would be useful to someone starting out in the software field.
Feel free to share your thoughts. Every bit of knowledge helps .