Thursday, 4 October 2018

Why does CODIL differ from other computer languages

This query came up on a FutureLearn Course which read "Christopher, to be honest I don't think the world needs any more computer languages or most of the ones it already has for that matter"

The vast majority of computer languages, such as COBOL, Fortran, C, Java, etc. are designed to process information on a conventional stored program computer where the memory consists of numbered boxes which contain numbers . The numbers in the boxes may represent coded data (often several different formats), numeric addresses, or coded instructions. This approach was originally designed to handle a class of well-defined mathematical tasks which humans find difficult to do quickly and accuracy, so it is not surprising that modern computers are incomprehensible black boxes when viewed by the average human being. They were deliberately designed to do efficiently things which people are bad at doing.

CODIL uses a completely different memory structure which is based on a dynamic network which attempts to mimic the working of the brain's neural network. The aim is to produce a transparent information processor (rather than a black box) which is easy for the average human to understand and use for a range of potentially complex information processing tasks. It is particularly aimed at complex tasks where a dynamically flexible human interface is advantageous - and so fills the area where conventional computers are weakest.

In CODIL the array of numbered boxes which make up a conventional computer memory is replaced by a large number of nodes, where each node consists of an on/off switch and a label (which is for the benefit of the human user). The human user defines the names of the nodes and the wires linking the nodes.


A very brief description of the basic "instruction set." Let us assume that we have three nodes A. B. C connected to a linking node D.
  • If A, B  and C are switched off D is switched off. 
  • If A, B, and C are switched on D is switched on. In effect the system recognises the pattern A,B, C, to be a known pattern..
  • The links can be configured so that if A and B are switched on  then C is switched on. (This is the default ordering as implemented  but other switch on patterns are possible.)

Consider a very noddy sales example. The salesman wants to record that when "John Brown" (=A), buys "Petrol" (=B) he get a discount "DC10" (=C) he creates a dode "Brown's Contract" (=D) with the appropriate links.  When John Brown buys some petrol this is recorded by logically switching on "John Brown". "Petrol" and the quantity - say "Q12".  The system notes that "John Brown" and "Petrol" are switched on and automatically switches on "DC10" to indicate that a discount needs to be applied.

This is a very simplified example, excluding recursion - which makes the system very powerful. The original design study which led to CODIL was carried out in an organisation with at least quarter of a million customers and perhaps 5000 products see The SMBP Story. If implemented on the final version of the CODIL interpreter the node labels would include nodes for the set names, such as CUSTOMER and PRODUCT, and special task independent code would be introduced for handling calculations using numbers.  So the "Browns Contract" node for "John Brown" would be recorded as:

CUSTOMER = John Brown; PRODUCT = Petrol; DISCOUNT = 10% 

The important thing to realise is that CODIL is the user-friendly symbolic assembly language of a particular design of network based information processors which directly uses the user's own concept names, and so can always explain, in the user's own language, what it is doing. As such it is a very different kind of language to procedural languages designed to program a von Neumann type stored-program computer, where the detailed internal working are hidden from the end-user by countless layers of software.

So while there may be a lot of procedural computer languages designed to drive conventional stored program computers (one could argue far too many) as far as I know CODIL is the only language designed specifically to work using an architecture which closely matches how humans actually process information in a complex environment.

No comments:

Post a comment