Getting Closer to English
High-level programming languages evolved from the complexity of the low-level languages. Once assembler language was made available, more companies began using computers. With the beginning of widespread use of computers came the need to write more complex software applications to support those companies. The low-level machine and assembler languages were too inefficient for the quick turnaround that the companies needed. Therefore, high-level languages were developed to add one more layer between the programmer and the hardware. That extra layer meant that more work was required by the computer to translate a high-level language into machine language, but the programmers were free from the job of low-level coding. Two of the earliest high-level programming compilers were FORTRAN and COBOL.
Until today's fast computers arrived on the scene, whenever a program's speed and low overhead were critical in the past, programmers often used assembler and machine language instead of a higher-level language such as COBOL (you'll learn about high-level languages throughout the rest of this and the next chapter). It is more difficult to learn a low-level language than a high-level language, and it takes longer to program in the low-level languages, but for some applications the assembler level is the only place to be.
Quite often, programmers would combine a high-level programming language such as C with some assembler language routines, speeding up the critical processes while keeping the more readable (and maintainable) high-level language for the majority of the program.
The FORTRAN Language
FORTRAN stands for FORmula TRANslator. As its name implies, it is used for mathematical and scientific applications. FORTRAN works very well with high-precision numbers and offers an excellent library of built-in trigonometric routines that aid the scientific developer.
Over the years, programmers have added to the FORTRAN language, giving it more character-manipulation capabilities. The early versions of FORTRAN existed to solve mathematical computations without much regard for the cosmetics of how the results looked. Later FORTRAN compilers work better with character data (often called character string data because strings of characters make up words and sentences) than the older versions did, but they still retain their mathematical capabilities.
It is not the goal of this book to teach you FORTRAN. FORTRAN is not regarded as a beginner's language (although it is not as difficult as many of the others; once you learn Visual Basic, you could pick up FORTRAN relatively easily). The FORTRAN program in Listing 3.1 is an example of a payroll computation that you can study.
Listing 3.1 A Sample FORTRAN Program That Calculates Payroll
* * Calculate payroll amounts and print the net pay * * Print a title WRITE(6,10) 10 FORMAT(1H1, 2X, '** PAYROLL COMPUTATION **'//) * * Initialize overtime to 0 * TOVRTM = 0.0 * * Get hours worked and other pay data from user * WRITE(6, 20) 20 FORMAT('WHAT WERE THE HOURS WORKED? ') READ(5, 21) HRS 21 FORMAT(F4.1) WRITE(6, 22) 22 FORMAT(/'WHAT IS THE HOURLY RATE? ') READ(5, 23) RATE 23 FORMAT(F7.2) WRITE(6, 24) 24 FORMAT(/'WHAT IS THE TAX RATE? ') READ(6, 25) TAXRTE 25 FORMAT(F7.2) * * Calculate the results * * Overtime is left at 0.0 or is double pay * depending on the hours the employee worked IF (HRS .LT. 40.0) GOTO 100 TOVRTM = (HRS - 40.0) * RATE * 2.0 GROSS = 40.0 * RATE GOTO 200 100 GROSS = HRS * RATE 200 GROSS = GROSS + TOVRTM TNET = GROSS * (1.0 - TAXRTE) * * PRINT THE RESULTS * WRITE(6, 300) HRS, RATE, TAXRTE, GROSS, TNET 300 FORMAT(//'Hours: ', F4.1, 2X, 'Rate: ', F7.2, 1 2x, 'Tax rate: ', F7.2, 2x, 'Gross: $', F10.2, 2 2x, 'Net: $', F10.2) END
Notice that FORTRAN is a high-level language, easier to read than its assembler language precursor shown earlier, but still not extremely obvious to nonprogrammers. Although you may not understand everything in the program, you can see some words you recognize, such as WRITE and FORMAT. You should begin to see that high-level programming languages are closer to spoken language than either the 1s and 0s or the mnemonics of the low-level languages.
FORTRAN is not known as a large language. It has relatively few commands (as opposed to COBOL and modern-day BASIC languages), although its compactness causes some confusion if you do not know the language. FORTRAN is not regarded as a self-documenting language, a sometimes-overused term applied to languages that offer some readability for nonprogrammers. Nevertheless, FORTRAN appears to have its foothold in the scientific community, and it will for some time. In fairness, FORTRAN has lost ground over the years to more modern languages, especially as today's languages support mathematical operations better than before.
The Business of COBOL
The late Grace Hopper, the naval admiral who is credited with discovering the first computer bug (refer back to Chapter 3 for a refresher if you need it), is also known as the author of COBOL. In 1960, Admiral Hopper and her team of programmers decided they needed a language for the business side of computing (even the Navy has to meet a payroll and pay its bills). FORTRAN was taking care of the scientific side of things, but the FORTRAN language was never designed to handle business transactions. Programmers were also discovering that FORTRAN's cryptic nature slowed down programming maintenance chores as well.
All COBOL programs are separated into four divisions. The identification division describes the program. The environment division describes the computer system running the program. The data division describes the format of all data in the program. The procedure division contains the code that processes the data. See if you can find these four divisions in Listing 3.2.
Admiral Hopper's team developed COBOL, an acronym for COmmon Business Oriented Language. The COBOL design team's primary goal was to develop a self-documenting language that could process a large amount of business data such as inventory and personnel records. A sample of their achievement is shown in Listing 3.2. This is a program that performs the very same processing as its FORTRAN counterpart in Listing 3.1, but the COBOL listing is almost twice as long. Take a few minutes to peruse the listing and become familiar with the nature of COBOL.
Listing 3.2 A Sample COBOL Program That Calculates Payroll
IDENTIFICATION DIVISION. PROGRAM-ID. 'PAYROLL' ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT GET-DATA, ASSIGN TO KEYIN. SELECT OUT-DATA, ASSIGN TO DISPLAY. DATA DIVISION. FILE SECTION. FD GET-DATA LABEL RECORDS ARE OMITTED. 01 GET-REC. 02 AMOUNT PICTURE 9(5)V2. FD OUT-DATA LABEL RECORDS ARE OMITTED. 01 OUT-REC. 02 FILLER PICTURE X(80). WORKING-STORAGE SECTION. 01 ARITHMETIC-DATA. 02 TOT-OVR PICTURE 9(5)V2 VALUE ZERO. 02 HOURS PICTURE 9(3)V1 VALUE ZERO. 02 RATE PICTURE 9(5)V2 VALUE ZERO. 02 TAX-RATE PICTURE 9(5)V2 VALUE ZERO. 02 GROSS-PAY PICTURE 9(5)V2 VALUE ZERO. 02 NET-PAY PICTURE 9(5)V2 VALUE ZERO. 01 OUT-LINE-1. 02 FILLER PICTURE X(28) VALUE 'What were the hours worked? '. 02 FILLER PICTURE X(52) VALUE SPACES. 01 OUT-LINE-2. 02 FILLER PICTURE X(25) VALUE 'What is the hourly rate? '. 02 FILLER PICTURE X(55) VALUE SPACES. 01 OUT-LINE-3. 02 FILLER PICTURE X(22) VALUE 'What is the tax rate? '. 02 FILLER PICTURE X(58) VALUE SPACES. 01 OUT-LINE-4. 02 FILLER PICTURE X(17) VALUE 'The gross pay is ' 02 OUT-GROSS PICTURE $ZZ,ZZZ.99. 02 FILLER PICTURE X(53) VALUE SPACES. 01 OUT-LINE-5. 02 FILLER PICTURE X(15) VALUE 'The net pay is ' 02 OUT-NET PICTURE $ZZ,ZZZ.99. 02 FILLER PICTURE X(55) VALUE SPACES. PROCEDURE DIVISION. BEGIN. OPEN INPUT GET-DATA. OPEN OUTPUT OUT-DATA. MOVE OUT-LINE-1 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO HOURS. MOVE OUT-LINE-2 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO RATE. MOVE OUT-LINE-3 TO OUT-REC. WRITE OUT-REC. READ GET-DATA. MOVE AMOUNT TO TAX-RATE. IF HOURS > 40.0 THEN COMPUTE TOT-OVR = (40.0 - HOURS) * RATE * 2 COMPUTE GROSS-PAY = 40.0 * RATE + TOT-OVR ELSE COMPUTE GROSS-PAY = HOURS * RATE. COMPUTE NET-PAY = GROSS-PAY * (1.0 - TAX-RATE). MOVE GROSS-PAY TO OUT-GROSS. MOVE OUT-LINE-4 TO OUT-REC. WRITE OUT-REC. MOVE NET-PAY TO OUT-NET. MOVE OUT-LINE-5 TO OUT-REC. WRITE OUT-REC. CLOSE GET-DATA, OUT-DATA. STOP RUN.
Admiral Hopper's crew wanted COBOL to be self-documenting so that nonprogrammers could understand what the program was attempting to do by looking at a program listing. Can you figure out what Listing 3.2 is doing just by reading the code? Don't feel bad if you can't; if you get lost in the program's silver-dollar words, don't be dismayed. Instead of being self-documenting, COBOL ended up being very wordy. There is so much that gets in the way of the working code that most people would probably agree (even COBOL fans, of whom there are many thousands) that COBOL does not achieve a self-documenting effect. Nevertheless, it shines as the world's premiere business language of choice, and it did for almost 40 years before the newer languages such as C++ and the Internet took over.