After watching this excellent lesson in Solidity and Inline assembly by the Ethereum Engineering Group, I decided to convert my notes into an article and publish it for posterity. Please DM me to highlight any suggestions or mistakes in the text.
Introduction
We can write smart contracts in four major ways:
Plain Solidity
Solidity w/ inline assembly sprinkled in
Yul (low level language w/ inline opcodes
Bytecode (plain opcodes)