I've been becoming increasingly interested in computers and programming. I know some Python and want to keep improving, but the field feels enormous. I'm curious about game development, cybersecurity, Linux, and understanding how computers and software work in general, so I'm having trouble deciding what to focus on.
I don't want to spend all my time watching tutorials or taking courses without producing anything. I want to build projects, understand how they work, solve problems independently, and eventually create something substantial. I'm serious about getting good at programming and possibly turning it into a career or other opportunity, but I need a direction that will help me avoid constantly jumping between topics.
What should someone with basic Python knowledge learn next? Are there particular projects, fundamentals, courses, or learning strategies you would recommend? I'd especially appreciate advice from people who remember being beginners and can suggest a practical path from learning concepts to building useful software.
4 Answers
Don’t worry about choosing a specialization immediately. Most paths share the same foundation, and building projects will help you discover what you actually enjoy. Since you already know some Python, stop doing tutorial after tutorial and start making projects that are slightly beyond your current ability—something where you understand roughly two-thirds and need to research the rest.
Good options include a command-line password manager, a file indexer, a basic HTTP server, a multiplayer socket program, or a small game. Use Git, create separate virtual environments, write a README, and add logging, error handling, and tests as you improve. Try to finish projects even when the final parts feel tedious; handling edge cases and cleaning things up is where a lot of practical learning happens.
Alongside projects, study data structures, algorithms, complexity, memory, processes and threads, filesystems, networking, and operating-system basics. Learning some C later can make concepts like pointers, memory allocation, structs, compilation, and linking much less mysterious.
After that, branch out according to your interests: game development can lead toward C# or C++ and graphics; cybersecurity benefits from Linux, networking, C, assembly, and operating systems; web development involves HTTP, SQL, databases, APIs, and JavaScript or TypeScript; systems programming involves C or C++, concurrency, processes, and sockets. A broad introductory computer science course can also be useful because it connects several of these subjects.
Use courses for fundamentals, but use projects to develop competence. Real programming is mostly reading documentation, trying things, breaking them, debugging them, and figuring out why they work.
Learning a lower-level language such as C, C++, Go, Zig, or Odin can be valuable if you want to understand how software and computers work beneath Python. C or C++ will expose you more directly to memory, compilation, and system-level concepts, but you don’t need to abandon Python. Keep using the language that lets you build projects while learning another language to deepen your understanding.
Make the documentation your main reference instead of relying entirely on tutorials. Pick a small project, read the documentation for the tools you need, and implement the features yourself. Tutorials can help with an introduction, but documentation and experimentation teach you how to work independently.
A structured computer science class can provide useful discipline and cover fundamentals in a sensible order, especially if you find it difficult to plan your own curriculum. Still, pair formal study with personal projects so you’re not only completing exercises without building anything practical.

That makes sense. I think I’ve been waiting to feel prepared before starting, when I should probably choose a manageable project and learn what I need along the way.