It is natural for one's brain to be fogged with a lot of questions, given the vastness of this field. We tried to consult engineers from OpenAI, DeepMind, Meta and Adobe, to figure out a plausible way to navigate the landscape. It won't be perfect, but it won't disappoint you either.
Remember, this is a primer. It's main objective is to make you mentally prepared and help you question everything that comes ahead. We are humans, not sheep. Let's begin.
Understand what you are stepping into first, we can broadly categorise one's preparation strategy into the generic SWE oriented, research engineering and computer scientist slots, you must read about each of them. Preparation has no unified path after that, it's like a tree, every choice you make along the way is a branch, some reversible, some not, each with its own tradeoffs. Know the characters in the game.
Each of these characters, deal with various types of problems, which are not necessarily same to each other. But you don't know what you don't know! How will you know how to tackle them?
You go deeper by asking. This means you don't need to know everything before you touch a project or attempt to solve a problem, let it throw questions at you! Then go answer those questions, this is Just-In-Time (JIT) learning, reading everything cover to cover "in case" you need it later is for exams, not for this.
A good way to structure that probing is to first map the problem space -- what is even happening here, then find the levers, what's actually affecting this problem, then rank what matters most. and finally check your constraints, what are you not allowed to do, what does moving one lever break elsewhere, Nothing Was Asked lays this four layered process out properly.
This is ought to be the strongest tool in your journey, be it competitive programming, research work or fixing someone's 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, he perfectly explained why "learn X in 21 days" was always a lie. Haha, silly you.
There will be cases, where you won't know, what you dont't know. In that case, you will need to probe someone or something, who has the knowledge in that topic. Probing well is a skill you can practice deliberately, How to Teach Yourself Hard Things and How to Get Useful Answers to Your Questions, both by Julia Evans, break this down into concrete practice, and when you do end up needing to ask someone else, ask well, a vague "it doesn't work" gets you ignored, a precise question with what you expected, what happened, and what you already tried gets you answered, How to Ask Questions the Smart Way by Eric Raymond is the reference on this, read it once properly.
If you properly understand whatever we told you till now, you can surely handle questions like these:
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.
In here, you will realise that in order to get good in [ABC], you'll have to grind problems & read theory, and then does LeetCode and CodeForces start making sense!
Same framework. Let's not bore you with that, go and read "How I Learned Everything I Know About Programming". Often the cleanest way is the dirtiest one. You will first have to imitate someone else in order to build your own vocabulary. Then, you need to tweak the things, merge or apply knowledge from a different endeavour. That's how you make something. I, the writer, was once asked to build a "File Compressor" by a Staff Engineer from FAANG, read about my entire throught process, spilled out.
Now, what wil do you do, young padawan?
Let's get you started!