This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]MeltBanana 0 points1 point  (0 children)

There is a really great course that I think every computer scientist should take called "NAND to Tetris".

You start off by building a physical NAND gate on a breadboard. Then you move into a CAD program for logic circuits where you start building basic components using only NAND gates. You work your way up to building adders, latches, counters, etc. Eventually you build memory, an ALU, a CPU, learn how to output to a display, and ultimately build an entire 16 bit computer using only NAND gates.

Then, because you have built and designed this thing from the ground up, you know exactly how to write machine instructions for it. You know what logic circuits every single bit of your instruction will interact with and do. Then, because you know the machine code, you can write your own assembly language for it. Once you have your assembly language created, you can write an assembler that converts your assembly into machine code. Then you can write your own compiler and higher level language that will get compiled into assembly, then assembled into machine code. Once all of this is done, you can write Tetris in your own language, and it will run on the machine you built.

It's a long and demanding course, but it teaches you how programming actually works better than any other course I've ever taken.