My first compiler wasn't bootstrapped in nearly that extreme fashion.<p>I started with an assembler, and the first version was written in M68k assembly and was very simple:<p>It supported pretty much function calls with no arguments, and function definitions, and inline M68k assembly and that it for the first iteration. Then I "rewrote" the compiler using those facilities, and iterated, adding support for variables, function arguments, etc.. Over time I had a relatively decent object oriented language.<p>One of the "fun" parts of the language was that you could use M68k registers in any expression (with some caveats about having to avoid the ones the compiler used). So you might have things like "foo := D0.w + bar" where foo and bar where regular variables, and D0.w indicated 16 bits of the D0 register.<p>I spent a lot of time in high-school working on it on paper during breaks (if you want to come across as a geek, spending breaks reading piles of assembly printouts works wonders), and occasionally lessons.