Assembly
These are my notes on (re-)learning Assembly (x86 / amd64 / ARM). There may be mistakes or things I've not explained clearly, or I've not covered every single edge case. Please don't barge in and tell me what I've done wrong, or that you disagree with an opinion - that spoils the learning experience (if I want / need help, I will ask for it).
Why assembly?
There are a few reasons why you still might want to learn assembly in 2026.
Learning about the architecture: Assembly is as close as you can get to the hardware whilst still retaining something readable by humans. You have to understand how constructs such as stacks, loops etc. actually work, instead of having them abstracted away.
Optimisation: In theory, you might be able to output better assembly than your C, Rust or Go compiler if you know something really specific about the hardware or the application. The days when it was often worthwhile rewriting tight loops of programs (especially games) in assembly for performance are long gone though.
Access to new architectures: Pretty much everything has a C compiler nowadays, but if you get some absolutely hot off the press hardware you might be able to get going quicker with assembly (but it's unlikely).
Exploring old source code: Although assembly isn't routinely used now, it was in the past, and if you're into things like exploring the source code of retro games, you probably need to know at least some assembly.
Kernel development: Although most operating system kernels are written in C, they do occasionally use assembly. In the case of RISC OS, the traditional kernel contains a lot of ARM assembly.
Unless you have really specialist requirements though, the main reason to learn assembly is as part of a wider computer science learning experience.
My backstory
I learnt ARM 32 bit (and Thumb) assembly at university, though I forgot most of it afterwards because I never used it outside of academia (I was lucky enough to be taught by Steve Furber - yes, the one who co-designed the BBC Micro and the original ARM microprocessor). Going back to work at a university years later, my main role was to support students in their studies - particularly on the software side. I found myself picking it up again and enjoying doing so.
I primarily write PHP in my job (phpdev.uk), with a bit of Go for command line tools. The nature of what I work on most of the time (web applications) means that I am unlikely to use assembly in production or be paid for it.