1
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2
+ <?xml-stylesheet type =" text/xsl" href =" ../../interface/layout.xsl" ?>
3
+ <page >
4
+ <filename >History-of-Programming.xml</filename >
5
+ <sitedir >Other-Items</sitedir >
6
+ <content >
7
+
8
+ <div class =" blockquote" >
9
+ The thing that hath been, it is that which shall be;
10
+ and that which is done is that which shall be done:
11
+ and there is no new thing under the sun.
12
+ <div class =" reference" >
13
+ <i ><a href =" https://www.biblegateway.com/passage/?search=Ecclesiastes+1& version=KJV#en-KJV-17325" >
14
+ Ecclesiasties 1:9</a >, King James authorised translation of the Bible,
15
+ translated 1611 (revised 1769), from the Hebrew manuscript, originating around 900BC</i >
16
+ </div >
17
+
18
+ </div >
19
+
20
+ <p >This is a fairly focussed history of programming. Its purposes are:</p >
21
+ <ul >
22
+ <li >To help people distinguish OOP from Agent-Oriented Programming, which
23
+ has often been called OOP as well, but is really a somewhat separate
24
+ paradigm</li >
25
+ <li >To help people see the reinvention of old ideas under new names</li >
26
+ </ul >
27
+
28
+ <p >In some of the eras below, people often thought they had invented a new
29
+ thing, when really they were just reinventing something older. </p >
30
+
31
+ <style >
32
+ td {
33
+ vertical-align: top;
34
+ }
35
+ td h4 {
36
+ margin-top: 0;
37
+ }
38
+ </style >
39
+
40
+ <table >
41
+ <tr >
42
+ <th >Era</th >
43
+ <th >Years</th >
44
+ <th >Object-Oriented Programming</th >
45
+ <th >Agent-oriented Programming</th >
46
+ <th >Table-Oriented Programming</th >
47
+ </tr >
48
+ <tr >
49
+ <th >Definition</th >
50
+ <td ></td >
51
+ <td >The Imperative-style OOP that is mostly used in modern-day languages</td >
52
+ <td >aka Message-passing OOP; see
53
+ <a href =" http://stereobooster.github.io/two-big-schools-of-object-oriented-programming" >
54
+ Two big schools of Object-Oriented Programming</a > for details</td >
55
+ <td ></td >
56
+ </tr >
57
+ <tr >
58
+ <th >Mainframe Era</th >
59
+ <td >1960s-1980</td >
60
+ <td colspan =" 2" >
61
+ <h4 >The Common Era</h4 >
62
+ <p >In 1963, Ivan Sutherland's <a href =" https://en.wikipedia.org/wiki/Sketchpad" >
63
+ Sketchpad</a > was effectively the earliest object-oriented program,
64
+ though its use of terminology isn't what we'd expect today. However,
65
+ it wasn't written in an object-oriented language. </p >
66
+
67
+ <p >Object-Oriented Programming began in 1967 with the creation of Simula
68
+ by Ole-Johan Dahl and Kristen Nygaard. This introduced classes, objects,
69
+ inheritance, and polymorphism, and also the Actor model (cf.
70
+ <a href =" https://en.wikipedia.org/wiki/History_of_the_Actor_model" >
71
+ History of the Actor model</a >). </p >
72
+
73
+ <p >Alan Kay's Smalltalk in 1972 was considered widely influential in
74
+ Object-oriented circles, and continued the use of the Actor Model.</p >
75
+ </td >
76
+ <td >
77
+ <h4 >Decision Table Programming</h4 >
78
+
79
+ <p >The earliest iteration I found of table-oriented programming is the paper
80
+ <a href =" https://www.rand.org/content/dam/rand/pubs/papers/2006/P2608-1.pdf" >
81
+ What is DETAB-X?</a > published by Solomon L. Pollack in October 1962. It
82
+ details DETAB, a table-oriented variant of COBOL. </p >
83
+
84
+ <p >This led to languages such as <a href =" https://en.wikipedia.org/wiki/Filetab" >
85
+ Filetab</a > in the late 60s, whose descendents continued in the 70s and 80s,
86
+ and a Linux version was even released in 2001. The company owning Filetab
87
+ was liquidated in 2010. </p >
88
+
89
+ <p >This early iteration is often labelled
90
+ <a href =" https://en.wikipedia.org/wiki/Decision_table" >Decision Table</a >
91
+ programming. </p >
92
+ </td >
93
+ </tr >
94
+ <tr >
95
+ <th >PC Era</th >
96
+ <td >1980-1995</td >
97
+ <td >It was during this era that Object-Oriented Programming came into the
98
+ mainstream. This had two effects; the first was that
99
+ it brought larger encapsulation to the mainstream, replacing to a
100
+ certain extent the old Procedural methodology. The second was that this
101
+ also resulted in dropping the Actor model and message passing, not
102
+ because there was anything inherently wrong with them, but because they
103
+ weren't suited to the minds of those strongly influenced by procedural
104
+ (or, for that matter, functional) programming. This was the era of CLOS
105
+ and C++. </td >
106
+ <td >During this era, message-passing OOP was somewhat sidelined by
107
+ imperative-style OOP. However, this was also the era in which the early
108
+ work on <a href =" https://en.wikipedia.org/wiki/Agent-oriented_programming" >
109
+ Agent-Oriented Programming</a > was done. </td >
110
+ <td >
111
+ <h4 >Data-Oriented Programming</h4 >
112
+
113
+ <p >The Term "Data-oriented Programming" has been used in various ways around
114
+ the web, but the one we're using here is the one on Wikipedia about
115
+ <a href =" https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Data-oriented_languages" >
116
+ Data-oriented languages</a >. These seem to be divided into table and tree
117
+ types, but the common theme is a close integration with a database, rather
118
+ than keeping it at arm's length as SQL-using systems do (but PL/SQL, or even
119
+ SQL, would be an example of Data-oriented Programming). </p >
120
+
121
+ <p >Popularity of the table branch of data-oriented programming surged in the
122
+ 80s with the use of languages like:</p >
123
+
124
+ <ul >
125
+ <li >dBase</li >
126
+ <li >Clipper</li >
127
+ <li >Harbour/xHarbour (Open Source)</li >
128
+ <li >Visual FoxPro/Microsoft FoxPro</li >
129
+ </ul >
130
+
131
+ <p >These languages had useful features that are not seen in modern programming
132
+ languages, primarily the tight integration of database features into the
133
+ language. </p >
134
+ </td >
135
+ </tr >
136
+ <tr >
137
+ <th >Web 1.0 Era</th >
138
+ <td >1995-2008</td >
139
+ <td ><h4 >Take over the world</h4 >
140
+ This was the era in which Imperative OOP took over the world. While
141
+ the model of OOP wasn't necessarily agreed on, most languages incorporated
142
+ a lot more OOP than previously. </td >
143
+ <td >While some variants of agent-
144
+ oriented programming lean more towards logic programming (eg.
145
+ <a href =" https://en.wikipedia.org/wiki/GOAL_agent_programming_language" >
146
+ GOAL</a >, others are definitely in line with the Actor Model (eg.
147
+ <a href =" https://en.wikipedia.org/wiki/SARL_(programming_language)" >
148
+ SARL</a >. </td >
149
+ <td >
150
+ <h4 >Table-Oriented Programming</h4 >
151
+
152
+ <p >With the advent of the internet, and the popularity of Object-Oriented
153
+ Programming, these languages fell out of use. </p >
154
+
155
+ <p >In 1998-2002, as the table-oriented languages were falling out of use,
156
+ Tablizer/TOPMind (aka Tablizer/TOPMind) wrote a series of articles
157
+ on "Table-Oriented Programming" (TOP). These were, in their own words,
158
+ unstructured and piecemeal. These advocated for various features prevalent in
159
+ these languages, and a few ideas of their own. </p >
160
+
161
+ <p >Unfortunately, at the time, TOP was seen (especially by the biggest TOP
162
+ advocate, Tablizer/TOPMind/TOPMind) as a competitor to OOP. This meant he spent a lot
163
+ of time criticising the OOP community (often validly) for the weaknesses of OOP
164
+ (and OOP was weak before modern ideas such as the invention of roles). </p >
165
+
166
+ <p >This led to a situation where the vast majority of people followed the OOP
167
+ camp, without considering a multi-paradigm approach. Had more effort been put
168
+ into integrating TOP into modern programming languages, everyone's lives
169
+ would've been a lot easier (or at least most programmers). </p >
170
+ </td >
171
+ </tr >
172
+ <tr >
173
+ <th >Web 2.0 Era</th >
174
+ <td >2008-2022</td >
175
+ <td >This was a time of steadily increasing object orientation in some of
176
+ the less structured languages. </td >
177
+ <td ></td >
178
+ <td >
179
+ <h4 >The Interregnum</h4 >
180
+
181
+ <p >As a part of the interregnum, Table-Oriented Programming was pushed
182
+ into the database, but then the common methodology was that code was
183
+ moved out of the database, mainly for efficiency/scalability reasons
184
+ (though the Smart DB/Thick DB people argue that this was often just
185
+ a case of bad programmers). This meant that it was no longer easy
186
+ to put code in the tables. </p >
187
+ </td >
188
+ </tr >
189
+ <tr >
190
+ <th >AI Era</th >
191
+ <td >2022+</td >
192
+ <td ></td >
193
+ <td >Look what's going to flourish! There are now many agent-based systems,
194
+ though few have a genuine agent-based programming language to go with
195
+ them. </td >
196
+ <td >
197
+ <h4 >Rebirth</h4 >
198
+
199
+ <p >This site is an attempt to make use of the good parts of TOP while hopefully
200
+ leaving behind the oppositional nature of previous discourse on the topic;
201
+ there may still be some pointing out of the weaknesses of various technologies,
202
+ but only with the intent of showing the power of multi-paradigm programming, not
203
+ with the intent of making anyone abandon the named technologies.</p >
204
+
205
+ <p >I will consider this a success if more languages adopt table-oriented
206
+ programming as one of their available paradigms. </p >
207
+ </td >
208
+ </tr >
209
+ </table >
210
+
211
+ <p >As a side note, there's some similarity between Agent-Oriented Programming
212
+ and Dataflow programming, but Dataflow programming is more aimed at a
213
+ continuous flow of data through a few main streams, rather than message
214
+ passing. While the concepts are similar, the mindsets are different. </p >
215
+
216
+ <p >It can also be seen by examining the history of programming that a lot of
217
+ effort has been expended simply trying to drag programmers further away from
218
+ the procedural model and C. C++ was the inclusion of OOP in C, but only the Classes
219
+ part, not the Actor Model part. Perl was the inclusion of some Functional
220
+ features in a C-like language; its successors (Ruby, Python, PHP) were usually
221
+ less functional-aligned. </p >
222
+
223
+ </content >
224
+ </page >
0 commit comments