history of spreadsheets
DESCRIPTION
the true history of spreadsheets, six years before visicalc on a mainframeTRANSCRIPT
Spreadsheets - the TRUE history of fully interactive spreadsheets & JIT "A full five to six years before Bricklin and Visicalc"
<a href="http://en.wikipedia.org/wiki/Imperial_Chemical_Industries" target="_blank">WIKIPEDIA article</a>
The birthplace of first very powerful early shared public spreadsheet in 19743 years before APPLE II launch (1977)
7 years before IBM PC launch (Aug 1981)
i.e. Spreadsheets were not an 'invention' in 1979, as fully interactive spreadsheets were already in use in 1974 on mainframes.
sexCopy of 1974 Manual PAGE 1 (of 8)
..."No computer experience or knowledge is needed to do this. An Application System can
be built and modified on-line, by the user on his own VDU terminal remote from the main
computer without involving computer staff at all"...
WRS Terminologyone or more functionally complete Input/Output displays Application
Visual display unit (IBM/3270 Model 2, 24 lines x 80 bytes)VDU
one of more lines of formulaeFunction group
a unique "named cell" (literally a "Direct Input Record")"DIR" - all named cells were 'global' and accessible from any other spreadsheet
The user "view" of the dataINPUT/OUTPUT Displays (i.e. a single sheet that could incorporate data from anywhere in the system -just as with Remote data in on-line spreadsheets like "Editgrid" today)
printed view of the data - designed by users online (WYSIWYG) and REPORT
not necessarily the same as on a "spreadsheet"/input/output view.
Column or row headingTITLE
Component part of a "named" data value (eg Kilogram,Tank level,Stock)CHARACTERISTIC
"A full five to six years before Bricklin and Visicalc" DAVID JOHNSTON
(The new owners of ICI)
<a href="http://en.wikipedia.org/wiki/Imperial_Chemical_Industries" target="_blank">WIKIPEDIA article</a><a href="http://en.wikipedia.org/wiki/Akzo_Nobel" target="_blank">WIKIPEDIA article</a>
i.e. Spreadsheets were not an 'invention' in 1979, as fully interactive spreadsheets were already in use in 1974 on mainframes.
Imperial Chemical Industries (ICI) - Mond DivisionBrunner House, Northwich & Rocksavage Works, Cheshire, England
The "Product" The "Works Records System"
Features: 3-D spreadsheet (time = 3rd dimension)
separation of data / calculation / Input/output
interactive, multi-user, networked
backup/recovery
security
"Remote Data" access
Database of aged values (hour/day/week/month/Qtr/year)
Built-in integrity checking (eg units attribute,consistency)
Row/column headers in Dynamic Tables
Uniquely identifiable (system-wide) data items
Histograms, WYSIWYG views, reports, cross references
Timeframe In use from 1974-2001
The Team:
Designer: Dr. Robert Mais, employee of ICI, retired
Analyst: Graham Johnson. employee of ICI, retired
Programmers: Ken Dakin Freelance Consultant
Philip Lath ICI
Colin Done ICI
Other 1 contract
"Atestees" 6 (RM,GJ,KD,CD,PR,DP)
Technical:
Architecture: IBM 370 (compatible with z/Architecture)
3270 "dumb" terminals
Operating System MVS
TP Monitor CICS Macro level (pre VS, XA, ESA)
Language: IBM 370 Assembler
Librarian manager Panvalet
Database: ADABAS
Techniques Just-in-time compilation (= dynamic "on-the-fly" compile)
Use of combinatorial, re-entrant machine-code "snippets"
Dynamically built, re-entrant executable code
Optimizing Incremental compiler
(Similar to Dynamic programming algorithmic technique
utilizing "memoization" but also - significantly - in conjunction with
"referentially transparent" (deterministic) self-modifying code
- eliminating both time & space penalties)
Compression
Heavily "Table driven" code (Assembler tables) including..
Branch Tables (super efficient Perfect Hash technique
- in effect a super-efficient "direct threading" indexed "threaded-code" methodology)
Binary search (where appropriate)
Self optimizing fast-paths
Double precision Floating point
Native 3270 protocol (no BMS)
Direct access files (Data held on flat BDAM files)
ADABAS "relational" database (specifications only)
Shunting yard algorithm
Asynchronous background tasks
Later Software technologies using similar techniques:
Notes (sic)
*1 "...a porting of Lotus 1-2-3 to mainframes with 3279 [4 or 7 color 3270] screens did not meet success
because its programmers were not able to properly adapt the spreadsheet's user interface
to a "screen at a time" rather than "character at a time" device" (Wikipedia).
*2 "...Dynamic translation was pioneered [?] by the commercial Smalltalk implementation
currently known as VisualWorks, in the early 1980s; various Lisp implementations like Emacs picked the technique up quickly"(Wikipedia)
*3 "....Memoization was explored as a parsing strategy in 1991 by Norvig,
who demonstrated that an algorithm similar to the use of dynamic programming
and state-sets in Earley's algorithm (1970), and tables in the CYK algorithm of Cocke,
Younger and Kasami, could be generated by introducing automatic memoization
to a simple backtracking recursive descent parser to solve the problem of exponential time complexity.
The basic idea in Norvig’s approach is that when a parser is applied to the input,
the result is stored in a memotable for subsequent reuse if the same parser is ever reapplied to the same input.
It was again explored in the context of parsing in 1995 by Johnson and Dörre. In 2002,
it was examined in considerable depth by Ford in the form called packrat parsing" (Wikibooks - "Memoization")
Q & AWas the Works Records System true "WYSIWYG" ?
Were there columns & rows ?
Was the System truly interactive ?
Were calculations automatically performed ?
Could multiple users view & update spreadsheets ?
Could non-programmers create a S/sheet (application) ?
Were there "named" cells ?
Could values from other S/sheets be incorporated ?
Was historical data stored in database ?
Was summary data available from aged data ?
Was backup/recovery automatic & systemwide ?
Was user security built-in ?
Were there 'unit' attributes (pounds/kilograms etc) ?
Were logically invalid operations prevented (eg lbs x lbs) ?
Were column headers/row headings re-useable ?
Could global changes be made to titles/headings ?
Was the system ever used outside chemical factoriies ?
Were there "graphs" available ?
Was there a print report capability ?
Was the system ever marketed commercially ?
How long was the System used for
What language was the System written in ?
Would WRS compile/execute today ?
Were real-time calculations interpreted or machine code ?
Did it really use Just-in-time compilation ?
Was the code self-modifying?
Approximately how many lines of code were there ?
What was the precision of data/ calculations ?
Were logical functions allowed ?
Multi-line formulae ?
Cross reference of formulae (reports) ?
Multi- lingual ?
Multi-currency ?
Were many of above features incorporated into Visicalc ?
Was WRS ported to PC or Apple ?
Did WRS have a GUI ?
Was any part of S/S design ported to other smaller hardware?
Further information /correspondencevia Editgrid.com FORUM - "Ken"
http://forum.editgrid.com/viewtopic.php?pid=3679
Demo? sorry no, but this mockup on Editgrid gives the general idea
http://www.editgrid.com/user/ken/WORKS_RECORDS_SYSTEM_MOCKUP
WRS performance Factsaverage downstream bytes to update one cell on remote 3270 workstation
average number of bytes upstream when single cell is changed
approximate # machine instructions to execute - for example, A=B+C*(D/E)
approximate size of object code snippet ('binary') for above example
approximate floating point instructions/ second on (an earlier generation) 360
exact number of bytes needed to store a single F/P data cell on BDAM file
# formula required to store, for example, >46 years of historic monthly data
# machine instructions to stack >46 years of historic monthly data (MVCL)
# instructions required to validate numeric input from 3270
# additional instructions required for dynamic v. compiled Fortran algorithm
additional overhead retrieving data from another application (remote data)
Authors comments (& rant)It was common practice in the 1960's/70's for companies to compete on IT fronts as well as normal commercial lines. If a corporation had talented in-house IT staff, that company could compete better than the ones who either couldn't afford the best or who didn't search for the best (just as in design, production & marketing). Somewhere along the way the majority of company executives 'lost their way' and the current awful state of IT is a direct result of this neglect and over zealous sales of 'off the shelf' solutions. Company intelligence is more valuable than mere assets - it is the very stuff of competiteveness. ICI never shared with others the advantages they gained through intelligent IT Systems and became, as a result, for a very long time, true leaders in their field. Competitiveness creates excellence and advances civilization. One-product Operating Systems and all embracing application Office suites create stagnation and encourage viruses & bugs. If it were not so we would not be where we are today - having to put up with poor quality software.
It was common practice in the 1960's/70's for companies to compete on IT fronts as well as normal commercial lines. If a corporation had talented in-house IT staff, that company could compete better than the ones who either couldn't afford the best or who didn't search for the best (just as in design, production & marketing). Somewhere along the way the majority of company executives 'lost their way' and the current awful state of IT is a direct result of this neglect and over zealous sales of 'off the shelf' solutions. Company intelligence is more valuable than mere assets - it is the very stuff of competiteveness. ICI never shared with others the advantages they gained through intelligent IT Systems and became, as a result, for a very long time, true leaders in their field. Competitiveness creates excellence and advances civilization. One-product Operating Systems and all embracing application Office suites create stagnation and encourage viruses & bugs. If it were not so we would not be where we are today - having to put up with poor quality software.
<a href="http://en.wikipedia.org/wiki/Akzo_Nobel" target="_blank">WIKIPEDIA article</a>
Imperial Chemical Industries (ICI) - Mond Division
separation of data / calculation / Input/output
Database of aged values (hour/day/week/month/Qtr/year)
Built-in integrity checking (eg units attribute,consistency)
Uniquely identifiable (system-wide) data items
Histograms, WYSIWYG views, reports, cross references
Extant?
yes
yes
yes
?
yes
?
yes
Links(compatible with z/Architecture) <a href="http://en.wikipedia.org/wiki/System/370" target="_blank">IBM 370/145</a><a href="http://en.wikipedia.org/wiki/Z/Architecture" target="_blank">IBM Z/Architecture</a>
<a href="http://www.columbia.edu/acis/history/3270.html" target="_blank">3270 image</a><a href="http://en.wikipedia.org/wiki/IBM_3270" target="_blank">IBM 3270 on wikipedia</a>
<a href="http://en.wikipedia.org/wiki/MVS" target="_blank">IBM MVS Operating System</a>
<a href="http://en.wikipedia.org/wiki/CICS" target="_blank">IBM CICS</a>http://cicswiki.org/cicswiki1/index.php?title=Quasi-reentrant
<a href="http://en.wikipedia.org/wiki/IBM_Basic_assembly_language" target="_blank">IBM Assembler</a>
<a href="http://ca.com/us/products/product.aspx?id=1431" target="_blank">Panvalet source code management</a>
<a href="http://en.wikipedia.org/wiki/Adabas" target="_blank">ADABAS Wikipedia</a>
Just-in-time compilation (= dynamic "on-the-fly" compile) <a href="http://en.wikipedia.org/wiki/Just-in-time_compilation" target="_blank">JIT compilation</a>
Use of combinatorial, re-entrant machine-code "snippets"
Dynamically built, re-entrant executable code http://en.wikipedia.org/wiki/Reentrant
<a href="http://en.wikipedia.org/wiki/Incremental_compiler" target="_blank">Incremental compiler</a>
(Similar to Dynamic programming algorithmic technique http://en.wikibooks.org/wiki/Algorithms/Chapter_6
utilizing "memoization" but also - significantly - in conjunction with <a href="http://en.wikipedia.org/wiki/Memoization" target="_blank">Memoization</a>
"referentially transparent" (deterministic) self-modifying code http://en.wikipedia.org/wiki/Referential_transparency_%28computer_science%29
http://en.wikipedia.org/wiki/Self-modifying_code
segmented system messages
Heavily "Table driven" code (Assembler tables) including.. similar to "Threaded code" technique, using pre-assembled indexed sub-routine calls.
Branch Tables (super efficient Perfect Hash technique <a href="http://en.wikipedia.org/wiki/Hash_function" target="_blank">Hash function</a>http://en.wikibooks.org/wiki/360_Assembly/Branch_Instructions
http://en.wikipedia.org/wiki/Jump_table
- in effect a super-efficient "direct threading" indexed "threaded-code" methodology)http://en.wikipedia.org/wiki/Threaded_code_compiler
<a href="http://en.wikipedia.org/wiki/Binary_search" target="_blank">Binary search</a>
Code self re-organized according to options & usage (reflection)
<a href="http://en.wikipedia.org/wiki/Reflection_(computation)" target="_blank">Reflection (computer science)</a>
<a href="http://en.wikipedia.org/wiki/Floating_point" target="_blank">Wikipedia Floating point</a>
Direct access files (Data held on flat BDAM files) <a href="http://en.wikipedia.org/wiki/Flat_file" target="_blank">Flat file</a>
ADABAS "relational" database (specifications only)
http://en.wikipedia.org/wiki/Reverse_Polish_notation
see CICS asynchronous transaction processing - (Transient Data)
"...a porting of Lotus 1-2-3 to mainframes with 3279 [4 or 7 color 3270] screens did not meet success
because its programmers were not able to properly adapt the spreadsheet's user interface
to a "screen at a time" rather than "character at a time" device" (Wikipedia).
"...Dynamic translation was pioneered [?] by the commercial Smalltalk implementation
currently known as VisualWorks, in the early 1980s; various Lisp implementations like Emacs picked the technique up quickly"
"....Memoization was explored as a parsing strategy in 1991 by Norvig,
who demonstrated that an algorithm similar to the use of dynamic programming
and state-sets in Earley's algorithm (1970), and tables in the CYK algorithm of Cocke,
Younger and Kasami, could be generated by introducing automatic memoization
to a simple backtracking recursive descent parser to solve the problem of exponential time complexity.
The basic idea in Norvig’s approach is that when a parser is applied to the input,
the result is stored in a memotable for subsequent reuse if the same parser is ever reapplied to the same input.
It was again explored in the context of parsing in 1995 by Johnson and Dörre. In 2002,
it was examined in considerable depth by Ford in the form called packrat parsing" (Wikibooks - "Memoization")
AnswerWas the Works Records System true "WYSIWYG" ? Yes
Yes ("free" layout)
Yes sub-second responses
Were calculations automatically performed ? Yes (including aged)
Could multiple users view & update spreadsheets ? Yes design criteria
Could non-programmers create a S/sheet (application) ? Yes design criteria
Yes (6 "levels")
Could values from other S/sheets be incorporated ? Yes any
Yes by time period, shift, day, week, month, year
Was summary data available from aged data ? Yes by time period,auto summation
Was backup/recovery automatic & systemwide ? Yes application & daily full disk copy
Yes
Were there 'unit' attributes (pounds/kilograms etc) ? Yes still not universally adopted 34 years later !
Were logically invalid operations prevented (eg lbs x lbs) ? Yes ""
Were column headers/row headings re-useable ? Yes globally & 'cross application'
Could global changes be made to titles/headings ? Yes (see also multi-lingual)
Was the system ever used outside chemical factoriies ? Yes ("secret" union payrise negotiations)
Yes histograms only since no GUI
Yes WYSIWYG with on screen previews
Was the system ever marketed commercially ? No ICI internal use only
27 years (1974-2001) http://www.the-adam.com/adam/rantrave/computers.htm
http://www.the-adam.com/adam/rantrave/postmodern.htm
What language was the System written in ? Assembler, re-entrant code
Yes 100% IBM Z/390 compatible, (no requirement to re-compile)
Were real-time calculations interpreted or machine code ? machine code
Yes
Yes (dynamic Memoization & self optimizing fast paths)
Approximately how many lines of code were there ? < 10,000 (table driven)
What was the precision of data/ calculations ? 64 bit (double precision) floating point
Yes
Yes
Yes
Yes (all text user modifiable)
Yes (attributes user defined)
Were many of above features incorporated into Visicalc ? No (suggestive of wholy independant & later "re-invention" by Bricklin)
No it was created 6 years before the IBM PC, and between 3 and 6 years before Apple II
No Limited to defined field attributes, text/numerics, (later 7 colors & reverse video, condtl. formatting)
(hardware limitation, graphic devices were not generally available in 1974)
Was any part of S/S design ported to other smaller hardware? Yes by ICI, to Commodore PET 2001 in 1977 - calculator burnt to ROM chip
http://forum.editgrid.com/viewtopic.php?pid=3679
sorry no, but this mockup on Editgrid gives the general idea
http://www.editgrid.com/user/ken/WORKS_RECORDS_SYSTEM_MOCKUP
average downstream bytes to update one cell on remote 3270 workstation 16 bytes uncompressed
average number of bytes upstream when single cell is changed 14 bytes uncompressed
approximate # machine instructions to execute - for example, A=B+C*(D/E) 5 including fetch & save
approximate size of object code snippet ('binary') for above example 24 bytes 4 bytes per F/P machine instruction (F/P = floating point)
approximate floating point instructions/ second on (an earlier generation) 360 330,000 <a href="http://www.bitsavers.org/pdf/ibm/360/A22_6825-1_360instrTiming.pdf" target="_blank">IBM System/360 timings</a>
exact number of bytes needed to store a single F/P data cell on BDAM file 8
# formula required to store, for example, >46 years of historic monthly data 0 builtin
# machine instructions to stack >46 years of historic monthly data (MVCL) 1 one MVCL instr.
# instructions required to validate numeric input from 3270 0 hardware feature
# additional instructions required for dynamic v. compiled Fortran algorithm < 0 more optimized than compiled Fortran
additional overhead retrieving data from another application (remote data) 0 exactly same cost as local
It was common practice in the 1960's/70's for companies to compete on IT fronts as well as normal commercial lines. If a corporation had talented in-house IT staff, that company could compete better than the ones who either couldn't afford the best or who didn't search for the best (just as in design, production & marketing). Somewhere along the way the majority of company executives 'lost their way' and the current awful state of IT is a direct result of this neglect and over zealous sales of 'off the shelf' solutions. Company intelligence is more valuable than mere assets - it is the very stuff of competiteveness. ICI never shared with others the advantages they gained through intelligent IT Systems and became, as a result, for a very long time, true leaders in their field. Competitiveness creates excellence and advances civilization. One-product Operating Systems and all embracing application Office suites create stagnation and encourage viruses & bugs. If it were not so we would not be where we are today - having to put up with poor quality software.
It was common practice in the 1960's/70's for companies to compete on IT fronts as well as normal commercial lines. If a corporation had talented in-house IT staff, that company could compete better than the ones who either couldn't afford the best or who didn't search for the best (just as in design, production & marketing). Somewhere along the way the majority of company executives 'lost their way' and the current awful state of IT is a direct result of this neglect and over zealous sales of 'off the shelf' solutions. Company intelligence is more valuable than mere assets - it is the very stuff of competiteveness. ICI never shared with others the advantages they gained through intelligent IT Systems and became, as a result, for a very long time, true leaders in their field. Competitiveness creates excellence and advances civilization. One-product Operating Systems and all embracing application Office suites create stagnation and encourage viruses & bugs. If it were not so we would not be where we are today - having to put up with poor quality software.
This website
built using
<a href="http://en.wikipedia.org/wiki/Z/Architecture" target="_blank">IBM Z/Architecture</a>
<a href="http://en.wikipedia.org/wiki/IBM_3270" target="_blank">IBM 3270 on wikipedia</a>Note 1.
<a href="http://en.wikipedia.org/wiki/MVS" target="_blank">IBM MVS Operating System</a>
http://cicswiki.org/cicswiki1/index.php?title=Quasi-reentrant
<a href="http://en.wikipedia.org/wiki/IBM_Basic_assembly_language" target="_blank">IBM Assembler</a>
<a href="http://ca.com/us/products/product.aspx?id=1431" target="_blank">Panvalet source code management</a>
<a href="http://en.wikipedia.org/wiki/Adabas" target="_blank">ADABAS Wikipedia</a>
<a href="http://en.wikipedia.org/wiki/Just-in-time_compilation" target="_blank">JIT compilation</a>Note 2.
<a href="http://en.wikipedia.org/wiki/Incremental_compiler" target="_blank">Incremental compiler</a>
http://en.wikibooks.org/wiki/Algorithms/Chapter_6
<a href="http://en.wikipedia.org/wiki/Memoization" target="_blank">Memoization</a>Note 3.
http://en.wikipedia.org/wiki/Referential_transparency_%28computer_science%29
http://en.wikipedia.org/wiki/Self-modifying_code
similar to "Threaded code" technique, using pre-assembled indexed sub-routine calls. Custom built, multi dimensional
http://en.wikibooks.org/wiki/360_Assembly/Branch_Instructions
http://en.wikipedia.org/wiki/Threaded_code_compiler
<a href="http://en.wikipedia.org/wiki/Binary_search" target="_blank">Binary search</a>
Code self re-organized according to options & usage (reflection)
(corrected link 29/10/2008)
<a href="http://en.wikipedia.org/wiki/Floating_point" target="_blank">Wikipedia Floating point</a>
(SBA/SF/RA etc)
`````Q
<a href="http://en.wikipedia.org/wiki/Flat_file" target="_blank">Flat file</a> No keyed lookup
only for setup & "program code"
http://en.wikipedia.org/wiki/Reverse_Polish_notation
see CICS asynchronous transaction processing - (Transient Data) Updating down the line DIR's
currently known as VisualWorks, in the early 1980s; various Lisp implementations like Emacs picked the technique up quickly"
by time period, shift, day, week, month, year
by time period,auto summation
application & daily full disk copy
still not universally adopted 34 years later !
globally & 'cross application'
("secret" union payrise negotiations)
histograms only since no GUI
WYSIWYG with on screen previews
http://www.the-adam.com/adam/rantrave/computers.htm
http://www.the-adam.com/adam/rantrave/postmodern.htm
100% IBM Z/390 compatible, (no requirement to re-compile)
(dynamic Memoization & self optimizing fast paths)
(suggestive of wholy independant & later "re-invention" by Bricklin)
it was created 6 years before the IBM PC, and between 3 and 6 years before Apple II
Limited to defined field attributes, text/numerics, (later 7 colors & reverse video, condtl. formatting)
(hardware limitation, graphic devices were not generally available in 1974)
by ICI, to Commodore PET 2001 in 1977 - calculator burnt to ROM chip <a href="http://en.wikipedia.org/wiki/Commodore_PET" target="_blank">Commodore Pet</a>
including fetch & save
4 bytes per F/P machine instruction (F/P = floating point)
<a href="http://www.bitsavers.org/pdf/ibm/360/A22_6825-1_360instrTiming.pdf" target="_blank">IBM System/360 timings</a>no timing data avail for IBM/370 or later upward compatible hardware
hardware feature
more optimized than compiled Fortran
exactly same cost as local
<a href="http://en.wikipedia.org/wiki/Commodore_PET" target="_blank">Commodore Pet</a>
no timing data avail for IBM/370 or later upward compatible hardware
Early 3278 terminal circa 1972
model 1 12 x 40 columns
model 2 24 x 80 "" (illustrated)
model 2 24 x 80 "VID" graphic capability in part of screen
Features: byte addressable; any byte could be overlaid by subsequent write
read "modified" allowed only changed data to be read
full buffer read also available (mainly for screen saving during debugging)
numeric & protected field attributes
later (3279) colour displays had basic colours plus reverse video
Replaced: 2260 display terminal
byte addressable; any byte could be overlaid by subsequent write
full buffer read also available (mainly for screen saving during debugging)
later (3279) colour displays had basic colours plus reverse video
IBM 370/145 Console
http://www.w3.org/2000/03/rdf-tracking/#rdf-embedded
IBM charged extra for the rust !
The rust illustrated here was an optional 'extra'
available only to pre-owned hardware buyers !
The rust illustrated here was an optional 'extra'
available only to pre-owned hardware buyers !