Tag Archives: computing paradigm

Rethinking Computer Science Part 5: The Provenance of Computation

What is the most primitive provenance of computation and how does it extend to the complexities of life and mathematics?

Everything begins with differentness. Nothing arises from sameness. Differentness is appreciated in interaction. Nothing accrues from not interacting. Interaction of differentness manifests with change. Interaction without change is a non sequitur. Change is differentness in time, an after that is different from a before. Change is appreciated by a persistence spanning the change. Without spanning persistence there is no referent for change. Change occurs with constraining rules of interaction. Unconstrained change has no significance.

Change manifests in relation to spanning persistence. Persistence manifests in relation to encompassing change. This counterpoint of persistence relating change relating persistence relating change … is the essence of differentness and the foundation of computation.

Locus and Value
The primitive of this counterpoint is a persistent locus that can assert one at a time of two of more values which transition according to value interaction rules. A locus asserting a value might be a wire asserting a voltage, a protein asserting a shape, a molecule asserting a chemical, a digit asserting a numeral, a human asserting speech and so on. A value interaction rule might be a logic function, a shape sensitivity, a chemical affinity, a multiplication table, and ideal and so on.

Computation begins with interaction rules that appreciate combinations of differentness. Loci associate and combine their asserted values to form the name of a value interaction rule. The named rule is invoked and the specified value transitions occur.

The spectrum of differentiation
A locus is differentiated by its place of association in relation to all other loci. A values is differentiated by its interaction behavior in relation to all other values. Two domains of differentiation interpenetrating through loci asserting values. Together they weave a tapestry of computation along a spectrum of expression, below, that is purely in terms of value differentiation on one end and purely in terms of association differentiation on the other end with varying proportions of differentiation along the spectrum. A computation can map anywhere onto the spectrum by altering its proportions of value differentiation and association differentiation (numeric radix for instance).

Spectrum of differentiation.

Value Differentiation
In pure value differentiation all differentness is represented with values and their interaction rules. Each value is different from every other value by virtue of its interaction behavior with all other values as expressed by the value interaction rules.

The loci of pure value differentiation are all mutually associated at a single place of association. There is no way to tell one locus from another in terms of association relationship and hence no association differentiation. The loci are constrained and agitated such that all loci will eventually associate and all possible value interactions will eventually occur. Warm matter in a gravity well or cytoplasm within a cell membrane are examples. This is illustrated with the shaking bag below. The bag is the constraining place of mutual association. The shaking of the bag is the search of values to find interaction partners.

Mutually associated loci.

Roman numerals
The pure value end of the spectrum is illustrated with Roman Numeral addition considered without the subtractive principle: 9 is VIIII instead of IX. The value of a Roman numeral is represented by loci asserting values but the loci are not associated in any particular relationships.


The value interaction rules are represented as:

name of rule -> result of interaction

Roman numeral addition is expressed as a set of value interaction rules.

IIIII  ->  V
VV   ->  X
XXXXX   ->  L
LL   ->  C
CCCCC   ->  D
DD   ->  M

Given two Roman numerals these rules will reduce them to a minimal single numeral representation. The numbers 1878 and 122 are used as examples.


Each symbol is a locus asserting a value. If two loci are asserting V and they associate, then their values form the name of interaction rule VV. The rule is invoked, the Vs disappear and X appears. The values and the loci embody the interaction rules. When 2 Vs meet they spontaneously transform into X, similar to 2 molecules of hydrogen and one molecule of oxygen spontaneously transforming into 2 molecules of water when they meet.

One can place the two numerals into a shaking bag as in Figure 3 below. The five Is will form the name IIIII, invoke the rule named IIIII and transform into a V. There are then two Vs that will transform to an X. The five Xs will transform to an L, the two Ls to a C the five Cs to a D and finally the two Ds transform to an M. What remains are two Ms. There is no transform rule with the name MM so no more names can be formed and the addition is completed. Names are formed, rules are invoked, values transform and eventually the sum appears.

Roman numeral addition in shaking bag.

The loci randomly associate in the bag yet a fully determined numerical computation occurs in terms of a progression of formed names and value transitions in terms of the value interaction rules. However, the expression itself cannot determine when its resolution is completed. The only way to determine the progress of the addition is to open the bag and count the values. When there are four or fewer of I, X, C and one or fewer of V, L, D the addition is completed.

The expression itself, however, can be enhanced to express appropriate coordination behavior and determine itself when it is done. This requires that there be a progression of name formation and resolution such that there is a necessarily last name formed and resolved. With the present form of the expression there might not even be a first name formed. VI + XII = XVIII with no names formed and resolved at all. There must be a completeness of behavior at each stage of name formation and resolution to insure that every name in the progression is formed and appreciated in an orderly progression.

The first question of an addition is, how many Is are present in the bag. The computation must count the Is and somehow determine that it has considered all the Is and has not missed any Is in the bag. This can be done if the number of Is to be counted is a constant which can be arranged with zero place holder values which allows there to be a constant number of each value and its zero place holder values in each number. The corresponding lower case letter will be used as the zero place holder value for each numeral value as shown in Table 1.

Numeral    Zero
value      value
I               i
V              v
X              x
L              l
C              c
D             d
M             m
Roman numerals with associated zero values

The zero value i is used such that there is always exactly four of I and/or i in a number: iiii, Iiii, IIii, IIIi, IIII. When two numbers are added there will always be exactly eight of I and/or i. The criterion for completeness can now be pre expressed in the value interaction rule names. The name of each I.i rule, shown in Table 2 below, is exactly eight values. Each name is an association of values but this does not imply any position dependency of the values. The rule name IIIiiiii means that there is three of I and five of i in no particular order. An I rule will be invoked only when its name is completely formed by all eight values. This requirement of completeness of name formation is the mechanism of behavior coordination.

The V or v is the carry to the V,v addition. There are one each of V and/or v in the two numbers and there will always be a carry value of V or v so there will always be exactly three of V and/or v present after the carry. The names of the value transform rules, shown in Table 2 below requires 3 of V and/or v. Because of the completeness requirement the V,v addition occurs strictly after the I,i addition is completed. The carry values express the necessary progression of name formations and resolutions.

There will be four of X,x in each Roman number so adding two numbers will involve 8 values and the carry value will make exactly nine values to form the X,x addition names as shown in Table 2. Again, the X,x addition will occur strictly after the V,v addition.

    Rules for I        rules for V                  rules for X
iiiiiiii -> iiiiv           vvv -> vx                  xxxxxxxxx -> xxxxl
Iiiiiiii -> Iiiiv           Vvv -> Vx                 Xxxxxxxxx -> Xxxxl
IIiiiiii -> IIiiv           VVv -> vX]                XXxxxxxxx -> XXxxl
IIIiiiii -> IIIiv           VVV -> VX                XXXxxxxxx -> XXXxl
IIIIiiii -> IIIIv                                          XXXXxxxxx -> XXXXl
IIIIIiii -> iiiiV                                          XXXXXxxxx -> xxxxL
IIIIIIii -> IiiiV                                          XXXXXXxxx -> XxxxL
IIIIIIIi -> IIiiV                                          XXXXXXXxx -> XXxxL
IIIIIIII -> IIIiV]                                        XXXXXXXXx -> XXXxL
;                                                             XXXXXXXXX -> XXXXL

The remaining rule sets, shown below 3 can be similarly derived except for M,m which poses a difficulty because it does not have an inherent maximal form. One can put as many Ms as one likes in a number and the only way to pre-determine how many Ms there are is to limit the number of M,ms allowed in a number. In this discussion the number of M,ms will be limited to five so that, with the carry, there are always exactly eleven of M and/or m. The addition rules for M clip any result greater than five Ms to five Ms without considering the lesser numerals.  Notice that the carry out value for the M rules is Z which indicates the completion of the addition.

   Rules for L                  rules for C          rules for D                      rules for M
lll -> lc                       ccccccccc -> iiiiv       ddd -> dm           mmmmmmmmmm -> mmmmmZ
Lll -> Lc                    Ccccccccc -> Iiiiv       Ddd -> Dm          Mmmmmmmmmm -> MmmmmZ
LLl -> lC                  CCccccccc -> IIiiv       DDd -> dM           MMmmmmmmmm -> MMmmmZ
LL L-> LC                CCCcccccc -> IIIiv       DDD -> DM          MMMmmmmmmm- > MMMmmZ
;                              CCCCccccc -> IIIIv                                    MMMMmmmmmm -> MMMMmZ
;                              CCCCCcccc -> iiiiV                                   MMMMMmmmmm -> MMMMMZ
;                              CCCCCCccc -> IiiiV                                  MMMMMMmmmm -> MMMMMZ
;                              CCCCCCCcc -> IIiiV                                 MMMMMMMmmm -> MMMMMZ
;                              CCCCCCCCc -> IIIiV                                MMMMMMMMmm -> MMMMMZ
;                              CCCCCCCCC -> IIIiV                                MMMMMMMMMm -> MMMMMZ
;                                                                                                 MMMMMMMMMm -> MMMMMZ

A modified Roman numeral is always exactly 20 values. four of I or i, one of V or v, four of X or x, one of L or l, four of C or c, one of D or d, and five of M or m. The number one is mmmmmdcccclxxxxviiiI. The number zero is mmmmmdcccclxxxxviiii. This is analogous to a 2s complement binary number represented in a 32 bit computer which is always 32 bits regardless of its magnitude.

The Roman numbers.


now become

mmmmMDCCCcLxxXXViIII and mmmmmdCccclxxXXviiII

and the addition operation becomes:

mmmmMDCCCcLxxXXViIII + mmmmmdCccclxxXXviiII = mmmMMdcccclxxxxviiii.

The addition process accepts two completely represented numbers and produces one completely represented number preserving the number representation convention. The I,i addition is the necessarily first interaction. As shownbelow  the successive carry values shepherd a coordinated progression of interactions leading to the addition of the M,ms which is the necessarily last interaction.

Modified Roman numeral addition in shaking bag.

No matter how long it takes for the names to form and resolve the expression autonomously resolves in an orderly progression of name formations and resolutions to a necessarily last name formation and resolution which generates the coordination value Z to indicate that the addition is completed. The behavior is directed, discrete and fully determined. Z might open the bag and spill the results, into another bag emptying the current bag which can now receive a new computation to resolve.

Roman numeral summary
Classical Roman Numeral addition requires a human to manage the addition and coordinate its behavior. More values, value transform rules and conventions of expression express the coordination behavior previously expressed by a human. The Roman Numeral addition, or any other pure value computation, can be complete in itself, expressing a fully determined computation as a progression of spontaneous behaviors which unambiguously produces a correct result.

Loci jumbling around in the bag trying to form an interactable name is the pure value search. The loci spontaneously appreciate when a name is formed, invoke the appropriate interaction rule and transition their values. (physical chemistry, biochemistry, particle interaction). A search failure (name not formed) does not leave any lingering conditions such as partially formed names to be accounted.

Binary place value numerals – shorter rule names
With pure value binary encoding, which already includes zero, each binary place has a unique set of values.  Rules with only three value names make name formation more likely. Three loci meeting to form a name in the shaking bag is more likely to occur than 8 or 9 loci meeting to form a name. Most chemical and biological interactions are a convergence of 2 or 3 loci.

Pure value interaction rules for binary addition.

Pure value representation:

L0H1E1A0 + M1J1F0B1 = N1Z0Y0X1W1

Corresponding binary place value representation:

0110 + 1101 = 10011

Pure value summary
The differentness of computation is expressed and its behavior fully determined solely in terms of values interacting in accordance with value interaction rules. The value interaction rules are the persistent referent for the changing values. The loci of a pure value expression, all mutually associated at a single place, serve simply as a medium of value assertion and do not contribute to computation differentiation. Computation flows through a progression of names formed of unique values resolved with value interaction rules.

No new expressional primitives have been postulated. A process expression is just associated loci asserting values transforming according to value interaction rules.

Association Differentiation
In pure association differentiation all differentness is expressed in terms of loci in static structures of association relationships. Each locus is different from every other locus by virtue of its place in the structure of association relationships.

The behavior of statically associated loci
A locus has no structure, no input or output, no top or bottom, no right or left. Each locus sees a name continually formed of its own value and the unordered values of the loci directly associated with it and changes its own value in response to the formed name. There is never an instant of no presented name. If associated loci assert the same values and resolve the same names as illustrated at the left below then value change flows in all directions continually and might cease flowing all together (all loci asserting 1).

If directly associated loci assert different values change can flow with circular interaction as in the middle below. Only with three linearly associated loci asserting different values, as on the right below is the flow of change directed such that the output value does not feedback and participate in forming the input name.

Directionalizing the behavior of statically associated loci.

The result is a directionalized locus providing directed value transition flow in the context of a common set of values as below. The output values and input values are not differentiated in terms of value but are different in terms of association place in relation to the directionalized locus.

Directionalized locus.

The Switch
A switch is a directionalized locus. A manual switch in a power plant does not electrocute the human switcher.

An electromagnetic switch receives an input current value that influences a magnetic field value which influences a physical position value which influences a result current value. The output current is isolated from the input current by interaction through two different value domains.

Switches isolate and directionalize value transition flow.

An electronic tube receives a voltage value which influences a charge value in a vacuum which influences current flow value through the vacuum which influences the output voltage value which does not feed back and influence the input voltage value.

The voltage on the transistor gate influences the charge value in the channel which influences the electron flow value through the channel which influences the voltage value at the output which does not feed back and influence the input voltage value.

Multi input directionalized loci can be implemented in terms of networks of single input switches as with CMOS implementation of Boolean logic gates for instance.

Combinational composition
Directionalized loci, can be connected, output to input, to form networks of directly associated directionalized loci with a common set of values and value interaction rules expressing progressive value transition flow as in the left below. The directionalized loci can be graphically stylized to show directionality and rule set behavior as in the center below and ignoring the internal buffering values, which need not be explicitly expressed nor even be common across loci, can be graphically formalized into primitive logic behaviors as on the right below.

Stylized presentations of networks of directionalized loci.

The NULL value – ends and beginnings
With interaction rule sets in terms of data values loci continually assert  data values, form computation names and resolve the formed names with no indication of when a computation begins or when a computation ends.

A value, null, is added to the mutually exclusive set of data values which is defined to mean “not a data value” establishing two disjoint domains of name formation completeness; data completeness and null completeness. A null convention is established in which name formation alternates between a completely formed data name and a completely formed null name (all values null) as below. A computation begins when values transition from all null to a completely formed data name. A computation ends when values transition from a formed data name to all null. Successive wavefronts of value transition alternating between data completeness and null completeness representing successive computations.

Null Convention value transition wavefront flow.

The completeness criterion
In relation to the null value a locus is defined that transitions its output to a data value only when a completely formed data name is presented and that transitions its output to null only when a completely formed null name is presented. Otherwise it maintains its current output value.

The transition of the output to a data value implies the presence of a completely formed data name presented to the input. The transition of the output to null implies the presence of a completely formed null name presented to the input.

Pure association differentiation and threshold logic
In pure association differentiation there is only one data value and the null value. There cannot be combinations of different data values presented so the only appreciable differentness of a formed data name is how many data values are present. Therefore the completeness of a formed data name is recognized by a threshold  criterion (the requisite quantity of presented values at data). The completeness of  the null name is also recognized with a threshold criterion (all presented values at null)

The result is a dual threshold logic with a data completeness threshold, a completely null threshold and an output maintaining behavior. A dual threshold locus beginning with its presented input completely null and its asserted output value at null will transition its output value to data when a specific number of its input values transition to data fulfilling the data completeness threshold. It will maintain its output value at data until all of its input values transition to null at which point it will transition its output value to null. It will then maintain its output value at null until its input values transition to data meeting the completeness threshold at which point it will transition it output value to data and so on.

Some dual threshold loci are represented graphically below with their value interaction rules represented as mapping tables in which D represents the data value, N represents the null value and a dash represents no transition. The number in the graphic is the data completeness threshold. The input rails indicate the number of inputs. A branched input indicates a weighted input.

Dual threshold loci.

If the inputs to a dual threshold locus monotonically transition between data completeness and completely null with an appropriate delay between transitions then the output of the dual threshold locus will monotonically transition between data and null presenting a monotonically transitioning input to any succeeding loci.

Two interpenetrating domains of differentness were defined with the locus and its values. Loci were combined in specific structures to express directionalized interaction behavior. Now directionalized behaviors with data assigned to 1 and null assigned to 0 are combined in specific structures with cross coupled feedback to express dual threshold behaviors with result holding hysteresis behavior. A data completeness, quantity of 1s network transitions the output to data and a null completeness, all 0s network transitions the output to null. Other wise the dual threshold behavior maintains its output as below.

Dual threshold locus implemented with directionalized loci.

 From the simple fact of differentness an effective computation primitive, Null Convention Logic, has been constructed.

Multi-Rail Variable Representation
The mutually exclusive values of a variable which cannot now be represented with different values are represented with different rails, as below, each rail representing one value which is asserted when its rail becomes data. It is illegal for more than one rail of a variable to transition to data at a time. When all rails are null the variable is null or empty (not containing or asserting a data value).

Multi-rail variables.

Combinational Logic
I n multi-rail variable interactions each rail represents a value so associations of rails represent combinations of values forming a name. Each variable will transition a single rail to data. Each rail (value) of each variable fans out associating with rails of other variables attempting to form a name. Of the possible combinations of rails of interacting variables only one combination will transition all its rails to data forming a complete name which can be recognized by a dual threshold locus. This fanning out and associating of rails is the association version of the search to form a resolvable name. The unsuccessful fanout paths forming incomplete names are search failures called orphans. There is a delay issue with the orphan that does not fit into this discussion. See part 2.

The combinational network below, specified by a set of value interaction rules and their corresponding table representation at its left, adds a binary variable to a trinary variable producing a quaternary variable. It begins with all rails asserting null. When one rail each of the trinary and the binary variables transitions from null to data. The transitions to data fanout searching to form a name only one of which will be completely formed. One dual threshold locus in the first rank will meet its data completeness threshold (recognize the formed name) and transition its output to data which will ultimately transition one rail of the quaternary output variable to data (data completeness) indicating that the input variables are data complete and that the quaternary value is the correct resolution of the presented input.

When the input variables transition to null the completely null name will form and the dual threshold locus in the first rank that had transitioned to data will transition its output to null, transitioning the output quaternary variable to null. All rails are again null and the combinational network is ready to accept a next transition of input variables to data.

A simple multi-rail pure association computation.

If the input variables monotonically transition between data completeness and completely null with an appropriate delay between transitions then the output variable will monotonically transition between data and null. The behavior of the network as a whole is deterministically coordinated (no glitching) by the monotonic input behavior, by the completeness behavior of individual dual threshold loci and by the logical structure of the network. The network fulfills the completeness criterion.

Greater Combinational Composition
Networks fulfilling the completeness criterion can be combined into greater networks that, in turn, fulfill the completeness criterion.

Pure association Roman numeral addition
The figure below is the pure association expression of I,i value interaction rules above. The I,I values of input variables A and B are represented as dual rail pairs. One rail of each pair will become data presenting four of I and or i to the input for each variable. Only one dual threshold loci for each input variable will transition to data recognizing the presented name of each variable.

The next rank of behaviors implements the search to recognize the combination of names from inputs A and B. One threshold behavior of this rank will transition to data recognizing the specific value interaction rule name. This one rail at data, through the last rank of behaviors, transitions the output rails to values specified by the value interaction rule including the V,v carry.

Notice that places in the network are labeled with the value names of the pure value interaction rules. The differentness relations of the computation previously represented with unique values are now expressed by unique places in a structure of association relationships. There is a direct mapping of expression of differentness between the two expressions as exhibited with the labeling.

Pure association expression of Roman numeral I,i addition.

Pure association binary addition
The pure association expression for binary addition is shown in Figure 16 below that corresponds to the pure value interaction rules of binary addition above. Again the places in the network are labeled with corresponding pure value names.

Pure association expression for dual-rail binary addition.

Completeness behavior scales.
A greater network as a whole behaves with the same completeness behavior as its component combinational networks which in turn behave with the same completeness behavior as their component dual threshold loci. Networks with fully determined flow behavior emerge atop networks of dual threshold loci.

For each network input transition (to data or to null) a wavefront of correct monotonic transitions propagates through the greater network. There are no incorrect or spurious transitions. The transition completeness of the output variables of the greater network implies that its input variables have completely transitioned to data, that the data transitions have propagated through the network and that the output is the correct resolution of the presented input.

This is also true for the null wavefront. When the input transitions to null an orderly wavefront of transitions to null flows through the network. There are no transitions of null to data. When the output is completely transitioned to null it means that the input is all null and the null transitions have propagated through the network.

A combinational network as a whole fulfills the completeness criterion.

Pure association summary
Computation is expressed and its behavior fully determined solely in terms of a structure of associated loci interacting with direct neighbors. The network of associated loci is the persistent referent for the changing values flowing through it. The one computation value serves simply to assert differentness of place in the association network and does not contribute to computation differentiation. Computation flows through a progression of names formed of combined rails resolved with dual threshold loci.

Invocation Model
Two domains of differentiation form a spectrum of pure value at one end and pure association at the other end with the two domains interweaving in various proportion along the spectrum, shown below, unifying natural and artificial forms of computation in a single model. The computation of a living cell is not fundamentally different from the computation of an artificial computer.

The spectrum of differentiation.

No new expressional primitives have been introduced: no time referent, no explicit control, no state space, no humans with pencils. In the beginning there is no meta referent, no privileged differentness, no overarching rule of interaction, no referent of time, no metric of space. There are only primitives, mutually interacting, building their own universe of significance. While some conventions have been established, computation is still just associated loci asserting values forming names causing change according to value interaction rules.

Value differentiation and association differentiation are interdependent forms of differentiation. Associated loci cannot express differentness without changing values. Changing values cannot express differentness without the spanning referent of associated loci. Values are associated through and isolated by loci. The same values can be reused over and over between loci. Loci are associated through and isolated by values. The same loci can be reused over and over between values. This interdependent weave of mutually isolating and renewing each other is illustrated with a full adder as halfadd,halfadd,OR circuit in Figure 18.

Alternately reused loci and values expressing a dual-rail full adder.

The consequence is that a few loci, a few values and a few interaction rules can weave patterns of differentness into the complexities of life and mathematics.

Differentness is information. Interacting differentnesses is information transforming. Spontaneously interacting differentnesses are no less symbolic than are passive symbols of differentness manipulated by a human or a computer. Spontaneously interacting proteins compute just as a human or computer manipulating passive symbols computes. Its all about differentness.



Unifying Hardware and Software

Matt Whiteside 8,9,2017
Unifying Hardware and Software

Q: Regarding a language that “unifies hardware and software, uniformly characterizing computation through all levels of abstraction” is an attractive idea that’s also crossed my mind, but I don’t see it getting much appreciation by programmers.  To give a concrete example from my own experience of a deficiency that a unified approach would address, consider GPU programming.  You start with a nice high level, type-safe, statically analyzed language running on the CPU, which must then interface with a shader program on the GPU, and therefore throw all the type safety, static analysis, correctness guarantees, etc., out the proverbial window.  It’s hard even to imagine what possibilities could open up if even a moderate amount of progress was made towards improving this situation.

A: The unification. I see both ends doing the same computation. The processor sequences operations, the clock sequences operations. EEs actually talk about the massive concurrency at the circuit level. They don’t seem realize that they throw 99.9% of the concurrency away to actually sequence one or a few steps. They are mildly aware of inefficiency in that they include clock gating but buried in transistor details they are not sensitive to what they are doing in the context of computation. This is one of the thrusts of what I am pursuing. What is the fundamental nature of computation and its most primitive implementation consistent with that nature and how does this implementation seamlessly scale to arbitrary complexity. This is the question that CSR began addressing and which I am still working on. Computation should be uniformly characterizable in all its manifestations. It seems to me that this uniform characterization must embody concurrency as fundamental and that the notion of the sequential process is a fundamental flaw in contemporary computer science. The traditional notion that any concurrent process can be mapped to a sequential process implying that sequentiality is more fundamental than concurrency is a red herring similar to the notion that planetary motions can be mapped into uniform motion around perfect circles. Both are true enough and they both sort of work and because of that they mask access to a more effective conceptual essence.

My thesis is that the model of networks of linked oscillations spans both primitive implementation and abstract interpretation unifying both domains. Part 4 will present the flow network interpreter architecture. The view of computation is modified for both domains but then they are unified.

Rethinking Computer Science: Purpose of Site

The purpose of this site is to present and explore a new view of computation and computer science.

not as a sequence of steps controlling a machine altering contents of a memory but as wavefronts of computation and state spontaneously flowing through a network of linked oscillations,

not as clock actualized, step by step, time determined, centralized control but as self actualizing, event driven, logically determined, distributed concurrent local coordination,

not as information manipulation but as information interaction,

nothing global, nothing central, nothing timed.

It is a model of computation that applies to all forms of computation natural and artificial and that applies uniformly to all levels of abstraction from primitive implementation through general programmability,

a new view of computation and computer science.