If you had 2 years and wanted to truly understand modern computing, where would you start?
Posted by Timely-Material-6356@reddit | learnprogramming | View on Reddit | 24 comments
I’m a 25-year-old guy in NYC who’s going to have a lot of free time over the next year or two due to a work injury.
I’m financially okay, so this isn’t about changing careers or chasing a paycheck. It’s about learning.
I’ve spent most of my life building, fixing, designing, and troubleshooting physical systems. Cars, machinery, electronics, appliances—you name it. I’ve always been the type of person who wants to understand how things work, not just follow instructions.
I can repair hardware and diagnose problems, but when it comes to software and programming, I feel like there’s an enormous amount of information and I don’t know where to begin.
What I’m not looking for is “learn this framework” or “watch this tutorial and get a job.”
What I am looking for is the most fundamental path toward understanding modern computing from the ground up.
If you were starting today and your goal was genuine understanding—not credentials, not a degree, not a career change—what subjects would you learn first?
What books, courses, concepts, or projects would you recommend to someone who wants to understand the system rather than memorize pieces of it?
Dazzling_Music_2411@reddit
I am a little intrigued as to what you mean by "modern computing".
The principles of computing are pretty timeless and have been with us since Church and Turing in the 1930s and even before. Now, some people say "modern computing" and mean whatever flavor is currently in fashion, but like fashions, flavors come and go. For instance, when I was learning back in the days when Google didn't even exist, OOP was drummed into us as the future savior, nowadays most serious theoreticians draw back from it as its shortcomings become apparent. Then again, if you mean computing taking into account the modern parallel technologies that didn't much exist in the past (Multiple cores, GPGPU, etc), then fair enough, but even these new fields are just applications of the same old timeless principles.
So could you actually put your finger on it and say what exactly you mean by wanting to "understand modern computing" and not just "understand computing"?
NowSeekingTravel@reddit
With computer architecture and understanding how the cpu physically works
j____b____@reddit
Try a python course. It is very powerful and can help you with basic repetitive tasks on your computer.
Timely-Material-6356@reddit (OP)
That’s kind of my problem though. The way I learned most of my other skills wasn’t by watching tutorials or following step-by-step guides.
If someone asked me how to start working on cars, I wouldn’t tell them to watch a video on replacing brake pads. I’d tell them to understand the fundamentals first. An engine is basically an air pump. Once you understand airflow, pressure, combustion, and energy transfer, the rest starts making sense.
What I’m looking for is the equivalent of that in computing. Every time I search for where to start, I get tutorials on specific languages, frameworks, or projects. That’s like teaching someone how to replace a water pump before they even understand how an engine works.
I’m not trying to learn enough to build an app next week. I’m trying to understand the fundamentals that everything else is built on.
HashDefTrueFalse@reddit
You might find the book Code (Petzold, 1999) useful. It's basically a primer on hardware and software. It's got a definite focus on hardware, which powers all software, so it's what I would call fundamental, but day-to-day programming is done at a level where we don't think about a lot of the things mentioned, same as the average mechanic doesn't think much about the physics of engine internals.
Or you can just jump into learning to write programs in C using the K&R book and the web, and doing CS50 or similar. You'll arrive at the same place but with a lot less knowledge about the underlying electronics.
Timely-Material-6356@reddit (OP)
I think we’re mostly aligned on fundamentals, just approaching it from slightly different angles.
I’m not treating this as a “learn programming quickly” or career-driven exercise. This is a long-term systems understanding goal for me, and I’m completely fine going deep into background material if that’s what it takes. In fact, that’s the intent.
I live in NYC and most of the people I know in computer science are working professional software engineers at six-figure roles. From what I’ve seen, a lot of day-to-day work is high-abstraction application development—operating several layers above the actual system internals. That’s not a criticism, just an observation of where most practical work sits in the stack.
When I try to learn from them directly, I tend to keep asking “why” and “how does that actually work underneath,” and eventually I’ll hit a point where the answer becomes “I’m not sure” or it stops at the abstraction boundary they normally work within. That’s the exact gap I’m trying to avoid in my own understanding.
What I’m trying to build is a full-stack mental model of computing: hardware execution models, instruction sets, memory hierarchy, operating systems, scheduling, virtual memory, filesystems, and then up through software. I want to be able to trace behavior all the way down without hitting an unexplained layer.
Programming is part of that stack, but not the starting point for what I’m trying to build mentally. I’m trying to construct a coherent model from physics/electronics → logic → architecture → OS → software, so I can reason across layers the same way I can with mechanical systems.
The recommendation you gave (especially Code and K&R/C) is actually useful in that context, because it maps well to that layered understanding. I’m not trying to avoid depth or background theory—I’m actively looking for it. I just want it structured in a way that builds the full system model rather than isolated skills.
HashDefTrueFalse@reddit
It roughly goes: the physics behind the transistor -> the transistor -> Boolean algebra -> composing transistors to make physical digital logic gates -> NAND gates -> composing gates to make digital logic circuitry (e.g. a full adder, an ALU etc.) -> more circuitry to architect a general purpose microprocessor with the ability to interpret opcodes and operands according to a defined instruction set -> machine code (binary) -> assembly mnemonics for specific ISAs and assembly to machine code -> compilation from higher-level source to assembly mnemonics (for assembly to machine code) -> peripheral device firmware as an aside -> system-level software (operating systems and related concepts and interfaces, e.g. process scheduling and syscalls) -> the system loader and the hosted environment for running user-space processes -> application-level software -> algorithms and data structures (and generally the study of practical software engineering of all kinds) -> databases, networking, other closely related computing topics -> burnout and becoming a carpenter or goat farmer.
So that book could be a good jumping off point beginning at digital logic circuitry hardware and stopping around assembly. There is a book list I wrote ages ago that has most (if not all) of what you're looking for, I should think. For your goals: TAOCP (I wouldn't start here), SICP (but here is fine), OSTEP.
j____b____@reddit
You can read about binary code and the foundations first if you like. There’s nothing wrong with that. But programming has always been taught by doing. Sorry.
MR_LAW11@reddit
Since you like understanding systems, I’d honestly approach computing the same way you’d learn engines or electronics: layers, from physics → components → systems.
I’d go something like: how computers physically work (Nand2Tetris/Crash Course Computer Science) → programming fundamentals (Python/C) → data structures/algorithms → operating systems (processes, memory, scheduling) → networking/Internet → databases → compilers/languages → distributed systems/cloud.
Books/courses that changed how I thought: Code by Charles Petzold, Nand2Tetris, CS50, Computer Systems: A Programmer’s Perspective, The Linux Programming Interface, and Designing Data-Intensive Applications.
Biggest advice: build tiny things at every layer. Write a toy shell, build a small web server, mess with Linux, sniff packets, break stuff. Computing clicks way faster when you stop treating it like abstract theory and start treating it like a machine you can take apart.
YMBTPTOTLWRT@reddit
I’m doing it right now.
Start with C and simultaneously build in code the very first computer. You start with the 0 and 1s because believe it or not it’s still how the H100s work today that power AI (I’m making massive simplifications here, but the core philosophy of the hardware is still the same as it originally started)
peterlinddk@reddit
What do you mean by "truly understand modern computing"?
Do you mean the hardware, the CPU, cache, memory, the GPU, the pci-bus, USB, networking, wifi, routers, cat6 cables, fiber, ADSL, coax, harddisks, SSDs, RAID systems?
Or do you mean the system software, BIOS, UEFI, bootloader, OS kernel?
Or do you mean the Operating System(s), memory management, task switching, dynamic libraries, hardware drivers, filesystems, resource-managers?
Or do you mean the user interface, windowing systems, shells, command lines?
Or do you mean programming languages and compilers?
Or do you mean software engineering, and how software is built?
Or do you mean systems programming, network programming, games programming, application programming? For desktops, servers, mobile phones, embedded systems, game consoles?
Or do you mean abstract data structures and algorithms? Or maybe security? Or encryption, or hacking?
If you truly want to understand everything from the ground up, you need to study mathematics, and then study the history of computing for the past almost 100 years. Because almost everything builds on what came before it, so the "ground" is very, very far down!
You need to pick one topic, and then dive into that - you can never learn everything, not in a lifetime, and certainly not in 2 years. But you can become a bit of a geek in some topics - if you happen to also find them interesting.
Pick something, and get into the middle of it - maybe operating systems, maybe programming languages, maybe CPUs - try to build something, and get tips for more specialized material on that particular subject. "Computing" is so broad, that there's literally neither an end or a beginning to it.
Timely-Material-6356@reddit (OP)
I think we’re actually closer to agreeing than disagreeing.
When I say I want to understand computing, I’m not talking about learning how to use software or becoming proficient in a few programming languages. I’m talking about understanding the underlying principlesdeeply enough that I can reason about the entire system from the ground up.
A lot of people are using cars as the analogy because I brought them up, but my background isn’t really “cars.” It’s prupulsion and physical systems in general. Internal combustion engines, diesel engines, aircraft piston engines, jet engines, hydraulics, thermodynamics, fluid dynamics, combustion, energy transfer—those are all different systems, but they’re built on the same physical laws.
When I look at a machine, I don’t stop at “this part does this.” I want to know why it does it, what physical principles make it work, what limitations exist, and how changing one variable affects the entire system.
I’ve spent years doing that with mechanical and analog systems. I’ve studied modern engines and older engines because understanding where the technology came from helps explain why it works the way it does today.
What I’m realizing is that computing is the equivalent field that I haven’t explored yet. My understanding of analog and physical systems is fairly deep, but digital systems are largely unexplored territory for me.
so when I ask about understanding computing, I’m asking how to develop the same kind of foundational understanding. I want to understand how electricity becomes logic, how logic becomes computation, how computation becomes software, and how all of those layers interact.
I understand that nobodycan master every niche of computing. My goal isn’t to memorize everything. My goal is to understand the foundations deeply enough that I can follow the chain of cause and effect from the lowest levels up, the same way I can with a mechanical system.
dawalballs@reddit
Google nand2tetris. If your goal is understanding this is a good direction to goa
Loud-Author-7329@reddit
NAND2Tetris -> Computer Systems: A Programmer’s Perspective -> Operating Systems -> Networking -> Databases. Build a tiny computer, a tiny OS, and a tiny web server. You'll learn more than 100 JavaScript frameworks ever could.
Timely-Material-6356@reddit (OP)
Please elaborate
ScholarNo5983@reddit
Pick a programming language and try to learn how to use that language to write programs that actually work.
It is amazing how the choice of the language really does not mater, but instead your measure of success can be easily measured by how many successfully functioning programs you manage to write.
zaphodikus@reddit
Start, the same way you learned all your other skills. Do not overtaking it, learning is not a speed run.
Timely-Material-6356@reddit (OP)
That’s kind of my problem though. The way I learned most of my other skills wasn’t by watching tutorials or following step-by-step guides.
If someone asked me how to start working on cars, I wouldn’t tell them to watch a video on replacing brake pads. I’d tell them to understand the fundamentals first. An engine is basically an air pump. Once you understand airflow, pressure, combustion, and energy transfer, the rest starts making sense.
What I’m looking for is the equivalent of that in computing. Every time I search for where to start, I get tutorials on specific languages, frameworks, or projects. That’s like teaching someone how to replace a water pump before they even understand how an engine works.
I’m not trying to learn enough to build an app next week. I’m trying to understand the fundamentals that everything else is built on.
Kq9gE8MNWZ7m@reddit
My first programming book was "The C Programming Language" (second edition) by Kernighan and Ritchie. It strips programming down to the bare essentials and get you thinking quite close to the hardware. I have a copy right next to me and still use the book to this day. Would recommend.
creaturefeature9191@reddit
Any introductory texts to networking will be helpful!
Traditional_Crazy200@reddit
Modern os by Andrew tannenbaum is a great start, it goes both into modern operating systems and the history how they progressed into what they are right now.
Simultaneously, I'd learn assembly as it is the lowest human readable level that almost everything is based on.
Arch 1001: x86_64 by ost2 is a good assembly course that you can find on yt
Sheepza@reddit
Do you have any programming experience?
Regardless, CS50: Introduction to Computer Science is an awesome intro.
Timely-Material-6356@reddit (OP)
I do not, and thank you I will check it out
igotshadowbaned@reddit
Boolean algebra