In computer hardware engineering, how does the electricity and the little bits of silicon work, what’s the “lowest level” of computer engineering and how does that work, and how does that scale and translate up into writing software? i.e. hardware -> machine code -> assembly -> higher level programming languages?
I think mostly I’m just curious about the bridge between software and hardware, and how to get there, but I have no idea where to start.
In: 1
I think you might be asking about how programs can have meaning. It’s all just a bunch of blinkenlights, how can that do useful things like adding numbers together?
It cannot. Software doesn’t do “useful” things, it just does things. Like you can set up a logic gate that takes two inputs and blindly ANDs them together. That’s not inherently useful, it’s only useful if you need two inputs ANDed together. Then there are upstream decisions about when that’s a useful thing to do, which is also all done blindly by a computer. Which things to do are ultimately set in motion by the human user, picking which bits to kick off and run based on what they want, i.e., what is useful to you.
The other aspect of this is the projection of meaning onto particular states of a machine. If you see a sequence of bits it could represent a letter, a number, or anything else. Only a human can assign meaning to a bit sequence, and we do by keeping track of types associated with data.
Weirdly, state has been proven equivalent to computation, so besides assigning meaning to a sequence of bits, you can equivalently assign meaning to a sequence of *steps*. The isomorphism of computation to data means that information can be represented and assigned meaning in two different fundamental ways, and allows systems to encode information along a spectrum with functional and object oriented representations at either end.
Latest Answers