Dartmouth Oversimplified Programming Experiment
DOPE, short for Dartmouth Oversimplified Programming Experiment, was a simple programming language designed by John Kemény in 1962 to offer students a transition from flow-charting to programming the LGP-30. Lessons learned from implementing DOPE were subsequently applied to the invention and development of BASIC.
Description
Each statement was designed to correspond to a flowchart operation and consisted of a numeric line number, an operation, and the required operands:7 + A B C
10 SIN X Z
The final variable specified the destination for the computation. The above program corresponds in functionality to the later BASIC program:
DOPE might be the first programming language to require every statement to have a line number, predating JOSS and BASIC.
The language was case insensitive.
Variable names were a single letter A to Z, or a letter followed by a digit. As with Fortran, different letters represented different variable types. Variables starting with letters A to D were floating point, as were variables from I to Z; variables E, F, G, and H each were defined as vectors with components from 1 to 16.
| Operation | Function | Number of operands |
| A | Ask | 2 |
| C | Arithmetic IF | 4 |
| E | End loop | |
| J | Input into variable | 1 |
| N | Print a newline | |
| P | Print a variable | 1 |
| T | Jump | 1 |
| Z | For loop | |
| + | Addition | 3 |
| - | Subtraction | 3 |
| * | Multiplication | 3 |
| / | Division | 3 |
| EXP | E to the power | 2 |
| LOG | Logarithm | 2 |
| SIN | Sine | 2 |
| SQR | Square root | 2 |
The language was used by only one freshman computing class. Kemeny collaborated with high school student Sidney Marshall to develop the language.
Legacy
According to Thomas Kurtz, a co-inventor of BASIC, "Though not a success in itself, DOPE presaged BASIC. DOPE provided default vectors, default printing formats, and general input formats. Line numbers doubled as jump targets."The language had a number of other features and innovations that were carried over into BASIC:
- Variable names were either a letter or a letter followed by a digit
- Arrays did not have to be declared and had a default size
- Every line required a numeric label*
- Lines were sorted in numeric order*
- Every line begins with a keyword*
- Function names were three letters long*
- The only loop construct was a for-loop