= A Software Timeline Matthew Bishop [] {~x} 

 INTRODUCTION 

   This page contains a list of the important milestones which I have 
   crossed in coming to terms with how computers may be used creatively
   to interact with information and therefore with human beings

 A SOFTWARE INTELLECTUAL TIMELINE

   The steps written below represent to me important intellectual milestones for me
   in the slow process of understanding the way in which human beings are able to
   creatively interact with computers. The gap between many of the 'realisations' here
   was a number of years, and in some instances
   
   As a child programmed in Qbasic
   Became interested in Assembly Language Programming
   Started working as a programmer
   Discovered that there was a 'Command Console' on Windows computers
     It was a great relief to me when I realised that the command line interface
     to computers had not been 'exterminated'. A command line interface is essentially
     an extremely poor 'language' based interface to a computer. But in order for 
     human beings to creatively interact with a computer, in my opinion, a language
     based interface is absolutely essential. A simple analogy might be; that 
     children learn language because they find pointing at things (which is 
     essentially equivalent to using a mouse) and inadequate way of communicating.

   Discovered Regular Expressions
     These like the 'sed' program are important not just for their power
     but also for there conceptual centrality. Essentially, a Regular Expression
     or 'Search Pattern' is the abstracted representation of a set of strings.
     However the represented set may actually be effectively 'infinite', in the
     sense that no computer could ever represent all the possible members of the 
     set. A simple example of such a set would be (in Sed Syntax)

       /[a-z]\{1000\}/

     In order for a computer to represent every member of this set it would 
     need to create 26^1000 elements, where the '^' symbol signifies
     'to the power of' (which I am assuming, without actually
     doing the calculation, is impossible with any current computer)

     Regular Expressions are an important bridging mechanism between the 
     'mentality' of a computer and the human mentality. The reason for this is 
     that human beings have an incredible facility in recognizing very complex
     patterns based on sensory data. This is equivalent to the process of 
     starting with a concrete instance of a pattern and being capable of 
     categorizing that instance based on sensory experience and knowledge.
     A simple example of this is written alphabet characters. Human Beings are 
     capable of reading extremely poor handwriting, whereas computers have 
     exactly the opposite set of abilities. This is to say; that computers can take 
     a description of a pattern (or a 'definition') and easily create concrete
     instances of that pattern, but computers are very poor at taking the 
     instance and analysing it for which category it falls within. The simple
     example again is that computers have a great deal of trouble reading any
     kind of text, even typewritten text, given raw sensory data of that text
     (which we can call 'image' data).

     To be more precise, if you have a jpeg image of a piece of 'typewritten' text
     (which for example, you have scanned into your computer from a book), it 
     will be very difficult to convert that image into an 'ascii' text file.
     
     Regular Expression are important because they are one example of a way
     in which computers can be enabled to understand reasonably complex patterns
     (although still very simple but human standards). By enabling the computer
     to understand patterns, the communication process between the rigid CPU
     'brain' and the extremely fluid and creative human brain can be made more
     simple. Of course, Regular Expressions are only an extremely limited and 
     partial solution to this important problem

   Understood the idea of Text Protocols and Protocol layers.
   
   Began to understand the Unix Philosophy.
     This philosophy is based on the idea of small programs each doing one
     task, and joining together these small programs using pipe-lines. This is
     similar to the type of modularization which is achieved in programming
     languages using concepts such as 'functions' or 'proceedures' or 'objects'.
     
   Began to understand the Internet as a collaborative mechanism.
     In my opinion, the Internet is NOT a 'communication' medium, but rather a 
     'collaboration' medium. The distinction may seem empty of any real
     semantics but I believe it is significant. This explanation needs to
     be expanded. For example, the value of the Internet is not in its ability
     to allow human beings to randomly communicate with each other, in ways
     that are usually fairly anarchic and unrelated to the normal laws of 
     social interaction. In other words, in my opinion, the Internet has no
     'social' value. But it does have 'knowledge' and 'scholarship' value.

   Began to understand the importance of 'integration' as opposed to 'programming'
     This is similar to the idea that intensive Internet research should preceed any 
     programming effort.
     
   Learnt Sed
     This old unix program is highly significant to me, not just because of what
     it is able to do, but because, in a sense it encapsulates important concepts.
     For example, the concept of the 'hold space' and the 'pattern space' and the 
     actions which allow these two spaces to be manipulated (by swapping, deleting
     appending etc), to me, is highly resonant of the way the CPU itself operates.
     To be specific, the CPU contains registers which can be manipulated in certain
     predefined ways, and the manipulations take place on a 'stream' of data. These
     registers are identical in conception to the 'pattern space' and the 'hold' space.
     
     
   Understood the idea of the Bash Shell as a prototyping mechanism.