I recently joined Unity Technologies. I’ll always remember that moment when the HR representative urged me not to forget to mention my involvement in Artificial Intelligence competitions.
HR – “You’re doing AI stuff, right? Like games.”
Me – “Yes, I’m competing in AI competitions on a regular basis.”
HR – “Good, very good; please don’t forget to mention this experience during the interviews.”
We ended up talking about CodinGame competitions for ¼ of the interviews…
A Data Scientist on CodinGame
I studied math & physics in school, then completed a Master’s Degree in Aeronautical Engineering and another one in Computer Science in parallel. The more I learned, the more I realized I preferred the Computer Science part of what I was discovering.
By the end of my masters’, I had the opportunity to start a PhD in Computer Science. It was about gathering data and taking a game theory approach to model a business problem. One definition of doing Data Science. Since I graduated in 2015, I’ve been working in Data Science. First in France, then in the US. All this time, I’ve been away from industries I like: embedded systems in transportation and games.
I started AI competitions a while ago. I landed on CG a couple of weeks before CodeBusters (a bit more than 2 years ago, I think). Since then I’ve participated in most of the contests, and this year I ended up twice in the Legend league \o/
I approached CG as a way to both learn and have fun, mostly the latter. I tried Scala, trained my Python skills on puzzles, learned a bit of Go, and now I am getting (slowly) better in C++.
I don’t see myself as a professional developer. I am a Machine Learning engineer: I gather data for a problem, find the most appropriate ML model and train it. If it performs well enough, I push it to production. Rinse and repeat. So at the time it didn’t occur to me to highlight my CodinGame activity in my resume, much less that it could help me land a job.
From Data Science to Games
My first job in the US was in a startup. We were working on Natural Language Processing to make a virtual assistant smarter than existing products. Cool stuff, neural networks and all, but it eventually didn’t work out.
Long story short, management constantly changing the objectives without much communication got the better of the core technical members. After their departures, I decided to wrap up my projects and move forward, focusing on game-related companies.
I ended up having the opportunity to join Unity Technologies, and have been going through the recruiting process for the past two months.
It started with the classic phone screen with Human Resources. The easy part.
“Why do I want to join Unity? Well, I love playing games and dissecting their mechanics, and Unity is all about that. Also because the Unity Engine is used in Data Science to create complex simulation environments for Machine Learning-based solutions.”
Then came the coding interview, like an easy/medium puzzle to solve in ~30 minutes. I had to do classic matrix operations. I implemented them for 2×2 and 3×3 matrices before making a general solution for a NxN matrix. Just like any puzzle 🙂
Final step of the process: a long half day of onsite back-to-back interviews. This is where I talked the most about CodinGame. They were quite interested in my experience on the platform, but most importantly in the impact it had on my work:
- Learning new languages: Not directly useful, but it keeps me sharp, able and eager to learn. Also, I can now look into libraries written in C++ or Cython and make some sense out of them.
- Dissecting game mechanisms: This is all about having a practical problem-solving approach, a must-have for almost every job.
- Understanding trade-offs: This is a tricky one. For a bot you would face a dilemma regarding exploration and exploitation:
- For a Genetic Algorithm: Is it better to have a large population and a limited number of generations or few genomes and many generations?
- For a Beam Search: Should you favor depth over width?
- For a Breadth First Search: Is it worth it to have an approximate simulation to simulate an extra ply before evaluating?
- For a Monte Carlo Tree Search: How do you tune the c factor in the UCT?
Trade-offs everywhere! There are plenty of them in Data Science, too. Imagine you can classify a picture as cat, dog or unknown. If the users mostly test the model with dog pictures: Should you improve the dog detection even if camels are now identified as cats? What if adding a preprocessing step makes the classification better, but slower? AI contests develop an acute sense of how trade-offs work and how to handle them.
- Competition: I am getting better at managing both my time and my priorities.
What Made the Difference
This interview process was one of the hardest I have ever been through. The Machine Learning part was tough, but it has been my job for almost 6 years so I’m starting to get some decent experience. My gaming “history” is about the games I played, of course, but most importantly for the job, about CG. The competition for a Data Scientist job is tough around here, and CG helped make a difference for me.
CG played, without a doubt, an important role in this story. But there is more to it! I am getting better at each contest! This feeling gave me the confidence to bring up my experience on CG in interviews. The main reason behind my progress is CG’s amazing community. Without the emulation of coding contests, I wouldn’t have achieved half of what I have done in terms of coding. Without all the Post-Mortems articles, the guides, the tools, the forum, the chat/discord discussions, etc., I wouldn’t be writing this today. The community provides, at the same time, the challenge and the resources to improve.
So I’d like to say thank you, to CG’s team and to the community. I now have one foot in the gaming industry, and you were part of the journey to achieve this. A big thanks to all of you/Un grand merci à tous.
I did my first contest in Scala, and now I have to get back to it to use Spark at work. What goes around comes around!
PS: This week we announced the new partnership with DeepMind!