# FLOW-MATIC

Paradigm imperative Remington Rand, Grace Hopper 1955 UNIVAC I ARITH-MATIC MATH-MATIC, AIMACO, COBOL

FLOW-MATIC, originally known as B-0 (Business Language version 0), was the first English-like data processing language. It was developed for the UNIVAC I at Remington Rand under Grace Hopper from 1955 to 1959, and helped shape the development of COBOL.

## Development

Hopper had found that business data processing customers were uncomfortable with mathematical notation:[1]

I used to be a mathematics professor. At that time I found there were a certain number of students who could not learn mathematics. I then was charged with ¨the job of making it easy for businessmen to use our computers. I found it was not a question of whether they could learn mathematics or not, but whether they would. […] They said, ‘Throw those symbols out — I do not know what they mean, I have not time to learn symbols.’ I suggest a reply to those who would like data processing people to use mathematical symbols that they make the first attempt to teach those symbols to vice-presidents or a colonel or admiral. I assure you that I tried it.¨

In late 1953, she proposed that data processing problems should be expressed using English keywords, but Rand management considered the idea unfeasible. In early 1955, she and her team wrote a specification for such a programming language and implemented a prototype.[2] The FLOW-MATIC compiler became publicly available in early 1958 and was substantially complete in 1959.[3]

## Innovations and influence

FLOW-MATIC was the first programming language to express operations using English-like statements.[3] It was also the first system to distinctly separate the description of data from the operations on it. Its data definition language, unlike its executable statements, was not English-like; rather, data structures were defined by filling in pre-printed forms.[3]

FLOW-MATIC and its direct descendant AIMACO shaped COBOL,[4] which incorporated several of its elements:

• Defining Input & Output Files and printed output in advance, separated into INPUT files, OUTPUT files and (HSP) High Speed Printer outputs. `INPUT <FILE-NAME> <FILE-LETTER>`; `OUTPUT <FILE-NAME> <FILE-LETTER>`; `HSP <FILE-LETTER>` .[5]
• Qualification of data-names (`IN` or `OF` clause).
• `IF END OF DATA (AT END)` clause on file `READ` operations.
• Figurative constant `ZERO` (originally `ZZZ...ZZZ`, where number of `Z`s indicated precision).
• Dividing the program into sections, separating different parts of the program. Flow-Matic sections included `Computer` (Environment Division), `Directory` (Data Division), and `Compiler` (Procedure Division).

## Sample program

A sample FLOW-MATIC program:[6][7]

``` (.mw-parser-output .vanchor>:target~.vanchor-text{background-color:#b1d2ff}0)  INPUT INVENTORY FILE-A PRICE FILE-B ; OUTPUT PRICED-INV FILE-C UNPRICED-INV
FILE-D ; HSP D .
(1)  COMPARE PRODUCT-NO (A) WITH PRODUCT-NO (B) ; IF GREATER GO TO OPERATION 10 ;
IF EQUAL GO TO OPERATION 5 ; OTHERWISE GO TO OPERATION 2 .
(2)  TRANSFER A TO D .
(3)  WRITE-ITEM D .
(5)  TRANSFER A TO C .
(6)  MOVE UNIT-PRICE (B) TO UNIT-PRICE (C) .
(7)  WRITE-ITEM C .
(8)  READ-ITEM A ; IF END OF DATA GO TO OPERATION 14 .
(10)  READ-ITEM B ; IF END OF DATA GO TO OPERATION 12 .
(12)  SET OPERATION 9 TO GO TO OPERATION 2 .
(14)  TEST PRODUCT-NO (B) AGAINST ; IF EQUAL GO TO OPERATION 16 ;
OTHERWISE GO TO OPERATION 15 .
(15)  REWIND B .
(16)  CLOSE-OUT FILES C ; D .
(17)  STOP . (END)
```

Sample Notes

1. Note that this sample includes only the executable statements of the program, the `COMPILER` section. The record fields `PRODUCT-NO` and `UNIT-PRICE` would have been defined in the `DIRECTORY` section, which (as previously noted) did not use English-like syntax.[8]
2. Files are referred to by the letter at the end of the FILE-LETTER. Example: FILE-A is referred to later just by A and is for ease of reference in following code.
3. Operations are numbered in an unbroken sequence from 0..n and are performed in that order unless a statement to the contrary is reached/made (executed) (JUMP, etc.).
4. The highest numbered operation is the one that stops the program.
5. A much more detailed overview of FLOW-MATIC is available in the manual entitled, FLOW-MATIC PROGRAMMING SYSTEM[9]

## Notes

1. ^ Hopper (1959) p. 198.
2. ^ Hopper (1978) p. 16.
3. ^ a b c Sammet (1969) p. 316
4. ^ Sammet (1978) p. 204.
5. ^ Remington Rand Univac a Division of Sperry Rand Corporation (1957). FLOW-MATIC PROGRAMMING SYSTEM p. 30.
6. ^ Sperry Rand (1957) p. 7.
7. ^ Sammet (1969) p. 323.
8. ^ Hopper (1978) p. 18.
9. ^ Remington Rand Univac a Division of Sperry Rand Corporation (1957). FLOW-MATIC PROGRAMMING SYSTEM

## References

• Hopper, Grace (1978). Keynote Address, History of Programming Languages I. ACM. pp. 16–20. ISBN 0-12-745040-8
• Hopper, Grace (1959). “Automatic programming: Present status and future trends”, Mechanisation of Thought Processes, National Physical Laboratory Symposium 10. Her Majesty's Stationery Office. pp 155–200, cited in Knuth, Donald; Trabb Pardo, Luis (August 1976). The Early Development of Programming Languages (Technical report). Computer Science Department, School of Humanities and Sciences, Stanford University. Retrieved 2016-03-19.
• Sammet, Jean (1969). Programming Languages: History and Fundamentals. Prentice-Hall. p. 316–324. ISBN 0-13-729988-5
• Sammet, Jean (1978). "The Early History of COBOL", History of Programming Languages I. ACM. pp. 199–243. ISBN 0-12-745040-8
• Sperry Rand Corporation (1957) Introducing a New Language for Automatic Programming: Univac Flow-Matic
• Remington Rand Univac a Division of Sperry Rand Corporation (1957). FLOW-MATIC PROGRAMMING SYSTEMFLOW-MATIC_Programming_System_1958.pdf