HOME

TheInfoList



OR:

FLOW is an
educational programming language An educational programming language is a programming language that is designed mostly as an instrument for learning, and less as a tool for writing programs to perform work. Types of educational programming languages Assembly languages Origin ...
designed by
Jef Raskin Jef Raskin (born Jeff Raskin; March 9, 1943 – February 26, 2005) was an American human–computer interface expert best known for conceiving and starting the Macintosh project at Apple in the late 1970s. Early life and education Jef Raskin ...
in 1970 and implemented on several
minicomputer A minicomputer, or colloquially mini, is a class of smaller general purpose computers that developed in the mid-1960s and sold at a much lower price than mainframe and mid-size computers from IBM and its direct competitors. In a 1970 survey, ...
s in the early 1970s. The goal of the language is to make it easy to explore
algorithm In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific Computational problem, problems or to perform a computation. Algorithms are used as specificat ...
s through a highly interactive environment. The overall language is very similar in syntax and structure to the
BASIC programming language BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of General-purpose programming language, general-purpose, high-level programming languages designed for ease of use. Dartmouth BASIC, The original version was created by John ...
, but has a number of changes in order to make typing code easier. Most notable among these was the concept of "typing amplification", in which short strings, often a single character, were expanded by the language into the complete "unamplified" source code. Modern
integrated development environment An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
s and code-oriented
text editor A text editor is a type of computer program that edits plain text. Such programs are sometimes known as "notepad" software (e.g. Windows Notepad). Text editors are provided with operating systems and software development packages, and can be us ...
s often include a similar feature, now normally referred to as
autocomplete Autocomplete, or word completion, is a feature in which an application predicts the rest of a word a user is typing. In Android and iOS smartphones, this is called predictive text. In graphical user interfaces, users can typically press the tab ...
. The beginning programmer would first create a flow chart to solve the problem. Since the all of problems involved words (rather than mathematical problems) the solution was intuitive. The flow chart would be translated into the flow programming language using a top-down, mechanical method.


History

In 1970, the English Department of the
University of Kansas The University of Kansas (KU) is a public research university with its main campus in Lawrence, Kansas, United States, and several satellite campuses, research and educational centers, medical centers, and classes across the state of Kansas. Tw ...
hosted a meeting on the use of computers in the humanities. The conference was followed by a training session that ran from June 13 to August 18, where Jef Raskin was one of several teachers involved in training other teachers basic computer skills. During this period, Raskin developed the FLOW language concept. A key design element of FLOW was the attempt to avoid syntax errors by automating the entry of the language as much as possible. For instance, if one wanted to enter the statement , the user simply had to type and the interactive editor would expand it out as they typed. If the user entered an illegal command, it would flash on the terminal and then be automatically erased so the user was "none the worse for hitting a wrong key". They referred to this concept as "typing amplification", and noted that it had the added advantage of removing an impediment for slow typers or those with physical problems using a terminal. Lewis and Norman later referred to this concept as "gag", in that it gagged the user's input until they typed something useful. They illustrated this by recounting one of Raskin's favorite demonstrations of FLOW, where he would close his eyes and hit random keys on the terminal, building a syntactically correct, albeit meaningless, program. Another aspect of the FLOW system's approach to user interaction was its
debugger A debugger or debugging tool is a computer program used to software testing, test and debugging, debug other programs (the "target" program). The main use of a debugger is to run the target program under controlled conditions that permit the pr ...
. This included the command , an analog to BASIC's that delayed after executing each statement in a fashion similar to modern single-step systems. On his return to
University of California, San Diego The University of California, San Diego (UC San Diego or colloquially, UCSD) is a public university, public Land-grant university, land-grant research university in San Diego, California. Established in 1960 near the pre-existing Scripps Insti ...
(UCSD), Raskin was able to arrange funding from UCSD and matching funds from the
National Science Foundation The National Science Foundation (NSF) is an independent agency of the United States government that supports fundamental research and education in all the non-medical fields of science and engineering. Its medical counterpart is the National I ...
to purchase equipment to develop the FLOW system, a total of $76,000 (). The initial system consisted of three
Data General Nova The Data General Nova is a series of 16-bit minicomputers released by the American company Data General. The Nova family was very popular in the 1970s and ultimately sold tens of thousands of units. The first model, known simply as "Nova", was ...
minicomputer A minicomputer, or colloquially mini, is a class of smaller general purpose computers that developed in the mid-1960s and sold at a much lower price than mainframe and mid-size computers from IBM and its direct competitors. In a 1970 survey, ...
s with 12k words of memory, several VST 1200 terminals, a
Tektronix 4002 The Tektronix 4010 series was a family of text-and-graphics computer terminals based on storage tube, storage-tube technology created by Tektronix. Several members of the family were introduced during the 1970s, the best known being the 11-inch 40 ...
graphics terminal, and an HP 7200 plotter. In September 1973 the CPUs were updated to 32k words of memory. The first version of FLOW was programmed by Jonathan "Jon" Collins in FORTRAN for use at the summer institute. To facilitate a quick implementation (1 week), Jonathan restricted input to the first character of the command with the computer supplying the balance of the command letters. Hence, typing amplification was invented. Flow was later ported by two UCSD
graduate students Postgraduate or graduate education refers to academic or professional degrees, certificates, diplomas, or other qualifications pursued by post-secondary students who have earned an undergraduate (bachelor's) degree. The organization and struc ...
to Nova
assembler language In computer programming, assembly language (or assembler language, or symbolic machine code), often referred to simply as Assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence be ...
. Later ports included MICRO 800 assembler, BASIC and
Algol ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
.


Description


Overall organization

Like BASIC, FLOW uses line numbers both as an editing aid as well as statement labels. Unlike most BASICs, FLOW automatically numbers programs starting at line 10 and incrementing by 10 as new lines are entered. The line numbers are formatted as three digits, so line 10 is displayed as 010. Users can also enter line numbers manually, and renumber the entire program with the command. In contrast to BASIC, the command can be instructed to stop once a given line was reached, for instance, . To enter this command, the user simply types , with the rest being "amplified" into the command line.


Syntax and capabilities

The most obvious difference between FLOW and BASIC was that FLOW has only one variable, , and lacks mathematical operators. The language has only seven statements, all of which apply basic logic or string manipulation. There is no equivalent of the
for loop In computer science a for-loop or for loop is a control flow statement for specifying iteration. Specifically, a for loop functions by running a section of code repeatedly until a certain condition has been satisfied. For-loops have two part ...
either, looping is handled entirely through tests and statements. The language does not have direct user interaction like BASIC's , data is instead defined in FLOW's analog of BASIC's statement, . defines a quote-delimited string, like , which is then read character-at-a-time using the . is a meta-variable that contains the last read character, and can then be used in other statements, like . becomes a blank -not an empty string but a single space- when the is completely read. Programs can contain multiple statements, but unlike BASIC's where all of the lines are considered to be one continuous block of data, only one statement is active at a time as they are encountered by the interpreter. In other words, if there are two statements in a program, they are not treated as one longer statement as is the case with , will return a blank when it runs off the end of the active statement and will not return more data until the next statement is encountered in the code.


Statements

From:


Program statements

: - equivalent to BASIC's : - as in BASIC, takes literal strings between double quotes, the variable, or to print a carriage return. : - similar to in BASIC, but used for strings only : - reads the next character from the current TEXT statement : - equivalent to , always expands target lines to three digits : - equivalent to but can perform only equality tests against : - used to end a program, but not required


Interactive commands

: - as in BASIC but can define both the start and end lines and use meta-lines and : - executes the program slowly : - equivalent to . To list the entire program, one uses : - remove lines from a program, : - renumber the lines in the program


Example

010 COMMENT FIND IF A WORD HAS EITHER AN "F" OR A "G" IN IT 020 COMMENT BY LYRA FORET 19 OCTOBER 1971 030 COMMENT 040 COMMENT SOME TEST CASES ARE FOX, GOPHER, RAT, DOG, CAT 050 COMMENT THE RESPECTIVE ANSWERS SHOULD BE YES, YES, NO, YES, NO. 060 COMMENT 070 TEXT IS "DOG" 080 COMMENT OBTAIN A LETTER OF THE TEXT 090 GET IT 100 COMMENT CHECK FOR A BLANK WHICH INDICATES END OF WORD 110 IF IT IS " " JUMP TO 500 120 COMMENT CHECK FOR F'S OR G'S 130 IF IT IS "F" JUMP TO 200 140 IF IT IS "G" JUMP TO 200 150 COMMENT IT WAS SOME OTHER LETTER, SO GO ON TO THE NEXT CHAR. IN THE TEXT 160 JUMP TO 080 200 PRINT "THE WORD HAD AN 'F' OR A 'G' IN IT." 210 COMMENT WE ARE DONE 220 STOP 500 PRINT "THE WORD DID NOT HAVE AN "F' OR A 'G' IN IT."


References


Citations


Bibliography

* *


Further reading

* {{cite book , last1=Genter , first1=Donald , last2=Norman , first2=Donald , date=May 1977 , title=The FLOW Tutor: Schemas for Tutoring , url=https://apps.dtic.mil/dtic/tr/fulltext/u2/a040556.pdf , archive-url=https://web.archive.org/web/20191106191217/https://apps.dtic.mil/dtic/tr/fulltext/u2/a040556.pdf , url-status=live , archive-date=November 6, 2019 , location=La Jolla, Calif. , publisher=Center for Human Information Processing, University of California, San Diego , oclc=961830303 , id=Report No. 7702


External links


Flow
a modern implementation of FLOW in LISP Educational programming languages BASIC programming language family