4 ms·
When I was little and first starting to dig through my local library for books about how computers work, I ran across something sort of like this domino example
by VyseofArcadia 3y ago
When I was little and first starting to dig through my local library for books about how computers work, I ran across something sort of like this domino example, and I spent years trying to work out how you could build something Super Mario Bros. out of just a bunch of stuff that a cheap four-function calculator could to. Sure, I guess ANDs and ORs are a little different from + and -, but they're still fundamentally calculations.
Eventually I realized the same thing you called out here. You need a few extra things to really do computation instead of calculation. Memory, for one, and branching is crucial. But these little demo "computers" like this and Steve Mould's water computer always leave these out.
There's probably dozens of little curious minds like mine that look at this, get excited that they'll finally understand how that magic rectangle works, and then get frustrated when they can't see how the rubber meets the road (because they're missing crucial pieces through no fault of their own).
- SilasX 3y agoThank you! It feels so good to know I wasn't alone in thinking this! Here's an earlier comment where I fleshed out the point (connected to a possibly dubious, parallel argument about LLMs). Start from "If my point isn't clear": https://news.ycombinator.com/item?id=35472089 https://news.ycombinator.com/item?id=35472089
- galdosdi 3y agoThe key thing you end up needing is a clock (along with memory of course, yeah) I still remember clearly the day I in college read the SICP chapter on simulating circuits and realized how computers work -- a purely functional circuit combined with a clock to govern that circuit so its inputs come from memory which came from the previous state but its outputs go into memory for the next state. Prior to that I always had the same confusion you describe -- logic happens, but how does anything actually progress? Branching isn't really necessary per se in that you can do tricks to avoid it but essentially accomplish the same thing (differentiable computing leans heavily on this), eg if you want to select A or B, rather than saying `if(x) a else b`, you can say `xa + (1-x)b`