= 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.