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.
OperationFunctionNumber of operands
AAsk 2
CArithmetic IF4
EEnd loop
JInput into variable1
NPrint a newline
PPrint a variable1
TJump1
ZFor loop
+Addition3
-Subtraction3
*Multiplication3
/Division3
EXPE to the power2
LOGLogarithm2
SINSine2
SQRSquare root2

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:
  1. Variable names were either a letter or a letter followed by a digit
  2. Arrays did not have to be declared and had a default size
  3. Every line required a numeric label*
  4. Lines were sorted in numeric order*
  5. Every line begins with a keyword*
  6. Function names were three letters long*
  7. The only loop construct was a for-loop
Unlike either Fortran or Algol 60.