Note: This post started out as a mostly buried Reddit comment that the author, Jonathan LeRoux, was asked to build these ideas out into a complete post.
- Finding a language you like working with
- Fix a problem you have
- Publish your work (publicly)
- Tips for maintaining a healthy mindset
“Oh, man. I’m so stupid and unprepared compared to other devs. My boss is going to realize how incompetent I am and there’s no way I’m not getting fired.”
This train of thought was a common theme in my head as I first set out into the working world as a software developer at a law firm. This thinking quickly gave way to constantly feeling inadequate to other developers, feeling like a fraud at my job, and like an all-around idiot when it came to writing any code at all.
After a few short months, the excitement of finally getting my first real programming job — improving and maintaining a web-based research platform — morphed into absolute dread, and those negative thoughts continually weighed on my mind. Even after I moved on to working at bigger, faster-paced organizations (fielding more responsibility than I felt qualified to handle), and then finally starting my own business, those thoughts continued to eat away at me.
I always felt like every line of code that I wrote was clunky, inefficient, and would be absolutely destroyed if shown to any other competent developer. I just knew that I was as dumb as a sack of hammers and it was only a matter of time before people flung back the curtain of my “skills” and saw me for the fraud I truly was.
Sound familiar? If you’re like me, and like the vast majority of software developers, it likely strikes close to home. Do you know why? Because everyone — developer or otherwise — feels exactly this way nearly every single day.
Your first encounter with this overwhelming feeling of inadequacy and ineptitude is actually an important milestone in your career as a programmer and serves as a crossroads for how you’ll shape yourself, your career, and your personal success for years to come.
I’m not a master developer by any stretch of the imagination, but I have had the privilege of learning a lot along my career (read: massively failing a bunch of times) and discussing what I’ve learned with some truly awesome developers. From this, I’ve found there are some key strategies for improving yourself and your career prospects as a fledgling dev, and keeping yourself in a healthy mindset while advancing in your career.
Improving Yourself and Your Career Prospects as a New Developer
Whether you’re looking to land your first job, or you’re eyeing a potential promotion, you’re going to be competing with other developers at some level. To make sure you stand out from the pack, there are a few key steps you can take to position yourself for success.
Find a language that you really like working with.
Becoming a better programmer requires that you pratice programming regularly and broaden your experience with different languages and technologies, but with so many languages available, it can be extremely confusing to know where to begin looking when hunting for a language that best fits your problem solving style.
If you don’t already have a specific language in mind that you would like to experiment with, I would recommend searching through job-hunting websites like Stack Overflow Careers, Indeed, and Monster to see what languages are the most sought-after. If your desired or current position demands that you have a firm grasp of a specific set of languages, however, then that’s a perfect place to start your research and practice.
No matter what languages you happen upon and choose, the key is frequent practice. Experiment with different languages, code through some small examples, and build small projects with them. Once you’ve found a language or set of languages that resonate with you and how you approach problems, stick with it and practice regularly.
Find a problem, inefficiency, or anything that simply irks you.
As I advanced in my career, I landed a position at large hospice organization as a web developer. Though my job primarily focused on improving and maintaining our online billing and CRM systems, there was a frequent complaint from many of the medical staff: our patient reports ran horribly slow. It irked me and it irked the staff even more — it had to be fixed.
The hospice was run almost purely on Microsoft technologies, and our databases were no exception — Microsoft SQL Server (MSSQL). Though it wasn’t the query language I was most comfortable with, I researched, read, and practiced building small MSSQL projects at home. Through my work, I was able to build some sample reports to show the database admins how the reports could be improved. Over time, the optimizations I helped implement landed me a promotion, and eventually, at another organization, the skills I learned by fixing that problem helped me land a database admin job.
The best way to grow more comfortable with a language, and fuel your motivation for learning, is to use what you learn to help solve a problem that annoys you. You’ll not only learn the language itself, but also how that language can be applied to real-life problems.
Publish your work publicly to Github or other public code platform.
Even if you don’t think anyone will use it, like it, or even glance at it, still publish your code once you feel it’s up to production standards. Your project likely won’t change the world, but it gets you out there and gets you comfortable with the idea of others seeing and critiquing your work. Also, it looks great on a resume.
Start your own blog, and show what you’re learning, how, and why.
Showing the world (and future employers) that you’re learning, and that you have a desire to learn without being forced, puts you head and shoulders above 95% of the developers in the industry. You’ll also be practicing your writing skills, and you’ll learn a lot about yourself along the way — how you approach problems, break them down, and solve them. It’s also neat to have a living chronicle of the ways you used to think, how you learned and grew, and how you made progress throughout the years.
Be active in the software development community.
Solve problems, read how others solve problems, and lend your voice and opinion to the conversation. I did this via StackOverflow and the programming communities there. It’s not the most forgiving culture, as you’ll come across some pretty abrasive devs snarking at how you forgot the ending parenthesis in your pseudocode, but it gets you talking with other developers, gives you experience in receiving honest (sometimes brutal) criticism, and shows you how others might approach a problem, thus opening up your mind to new ways of thinking about complex problems.
Learn how to explain things concisely and simply to technical and non-technical audiences.
I always heard that communication was one of the hardest and most important things to master when trying to achieve professional success. Early on, I thought that was hogwash — how hard could just talking with people on the phone, talking during meetings, and sending emails be? Anyone who has any experience with professional communication is probably laughing at that last sentence right now, and I am too. You’ll be amazed how quickly misunderstandings can crop up, complicate your workflow, and throw off your project’s progression.
To really master effective communication, you’ll need to have a fundamental understanding of how the things you’re working with actually work (I’d highly recommend the book “Code” by Charles Petzold to gain a fundamental understanding of hardware and software) and interact with each other. Your blogging and interaction with the programming community will be especially effective in working towards better communication.
If you can master concise, down-to-earth, and jargon-free (where appropriate) communication, and break up complex problems and solutions into understandable, bite-sized chunks, you’re a unicorn in the software development field. You’ll find project managers, other programmers, and executives alike fighting to have you on their team.
Keeping Yourself in a Healthy Mindset as you Advance in Your Career
The path of a professional software developer isn’t one without difficulty, and it can be easy to fall into the trap of unhealthy thought about yourself and your career choices. By understanding what professional insecurities everybody shares, you can better reel yourself in when you start to lose faith in yourself.
Understand that everyone feels like an imposter.
Every person you encounter in your career and in life struggles with imposter syndrome. We all feel like we’re just on the verge of being discovered for the idiot we really are and being publically lambasted for our gross incompetence. Knowing this helps level the playing field mentally and helps you realize that everyone who has ever done anything worth mentioning has felt exactly the way you might feel right now.
This feeling will likely stick with you in one form or another you entire life, and that’s a great thing! If channeled constructively — learning new languages, development methodologies, and problem-solving approaches — you’ll be improving throughout your career, quickly turning you into a master of your craft.
Understand that you will mess up.
Without question, the biggest “ah-ha!” moment of my life and the biggest weight I’ve ever felt lift off my chest is when I finally accepted the fact that I’m human — I’m goofy, awkward, and error-prone. You are too. You’re going to miss deadlines, click “reply all” one too many times, slip up on catching some critical error, or let loose an incredible bug within your application architecture.
You know what, though? So will everyone else. What will keep you happy and healthy is realizing that fact, purposing yourself to analyze your mistakes and learn from them, and applying what you’ve learned to achieve better results the next time.
Put yourself in the other people’s shoes.
The first time I got yelled at by a boss, do you know what I did? I briskly walked back to my office, locked the door, and I cried. I thought I was the worst programmer ever to touch a keyboard and started worrying about where I’d find another job. But later on in the day, I had my project manager stop by my office and explain to me that my progress and the project thus far were fine. My boss had just found out her daughter was seriously sick, she had her superiors breathing down her neck, and she was in the middle of hashing out divorce proceedings. Whoa.
As soon as I realized what all my boss was going through, my self-doubt and worry immediately evaporated, and everything was much more clear to me. If I was in that situation, I likely would have had the same reaction if I was given yet another piece of horrible news at work.
Practicing empathy is fundamental for success as a programmer and as a person. Understanding your clients’ and customers’ real needs or the pressures your superiors might be under can offer an eye-opening look into why they might be reacting the way that they are. It allows you to see how you can offer valuable and problem-solving (stress-relieving) solutions through your work, and shows you that an episode of abrasive communication between you and another likely isn’t your internal thoughts of incompetence finally coming to prophetic completion, but that it’s just that other person’s stress being vented.
As a software developer just starting out, you’ve got a pretty neat road ahead of you. Writing great code and staying relevant within our industry requires that you come face to face with your weaknesses on nearly a daily basis, and demands that you continually improve yourself.
You’re going to falter from time to time just like everyone else, and even though we’ve discussed some steps and strategies, you’re still going to fall into the mire of negative thought — it’s perfectly normal to do so. Know that you have within you everything that is required for achieving greatness in this industry and that everyone who ever did anything worth talking about struggled with the exact same fears, weaknesses, and self-doubt that might be racking your brain right now.
If you commit yourself to continual improvement, realize that you’re only human, and practice empathy, you’ll find yourself among some of the most well-respected and accomplished developers in the industry.