This is a talk I gave at Papers We Love NYC on April 12, 2017. The talk is based on some papers about this history of COBOL and how it relates to computer science.
2. The paper ...
“The Relationship Between COBOL and
Computer Science”
Ben Shneiderman
Annals of the History of Computing ( Volume: 7, Issue: 4, Oct.-Dec. 1985 )
But also: “The Early History of COBOL” by Jean Sammet
6. History -- April 1959
At a meeting of “computer people” at the University of Pennsylvania Computer
Center there is a discussion of the need for a “machine independent common
language”
7. History -- May 1959
Meeting held at the Pentagon to discuss the need for a common business
language
About 40 participants:
● 15 from government
● 11 users and consultants
● 15 representatives of manufacturers
8. History -- May 1959 (continued)
Three committees were created to develop a programming language (executive,
short-range, long-range) with members from …
● David Taylor Model Basin
● Sylvania Electric Products
● Sperry Rand
● US Steel
● DuPont
● Air Materiel Command
● NCR
● USA - Signal Corps ADPS School
● National Bureau of Standards
● Department of the Navy
● IBM
● US Air Force
● Honeywell
● RCA
● Burroughs
9. History -- June - December 1959
The short-range committee explores language options “to recommend a short-
range composite approach (good for at least the next year or two)”
10. History -- June - December 1959
“It was definitely felt that the Intermediate-Range Committee would have the time
and resources to develop a really good business data processing language.”
-- Sammet
11. History -- June - December 1959
“It was definitely felt that the Intermediate-Range Committee would have the time
and resources to develop a really good business data processing language.”
-- Sammet
Narrator Voice: They didn’t.
12. History -- June - December 1959
“I am certainly convinced in my own mind that had the Short-Range Committee
realized at the outset that the language it created was going to be in use for such
a long period of time, it would have gone about the task quite differently.”
-- Sammet
13. History -- December 1960
Same program runs on two different computers.
First real cross-platform language!
14. History -- August 1961
“COBOL: A Sample Problem” appears in Communications of the ACM
7 pages long:
● 2.5 pages of flow charts
● 3 pages of code
● 0 references
15. History -- May 1962
Communications of the ACM issue dedicated to COBOL
● 13 articles about COBOL
● Only 4 have references
20. Technology
Goals:
● Solve business problems
● Cross-platform (“common”)
● English-like language
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
21. Technology
Goals:
● Solve business problems
● Cross-platform (“common”)
● English-like language
● Verb-base language, “few
verbs with many options
rather than a large number
of verbs with a few options”
23. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* environment-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
24. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* environment-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
IDENTIFICATION DIVISION.
PROGRAM-ID.
SAMPLE.
AUTHOR.
CASIO JUAREZ.
DATE-WRITTEN.
04/06/17.
25. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* environment-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SAMPLE-FILE ASSIGN TO "S.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
26. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* environment-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
DATA DIVISION.
FILE SECTION.
FD SAMPLE-FILE.
01 SAMPLE-DATA.
88 END-SAMPLE-DATA VALUE HIGH-VALUES.
02 SAMPLE-NAME.
03 FIRST-NAME PIC X(8).
03 LAST-NAME PIC X(8).
02 DATE-OF-BIRTH.
03 YOB PIC 9(4).
03 MOB PIC 9(2).
03 DOB PIC 9(2).
WORKING-STORAGE SECTION.
01 GENERATION PIC X(10).
01 BOOMER PIC X(10) VALUE "boomer".
01 GEN-X PIC X(10) VALUE "gen X".
01 MILLENNIAL PIC X(10) VALUE "millennial".
01 UNKNOWN PIC X(10) VALUE "???".
* define record (data) structure
Input Record Format (SAMPLE-DATA):
|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _|_ _ _ _|_ _|_ _|
| FIRST-NAME | LAST-NAME | YOB |MOB|DOB|
| SAMPLE-NAME | DATE-OF-BIRTH |
| SAMPLE-DATA |
27. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* environment-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X
ELSE
SET GENERATION TO UNKNOWN.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
Input Record Format (SAMPLE-DATA):
|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _|_ _ _ _|_ _|_ _|
| FIRST-NAME | LAST-NAME | YOB |MOB|DOB|
John Smith 19500210
Stacy Jones 19781015
Kendra Manning 19840323
28. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X
ELSE
SET GENERATION TO UNKNOWN.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
Paragraphs
Significant
whitespace
29. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X
ELSE
SET GENERATION TO UNKNOWN.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM
30. Technology
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X
ELSE
SET GENERATION TO UNKNOWN.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
42. Thanks!
Further Reading
● “The Relationship Between COBOL and Computer Science” Ben
Shneiderman
● “The Early History of COBOL” Jean Sammet
● “Learning To Program In Structured COBOL: Parts 1 & 2” Yourdon et al
● Communications of the ACM, May 1962
● Micro Focus (microfocus.com) -- Go to a COBOL Dev Day!
46. A Brief Introduction to COBOL
COmmon → write once, run anywhere!
Business Oriented → record processing, extract-transform-load (ETL)
Language → English-like syntax (verbs, nouns, sentences, paragraphs)
47. A Brief Introduction to COBOL -- Code
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
48. A Brief Introduction to COBOL -- Code
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
49. A Brief Introduction to COBOL -- Code
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SAMPLE-FILE ASSIGN TO "S.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
50. A Brief Introduction to COBOL -- Code
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
DATA DIVISION.
FILE SECTION.
FD SAMPLE-FILE.
01 SAMPLE-DATA.
88 END-SAMPLE-DATA VALUE HIGH-VALUES.
02 SAMPLE-NAME.
03 FIRST-NAME PIC X(8).
03 LAST-NAME PIC X(8).
02 DATE-OF-BIRTH.
03 YOB PIC 9(4).
03 MOB PIC 9(2).
03 DOB PIC 9(2).
WORKING-STORAGE SECTION.
01 GENERATION PIC X(10).
01 BOOMER PIC X(10) VALUE "boomer".
01 GEN-X PIC X(10) VALUE "gen X".
01 MILLENNIAL PIC X(10) VALUE "millennial".
01 UNKNOWN PIC X(10) VALUE "???".
* define record (data) structure
Input Record Format (SAMPLE-DATA):
|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _|_ _ _ _|_ _|_ _|
| FIRST-NAME | LAST-NAME | YOB |MOB|DOB|
| SAMPLE-NAME | DATE-OF-BIRTH |
| SAMPLE-DATA |
51. A Brief Introduction to COBOL -- Code
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
SET GENERATION TO UNKNOWN.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE
IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE
IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
52. A Brief Introduction to COBOL -- Historical Position
Steve Russell writes the first implementation of LISP → (early? late?) 1959
Discussion of developing “a problem-oriented but machine independent common
language for business problems” → UPenn April, 1959
“Recursive Functions of Symbolic Expressions And Their Computation By
Machine” → CACM April, 1960
“Essentially the same COBOL program was run on [two computers]” → December
1960
“COBOL: a sample problem” → CACM August, 1961
The COBOL issue → CACM May, 1962
53. A Brief Introduction to COBOL -- Assumptions
Technical
● business users want to read
records from files, process them,
and write new records to other
files
● records have a fixed number of
fixed-size fields
● files are generally stored on
separate storage media (like
tapes)
Non-Technical
● “managers” (non-technical
people) should be able to read
and write code
● making a programming language
similar to a “real” language will
make it easier to read and write
● mathematical notation is off-
putting
55. The Relationship Between COBOL and Comp Sci
“For a computer scientist to write sympathetically about COBOL is an act
bordering on heresy.”
Historical Perspective
Technical Perspective
Social/Psychological Perspective
58. Historical Perspective
“academic computer scientists did not participate in the design team”
COBOL contributors came from:
US Air Force
Honeywell
RCA
Burroughs Corporation
David Taylor Model Basin
Sylvania Electric Products
IBM
Speary Rand
Bureau of Ships
US Steel Corporation
DuPont Company
Air Materiel Command
NCR
USA - Signal Corps
60. Historical Perspective
“the COBOL developers apparently had little interest in the academic or scientific
aspects of their work”
CACM of May 1962 was dedicated to COBOL, only four papers had any
references.
61. Historical Perspective
“the COBOL developers apparently had little interest in the academic or scientific
aspects of their work”
CACM of May 1962 was dedicated to COBOL, only four papers had any
references.
But …
“Thus, of 15 papers presented at an Office of Naval Research (ONR) symposium
on automatic programming for digital computers in May 1954 [2], only two have
separate acknowledgements and none refers to other papers.” -- Backus,
“Programming in America in the 1950s- Some Personal Impressions”
63. Historical Perspective
“the decision of the developers to not use the Backus-Naur Form notation as the
metalanguage to describe COBOL”
COBOL Committee invented their own specification language
64. Historical Perspective
“the decision of the developers to not use the Backus-Naur Form notation as the
metalanguage to describe COBOL”
COBOL Committee invented their own specification language
BNF first used to describe ALGOL 60
“Specification Languages for Mechanical Languages And Their Processors …”
includes BNF, along with others → Gorn, ACM December, 1961
66. Historical Perspective
“A fourth concern is the process of describing COBOL to the academic and
industrial community”
Translation: For a long time there were no good books “emphasizing the
conceptual foundations of COBOL”
67. Historical Perspective
“the people who might have accepted the title of computer scientist in 1960 were
not interested in the problem domain of COBOL programs”
68. Historical Perspective
“the people who might have accepted the title of computer scientist in 1960 were
not interested in the problem domain of COBOL programs”
COBOL was good at:
● data processing
69. Historical Perspective
“the people who might have accepted the title of computer scientist in 1960 were
not interested in the problem domain of COBOL programs”
COBOL was good at:
● data processing
Computer scientists were interested in:
● numerical analysis
● physics
● engineering
● systems programming
71. Technical Perspectives - Successes
Record Structure
● aggregation of dissimilar items
● hierarchy of names for fields
DATA DIVISION.
FILE SECTION.
FD SAMPLE-FILE.
01 SAMPLE-DATA.
88 END-SAMPLE-DATA VALUE HIGH-VALUES.
02 SAMPLE-NAME.
03 FIRST-NAME PIC X(8).
03 LAST-NAME PIC X(8).
02 DATE-OF-BIRTH.
03 YOB PIC 9(4).
03 MOB PIC 9(2).
03 DOB PIC 9(2).
WORKING-STORAGE SECTION.
01 GENERATION PIC X(10).
01 BOOMER PIC X(10) VALUE "boomer".
01 GEN-X PIC X(10) VALUE "gen X".
01 MILLENNIAL PIC X(10) VALUE "millennial".
01 UNKNOWN PIC X(10) VALUE "???".
* define record (data) structure
Input Record Format (SAMPLE-DATA):
|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _|_ _ _ _|_ _|_ _|
| FIRST-NAME | LAST-NAME | YOB |MOB|DOB|
| SAMPLE-NAME | DATE-OF-BIRTH |
| SAMPLE-DATA |
72. Technical Perspectives - Successes
“[S]eparation of data definition from procedural
aspects”
IDENTIFICATION DIVISION.
* program name
ENVIRONMENT DIVISION.
* machine-dependent stuff
DATA DIVISION.
* define record (data) structure
PROCEDURE DIVISION.
* define operations
74. Technical Perspectives - Successes
COPY keyword (kind of like “include”, copied content of a file into a program)
● organizational standards were easily enforced
● improved cooperation
● encouraged code reuse
78. Technical Perspectives - Failures
No local variables
● required careful coordination of collaborators
● in 1974 CALL-USING was added, permitted parameters and runtime creation
of procedure names
79. Technical Perspectives - Failures
English-like languages
● supposed to be readable by managers
● “too wordy”, “somehow unscientific”
80. Technical Perspectives - Failures
Poor control flow readability
● originally, IF blocks were terminated with a
period (“.”), which was easily missed when
reading code
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT SAMPLE-FILE.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
PERFORM REPORT-GENERATION UNTIL END-SAMPLE-DATA.
CLOSE SAMPLE-FILE.
STOP RUN.
REPORT-GENERATION.
SET GENERATION TO UNKNOWN.
IF YOB >= 1980
SET GENERATION TO MILLENNIAL
ELSE
IF YOB >= 1946 AND YOB < 1965
SET GENERATION TO BOOMER
ELSE
IF YOB >= 1965 AND YOB < 1980
SET GENERATION TO GEN-X.
DISPLAY FIRST-NAME SPACE LAST-NAME SPACE GENERATION.
READ SAMPLE-FILE
AT END SET END-SAMPLE-DATA TO TRUE.
85. Social/Psychological Perspective
“fundamental differences between the computer science and business data
processing communities”
● dismissed the complexity of the problem of data processing
● had difficulty describing data processing problems with their theories
86. Social/Psychological Perspective
“fundamental differences between the computer science and business data
processing communities”
● dismissed the complexity of the problem of data processing
● had difficulty describing data processing problems with their theories
● “university professors did not like dealing with current practice”
Editor's Notes
Hi, my name is Andrew Turley, and today I want to talk to you about COBOL.
This talk is based on a paper called “The Relationship Between COBOL and Computer Science” by Ben Shneiderman. But it is also strongly influenced by Jean Sammet’s “The Early History of COBOL”.
Let’s get this out of the way: the relationship between COBOL and academia has been and still is … frosty.
Shneiderman’s paper presents three perspectives on why. Historical. Technical. And Social/Psychological.
The purpose of this talk is to give you some background about COBOL so that you can understand what Sheiderman is talking about.
First, let’s talk about the early history of COBOL
April, 1959. At a meeting of “computer people” at the University of Pennsylvania Computer Center there was a discussion of the need for a machine independent common language.
May 1959. A followup meeting is held to further discuss the need for a common business language. Participants included government and industry employees and consultants. Academia was not well represented.
At the meeting it was decided that there should be three committees that would investigate the creation of a common business language. The committees drew members from these organizations. There were no traditional accademic institutions.
June through December 1959, the short-range committee explored language options to recommend a short-range composite approach that would guide the work of larger committee for the next year or two.
The short-range committee believed their work would be used by the intermediate-range committee, which would have time to develop a really good language.
Unfortunately, that never happened. The recommendations of the short-range committee pretty much turned into COBOL.
Sammet notes that had the short-range committee realized just how long it’s work would be used, they would have gone about their task quite differently.
December 1960. The same program runs on two different computers. COBOL is the this first real cross platform language.
August 1961. “COBOL: A Sample Problem” appears in the Communications of the ACM. It is 7 pages long, consisting of 2 and a half pages of flow charts, 3 pages of code, and no references to other work.
May, 1962. The Communications of the ACM puts out the COBOL issue. There are 13 articles about COBOL. Only 4 have references to other work.
Now let’s talk about COBOL as a technology
In order to understand COBOL, it helps to understand that goals that led to its creation
People wanted a language that could be used to solve business problems. In many cases, this meant reading records from files, combining information from those records, and writing new data out to new files.
People wanted a cross-platform language, so that the same code could run on many different computers. WRITE ONCE, RUN ANYWHERE!
There was a desire to have an English-like language, because it was thought that this would help broaden the group of people who could describe problems to computers. Here’s a PERFORM statement. Notice that you can almost read this as an imperative sentence.
The COBOL committee decided to create a verb-based language that had “few verbs with many options rather than a large number of verbs with a few options”. This meant that there were a smaller number of verbs to remember, but it also meant the syntax for using each verb was less uniform.
COBOL Programs are hierarchical. There are four required divisions. Divisions can have sections. Sections can have paragraphs. Paragraphs can have sentences and sentences are made up of statements.
Here are the parts of a COBOL program. As mentioned, there is an IDENTIFICATION DIVISION, an ENVIRONMENT DIVISION, a DATA DIVISION, and a PROCEDURE DIVISION.
The IDENTIFICATION DIVISION is where the programmer specifies the program name. It can also hold information about things like the programmer’s name and the date on which the program was created.
The ENVIRONMENT DIVISION contains environment-specific information for the program. The idea was that all of the things that were not portable between platforms could be isolated into this section.
The DATA DIVISION defines the structure of the input and output records in the FILE SECTION. Records are hierarchical, so SAMPLE-NAME can be used to refer to the part of the record that contains both the first and last name. The WORKING-STORAGE section defines variables and constants. All variables are global.
The PROCEDURE DIVISION contains the logic of the program. This particular program reads input records with names and birthdates, and prints out records of names and the generation that the person is from.
The program is broken up into two paragraphs, one called BEGIN and the other called REPORT-GENERATION. The sentences in a paragraph are indented.
The PERFORM verb is effectively a subroutine call. The UNTIL modifier means that it acts like a while statement, repeatedly transferring control to the REPORT-GENERATION paragraph until the sentinel value END-SAMPLE-DATA is set to TRUE.
Check out this nested if-else statement. One thing about early COBOL was that the period ended the entire sentence. In this case, if you left off the period then the next line, the one that begins with DISPLAY, would be part of the ELSE clause. It was easy to forget a period, and easy to miss it when reading code, so this kind of bug was common. Later version of COBOL added an END-IF.
There were some common technical complaints about the language. Early version of the language only had one string processing verb, INSPECT, which could only be used to count the number of occurrences of a substring, and do simple find and replace.
Every sentence could end with “AND GO TO”, which led to code that was hard to follow.
All variables were global. This made it important to coordinate work between programmers who were working on the same program. There were no parameterized procedure calls, only subroutine calls via PERFORM. Recursion was not supported. A mathematical notation of function calls was discussed early in the design of the language, but rejected as being too hard for non-mathematicians to understand.
Shneiderman proposes a number of what he calls social and psychological reasons for the rejection of cobol by the computer science community.
Data processing was not seen as an interesting problem. It was considered quite simple, compared to things like physical simulation and systems modeling.
Professors felt that teaching COBOL, a language widely used in industry, would reduce their universities to “trade schools” that simply prepared students for jobs.
COBOL’s english-like syntax seemed imprecise and unscientific.
In the end, what can we say?
COBOL was created with almost no input from academic computer science. In many ways, such as the decision to not include functions, it actively rejected an academic orientation.
COBOL was widely adopted and used. It was a good enough language, and it had the backing of some of the biggest and most powerful organizations in the country. In some ways, this popularity hurt COBOL in the eyes of academics.
COBOL was a flawed language. Jean Sammet and others involved in its development have spoken over the years about things that they might have done differently. However, it is important to remember that many of the decisions that were made seemed very reasonable at the time, and better alternatives were not discovered until later.
Thank you very much for being here. I’d like to thank the Papers We Love crew for inviting me here, and William Byrd for not running in horror when he heard i was speaking before him. If you’re interested in learning more about COBOL’s history, here are a few places you can start.