The Process of Programming
The process of programming involves the translation of a mental representation of an algorithm into something a computer can understand. In the early days of programming, all of the conversion process had to be performed in the programmers’ brains. Gradually, tools were developed to help the programmer; intermediate representations allowed some of the drudgery of programming to be done automatically. Simple tasks such as register allocation were taken over by automated tools.
Gradually, more and more work was done by machine. A modern Pentium 4, for example, can have about 150 instructions in-flight at once. To write optimal assembly code for this machine, the developer must track a window of 150 instructions at any point to reduce dependencies. Such work is much easier for a machine than for a human, so gradually machines did it more and more.
As compilers improved, one fact became clear; the more information you can give to your optimizer, the better the job it can do. When you program in a low-level language, you throw away a lot of the semantics before you get to the compilation stage, making it much harder for the compiler to do its job.