4 ms·
Executive summary: If you don't know how compilers work, then you don't know how computers work. If you're not 100% sure whether you know how compilers w
by falsedan 10y ago
Executive summary:
If you don't know how compilers work, then you don't know
how computers work. If you're not 100% sure whether you
know how compilers work, then you don't know how they work.
Why does he say that? I don't have the time to read 5495 myself to find out.
- laxatives 10y agoHe doesn't really elaborate on that point, except that 95% of developers, including PhD's don't really understand compilers (even though his summary isn't that far off from the explanations he hears). 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.
- dionidium 10y agoIMO 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.
- jaggederest 10y agoTo TL;DR the post, any time you transform a stream of symbols into another stream of symbols, it's compilation, and we do that all the time in computing, so if you don't understand how that process works, then you don't understand the fundamental systems of computing. Unix pipeline commands, for example. If you've ever used sed, it's apparently a compiler by his definition.
- xigency 10y agoWell, it's not actually true. 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.
- falsedan 10y ago> you absolutely must know how computers work to be a compiler writer Ah, OK.
- mywittyname 10y agoWell, he doesn't say that. 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.
- falsedan 10y ago> Well, he doesn't say that. I copied-and-pasted the fourth para from the article.
- mywittyname 10y agoWell this is painfully embarrassing.
- khedoros 10y agoFirst of all, you need to understand so many other CS concepts to understand a compiler, so we can take the reverse statement: If you understand how compilers work, then you've got to have a pretty good grasp of how computers work in general. Second, when it comes down to it, everything that you do is built on compiled software, and you've got a series of abstractions starting with physics, transistors, logic gates, processor architecture, the OS, user-space software, etc. Essentially, the compiler provides that abstracting links between the hardware and the software, and when it comes down to it, if you don't know how an abstraction is implemented, then you don't really know how it works.
- falsedan 10y ago*5495 words