Abstraction. If you’ve taken Computer Science, or have been around a Computer Scientist for any amount of time, you have probably heard the term “Abstraction” enough times to drive you crazy. Why so much the emphasis on Abstraction? Because without Abstraction, it would be nearly impossible to do anything with computers.
Consider a cool video game like Final Fantasy X, or any other. It is probably written in some higher level language like C, C++, or even Java. Most likely graphics and editing tools have been be used, which are written in a higher level language. The C files are compiled by a C compiler into Assembler. An assembler is run on the assembly code to produce native machine language.
Is that all? No! The machine language is run and implemented by the datapath, which contains registers, logical and arithmetic units, and links to memory. The components of the datapath, are composed of gates: And gates, Or gates, Nand gates, Nor Gates, inverters (or Not Gates), and more. The gates are composed of switches and wire. Underneath the switches and wire, is the underlying physics, electron flow, inductance, etc.
Now could you write Final Fantasy X:
- In Assembler?
- In Machine Code?
- Entirely Using Gates?
- Entirely using switches and wire?
I don’t think so. This is a pretty decent example of a case where Abstraction is essential. In fact not only could you not make FFX using only switches and wire, I doubt you could make a fully functional datapath using only switches and wire (no gates, MUXES, ALUs, etc).
There are also many cases where Abstraction is essential, but makes the task much easier, such as generating a decent PHP web application.
Click here for full article.