I've primarily worked at a high level in programming, and the most hands-on experience I've had is with Minecraft redstone. While I've learned a bit about semiconductors, diodes, and how they lead to NAND gates and such, my programming experience is mostly with C++ and making games in Godot. I'm really eager to fill the gaps in my knowledge, especially starting from the principles of electronics up to practical programming in C++. Are there any good courses or resources out there for someone looking to learn these low-level concepts?
5 Answers
A hands-on approach could work wonders! Try to reinvent the wheel — dive into how C works under the hood, like memory allocation. Lots of programmers learn a ton by recreating existing systems. I started working on similar projects and it really deepened my understanding, plus it’s a lot of fun!
You should definitely check out Nand2Tetris! It’s a great course that walks you through building a computer from the ground up, starting with a simple NAND gate. You can either use the textbook or take their Coursera courses for a structured approach. By the end, you’ll have a solid understanding of both hardware and software!
Holy Hell! Exactly my need.
For books, start with the basics of arithmetic logic units and the difference between low-level and high-level languages. If C++ is your focus, understanding lexical structures and how compilers work would be super beneficial. There’s a lot of foundational knowledge that overlaps with a computer science degree, but you can find most of it in just a few good books.
I highly recommend the YouTube channel Core Dumped! His videos break down complex topics from pseudo-assembly and C all the way down to the individual gates and transistors. It’s a fantastic starting point, especially since he makes everything super visual and easy to grasp.
Often, you'll stumble into low-level programming when things break! Understanding why your high-level code fails leads you to explore what’s really happening underneath. Also, try writing a simple assembly program and stepping through it in a CPU emulator to see the registers and flags change in real time. It's a killer way to learn how computers actually operate!
This is how I like to learn. We had projects in school where we reimplemented things like `malloc` and even built a shell. Since then, I've created some programming languages and even a virtual machine. It’s challenging but incredibly rewarding!