The Notion of Abstraction

Abstraction is hiding information to simplify a set of instructions. For example, you are not aware of the inner workings of the internal combusion engine or electrical system in your car. Your instructions are to turn on the ignition, switch the gear and press the pedal to go. No information or instructions are necessary pertaining to the inner workings of the car. Even further abstraction would be someone telling you to come to their house. Getting in your car, turning on the ignition and all the rest is implied with this single instruction.

With computers, there are many layers of abstraction one must understand. From the CPython bytecode that is excecuted by C, to the assembly code that is further generated from the C compiler, layers, or steps (whichever you like to visualize), are present. To be most productive, one must hide this information as much as possible and only worry about theory when the machine stops doing what its supposed to. This is top-down design. However, for learning sake and gaining an intuitive understanding of software, bottom-up learning is essential.

Legendary computer scientist Yale N. Pratt and creator of LC-3,discusses the notion of abstraction in his book, which is the reading material in many universities.