5 Steps to Becoming an Expert Software Engineer and Getting Any Job You Want

Posted by

Step 1: Be proud to be an engineer

What ever happened to praising the hard working engineer? The Steve Wozniaks and Linus Torvaldses of the world? We have put managers, directors, and CEOs so high up on a pedestal that many of us actually believe, unless we end up becoming one of them, that our career is a failure. We are in the middle of the information age right now; computers are literally transforming the world around us, and we are the men and women shaping it in our hands. Even though the part you play may seem small and insignificant, remember that the whole is far greater than the sum of its parts – your impact on the world is more significant than you might think.


As software engineers, we give computers new purpose every day. We bring them to life by imparting pieces of our intelligence to them; we create whole new worlds and ecosystems governed by laws we enforce in our code, but most importantly, we love what we do.


In his book: “Drive: The Surprising Truth About What Motivates Us”, Daniel Pink narrows motivation down to 3 key elements: autonomy, mastery, and purpose. Without a genuine interest in what we do, we will never be proud of it; we will never master it, and we will never feel purposed for it. In short, if you are not interested, you are not motivated, and without motivation, you will not succeed.


Although the origin is greatly disputed, it is generally accepted that Confucius was the one to say: “Choose a job you love, and you will never have to work a day in your life”. This quote has taken a lot of heat, but I think it’s just misinterpreted. The emphasis should be on the words: “have to”. If you choose a job you love, you will want to work every day of your life.


Step 2: Prepare to work for what you want

The most valuable asset you could offer a potential employer is experience. Although a qualification can be great for getting a foot in the door, anyone who has worked long enough knows that theory and practice are not often synonymous. Remember, what you are being hired for is to do work, and experience proves that you can do just that (well, it almost does). Years of flying under the radar at a company is hardly going to leave you with many tangible skills. The only valuable form of experience you can gain is the kind you actually worked for, because experience you work for is experience you can demonstrate. Proving your proficiency in the job you’re asking for is by far the most convincing argument you can make.


By now, you’ve probably gathered that this is not a get-rich-quick scheme. I’m not here to teach you any tricks to cheat the system, or to tell you that being lazy is ok. My aim is to help you get your priorities straight and work smarter, but by no means does working smart automatically replace working hard. Hard work spent doing something worthless will always be worthless no matter how hard you work, but hard work spent doing something beneficial becomes more beneficial the harder you work.


A lot of people associate the words: “hard work” with feelings of displeasure. To many of us, the word: “work” is reserved for the stuff we do at our jobs, work we tend to see as benefiting our employer more than it benefits us. When we have this mindset, the harder we work, the greater the gap seems to grow between our employer’s benefit and our own. We need to break out of this way of thinking. Sure, hard work is not necessarily fun, but it should always feel worthwhile. If your job does not leave you proud after a hard day’s work, you need to find one that does.


Step 3: Take the “dream” out of “dream job”


Earlier, I quoted the maxim: “Choose a job you love, and you will never have to work a day in your life”. There are a few variations of this quote, the most common being: “If you do what you love, you’ll never work a day in your life”. Although the intent is still there, in my opinion, this variation has lost the most important element of the original message: The word: “job”. You could love the field you’re in, but hate the job you have. Unfortunately, many of us are driven into directing frustration towards our field of work, rather than the job that drove us there.


We need to take a step back and remember why we chose this career. Where did we dream of being? What did we dream of doing? Maybe the job you really want is right there in the company you already work for. It could be a shift in the projects you’re assigned to, a promotion to higher profile work, or a whole new position entirely. The perfect job could be waiting for you at the company down the road, or across the ocean on a whole other continent. The point is, without aiming high and having a specific job in mind (and actually believing you can achieve it), you’ll just continue to spread yourself thin across broad goals that lead you nowhere.


Why do we insist on seeing our dream job as only a dream? Why does it feel so out of reach and intimidating? Well, my theory is: because all jobs require some level of experience, experience in the work you will only be doing once you actually get the job, experience you almost never have due to a lack of overlap in the work you do at your current job. It’s a tricky chicken and egg situation, and is why so many of us tend to stagnate on the specific technologies and domains we started with at our first job. So how do we break from this stagnation? Get back to programming for fun! Your aim should be to eventually land a job doing what you love, and a good indicator of whether you will actually love the job is to see how motivated you are to do it after hours.


Jobs are real, and they exist to be filled. Nobody has ever been turned down for a job because they were perfect for it. The trick is to find a job that will be a perfect fit for you, then get to work on making yourself perfectly fit for it.




Step 4: Put your software where your mouth is


Virtually every job listing you’ll ever come across will require one very important document- a résumé. The impression that this document makes on your prospective employer is crucial. Not only does it stand as a representation of you before you are able to represent yourself, it determines whether or not you will get the opportunity to represent yourself at all. Your résumé should already prove that you are perfect for the position you’re applying for before you even get the interview. How is that achievable? Well, your résumé should obviously mirror as many of the requirements on the listing as possible, but what will truly differentiate you from everyone else is having hard evidence that proves you meet them.


There is a famous quote by Linus Torvalds that goes: “Talk is cheap. Show me the code”. Simply stating that you possess a skill, or even a good idea, doesn’t mean much until you can actually prove it with something tangible. Enter open source software. What better way is there to prove a skill in coding than with code itself? For each new skill you seek to acquire, and for each pre-existing skill you wish to showcase, you should be writing software to demonstrate it, and making the source freely available online. Not only should you make your code clean and readable for the world to see, it should be user-friendly and fully functional for the world to use. Knowing that your code can be read and critiqued by anyone across the globe is both an excellent source of motivation for you to do your best work, as well as validation to your employer that this is real software with real users.


The title of this step is a play on the words: “Put your money where your mouth is”, but there is another reason I’ve replaced the word: “money” here. In no way am I proposing that you selfishly abuse open source software as a means of making money. In fact, money shouldn’t even enter into the motivation you have for your dream job. You should be driven by a passion to do what you love in a job you can be proud of. Trust me, the money will follow, but don’t sell yourself short either, you should be paid what you deserve for the position you have earned.


We owe a lot of respect to what free and open source software has done in the world of computing. We should show our appreciation by contributing good free software that is well written and helpful to ourselves and to others. Good free software that will earn us our dream jobs.


Step 5: Understand what it takes to be an expert


In 1993, a professor at Florida State University by the name of Dr. K. Anders Ericsson published a paper entitled: “The role of deliberate practice in the acquisition of expert performance”. The study was conducted with subjects from ultra competitive, high performing fields such as: professional athletes, world class musicians, and chess grand masters, with the aim of determining how many hours of practice it took for them to reach expert level. Dr. Ericsson concluded that it takes around 10,000 hours of deliberate practice to become an expert in almost anything (the equivalent of a full time job for 5 years).


Unfortunately, this “10,000 hour rule” wound up being widely misinterpreted as: “It takes 10,000 hours to become good at anything”. I’m sure you’ve personally experienced when practicing anything that a pretty decent level of proficiency can be achieved in far less than 10,000 hours. So how many hours does it really take to become good at anything? In his book: “The First 20 Hours: How to Learn Anything… Fast!”, Josh Kaufman sought out to determine how long it takes for us to learn new skills. Kaufman was particularly interested in calculating the time it takes for us to traverse the steep initial incline of any learning curve from incompetent to proficient, at which point the curve begins to plateau and further advances take longer to achieve. I’m sure you gathered by the book’s title that his conclusion was 20 hours. It takes 20 hours of deliberate practice to learn anything and reach a decent level of proficiency, and any time spent practicing beyond that initial period will make you better and better at it.


So what am I trying to say with all of this? Expertise is more often than not measured in the time you’ve spent practicing. Even then, how can you prove that the time you’ve put into something was spent deliberately practicing it? Sorry to break it to you but spending 5 years doing busy work at a software company does not make you an expert software engineer. I can’t stress enough how valuable it is to possess experience you can prove to have earned. Writing free and open source software not only allows you to prove that you have put in the hours, it allows you to showcase the result of your practice in the form of real, working software.


BONUS Step 6: Read this book


The above is an excerpt from my book: “How to Become an Expert Software Engineer (and Get Any Job You Want)” by Marcus Tomlinson.


In this book, I will show you the system I use to design, develop, and deliver open source projects, steer you away from the mistakes I’ve made along the way, and help you build an impressive résumé of projects that’ll get you that job you’ve always wanted, and in time, will earn you the right to call yourself an expert.

Available in print and eBook form: http://amzn.com/B01A36ZI66