One of the curses of being on LinkedIn is that we have a “celebration bias” in the posts we are reading. It is as if everyone is working around the clock and winning one trophy after the other: New jobs, published papers, promotions, new tools they learn, and what have you. It gives you this feeling of always lagging behind. At least to me… The truth is there are a lot of ups and downs in one’s career, and in life in general. As a person who is fortunate enough to be considered successful by many, I am receiving a considerable amount of messages asking for advice. To those who’d care what I have to say, I would like to say it loud: I failed many times along the way, at times pretty miserably. So, I wrote about my interview failure stories. I am hoping that this blog post will help some of the readers feel less alone, and will be a little source of motivation.
On the flip side of the coin, I wrote this post also because I often see people being very impatient about reaching their goals. It is often underestimated what it takes to get ahead of the curve: There is blood, sweat, and tears behind most success stories that others don’t see; and it takes to run a marathon to get there. I am hoping I can convey some of the lessons I have learned in this regard to those who are earlier in their careers than I am, with some specific advice for aspiring data scientists in the post.
This is the second post of the “What I have learned about landing a job in tech” series. Previously, I wrote about that landing your first job is though.
I hope you enjoy reading it!
One of the things that I have learned through many interviews (as an interviewee and interviewer) at top tech companies over the years is that it takes time, years, to build the skills you need to clear those interviews. Therefore, one needs to work hard, and work hard consistently for long enough to that end. In other words, it takes to run a marathon to land your dream tech job.
In fact, if you want to achieve anything ambitious, by definition, it will take time, blood, sweat, and tears.
I often set very ambitious, often unrealistically high goals for myself. This seemingly simple realization helped me set my expectations accordingly, get disappointed less, and preserve my self-confidence, which is of paramount importance to succeed.
Working at a big tech company was not one of my most ambitious goals in and of itself. On the other hand, it has not been trivial to get there either. In this post, I would like to share how I came to realize that it is a marathon. Tip: I learned it the hard way so that you don’t have to.
Running a marathon requires staying focused, having a long-term plan, and being consistent at executing it.
Here is what you will read:
- First, I will tell you about my interview failures. This will be the fun part (although they were not so fun as I was going through them). Hopefully (or maybe not), some of these stories will resonate with you, and make you feel less lonely if you are experiencing something along those lines.
- Failing at a bunch of interviews may not be that insightful itself, so I want to talk about what was the missing pieces for me as an engineering Ph.D. – a sufficient background to crack most of them.
- The third section and on is where the sermon takes place. I will tell you about what I have learned about learning, how I approached it, and what I suggest to you. I will give some specific examples for aspiring data scientists.
Let’s get started.
The art of blowing up interviews (and in a sequence)
Let me get a couple of things out of my chest now: If working at a big tech company is your end goal, I suggest you reconsider the meaning of life. Because it should not be. It could be only a means to achieve a higher goal, such as providing a comfortable life for yourself and your family, trying to solve some important problems to make the world a better place etc. Second, getting into Microsoft, Amazon, Facebook, Google, Apple, AMD etc. is not that difficult: Millions of people are working there. The chance that you can’t is just too low. So, don’t overestimate it. Having said that, I can say these only now. Once, it looked annoyingly difficult after multiple rejections.
The interview stories I will tell you below are from 6-7 years ago, around the time of my graduation from grad school. I got my first job at AMD on supply chain optimization in my last year. I had a strong operations research background that helped me land that one. This part is about failures, so I will skip that story. When I looked into positions that required a broader set of skills, though, such as data science, algorithms and data structures, etc. I got rejected repeatedly. That pretty much crushed my whole self-esteem. Here is what some of those failures looked like:
AIR Worldwide: That was my first onsite before graduating from grad school. I don’t remember the exact role but there were a lot of SQL questions… SQL… What? Yes, I had taken a SQL course in undergrad, but hey, I was a Ph.D. candidate. Who does even use SQL in PhD? Why would you ask SQL? No one had told me about that! I was also asked about data cleaning. I had done that one, but not in an interview setting.
I got rejected.
Amazon – Research Scientist: Oh, that day… This was my second onsite after AIR. I was still very inexperienced. I think I blew up that entire day. I was silent and stuck for the most part. Some of the questions I could not answer were around (obviously cannot give a lot of details) integration, hypothesis testing, an open-ended real-world-problem inspired optimization, and a coding question that seemed really tough back then. Well, first of all, when was the last time anyone took a tricky integral by hand? Missed that one… Hypothesis testing; sure that was familiar, but needed to refresh my mind. Another miss… The open-ended question; c’mon guys, you have a whole team working on that… Missed… Coding; yeah, I know how to code. But that question, how did you even come up with that?
Unsurprisingly, I got rejected.
Bloomberg – Software Engineer: I was always good at coding, but the only formal programming courses I had taken (even to this day) were the CS101 and 102 courses, which were years ago when I was a freshman. I was asked about the difference between scripting and programming languages. I could not satisfactorily answer.
Again, I got rejected.
Bloomberg – Optimization Researcher: This was a bit after graduation. Actually, I was optimistic about that one. But I guess I did not impress one of my interviewers when he realized I did not know what a left-join is. I still remember how he shook his head, deeply disappointed. (My inner voice, then: Okay, I can do SQL, okay, do you understand me? I am a smart guy. It is just that I haven’t touched it in years. Well, yes, I know, I am blinking on something extremely simple right now… Damn, I am such a moron!). I also remember missing an algorithm time-complexity question, which did not help. On the way of exiting the building, I looked left-join up in Google. Before finishing reading the first sentence that came up, I was like: “Of course. I remember this.”
After several weeks, I learned I got rejected.
Facebook – Data Scientist: That time I had more ideas about what to expect in these interviews. I studied my SQL, well, only for a few days. After all, I already had the background, I just needed to refresh my mind. I also refreshed my mind on probability and stats. During the interviews, I did pretty well in SQL. Coding, check… I told things about t-distribution that even my interviewer did not know. Well, except, I did not have a lot of practical experience with regression. I failed to go into some specifics. Also, on an open-ended question (it was probably related to what the team was working on), I may have failed to impress my interviewers.
Although I was quite optimistic about the outcome, I got rejected.
All these rejections literally ruined my self-confidence. Because I interpreted those outcomes as indicators showing that I was maybe just not smart enough. But that idea did not make sense. I rejected that everyone working at AIR, Amazon, Bloomberg, Facebook combined could be smarter than I was. But, how was I supposed to remember all these calculus, probability, statistics, linear algebra, coding, SQL concepts, all at the same time, which I learned at some point, years ago, and then use them in the context of a business problem thrown at me in a 45-minute interview?
I tried to rebuild my confidence by thinking about my past successes.
But then I also realized, encouraged by nearly clearing the Facebook interview after some reasonable preparation, that maybe I was simply not well prepared and needed to work harder. At that point, I was not aware either that people were preparing for interviews for months. I had underestimated what it’d take.
Actually, I realized that I had been underestimating the need for hard work for a long time.
The missing piece
Before telling you concretely what I think was the missing piece, I’d like to tell you a bit more about some of my stories and mistakes I made until that point.
- In my undergraduate years, I often had this overconfidence about what I could do with the level of effort I put into things. I perceived preparing extensively for a class, exam, interview etc. as an insult. I implicitly thought that if I was really as smart as I had believed, I should be able to achieve things by not spending all that time. I can think of multiple courses on top of my head (like calculus, probability & stats etc.), that I stopped attending after thinking that they were too easy. In some of them, I failed miserably, and in some, I passed with an A. Even in the latter case, I never felt like I had internalized all the concepts deep enough. After all, these courses were a whole with their labs and assignments and attendance. Not putting the effort needed took its toll.
- I had decided early on in my undergraduate years that I wanted to come to the U.S. for grad school. Obviously, this requires a good combination of high GPA and research work, which I committed to doing. But then I was trying to do a ton of other things too. I tried four startups, had an online business, was giving paid tutoring, was volunteering in multiple places, and spending a good amount of time with my friends. As the result, I don’t think I got anything done at a level I was satisfied with.
- When I came to grad school, I was in a complete soul-searching mode. I first looked into switching to entrepreneurship programs in business schools, then finance programs, then marketing… Chased more startup ideas and started learning how to build mobile apps, and how to build websites for other ideas. And finally, I made a decision: I was going to become a political scientist… Yes, political science. By the way, these all happened within a single year, at the end of which, I was again skipping my classes because I was preparing for GRE verbal and traveling around the country to talk to professors in political science programs.
- It turned out that it was not easy to get into the pol-sci programs at Harvard, MIT, Princeton, or the like without a lot of hard work in that field. So, I got rejected. Coming back to my PhD studies, I really focused on delivering a good dissertation. But I was so narrowly focused on that that I did not realize industry jobs required more.
- Again, in my years at AMD, I was so focused on the business problem I was working on (and I worked hard for that), but while missing the big picture. As many of you know, the realities of daily jobs could greatly diverge from what you need to do in the interviews.
- It took a long time for me to acknowledge that interview preparation is a serious undertaking. That was another miss on my part that led to disappointments.
There are many people who get into very good jobs right out of school, or even before. Do you know what they have in common? A solid foundation in their field that they built over many years. From what I told you above, you could tell that I had many cracks in mine.
Reflecting on my story, here are some learnings:
- I told you about my overconfidence, or plainly put, my arrogance in underestimating the effort things require. Well, arrogance is the antidote of learning. Because learning starts when you acknowledge that you don’t know. In fact, in old Turkish, the word for “student” is “talebe,” which came from the Arabic word “طالب”. Its literal meaning is “one who wants, asks for [knowledge], aspires.” Arrogance makes you think that you don’t need, which, in turn, kills your curiosity and shuts your input channels.
- If you are serious about getting ahead in the competition, in your startup idea, research, job search, and whatnot, you should acknowledge that there are others, many of them, who are as smart as you are and working very hard. Given this landscape, allocating a portion of your focus to a mission won’t help you in achieving great things. Semi-commitment to a serious goal is a recipe for not achieving anything great.
- Learning takes time. Being an expert at something takes a really long time. Exploring your options is a must, but, changing too many directions too quickly will derail you from the long path that goes to success.
Sertab Erener is a famous Turkish singer and the only Eurovision winner from the country. In an interview, she explains her secret to success as to think of no alternative paths in life but music, and work very hard accordingly. It struck me to hear that since I would have thought hard work and focus would not be the first on her list, since she is a person with such a strong voice and talent. It is one of the moments I realized, once again, that talent is only the beginning, and hard work and focus are the most of the rest.
I find a lot of parallels between all these and running a marathon, hence my analogy.
Next, I will discuss next more concretely why it takes time to get good at things. In our context, I will take the situation of an aspiring data scientist as an example.
Time-consuming nature of learning
It is perhaps not very surprising or insightful to hear that learning takes time. After all, who has not heard about the (controversial) 10,000-hour rule for mastery? In practice, though, I often see people being impatient and ignore how much effort is needed to reach the level of expertise needed to land a top-notch job. In this section, I will try to convince you why you should not overlook that.
Mastering a single topic takes time
Top companies hire top candidates (and that’s how those companies aim to remain at the top). What is the definition of being a top candidate? Well, it is being better than most of your peers, being exceptional, being on the most right of the normal distribution. How can that even happen if you only do what the standard is, like the standard coursework or a meeting-the-bar level of job at work? Chances are you won’t stand out (unless you are a true genius, and statistically speaking, you are not).
Take learning your first programming language as an example. It is like learning a spoken language. Think about how long that takes. In an interview, you are expected to convey a tricky solution in a short period of time in this language. It is not enough to understand it well: It should be in your muscle memory. The only way this could happen is through a lot of practice, and a lot of practice takes a lot of time.
Mastering multiple topics takes even more time
You have probably seen people complaining (or you could be complaining too, like I do sometimes) about job posts and interviews being very demanding and requiring expertise in many categories. Let’s take a representative data scientist job description as an example:
- Background: Computer Science, Operations Research, Statistics, etc.
- Fundamentals: Probability, Statistics, Linear Algebra, Calculus
- Focus: ML, Deep Learning, NLP or Computer Vision
- Programming: Python, R, Java, Scala or C++;
- Frameworks: TensorFlow, PyTorch, MXNet, scikit-learn
- Data: SQL, Hadoop, Hive, Spark, or MapReduce
- Cloud: GCP, AWS, or Azure
Now take our discussion in the previous section about how it takes time to get good at a particular topic; you need to do it for multiple topics. Adding to the challenge, some are prerequisites to the others. For example, you need to be good at the ML, math fundamentals, and coding before becoming an expert in a specific field of ML. This certainly adds to the total time of getting there.
Side note; there is this perception I am observing on LinkedIn that many people think that job requirement are inflated. Indeed, there are job descriptions shared around requiring more years of experience in a programming framework than it has ever existed! Well, such nonsense aside, don’t fall into the trap of blaming others (companies in this case) for things being difficult. The high-tech landscape is very competitive; there are many people who are very motivated and hard-working and satisfy such job requirements.
Connecting the dots between what you know takes time
It is not enough that you know multiple things well: You should be able to make the connections between them, and use them towards solving a real-world problem. I mentioned how it was challenging for me to solve open-ended business problems in my first interviews. A lot of this challenge comes from the fact that they are not isolated probability/linear algebra etc. questions like you would encounter in a textbook. Those problems require you to effectively bring such tools in for a solution. In addition, they are embedded in a business context, which you need to abstract away. Gaining all these abilities happens after a lot of practice, which, again, takes time.
My story of overcoming it
I would like to tell you a little bit about what my story has been like to clear these hurdles to give you an idea.
Programming: I liked coding the moment I started learning it in my freshman year (I am not a CS major). I immediately started doing extra exercises. Over years, I did many gigs (research & personal projects, startup initiatives etc.) that involved writing software. By the time I was interviewing for full-time jobs, I had close to ten years of coding experience.
Probability, Stats, Stochastic Processes: I went over online courses many many times. Later, I taught multiple semesters of undergraduate courses, which helped me cement what I learned.
Machine Learning: Took many online courses, read books, and did personal projects (just like many of you). Still reading & doing a lot.
You get the idea: Years of effort in all fronts.
My two cents (okay, maybe more)
After all “it takes time, it is difficult, blah blah” part, I would like to tell you about some of the things I’ve found helpful in this journey that I’d also suggest to you.
Set your expectations right
One of the most dangerous traps to fall in is to have unrealistic expectations about yourself, and burn out or get disappointed quickly. As it is the point of this post, it will take time and hard work. Let that sink in. We have limited resources: limited time, mental capacity, energy, and stamina. Moreover, life is not all about career and interviews. We have family, friends, and many other responsibilities, including making a living amid all these. Show some self-compassion, and be realistic about how much a human being can achieve in a month, in a year, etc.
Know how the learning process works
I am certainly not an expert on this, but here is what I have observed about the process of learning.
- You will find what you learned several years ago (or decades, depending on where you are in your career) is no longer fresh and/or your knowledge is not deep enough.
- As you learn/refresh your mind, there could be many things that don’t make sense initially and giving you headaches. I guarantee you that you will find many of those things simple when you look back later. It is just that you are climbing the learning curve.
- You will feel annoyed and discouraged when you see others comfortably discussing things that you are struggling with. But remember, you are still learning.
- After you learn everything in the book(s), you may still feel like you lack the intuition. Only practice helps with that. And sometimes you just need to sleep on it for some time.
- Once you think you have learned things, it may be difficult to take the formulas out of the textbook context and implement in real-life problems. Reading the concepts from different sources, implementing them (or seeing them implemented) in different contexts will help. So, practice more.
- You will forget what you learned after a little while. That’s normal (for most of us). You just need to revisit what you learned once in a while so that it is cemented in your long-term memory.
- Don’t get disappointed if you miss a question in an interview about something you have already studied a lot. An interview is a different medium with all the nervousness and all. Your brain is not used to work on those concepts in that medium. As you practice the concepts more and you go into more interviews, that discrepancy will go away.
Pick your battles and think long-term
Given that there are many potential fronts to fight, it is important to pick your battles right and to avoid trying to do all at once. So, my suggestion is to focus on one or two areas at once.
Let’s say you are an aspiring data scientist, possibly with a technical background (e.g. in physics or math), but without too much depth in programming and ML. Specifically, you find NLP extremely exciting and want to work on that for the rest of your career. Let’s say you budgeted yourself a year to prepare and switch to a data science role. I argue that the job description above is too much to tackle for you at this point. A wiser strategy would be:
- Focus on Python, probability and stats, and ML fundamentals during this one year of preparation; but get really good at those. Also add some basic SQL to your arsenal if you can.
- Find a more generic data scientist role (without a focus on NLP) and gain industry experience for a year or two.
- Spend your personal time on growing into deep learning, NLP and necessary big data tools. Try to find a project in your daily work to apply those concepts.
- Look for an NLP role after three years as a person with solid industry experience in data science with NLP skills added.
Now, it may sound discouraging to delay your dreams of working on NLP for three years. But here are my arguments:
- When companies consider a candidate, they look for an upside, an area or two in which the candidate is very strong.
- For many data science positions, it is okay to be less proficient in SQL/deep learning/NLP/PySpark if you are very good at ML fundamentals and Python. You need to target these roles first.
- Having a half-baked knowledge in all the topics is unlikely to make you stand out.
Go above and beyond
I already mentioned that standard work will earn you standard achievements. Go above and beyond. Working on exciting side-projects is usually the best method to get ahead of the curve, as Andriy Burkov said once:
This is very true.
That’s the whole point of running a marathon, right? Don’t confuse exploring your options for making too many zigzags in your career, like I did. Being consistent in execution is the key to success.
All you have read is based on my personal experiences, which won’t completely align with yours. On the other hand, I hope this long post gave you some useful insights. To conclude, I will add this cliche-but-true illustration. Final words: As far as you run the marathon, you will be surprised by where life takes you.
(Featured image source)
In my next post, I will discuss that the interview process an imperfect one and why it should not disappoint you. Follow me on LinkedIn, Twitter, and subscribe to my email list using the box on the sidebar on my blog to get notified about future posts.