What is your dream job?
While not exclusively the case, the idea of a dream job in tech has become inextricably linked with a job at a Big 4 company (Google, Facebook, Amazon, Microsoft).
And I get it. Perks alone make these jobs pretty awesome. Anyone who has watched The Internship or visited the offices of any of these companies pretty much has the same reaction.
But here’s the problem. These companies don’t just let anyone work for them. Too many people I talk to, both students and middle-career programmers, think they can do a quick bit of prep work and get their dream job. Sorry to burst your bubble, but that’s not how it works.
Google has approximately a 1 percent acceptance rate. That means that out of 100 people who apply, you need to be the best. And that’s if you even get an interview.
So does this fact mean you should give up on your dream job? It’s too hard, and if it doesn’t happen now, it’ll probably never happen, right?
Wrong. Just because you aren’t ready for a specific job now does not mean you won’t be able to get it in the future. Even if you think you’re unqualified for the job, lacking the skill set, or just plain terrible at interviewing, your dream job is only out of reach if you give up on it.
I’m going to tell you how you can ultimately get the job that you want by leveling up. You do have to work at it because getting your dream job isn’t easy, but if you spread the work out over time, it doesn’t need to be difficult either.
To start with, it is important for us to confirm whether or not your goal is immediately out of reach. Would it be possible for you get a job at Google in the near future? Whether that’s possible depends on a simple formula:
Where you need to be – where you are now = how much work you need to do.
Then the next question is: Are you willing and able to do this work in the time that you have allotted?
Determining where you are now and where you need to be can be a challenge. Mock interviews are critical to figuring out your starting point, and you’ll have to do some research to find out the exact requirements of the job. If you’re stuck, I recommend checking out the dedicated post I wrote on this topic.
If your goal is realistic, then the course of action should be pretty clear: You go straight for the goal. However, let’s consider the more common case where you realize by going through this exercise that you’re not going to achieve your goal in the next few months.
This realization doesn’t mean all is lost — it just means we need to take a more long-term view.
With that in mind, let me introduce the concept of “leveling up.”
To make things easy, we’ll use a video game analogy. When you start out at Level 1, your character has minimal attack and defense. If you were to skip to the final boss, you would probably die in a single hit. However, as you go through the game, you acquire weapons and armor. You get stronger. Then once you reach the final boss, you are prepared to give it a beating.
Your career works the same way. When you’re first starting out, your skills are at level 1. Then as you continue to study and work in your career, you skill level goes up. Eventually, you reach the point where you can take on an interview at Google.
The key here is to take your time building your skills. As I say to my students, the difference between a goal that is achievable and one that isn’t is just the timeframe. While you may not be able to get a job at Google in the next six months, if you take the time to build up your skills and career, there is nothing to stop you from reaching that goal in the long run.
Let’s look at the different ways you can level up. You won’t be able to do these steps all at once, so plan to work on one at a time.
Get a Job That Pays You to Learn
So often, we have multiple job offers and have to make the decision of one job over another. It can be very difficult to pick one of them, especially when multiple offers are interesting.
When your goal is to level up your career, I always recommend that you pick the job where you can learn the most. At this point, if your ultimate goal is to get a job at a Big 4, money and perks are not the most important things, although they can be tempting. The key is to improve yourself as much as you can.
So what should you actually look for in a job?
First, you need to find a company with smart people. Hands down this is the most important thing. Jim Rohn said, “You are the average of the five people you spend the most time with,” and I’ve certainly seen a lot of evidence in my own life to support this claim.
Picking a company where you are surrounded by really smart people will do several things. It will motivate you and pull you up to their level. Seeing all these smart people around you puts the pressure on you to continue improving.
These people will also be able to help you learn. In my experience, the best way to write better code is to either pair program with someone or have someone who has more experience than you review your code. You can learn and improve your code so much through this process.
The second thing to look for in a company is one that values educating their employees. Ask if they will pay for you to attend conferences or buy you books to improve your skills. Find out how often employees get to experiment with new languages and technologies. All of these things are great indicators that the company values employees learning and improving.
Lastly, although it has nothing to do with learning, there is value in finding a job with name recognition. While you should not sacrifice learning for branding, having a company on your resume that recruiters recognize can make it much easier to get past initial resume screens in the future.
By getting into a company that values learning, you will be able to get a job that will massively level up your career. As you improve, you’ll be amazed how many companies start reaching out and trying to recruit you.
Improve Your Skills With Side or Open Source Projects
I find that many times people focus on the theory of what they’re trying to learn rather than the practice. I get it. It’s so much easier to just read rather than implement. However, the real way you learn is through doing.
One way to get more experience with implementation is through side projects. These are great because you not only get the opportunity to build something cool and learn new skills, but working on projects outside of work shows a lot of initiative.
You don’t have to do anything crazy, either. I see lots of people complain on Reddit about how much time it takes to work on a side project, but the fact of the matter is that the average adult in the U.S. watches 4.7 hours of TV per day. If you watched four hours instead of 4.7, that would give you five hours per week to work on a side project. And let’s be honest, you could probably do both simultaneously.
While five hours alone is not going to get you that far, remember that we are not necessarily going for speed here. If it takes you several months to complete a project, that’s totally fine. The point is that you do it.
The other complaint I hear a lot is that people don’t know what to do for their side project. Let me tell you something. If you’re worrying about what to do, you’re way overthinking things. Your project can be as simple as a clone of a service that you use and like (you can find some good ideas here).
While side projects are great, I think that possibly an even better way to build your skills up is by contributing to open sources projects. The difference with open source is that potential employers can easily see your code and also know that you were able to work to specifications and with a “team.”
Unlike a side project, there are a lot of rules you have to follow to contribute to open source projects, and they are ultimately much more like working for a company than doing projects completely on your own. There are tons of different open source projects out there, so it should be easy to find something that interests you.
Whether you choose to work on a side project or contribute to open source, both of these options show potential future employers that you really know how to code. These projects also get you in the habit of coding more in different environments. They can help you learn new skills quickly and reinforce them so that you don’t forget them.
Blog or Speak at Conferences to Show You Know What’s Up
While working on side and open source projects allow you to demonstrate your skills, you can go a step further by showing that you’re an authority in your field. Showing that you’re a thought leader who isn’t just doing grunt work is a great way to stand out from the crowd.
The first option that you have here is blogging. Blogging is definitely a great way to show your authority on a topic. If you write valuable, high-quality content, over time you can develop a following, which is only more proof that you know what you’re talking about and positions you as a thought leader.
I’m not going to go into great length about blogging because it is something that John has already thoroughly covered on SimpleProgrammer. Suffice it to say that it can be a useful approach.
Another often overlooked way to build your credibility is speaking at conferences or meetups. Many people assume that only “professionals” are allowed to speak.
Unlike blogging, there is a barrier to entry, since you have to convince someone to let you speak. However, given the proliferation of meetups, finding speaking gigs is easier than ever.
There are so many meetups that struggle to find enough speakers that all you need to do is reach out. For your first couple talks, small meetups are perfect, because they are a low-pressure way for you to gain valuable experience. If you find you enjoy speaking, you can work your way up to speaking at bigger meetups and conferences.
On top of demonstrating your credibility, speaking effectively is also an incredibly valuable skill. When you’re interviewing for jobs, it is critical that you be able to convey yourself well. While speaking can be nerve-wracking, it is such a good way to get better at communicating clearly.
If you feel uncomfortable speaking in public, I highly recommend finding a local chapter of Toastmasters International. This international organization has a structured curriculum that can help you get way better at public speaking in a short period of time.
Building your credibility through blogging and public speaking can be an incredibly valuable way to level up your career. By demonstrating your authority, potential employers will implicitly trust that you can get the job done.
Treat Interviewing as a Skill That You Need to Learn
Whiteboard interviews suck. I think we can all agree on that.
I constantly hear people saying that companies should change the system. Just look at r/cscareerquestions; there are almost daily rants about the state of software engineering interviews.
However, this is an opportunity to apply a little bit of stoic philosophy:
The chief task in life is simply this: to identify and separate matters so that I can say clearly to myself which are externals not under my control, and which have to do with the choices I actually control.
– Epictetus, Discourses, 2.5.4-5
Simply put, you can spend your life trying to control those things that are beyond your control, but that is a fool’s errand. Rather, determine what you can control and focus on that.
In the case of interviewing, we can’t control how we will be interviewed for a job. However, we can control how we prepare for it.In the case of interviewing, we can’t control how we will be interviewed for a job. However, we can control how we prepare for it. Click To Tweet
Most people think of interview prep as something to do at the last minute, once you’ve scheduled an interview. That can be a pretty painful experience.
Interview prep isn’t particularly enjoyable, and it’s a real struggle when you don’t have a lot of time to prepare. You realize all the stuff that you don’t know but have no time to learn. It’s the same as starting that school project the night before it was due only to realize that you were supposed to spend two weeks collecting data.
Like with anything, we can make this process a whole lot more pleasant, and way more effective, by spreading it out over time. If you dedicate an hour or two each week to studying for interviews, you will be way more prepared and have a much more enjoyable time studying.
I recommend that everyone set aside at least two hours each week to study. Ideally, you will spend 30 minutes per day. If you do that over the course of a year, that’s 180 hours of practice, which is more than enough to nail even the most difficult interview.
In addition to just practicing, for those who want to go the extra mile, I highly recommend hiring a coach to help you through the interview process. Coaches are incredibly valuable because they can both help you plan your study routine and help you identify what weaknesses you need to fix.
There are a variety of coaching options out there, from mock interviews all the way to full-service coaching. I personally recommend finding a coach to work with on a recurring basis, rather than doing one-off mock interviews. While it’s more expensive, a coach can help you really learn how to think about problems in the context of an interview and communicate effectively.
You wouldn’t expect to perform a concert without practicing a lot. And it’s very unlikely you’d get to Carnegie Hall without a skilled instructor. Interviewing is just like a performance, and companies like Google are Carnegie Hall. It’s not easy to get there, but if you put in the work, you can do it!
Become the Best at Skills Relevant to Your Dream Job
One of the great things about big tech companies these days is that they’re often very open about what technology stack they are using. Not only that, but they also tend to open source some very interesting projects.
This is good news for you.
Imagine two scenarios. In the first, a candidate comes in to interview who is a baller at C++. However, the company’s entire tech stack is built on Python. In the second, the candidate has all the same qualifications and skills, except their focus is Python. Who do you think the company is going to choose?
Both of these candidates could potentially be great for the company, but all else being equal, it seems obvious that the company would hire the Python developer.
At the end of the day, companies are trying to make money. This fact means that, not only do they want the best people, but they also want the people who will become productive employees the fastest. The more you know going in, the better.
So how do you show that you are going to be the most productive employee? Do your homework before you apply for the job, and then learn the right skill set. For big companies, this research is actually relatively easy. Companies like Google tend to use a lot of different technologies depending on the team, so chances are that there is already a team using the technologies you are most familiar with.
For smaller companies, you should start by seeing if they have an engineering blog, which can provide a great window into the company. If not, there are also plenty of forums where you can ask current employees.
While understanding their tech stack does not guarantee you the job, it is a great way to set yourself apart from other interviewees. And if you get the job, you’ll need to learn it anyway, so why not go ahead and learn this stuff now.
Enough Reading; Time to Take Action
When you’re starting out, it can often seem like your dream job is completely out of reach. “Oh, I could never get a job at Google. I’m just not smart enough.” This is a great example of a self-fulfilling prophecy.
If you believe that you can never get the job, you will never put in the work, and never grow to the point where you’d be able to get the job. However, if you believe that you can get better over time and are willing to put in the work, any job can be within your reach.
This advice may seem like a lot of work, and it is. No one said that getting your dream job would be easy. But when the going gets hard, remember why you’re working and keep leveling up. You’ll get there.
This post originally appeared on SimpleProgrammer.com.