Hey folks! I'm taking a "foundations-first" approach to dive into software engineering and want to build a solid, field-agnostic base before specializing in areas like AI, Systems, or Web. My roadmap starts with C to cover several key areas: 1) C Fundamentals, focusing on pointers and memory management; 2) Computer Architecture, learning how C interfaces with CPU and RAM; 3) Linux/OS, exploring system calls and process management; 4) Networking, including socket programming and protocols; and 5) Databases at a low level. My aim is to grasp the "magic" happening behind the scenes with C before I touch on higher-level languages like C++, Python, or Go. Is this Systems-First mindset the best path to build a lasting career in tech? Or should I consider these topics at a later stage? Any recommended resources for learning these concepts through C would be great!
5 Answers
While your plan has merit, it isn't the most well-rounded approach. You're mixing important concepts like data structures and algorithms. These are essential for understanding the decisions computer scientists make, especially during interviews. Learning C is valuable for systems programming, but I'd suggest picking up at least one other language to compare 'C-isms' with more universal programming concepts. It's a solid way to stay focused and keep your motivation up, though!
Definitely check out Harvard’s CS50X course! It's free and really a fantastic starting point for CS. After that, you can move to their advanced courses like CS50W for web or CS50G for games, which are also free. Familiarizing yourself with Linux can be helpful too. You could explore distributions like Linux Mint or Pop_OS! for a good experience. Later, challenge yourself with a Linux From Scratch install! Here’s the course link: [CS50X](https://cs50.harvard.edu/x/) and a good distribution: [Linux Mint](https://www.linuxmint.com/).
I'd suggest combining your first three steps, as they closely relate. A good operating systems textbook should integrate all those topics. Also, make sure before diving in, you grasp some basics like variables and loops. Adding a focus on data structures and algorithms, along with object-oriented programming, could really round out your learning experience!
I relate to your plan! I'm looking to follow a similar roadmap next year. You might find this GitHub link helpful—it's a computer science curriculum that seems to cover everything you're aiming for: [ossu/computer-science](https://github.com/ossu/computer-science).
Your approach is interesting, but it sounds a lot like what's covered in a typical computer science program. You don't need to get a degree, but checking out a solid CS curriculum could guide your studies. One key area you're missing is a focus on data structures and algorithms, which is crucial and usually taught alongside the basics of operating systems. That would give you a more comprehensive understanding.

I get where you're coming from! I've got a bit of experience; I started with C++, moved to C# for backend development, but I found some gaps in my knowledge. That's why I’m shifting to this solid foundation approach—it’ll really help me tackle any area of CS confidently.