It struck me the other day that I’ve been programming at work in some capacity for nearly ten years and as my main professional responsibility for six. Over the course of that time I’ve learned a few things, some of them the hard way, and I’d like to share a few of those things here.
Be coachable and accept feedback
This is absolutely crucial. You should strive to maintain humility throughout your career, but especially at the beginning, where a lack of coachability will directly interfere with your ability to learn and grow as an engineer. Those moments when you find out you made a mistake or a coworker offers honest feedback are worth their weight in StackOverflow posts. You are not expected to know everything.
If you respond to feedback in a less than gracious way, say by being defensive, getting angry, or arguing, you will discourage others from discussing things with you, not to mention decrease your effectiveness and reputation. The best path forward when you hear something negative is to listen, ask follow up questions, and learn what you can from the experience.
Find time to learn every day
This is important for your career and your personal job satisfaction. Many of us were drawn to this field initially for its dynamism and ever-expanding opportunities to learn and troubleshoot something new. Some of us are lucky enough to learn something new in our everyday tasks.
While that certainly makes things easier, everybody should try to learn a little bit about something they are personally interested in every day. This advice even applies to folks learning to try to get a better job. Try to find that balance between learning things valued in the market and those you find fascinating.
If you coast too long without learning anything you’ll soon find yourself hopelessly out of date.
Ask questions
Be assertive enough to question anything and everything. Learn why decisions are being made and how things work. Sometimes, just by asking a question, you’ll reveal a glaring blindspot in a proposed architecture or algorithm. Anybody can do this. Even the most junior engineers. Questions are powerful and valuable.
You won’t look bad by asking a question, even if it reveals you don’t know something. It is better to learn that quickly rather than a hundred unasked questions later when the house of cards of your ignorance comes crashing down in a spectacularly public way. In either scenario, the folks you work closest with will know what you don’t know. Be a team player, be humble, set yourself up for success, and ask what is on your mind already!
Maintain work/life balance
Keep things in perspective. No company is worth sacrificing your health. Keep that in mind when you find yourself tempted to work in the evening or during the weekend. Ask yourself why you are wanting to do this. Is it because you feel stressed out about a deadline? Do you feel that you have too much work to do? Are you hoping folks are going to notice this extra hard work and give you a raise or promotion?
While there is certainly the rare occasion where despite good planning and assertive professionalism you need to work extra to meet a deadline, most of the time the issue is better addressed by talking to your supervisor. If you’re being overworked or receiving unrealistic deadlines, they should know. And if it’s for the promotion, accept that’s just not how promotions happen. In the rosiest of conditions they happen as a result of taking a lot of initiative/ownership and in the realistic average company it involves a fair amount of campaigning, schmoozing, and visibility. Once you’ve reached the minimum level of competency, it has nothing to do with your skills.
Ask yourself, “Is this the most efficient use of my time right now?” Followed by “efficient for whom”? You have goals and values too. Ideally the goals of your employer and yourself coincide. Occasionally they do not. When you have the urge to work later than you need to, ask yourself if those extra minutes are worth sacrificing time for family, friends, or your own career development. You might stay later to explain a difficult topic to a junior engineer which could fit in with your values of paying it forward, mentorship, and caring for those around you. On the other hand, you might be staying late to get something done just a little faster, which to be perfectly honest, might not be a good use of your limited time on this planet.
Take ownership
Something really important to your long term job satisfaction, career growth, and promotion-readiness is learning to take ownership. What I mean by this is that you need to realize that you aren’t just a passive clump of moss growing on a log absorbing all the things life throws your way. In fact you have the power to make things happen. Stated another way, you are often the object receiving an action in the grammatical sentence of the universe but you are also the subject and the verb.
Don’t wait for someone to gift you an opportunity at work. You have the power to create your own opportunities. That starts by taking ownership and responsibility for something. Anything you see as a problem, inefficiency, or an opportunity will work. Think big, like “I want the product I’m working on to be the best it can be.” Ideas will naturally flow from there. You’ll find yourself speaking up more in meetings, proposing more ideas, and catching more bugs. Ownership is fertile ground for taking initiative. You’ll feel more empowered, more effective, and most importantly of all, you’ll find more meaning and satisfaction in what you’re doing.
I remember believing that if I worked hard enough, and produced enough quality work, that I would be rewarded with more challenging opportunities and possibly a promotion. I waited a long time and those things never materialized. By the end of that period of time, I felt frustrated, powerless, and angry.
I learned the hard way that quality work and a good work ethic isn’t enough and that opportunities are created but rarely awarded. Things changed when I realized my own power to effect change and create opportunities.
Take ownership, not just at work, but also in your friendships, relationships, communities, and life in general.
Take action if you aren’t happy
If you aren’t happy at your current position, even if you’re usually a hard-working employee that likes to do things well, it will eventually leak out of you as reduced productivity and increased irritability. You will do things subconsciously to make it even less likely you’ll get that sought-after opportunity.
Pay attention to this important signal. It means either your mind or your environment needs to change. Untangling the two can be tricky but I recommend sitting alone sometime and asking yourself why you’re so unhappy. Try to be honest with yourself. What would you like to do more of? What would you like to do less of? Is there something toxic or fundamentally stressful about your work environment? Is it it financial pressures or a desire for a new title?
After diving into the why, you’ll have the necessary insights for the next question: Should you stay or should you go? In order to answer that question, you’ll need to know how much of your current unhappiness can be decreased by changing your mind. Sometimes changing your perspective can improve your satisfaction. Sometimes we latch onto things like salary or a title, and blame the lack of those things for our unhappiness, but it’s not always the true underlying reason. Really ask yourself if receiving those things will solve your dissatisfaction.
Whatever you do, do something. Life’s too short to just coast along.
Take the risk of being wrong
There was a time when I was afraid of being wrong or inadvertently letting people know I didn’t understand something. That fear held me back. It stopped me from taking the risk of stating my opinions or offering my honest thoughts in meetings. Thankfully, reasonable people in this field don’t expect you to be right all the time. So let it go, make mistakes, be wrong, be daring, and learn what you don’t know.
Learn data structures and algorithms
While it’s not super likely you’ll ever implement graphs, binary search trees, Dijstra’s algorithm, or creating a function that returns the nth prime number from scratch at work, these will be the criteria by which you will be evaluated in technical interviews at small and large companies. You can get pissed off, stomp off at how unfair that is, or you can appreciate the fact that this is a blessing. Before you go to any technical interview, you know the questions that will be asked. Everybody uses the same questions. If you had the opportunity to learn all the questions before taking the SAT, wouldn’t you do it?
Learning and memorizing these things will help you negotiate more senior job titles and salaries. It might even help you become a better programmer.
Steer clear of dying or undervalued languages
I transitioned into software engineering slowly, first by building HTML emails, Excel macros, and simple web pages, and then scoring my first full time web dev position building Drupal/Wordpress websites, and then later on in the same position, small APIs and Angular apps. My first full-time web dev job was wonderful for the opportunity it afforded me to become more fluent in HTML, CSS, PHP, and Javascript. Unfortunately, as I would learn later when I started interviewing around, the main technologies I was working with (Drupal/Wordpress), effectively capped my career potential at a low salary.
When I started applying for the next position, I slowly learned there was a strong market bias against engineers with WordPress, Drupal, and PHP experience. Perhaps this is old fashioned elitism, widespread disdain for the PHP language, or a few folks seeing the writing on the wall with newer and easier solutions for personal and small business websites coming out daily. There were recruiters who swore to me I would price myself out of the market if I asked for 60k in the DC area.
Once I realized this I shifted my efforts into gaining experience in more valued technologies like Angular and Node. A year later, I had built enough of an argument for myself to propel myself out of that work to a higher paying job using more valued technologies, which in turn eventually lead to my current position.
The lesson: Pay attention to what technologies are waning or undervalued. Invest the time in learning the languages valued by the market. It is easy to get trapped in low-paying dead end jobs.
What do you think?
Have any tips you’d like to share from your experience? Share them below!