Problem solving means translating human-understandable problem descriptions into machine-executable programs. Ideally, machine-executable programs should also be human-understandable; we attain that ideal with abstractions.
Abstractions aid tremendously in developing solutions to problems in a top-down (decomposing a complex problem into simpler subproblems) or bottom-up (composing simple subsolutions into a complex solution) fashion.
Humans like to organize processes (for example, doing the laundry) in hierarchical levels of abstraction:
do laundry:
- wash laundry 🧼
- wait 1 hour ⏳
- hang laundry 🧺
wash laundry: 🧼
- put clothes into washing drum
- apply laundry detergent
- close washing drum
- put plug into socket
- choose temperature
- press start button
hang laundry: 🧺
- open washing drum
- put clothes into laundry basket
- remove plug from socket
- put clothes onto clothes line
If we keep delving deeper into lower levels of abstraction until we reach individual muscle movements, even the most simple-minded being can do the laundry by following the given instructions carefully. And how do we call such beings? Robots!