Primer

Given the vastness of this field, it is natural for your brain to feel overwhelmed with questions. We consulted engineers from OpenAI, DeepMind, Meta, and Adobe to map out a clear way to navigate the landscape. It won't be perfect, but it will set you on the right path.

Remember, this is a primer. Its main objective is to prepare you mentally and encourage you to question everything that comes ahead. We are thinkers, not sheep. Let's begin.


Understand what you are stepping into first. Preparation strategy generally falls into three tracks: traditional Software Engineering (SWE), Research Engineering, and Computer Science. You must read about each of them. Beyond that, preparation has no single path. It is like a branching tree where every choice carries its own trade-offs. Know the characters in the game before you play.

Each track deals with distinct types of problems. But how do you tackle a problem when you don't even know what you don't know?

You go deeper by asking questions. You don't need to know everything before starting a project or attempting a problem; let the problem surface questions, then go answer them. This is Just-In-Time (JIT) learning. Reading everything cover-to-cover "just in case" is for school exams, not engineering.

A good way to structure your breakdown: first, map the problem space (what is happening here?); second, identify the levers (what actually affects this problem?); third, rank what matters most; and fourth, check your constraints (what are you not allowed to do, and what breaks if you move a lever?). The essay Nothing Was Asked details this four-step process.

This mental framework will be your strongest asset, whether in competitive programming, research, or debugging a broken project.

Do you feel lost or "too dumb" already? That is usually just a case of missing prerequisites, not a ceiling on your ability! You Are Not Dumb, You Just Lack the Prerequisites is an account of what that gap feels like and what closes it.

Will "finishing" a course make you competent? Read Teach Yourself Programming in Ten Years by Peter Norvig, where he explains why "learn X in 21 days" was always a myth.

When facing unknowns, you need to ask people or tools that hold the answers. Probing effectively is a skill you can deliberately practice. Julia Evans breaks this down in How to Teach Yourself Hard Things and How to Get Useful Answers to Your Questions. When asking others, precision matters: a vague "it doesn't work" gets ignored, while detailing what you expected, what happened, and what you already tried gets helpful answers. Eric Raymond's How to Ask Questions the Smart Way is the definitive guide on this. Read it carefully.

If you properly understand whatever we told you till now, you can surely handle questions like these:

  1. How do I get into Google?

Hint: Have you decided what track would you go for? What does your dream company or field of work demand you to know? What in turn is needed to learn to understand those topics? Can you break everything down to the most fundamental requirements?

Map the problem space. You should think: Getting into Google would require me to pass interviews, but wait, there are many roles. They must have different ways of judging the candidates! Let me see their Careers portal to list down the possiblities. Ok gotcha, now I know the characters in the game. Let's try to ask ChatGPT what they deal with. Hmm, that one looks good. It interests me. How do I become one? What can be the things affecting this? First I need to know how to land an interview. What if I see what the current employees have in their resumes for that? I can search {role name} {company} site:linkedin.com, and go through their CVs. Now, how do I know what is being asked? Let me try searching for {role name} {company} interview experience, and go through the answers on various forums like Reddit. That's pretty good. They prefer projects like [XYZ], and ask questions from topics close to [ABC]. I know what to study! Let me ask ChatGPT to build a skill tree. I can follow that, and prepare myself.

At this point, you will realize that getting good at [ABC] requires combining problem-solving with core theory, and that is when LeetCode and Codeforces start making sense.

  1. How do I start building my own [VERY SCARY BIG PROJECT]?

Apply the same framework. Read How I Learned Everything I Know About Programming. Often, the cleanest way to learn is by getting your hands dirty: start by imitating existing work to build your vocabulary, then modify, combine, and apply ideas in new contexts. For a real example, read my thought process breakdown when a FAANG Staff Engineer asked me to build a file compressor from scratch.

What will you do next, young padawan?

Let's get you started!