Software evolves in the direction of increasing abstraction. This means that the software moves us away from the underlying machine and closer to the problems we want to solve. Software becomes more powerful and useful the more closely it can represent the problem domain and the more it hides the machine on which it is implemented. Thus a spreadsheet is more powerful than a calculator, and a WYSIWIG is more powerful than a markup language.
For example, to calculate a Profit and Loss statement would you rather use a calculator application or a spreadsheet application? I hope it's obvious that you would want to use a spreadsheet, because you can embed the formulas into the spreadsheet so that you can manipulate it in the same manner that you would manipulate the real world P&L statement. You don't have to worry about typing the proper sequence of arithmetic operations and you can focus on the real problem you are trying to solve: Did you break even or not?
Here's the historical growth in three different software arenas:
|
Languages |
Data |
Applications |
abstract high-level |
Visual Basic |
GUI dialog box / input form |
DreamWeaver |
|
Java |
|
|
|
FORTRAN |
|
Front Page |
|
assembly language |
|
|
concrete |
machine language |
punched card (fixed column format) |
HTML |
Because our brains aren't good at working on two different levels at the same time. For example, it's difficult to imaging the page layout you are trying to create and recall the underlying HTML tags simultaneously. While composing you want to concentrate on the arrangement of visual elements on the page, you don't want to focus on low level details like making sure the open-close tags match. It's distracting and gets in the way of the real problem you are trying to solve.
So we want our software tools to insulate us from the low level machine oriented details. As much as possible we want the tool to model the real world problem domain. For example, mathematicians prefer to use high level tools like Mathematica rather than a calculator, and MIS people prefer to use a database management program rather than edit plain text files. Similarly, application programmers prefer a high level language rather than a low level language because they can use the vocabulary of the problem domain (e.g. SORT) rather than the vocabulary of the machine domain.
So if you are a programmer and you design a solution in a manner that makes it easy to implement on the machine but requires the user to focus on machine details, that's bad. For example, requiring a user to select a color choice by entering three integers to represent the RGB values is a much worse solution than simply presenting a color palette and letting them point to the color they like.