Machine learning is a growing field getting a lot of attention, but getting machine learning jobs is still very difficult. Landing an engineering role at a big company means knowing not just data science, but also things like programming and system design. More often than not, there’s a lot of research and learning involved to prepare for applying for a new position.
When I was preparing for my machine learning job interviews, I started preparing two months prior to the interviews. That’s when I really understood what I needed for the data science and machine learning positions I wanted. Fortunately, many recruiters allow and encourage you to take the time to prepare.
However, this leaves one important question: exactly how do you prepare for your role? In this article, I will share some strategies for getting a machine learning job, from understanding the market and building a portfolio to skill improvement and the application process itself.
1. Get Acquainted With Machine Learning
Every machine learning job is different, and each will have a different focus. Some focus on machine learning, others on machine learning pipelines, others on big data, and others on deep learning, for example.
That said, the central part of any machine learning engineer’s (MLE) job is to do machine learning. So, even before applying for any MLE role, make sure you know enough about ML first. Get hands-on with a variety of machine learning projects. Build your own basic systems to understand how they work. Learn about big data platforms like Spark and deep learning libraries like Pytorch. If you need more resources to get your head around all of this, I have a dedicated blog to help.
Here’s a good basic goal to let you know you are well prepared: By the end of your ML preparation, you should be able to convert a business problem to a machine learning system. You should ideally be able to design a system end-to-end, which means data collection, exploratory data analysis, feature engineering, model evaluation, model testing, and deployment.
2. Build a Portfolio for Machine Learning Job Applications: Create a Presence on Github and Kaggle
A significant challenge when it comes to job applications for machine learning engineer positions is simply getting an interview. So, how can a company find you? How can you make yourself stand out?
One answer is to work on creating and completing projects with your skill set. Try out lots of new toy projects, and use resources like Kaggle for inspiration. Participating in discussion forums is another avenue with multiple benefits; you get to learn from and discuss with others while marketing yourself.
Be creative and proactive where possible. Building your profile on GitHub can really help. Write lots of code and solve a variety of problems. It can be hard to find these on your own, but taking part in Kaggle competitions is a really great place to start.
Working on programming projects is another option for building out your portfolio. When I was starting out, I worked on whatever I felt like, and whatever interested me. For a time I tried to create some games myself, but now I often try to understand research papers by implementing their systems. It’s one thing to understand theory, but it’s another to write code and implement systems. When you apply for a machine learning job, you’ll want to make sure you can do both.
3. Improve your Coding Skills
A lot of companies have multiple coding rounds as part of their selection process. This is by far the most crucial part of your preparation, because even a machine learning engineer is still an engineer in the end. While it may seem a suboptimal process for finding the right person, it is still a part of the current structure, so if you want to work as an MLE, you’ll need to understand the various data structures and algorithms related to a particular field of work. To help, here are some recommendations and resources.
I also recommend creating a list of topics you need to prepare for given your preferences, experience, etc. For example, my list looked like this:
Data Structures: Array, stacks/queues, dictionary, trees, heaps, graphs.
Algorithms: sorting, divide-and-conquer, dynamic programming/memorization, recursion, binary search, breadth-first search/depth first search, tree traversals.
Ideally, by the end of your preparation you will have read up on the necessary topics,and solved some problems of easy and medium-level difficulties on a place like Leet code.
- 3 Programming Concepts for Data Scientists: Recursion/Memorization, DP and Binary Search
- A simple Introduction to Linked Lists for Data Scientists
- Dynamic Programming for Data Scientists
- Handling Trees in Data Science Algorithmic Interview
4. Understand How Big Systems Work
Working at a company essentially means working on creating systems end to end while keeping in mind factors such as latency, maintainability and scalability. For this reason, many companies include system design as part of their interview process. They want to gauge how well you can understand and potentially help to improve their own systems. To this end, example problems might run along the lines of:
- How would you design Netflix?
- How would you design Youtube?
- How would you design the Twitter/Facebook feed?
While these questions may seem daunting, they’re quite open-ended when you start preparing for them. Also, remember that there are no no wrong answers. The internet is full of good resources for this kind of preparation, but I want to mention two specifically:
- System Design Primer by Donne Martin: This is a resource that anyone preparing for system design should go through at least once. It has great write-ups on essential topics like performance, latency, scalability, availability, throughput, consistency, CDNs, databases, cache, load balancing etc.
- Techdummies: Though there are a lot of videos on Youtube talking through system design on the most popular and biggest services (Netflix, Youtube, WhatsApp, Facebook, Gmail, Amazon, etc.), this is the channel I referenced most for breakdowns.
In the end, what’s most important is to understand how a particular system works on the most basic level, how it is set up to mitigate various failure points, and how the system works for a large number of users. It’s from these building blocks that you will really show your system design abilities.
5. How to Start Applying for Machine Learning Jobs
So you’re confident with data science, you understand data structures, you know how various systems work, and you’ve developed a great portfolio.
How should you start applying for jobs? This is a fundamental question that is often not answered in any real detail. So, if I were advising any of my friends on how to start looking for a job, I would give them the following flow:
- Research and List Your Companies: Start by researching and creating a list of target companies which offer the job you’re looking for.
- Try to Get a Referral: If possible, and if you have a friend or colleague working at a company you have listed, try to get a referral.
- Don’t Depend Solely on Your Referrals: If you can’t get a referral (and even if you can,) try to contact the HR rep for the company or get in touch with recruiters through LinkedIn. I recommend reaching out to at least 3 or 4 recruiters for each company. This will improve your chances of getting a reply.
- Sort the Companies in Order of Preference: From the number of calls you get, try to sort your interviews in the order of least-interested to most-interested. For example, if your target dream company is Google, try to keep the Google interview for last. This will ensure that ever prior interview also acts as practice for your most important interview. There is also a cool-off period for many companies, so you don’t want to waste the opportunity.
- Rinse and Repeat: If you get a job, great! However, the truth is you might not, in which case you can just restart from the top of the list. Don’t lose hope!
This article is a list of how I prepared for interviews for machine learning jobs and what I did to research and prepare for my job at present. As I said at the start, it’s not an easy process, so it’s important to approach it with a mind for time and patience. That said, it’s very important not to lose hope! Focus on learning and improving a little each day, and understand that there are no shortcuts here, everyone walks the same path, so you just have to keep going.
After all, it is only through a series of small steps, one after the other, that you can cover long distances. So stay determined and carry on. Your results will come.