Imagine a world where all software were written in assembly language, or even better, machine code. There would be no use for compilers. 'Portable code' would be machine code that was frantically re-written (by hand) from one platform to another platform. And we wouldn't have a number of JIT technologies and other languages (by definition) as well. Here, without compilers, there would be many people who understand computers.
The fact is in the world we live in, code is on a higher plane than hardware instructions, and it's something that impacts software engineers' lives proportionally. Practical computers work with machine instructions, but idealized computers operate on programs which can be abstracted as code in another language. The practical constraint is that program code must be transformed to be used, so the compiler becomes an essential tool.
The fact that compilers as we know them are so complex leads to the assertion that "if you're not 100% sure you know how they work, then you don't know how they work." Because face it, if you're working on a monolithic, complex piece of software that automates a large volume of menial work, and there is no certainty that it performs as expected or does the right task, then it won't function at all.
You don't need to know how computers work (in this semantic argument) to be a computer programmer, but you absolutely must know how computers work to be a compiler writer. And like the transition from machine instructions to programs written in high level languages, the journey from programmer to compiler writer is a quantum leap, but one that gives someone advantages as a programmer.
> you absolutely must know how computers work to be a compiler writer
Ah, OK.Unix pipeline commands, for example. If you've ever used sed, it's apparently a compiler by his definition.
He says that compiler theory gives programmers the tools to solve problems with complex input. Building a parser for a Polish notation calculator can be tackled by a first-year CS student. But building an (correct) XML/JSON parser requires an understanding of AST.
So a programmer without an understanding of compiler theory cannot hope to process input that is not structured in the most trivial manner. The bulk of programming beyond CRUD apps require handing complex input, thus benefit from an understanding of compiler theory.
I copied-and-pasted the fourth para from the article.
This is going to be unpopular, but I don't think you're missing much. IMO its a long, drunken rant fueled by a massive ego.
I get the opposite feeling from Steve. I think he's a guy who, like most of us, realized that he didn't know something that it's pretty important to know and, like most of us, that realization made him feel pretty bad about himself.
Unlike most of us, he recognized that the way to make that bad feeling go away is to get out there and learn the damn thing you feel bad for not knowing.
If that's ego, then we're all fucked.