An Intro to Compilers (2017)
While somewhat irrelevant for a majority of developers, it feels great to understand how computers actually work.Even many higher education IT programs often barely cover the underpinnings anymore.I'm currently embarking on a fun little "from first principles" challenge:Imagine a post-apocalyptic world where computers are a relic of the past.You stumble upon a functioning device with a screen and keyboard. When powered on, all you get is a bare metal "assembly interpreter". You can type in riscv64 assembly instructions and they are executed. You can print to the screen via a UART. So you don't even get an assembler/linker to build on.From there you have to build up an entire new software stack, with a proper language with compiler/vm, an operating system, a standard library, basic userspace tools, a UI,  ...Simulating the device and console is easy with qemu-system-riscv64 and a a bit of assembly.It's very challenging, but also rewarding to study up/relearn and implement all the basic underpinnings of computers, all the way from hardware (CPU, memory, IO devices, ISAs) up to a GUI stack.Hacking together a simple OS isn't actually all that hard when your hardware is constrained to a specific device. And writing a very simple language in assembly also isn't that bad. You can build progressively better languages on top of that.I'd love to turn this into a somewhat guided, interactive learning experience that runs in the browser via tinyemu [1] or similar, but I won't have time for that.[1] https://bellard.org/tinyemu/