I'm beginning my programming journey with the long-term goal of understanding computing, programming, and eventually offensive security. I started with introductory pseudocode, then spent several months studying assembly, and now plan to focus primarily on C for at least a year.
My proposed roadmap includes studying books such as K&R, The C Programming Language, Modern C, and other advanced C material. I also want to balance the reading with practical work: implementing data structures such as dynamic arrays, queues, heaps, and graphs from scratch; visualizing them with Raylib or SDL2; and later working through larger projects such as a standard library implementation. I may also study general computer science material alongside this.
My philosophy is to understand concepts independently of any particular language. For example, I would implement a vector in C, use a list in Python, and compare their trade-offs and invariants. I'm especially interested in learning low-level and machine-related concepts through C, while later exploring how other languages express ideas such as ownership, abstraction, and concurrency.
I'm not planning to optimize for immediate employment. I could initially work in another field, continue studying, and eventually transition into IT or software development. I'm wondering whether this C-heavy, theory-first approach will give me a stronger foundation, or whether I would learn more efficiently by starting practical projects and seeking programming work much earlier. Would you change the roadmap, use a different primary language, or combine structured study with projects and work from the beginning?
5 Answers
Be careful not to treat C as the birthplace of every programming concept. Concepts such as algorithms, data structures, abstraction, and ownership are language-independent; languages simply provide different ways to express and implement them. C is excellent for learning memory, pointers, layout, and systems programming, but it is not automatically the best tool for every topic or career path. Choose languages based on the problems you want to solve.
The biggest issue is waiting too long before building real things. Theory is useful, but you’ll understand it better when a project forces you to apply it. Learn the basics of one language, then make small programs immediately—calculators, games, parsers, command-line tools, or data-structure visualizations. Adjust the roadmap as you discover what interests you and what you actually need to learn.
If offensive security is your eventual target, you’ll need more than low-level programming: networking, operating systems, web technologies, scripting, threat modeling, and lots of hands-on lab work all matter. C can be valuable for understanding memory vulnerabilities and systems, but Python and shell tools are also common in security work. Practice only in authorized environments, and consider formal education or structured training if it is accessible to you.
A strong foundation helps, especially early in your career, but professional experience and knowledge of a particular domain become increasingly important over time. You don’t need to master C, assembly, and several books before gaining experience. A better balance would be structured study alongside projects, internships, school, or entry-level work rather than treating them as separate stages.
Your plan sounds more like elaborate preparation than an actual learning loop. Reading hundreds of pages and planning several years ahead can become a form of procrastination. Pick a project that genuinely interests you, learn whatever is required to finish it, and let that lead you into deeper topics. People often learn the most when curiosity makes them chase a problem far beyond the original goal.

Related Questions
How To: Running Codex CLI on Windows with Azure OpenAI
Set Wordpress Featured Image Using Javascript
How To Fix PHP Random Being The Same
Why no WebP Support with Wordpress
Replace Wordpress Cron With Linux Cron
Customize Yoast Canonical URL Programmatically