As far as i can tell they have trouble with sustained satisfaction of multiple constraints, and asm has more of that than higher level languages. (An old Boss once said his record for bug density was in asm: he'd written 3 bugs in a single opcode)
I agree with this. Just the need to keep track of stack, flags and ad-hoc register allocations is something I’ve found they really struggle with. I think this may be why it does so much better at porting from one architecture to another - but even then I’ve seen it have problems with e.g. m68k assembly, where the rules for which moves affect flags are different from, say, x86.
LOL in my 4th year Advanced Operating Systems Concepts course we wrote a toy x86 OS from scratch. We obviously didn't have to make our own hardware, but uhhhh I definitely added a bunch of printfs inside QEMU to dump out CPU states when we couldn't figure out the chain of events that led to hard faults.
On the other side... have also definitely used a pair of LEDs to try to debug an RTOS on a microcontroller with no JTAG access...
Running in the woods supports TFA: 180 steps per minute * 16 possible locations per step = 12 bits per second; maybe there are fewer or more possible footfall spots but no matter what it's more than 1 bit per second and less than 100. (and way less than 1e9)
Not really, I did an implementation in the late 70s, ran on a mainframe of the time (1MHz 6Mb). The language itself is not much more than modern C in scope - and in fact many ideas that were new in 68 are expected in modern languages
The big problem was that the spec was essentially unreadable.
It seems to me that academia grew out of the church doctors who grew out of the knighthood: thé eldest son of an aristocrat would inherit the land without lifting a finger, but to earn their spurs they needed to convince existing knights they were capable of doing equivalent work in the field. So, out of major feudal institutions, it was among the least nepotist.