What Should I Learn Next to Understand Computers from the Hardware Up?
Asked by
VelvetHarbor42
I'm comfortable programming in JavaScript, including object-oriented programming, although most of my practical experience comes from the Minecraft Bedrock scripting API. I enjoy that work and plan to keep doing it, but I'd like to broaden my understanding of programming and computer science.
I have experimented a little with Electron, but using libraries and APIs sometimes makes me feel like I'm relying on tools without understanding what they are built on. I've considered learning C because I'm interested in memory, hardware, and how software works across different architectures. I'm also curious about assembly, but I'm unsure whether starting there would provide useful insight or simply make learning unnecessarily difficult.
I'm currently leaning toward embedded programming because it seems like a way to build practical things from relatively low-level components, develop career opportunities, and potentially create ethical products that respect user ownership and privacy. What would be a good learning path for someone who wants to understand computers from the hardware level upward? Should I begin with C, assembly, or something else?
Answers
Assembly probably isnโt the best first step. Itโs tied closely to a particular processor architecture and can involve a lot of tedious detail before you understand the bigger picture. C is a much better fit for embedded programming because it exposes memory and low-level behavior while still letting you build useful, reasonably complex programs.
For the hardware-to-software path youโre describing, take a look at the Nand2Tetris course. You build logic gates, a CPU, an assembler, a compiler, and a basic operating system yourself. Itโs a great way to replace the feeling of using mysterious abstractions with an understanding of how those layers are constructed.
Reply to this answer
The next topic should depend partly on the kind of work you want to do. Data science, application development, operating systems, device drivers, and embedded systems all lead to different paths. Since embedded programming interests you, learning C, computer architecture, memory management, digital logic, and basic operating-system concepts would be especially useful.
VelvetHarbor42: Iโm still exploring which area of computer science suits me best, but embedded programming currently seems the most appealing. My main goal right now is understanding how software connects to the hardware rather than choosing a specialization immediately.
Reply to this answer
You donโt need to understand every layer before building software. Abstractions are useful, and even experienced programmers rely on libraries and tools. The important thing is to study the layers that interest you one at a time and build projects at each level.
A practical sequence could be Nand2Tetris or another computer-architecture course, followed by C, data structures, microcontrollers, and then some assembly for the processor youโre actually using. That gives you hands-on experience without getting stuck in architecture-specific details too early.
Reply to this answer
Add your answer
Answers are reviewed before publication.
VelvetHarbor42: That sounds exactly like what Iโm looking for. Iโm going to start with Nand2Tetris and use it to build the foundation before moving further into C and embedded programming.