Planning a career as a programmer? Here’s what it takes to be successful.
When we founded AppLovin five years ago, it was our goal to build a team of great programmers. My job as CTO was to hire smart, passionate people and help them grow into world-class developers. Here’s what we looked for with each and every hire:
Programmers with a passion for solving problems. The best programmers are deeply curious individuals; they also have the discipline to sit down with a manual and figure something out. Great programmers love seeking answers and being in a constant state of improving their knowledge base. Not everyone is comfortable working in a field where not knowing — at least from the start — is a significant part of their work. If you’re a programmer, you have to love the fundamental practice of going from not knowing to knowing, every single day — you won’t be good at it otherwise. We hire programmers who are so passionate about problem solving that they code for the sheer fun of it.
Programmers with a genuine commitment to continuous learning. Many of the engineers at AppLovin were attracted to coding from a young age, and while they pursued formal degrees in computer science, they also pursued their interest in the field in other ways that ensured that they were always learning. These days of course you can take an online course to learn coding or supplement your formal education, but you can also do bootcamps or get a nanodegree from Udacity. Many great engineers balance their jobs with side projects, such as building apps and web sites, building Arduino or Raspberry Pi contraptions, or experimenting with machine learning via Kaggle in order to push their skills in different directions. Participating in hackathons is another great option for continuous learning, and many of us at AppLovin keep up with new developments through blogs and podcasts (check out this list of the best programming blogs). The point is there are a ton of ways to keep learning in this field — good programmers find the ones that inspire them.
Programmers who “just do it.” While AppLovin’s engineers got into the field in diverse ways (some pursued CS from a very young age, some pursued it after completing an undergraduate degree in an entirely different field), they all share a fundamental self-starting spirit. Once they mastered a programming language, they learned others, quickly. To be a good programmer, you need repetition (including the repetitive practice of always learning new things) and practice. That’s how you find out what you are good at, and what you need to improve upon. This is why AppLovin (and other top companies) encourage new hires to commit code (contribute to the code base) on their very first day of work.
Programmers who embrace mentoring. While you can “just do it” on your own, finding a mentor with whom you can share ideas (and successes!) as you are rolling up your sleeves, and who models self-starting, can go a long way toward cultivating the “just do it” attitude. At AppLovin, we pair programmers so a person new to a problem can learn the ropes and get feedback. This arrangement isn’t good for the mentee alone — it also helps the mentor learn just as much as the mentee. There’s a great story about Richard Feynman, the great theoretical physicist. He apparently took great pride in finding ways to explain even the most complex ideas to beginning students. Once a fellow faculty member at Cal Tech challenged him to prepare a freshman lecture on why spin one-half particles obey Fermi-Dirac statistics, but Feynman came back defeated, saying, “I couldn’t reduce it to the freshman level. That means we don’t really understand it.” In a similar way, if seasoned engineers can’t explain an area they’re experts in to newer engineers, they don’t truly understand it themselves. And only a good mentoring relationship will uncover that.
Great programmers don’t become great in isolation. It takes constant interaction with the field as a whole as well as with one’s colleagues. If you want to succeed in this field, you need to be a fundamentally curious person, and your M.O needs to be one of continuous learning. Finally, you need to put yourself in situations where you’re exposing not just what you’re good at, but what you’re not good at. Rising to the top in any field is always a challenge, but this is what it takes to become a top-notch programmer.