Some Advice for Computer Science Students in Europe

Small excerpt of e-mails after starting to apply for summer 2021 internships in the fall of 2020.

My path from high school to new grad

After high school, I initially wasn’t sure what to study - I spent the first semester looking at Mathematics, Medicine, and Law, until deciding on Computer Science (CS). I had barely any programming experience1 and was mostly interested in CS theory. My plan was to get good grades and go into academia (haha). After a year of studying, in the spring of 2020, I realized that software engineering is actually a lot of fun. I greatly enjoyed (and still enjoy) thinking about, designing, implementing, testing, and running cool software!

Back then, I had no idea about the SWE landscape in Europe (and could’ve really used a post like this!). Studying at a random German university, most graduates would go on to work at random local companies, so there was no strong network or anything of people preparing for competitive SWE interviews.

That summer, I interned at a German bank and participated in the Bundesnachrichtendienst’s (BND) Summer of Code, who sponsored me to work on an open-source Python library. On the side, I started researching career opportunities as SWE in Europe. I then spent a lot of time on interview prep and started applying for 2021 summer internships in early October 2020. I applied to more than 100 companies and got my first offer from IMC Trading in Amsterdam in early November. I really liked the company, so I decided to cancel all other interviews and accept their offer2. Curiously, Amazon got back to me in March 2021 only (almost 6 months after applying). I decided to do the final round interviews there in early 2021 and then accepted their offer for fall 2021.

I received a full-time offer after my internship at IMC, and I’ll start at IMC as Junior Software Engineer in August 2022. I quit my Amazon internship after a month to focus on my thesis at university3.

Overview of SWE internships and new grad roles in Europe

Note that this advice is purely for students who want to work at the top-paying companies for Software Engineers. Of course, there’s absolutely nothing wrong with working at e.g. big German car manufacturers, banks, etc., they’re just not as SWE-focused and thus pay significantly less4.

For SWE in Europe, the companies paying the most are the ones where profits scale with the skills of the company’s SWEs. Mostly:

  • big tech / FAANG+ / Big N (Amazon, Google, Facebook, Uber, …)
  • unicorns (Databricks, Stripe, …)
  • trading companies and hedge funds (Citadel, Optiver, IMC, HRT, …) (though not quite accurate, I’ll refer to all these as “HFT” (high-frequency trading))

To find companies to apply to, check out the resources section at the end of the post. I’lljust refer to these companies as “the list”.

New grad pay varies quite a bit among these companies. Rough numbers (€/yr) for Western Europe (mostly Amsterdam, London, Berlin, some in Munich and Zurich) are

  • big tech and unicorns: 80k-120k
  • HFT: 100k-220k

Internship pay is 5-10k (€/month) for HFT in Amsterdam and 7-15k in London. For big tech, it’s around 3-6k in Germany.

Getting one of these internships/jobs really boils down to:

  1. Apply to all companies on the list
  2. Pass the CV screening to get an interview
  3. Pass the interviews

Keep this in mind: While the process can seem overwhelming, it’s really just applying to all the companies, passing the CV screen and then the interviews. That’s it! Most of your prep will be spent on practicing to pass the interviews, but keep in mind that without the first part, you’ll never get to the second part. What’s nice is that big tech / unicorn interviews are mostly super similar, and HFT interviews are also often quite similar, so you generally don’t need to individually prepare for companies.

The easiest way to a full-time role is getting an internship at a company you want to work on and then getting a full-time offer afterwards without further interviews. For lots of companies, the majority of their new-grad class is filled with former interns.

Step-by-Step Guide

In brief, just do this:

  1. Study Computer Science (or something related) at some university. If it’s a top uni, that’s nice, if it’s not, don’t worry, no one in SWE really cares.

  2. Do some stuff to fill your CV. In roughly descending order of importance:
    1. Past SWE internships at top companies (duh)
    2. Referrals (this means that someone at the company refers you for the job; Most companies have a system like that. To get a referral, try to find someone (e.g., on LinkedIn) who you have something in common with (e.g., same university) and simply ask them.)
    3. Competitive programming or related competition experience (olympiads etc., mostly from high school)
    4. Top university (no university in Germany matches here, and they all teach the same stuff in CS undergrad, so just go to the one where you think you’ll have the most fun)
    5. Past SWE internships at random companies or solid open-source contributions to popular projects
    6. Top grades
    7. Personal programming projects5

    When I applied in fall 2020, I had 5, 6, and 7, and that was enough to pass almost all CV screenings already. If your CV looks solid and you have some programming experience, passing the CV screening shouldn’t be the hard part - Because most companies have automated first-round interviews weeding out lots of candidates, in my experience, they’re not too stingy about handing out first-round interviews. If you aren’t passing CV screens and you’re sure it’s not because your CV looks bad but because it’s not good enough, then start applying to companies outside the list too, and maybe do some open-source contributions and personal projects.

  3. Prepare for interviews. Most interviews are variations of this: The interviewer (could be automated in the first round) gives you an algorithms question with a few examples, and then you think about it, give a hopefully optimal algorithm, and implement it. See below for more detail. Thus, you should be confident solving “Algorithms and Data Structures” questions. Because most interviews are the same, there’s a huge amount of prep material out there. I would
    1. Do a few hundred questions on Leetcode. First do the Blind 75 (Google “teamblind 75 leetcode”). This is by far the most important step, you’ll probably get 100% rejections if you skip this. Focus on understanding the patterns behind the problems. You can also read “Grokking the Coding Interview”. For big tech, this should be enough prep. You should now try to find others to do mock interviews with; There’s also platforms like Pramp offering this. I’d say that you’re ready when you can comfortably do two Leetcode Mediums in 35-40 minutes, or a Medium and Hard in 45 minutes.
    2. For HFT, depending on company, you might need solid knowledge in hardware architectures, networks, operating systems, parallel programming, internals of the programming language of your choice, … Ideally you have this knowledge from uni courses and just revise it again; Otherwise just google for lecture notes from good unis and study those. On leetcode, reddit, glassdoor, and teamblind (see resources section) you can sometimes find past interview questions for companies you’re interviewing with in advance so you can judge the level of your knowledge.
  4. Do the interviews. Mostly:
    1. Automated coding test online (hackerrank or codility). It’s easy to cheat here, but note that if you need to cheat here, you’ll probably fail at the live coding rounds later.
    2. HR interview (sometimes at a later step) to see if you are at least slightly socially competent
    3. Coding round with SWE at the company, where they give you 1-2 leetcode problems and watch you over zoom/… solving these live over a shared screen. Some companies don’t let you run your code. In my experience, around two Leetcode Mediums or one Easy and one Hard in 40 minutes. For HFT, probably some deeper questions about the topics described above.
    4. Final Round / “onsite” (since covid mostly online): 2-4 interviews, often similar to 2. and 3. but more thorough and challenging.
  5. Compare your offers and go for the one where you’d most want to work full-time. Don’t stress about internship salary.

Recap and Interview Advice

If you’re reasonably smart, have solid basics in software engineering, and spend a lot of time preparing for interviews, you have great chances at landing one of these fairly high-paying jobs. When I first heard about these jobs and salaries, I thought that they were either unattainable for me, or they were for some reason (e.g. horrible WLB) unappealing. However, turns out lots of these jobs have good WLB, nice colleagues, and interesting technical problems, and they’re attainable for CS majors at random European unis, provided they put in enough time to prepare.

Finally, for interviewing, this is what I do:

  1. I am (or at least seem, but usually actually am because otherwise why bother applying) enthusiastic and interested. Remember that the interviewers are judging whether they would want to work with you and whether you fit in with their company.
  2. I ask some clarifying questions about their task. What about edge cases / what unit is XY in / … Interviewers often don’t give you the full details because they expect you to ask for them!
  3. I always talk through a simple example or two with the interviewer for every coding question. Even (or especially) if it seems like a straightforward question! Say something like “So an example input would be XY, and then the output would be Z, did I get that right?”
  4. If possible (it usually is), I briefly explain a simple, brute-force solution with horribly time/space complexity and then start from there to find a better/optimal one.
  5. I talk out loud the whole time; Every time I think something, I say it. (This took quite a bit of practice for me; When I’m thinking, I tend to be quiet.)

The best prep is actual interviews, and the second best is mock interviews with others.

Best of luck!

Resources

  • These subreddits are quite helpful
  • Levels.fyi has solid salary info - you can filter by location to get info for Europe
  • to get a list of companies to apply to, google something like “github swe internships europe” and check out the first few results. Also apply to companies offering internships in Europe here.
  • Teamblind is a big (fairly US-centric) community of SWEs. You can see what company posters work at.
  • Feel free to reach out to me for more specific advice/questions - I genuinely enjoy talking to students interested in SWE careers in Europe. My contact details can be found here.
  1. I thought that’d put me at a big disadvantage compared to other students. Turns out most initial programming skill differences even out after 1-2 semesters and most of the courses are theoretical with barely any programming necessary anyways (at least in Germany). 

  2. I’d probably do this differently now and finish the other interviews, mostly because real-life interviews are the best interview practice you can get. 

  3. A non-final version of the thesis is here. Warning: It’s purely theoretical and you’ll probably find it super boring! 

  4. Around 50-70k€ per year from what I’ve heard. 

  5. Note that these projects should mostly be technically challenging and impressive. They don’t really need to be widely used, and for HFT, they really, really don’t need to be trading-related in any way. Just program something that really challenges you, present it nicely, and be ready to talk about it in detail.