I am often asked how to get a job as a computer programmer. How do I break in? How should I prepare to work at a top tech firm?

Here I’ve collected bits of advice I’ve given throughout the years. This current iteration is largely in the context of engineering at Riot Games, but it should apply for approaching nearly any tech firm.

First, do you need a degree?

No. It helps, but it is not required and we have software engineers at Riot who do not have CS degrees.

Is it possible to become a solid software engineer by working through sites like codecademy, free code camp?

Yes. Sorta. Let me elaborate…

First, while it is possible to gain the required technical knowledge and skill to be a successful software engineer outside of traditional university programs, it is challenging. Beyond reading programming books and taking online classes, you’ll want to spend time actually programming, ideally with other programmers. This could be on side projects at home, in coding contests, hackathons, contributing to open source programs and so on. But you’ll need to get at least some experience actually programming. This is true regardless of whether your computer science fundamentals are gained in a traditional classroom or self-taught. The advantage that university students have is that the school provides some of this experience through homework and projects.

But perhaps the biggest challenge for self-taught programmers is figuring out what it is that you don’t know. Universities provide curriculums that cover a broad range of computer science subjects. Instructors can provide feedback to help students understand when they’ve mastered an idea. This sort of feedback loop is critical. As a self-taught programmer, you run the risk of missing wide swaths of knowledge.

Fortunately, there are some rather decent broad guides. Code Academy is one example. Others include Google’s excellent list of CS fundamentals or MIT’s Open Courseware materials. StackOverflow also has some really excellent resources as well. As a bonus, that last link was compiled by someone who is also self-taught. Finally, reddit has similar advice and answers if you search for them.

Now, for those who are in school for computer science, my advice is to focus on getting a solid foundation of core CS skills. You’ll have plenty of time on the job to learn specific libraries, build tools and so on. Right now you have time to invest in your core CS knowledge. All other advice assumes you’re building on this foundation. If you’re looking to get ahead, read books like The Structure and Interpretation of Computer Programs or any from the lists in the links above.

Another common question is what languages and skills to focus on. The answer here varies significantly depending on the industry and specific company you aim to work in. At Riot Games, for example, we use the following languages very regularly:

  • C/C++
  • Java
  • JavaScript
  • Python
  • C#

Pretty much in that order. Not every engineer knows all of those well. In fact, most engineers only know one of those languages very well and can get by in one or more of the others. For example, gameplay engineers tend to be very good at C++. Server-side engineers who develop systems like match-making, accounts, big data, and so on will know Java. At Riot Games, we have lots of Java engineers. JavaScript is used by those who work in the web space. Python is regularly used by QA engineers. C# is getting more and more use and we’re particularly happy with Microsoft’s recent commitment to open source. And for the curious, we have many other programming languages represented at Riot Games. For example, we’re seeing increased usage of Go.

My personal recommendation, if you’re just starting out: start with Python. Then move over to either C++ or Java or Go. After that pick up some JavaScript, including server-side JavaScript using node.js.

As many budding engineers are video gamers at heart, they’re tempted to start by picking up a game engine like Unity or Unreal. Creating games or apps using large frameworks can be a great way to get started as those tools typically allow you to see results quickly. This is important because the traditional approaches to computer science can be, well, a bit dull.

That said, while hacking together a Unity game is a legitimate approach, it cannot be the sum of your preparation. You’ll need to supplement such programming with a dedicated study of core computer science. Be aware it’s common to pick up bad habits early in your studies, particularly if you learn primarily through leveraging tools like Unity or Flash. The more you collaborate with others, the more you read and modify other good code, the more likely you’ll pick up best practices.

Regardless of whether you’re self-taught or a graduate from MIT, I suggest you prepare beyond your studies before you send out your applications:

  • Create something. You don’t have to wait until you graduate to start hacking. Passionate programmers can’t help themselves from creating things. Try your hand at a couple simple games (PC or mobile). Participate in a game jam. If a new grad can give me a copy of a simple game he made, even if it’s rough around the edges, that puts him ahead of the pack.
  • Contribute to something. Even better than handing me a game you wrote, show me the code you contributed to a public, well known open source project. I can’t overstate how huge an advantage this is, not just for interviewing at places like Riot, but as an investment in your own engineering career. Contributing to established open source projects teaches you a wealth of higher-level skills: how to work on a large code base, how to cooperate with others, how the teach others to use your code, etc. Perhaps even more importantly, you develop an invaluable professional network with other experienced engineers from around the world. I wish every university encouraged this more. As an example of what I’m talking about, check out the Google Summer of Code project.
  • Know your field of interest. At Riot Games, we give special consideration to those passionate about League of Legends. So if Riot is your goal, then participate in your collegiate program or help set one up. Show us something you’ve made using the Riot API portal. Likewise, if you were applying at Twitter or Facebook or Google, show them something you’ve made using their tools and APIs. It demonstrates that you’re serious about understanding their business and ecosystem. And for goodness sake, write a specific cover letter for each application!

After all that, you may be surprised to learn that for entry level positions it’s not your tech skills that typically get you the job. Poor programming skills can stop you from getting the job, but they’re rarely the reason you get an offer. Why? Because you’re just starting out! If the employer was specifically looking for extensive tech skills, they wouldn’t have an entry level role available. Does that mean all the preparation is unnecessary? No! Of course not. You absolutely need a solid foundation in computer science and practical programming skills. But unless you’re some sort of programming savant, it’s unlikely your tech skills are what seal the deal.

Instead, employers will be looking for your soft skills as well: your drive, your integrity, your empathy, your potential. Too many engineers fail to realize that computer science is as much as social science as it is digital mathematics. You’ll often spend as much time interacting with other humans as you will computers. I know programmers who didn’t get work not because they can’t code, but because they’re not kind. Keep this in mind as you apply and interview - you’re more than a computer programmer, you’re a whole human. Be one.