Many of us look forward to the day when we can simply type a “natural” language query in English, and have the answer back, on our screen, in seconds.
We are closer to this goal than most of us realize. The limiting factor is no longer technology, but rather the rigor of thought in our application designs. Oracle can straightforwardly build English-based systems that are easily understood and exploited by unsophisticated users. The potential is there, already available in Oracle’s database and tools, but only a few have understood and used it.
Clarity and understandability should be the hallmarks of any Oracle application. Applications can operate in English, be understood readily by end users who have no programming background, and provide information based on a simple English query.
How? First of all, a major goal of the design effort must be to make the application easy to understand and simple to use. If you err, it must always be in this direction, even if it means consuming more CPU or disk space. The limitation of this approach is that you could make an application exceptionally easy to use by creating overly complex programs that are nearly impossible to maintain or enhance. This is an equally bad mistake. All things being equal, however, an end-user orientation should never be sacrificed for clever coding.
Consider that the cost to run a computer, expressed as the cost per million instructions per second (MIPS), has historically declined at the rate of 20 percent per year. Labor costs, on the other hand, have risen steadily. This means that any work that can be shifted from human laborers to machines may represent a cost savings.
Have we factored this incredible shift into our application designs? The answer is “somewhat” but terribly unevenly. The real progress has been in environments, such as the visionary work first done at Xerox Palo Alto Research Center (PARC), and then on the Macintosh, and now in web-based browsers and other graphical icon-based systems. These environments are much easier to learn and understand than the older, character-based environments, and people who use them can produce in minutes what previously took days. The improvement in some cases has been so huge that we’ve entirely lost sight of how hard some tasks used to be.
Unfortunately, this concept of an accommodating and friendly environment hasn’t been grasped by many application developers. Even when they work in these environments, they continue old habits that are just no longer appropriate.
Codes, Abbreviations, and Naming Standards
The problem of old programming habits is most pronounced in codes, abbreviations, and naming standards, which are almost completely ignored when the needs of end users are considered. When these three issues are thought about at all, usually only the needs and conventions of the systems groups are considered. This may seem like a dry and uninteresting problem to be forced to think through, but it can make the difference between great success and grudging acceptance, between an order-of-magnitude leap in productivity and a marginal gain, between interested, effective users and bored, harried users who make continual demands on the developers.
Here’s what happened. Business records used to be kept in ledgers and journals. Each event or transaction was written down, line by line, in English. As we developed applications, codes were added to replace data values (such as “01” for “Accounts Receivable,” “02” for “Accounts Payable,” and so on). Key-entry clerks would actually have to know or look up most of these codes and type them in at the appropriately labeled fields on their screens. This is an extreme example, but literally thousands of applications take exactly this approach and are every bit as difficult to learn or understand.
This problem has been most pronounced in large, conventional mainframe systems development. As relational databases are introduced into these groups, they are used simply as replacements for older input/output methods such as Virtual Storage Access Method (VSAM) and Information Management System (IMS). The power and features of the relational database are virtually wasted when used in such a fashion.
Why Are Codes Used Instead of English?
Why use codes at all? Two primary justifications are usually offered:
- A category has so many items in it that all of them can’t reasonably be represented or remembered in English.
- To save space in the computer.
The second point is an anachronism. Memory and permanent storage were once so expensive and CPUs so slow (with less power than a modern hand-held calculator) that programmers had to cram every piece of information into the smallest possible space. Numbers, character for character, take half of the computer storage space of letters, and codes reduce the demands on the machine even more.
Because machines were expensive, developers had to use codes for everything to make anything work at all. It was a technical solution to an economic problem. For users, who had to learn all sorts of meaningless codes, the demands were terrible. Machines were too slow and too expensive to accommodate the humans, so the humans were trained to accommodate the machines. It was a necessary evil.
This economic justification for codes vanished years ago. Computers are now fast enough and cheap enough to accommodate the way people work and to use words that people understand. It’s high time they did so. Yet, without really thinking through the justifications, developers and designers continue to use codes.
The first point—that of too many items per category—is more substantive, but much less so than it first appears. One idea is that it takes less effort (and is, therefore, less expensive) for someone to key in the numeric codes than actual text string values such as book titles. This justification is untrue in Oracle. Not only is it more costly to train people to know the correct customer, product, transaction, and other codes, and more expensive because of the cost of mistakes (which are high with code-based systems), but also using codes means not using Oracle fully; Oracle is able to take the first few characters of a title and fill in the rest of the name itself. It can do the same thing with product names, transactions (a “b” automatically fills in with “buy,” an “s” with “sell”), and so on, throughout an application. It does this with very robust pattern-matching capabilities.
Internally, of course, your tables will likely use codes to enforce referential integrity and to join tables, both of which are discussed in this and subsequent chapters. The codes satisfy normalization rules and do save quite a bit of space; the codes are decoded by another table. On web forms or in applications, the end user may never see the actual codes.
The Benefit of User Feedback
There is an immediate additional benefit to using words: Key-entry errors drop almost to zero because the users get immediate feedback, in English, of the business information they’re entering. Digits don’t get transposed; codes don’t get remembered incorrectly; and, in financial applications, money rarely is lost in accounts due to entry errors, with significant savings.
Applications also become much more comprehensible. Screens and reports are transformed from arcane arrays of numbers and codes into a readable and understandable format. The change of application design from code-oriented to English-oriented has a profound and invigorating effect on a company and its employees. For users who have been burdened by code manuals, an English-based application produces a tremendous psychological release.