This page traces the development of my skills throughout my career.
See also The Courses I have attended, which deals with in-work courses.
My degree course in Maths and Computer Science covered some fundamental principles of programming, which I have later found to be lacking in other programmers I have worked with.
I gained a great deal of experience of working with electronics while working as an electronics service engineer in Yorkshire in the 70's. This included practical skills of fault finding at component level. I was also able to apply the fundamental electrical principles, which I learnt in A-level physics, to the subject of electronics and had a good understanding of the theoretical side of electronics.
I also took a spare-time interest in the recently available integrated circuits and I learnt about the theory of operational amplifiers and digital electronics including microprocessors and their supporting circuitry such as memory devices.
I did some programming in assembly language for the 6502 which I did on a small microprocessor system. Home computers with Basic were still not available at that time, so I was unable to practice my programming skills in high level languages.
My work at Marconi Defence Systems introduced me to computer control of electronic apparatus.
The fault finding involved here needed a lot of careful deduction. It involved taking into account the actions of the test program and the electronics hardware. Because the systems were complex and it was often impossible to get access to measure the signals needed to investigate faults. Most fault finding was done to trace the defective circuit board or instrument rather than at component level.
Because the systems I worked on were large, they often involved the need to refer to several different circuit diagrams simultaneously to see the ways the circuits interacted with each other. The work also introduced me to the systems used to keep control of different issues of drawings. (Configuration control).
It also introduced me to programming for interaction between a computer program and an operator. This includes issuing appropriate prompts and dealing with the operator's input appropriately. As the amount of text available on the screen was limited it made it necessary to be able to give clear concise instructions. I found that the existing software was often lacking in clarity to the operator, and made improvements to it.
By now I had a home computer typical of the era. First a Commodore Vic 20 and then a Dragon 32. I learnt to program in Basic, but the implementations were poor, using line numbers and necessitating much use of 'Goto' statements. I preferred programming in assembly language and did so at home using both 6502 on the Vic and the much more sophisticated 6809 on the Dragon.
At this time I found I was using computer keyboards a lot for editing software, and decided to learn to touch type. I did this using a computer based course at home and then continued to practice touch typing while programming at work. This meant that all subsequent keyboard usage continued to improve my ability. I have subsequently found that the ability to type has been a really big advantage, and allows me to concentrate properly on the content of my work.
When I moved to another department and started working with the Hewlett Packard 9836 I was at last able to do some proper programming more in the style of what I had done at university. This computer used an excellent version of Basic with good control structures, (For and While loops etc), and allowed labels in the code for branching, rather than line numbers more common in other implementations of Basic. It also allowed Sub Programs to be created and called. Program statements used a very well designed system of 'defaults' which allowed parameters to be omitted for the more common default case, but also allowed extra parameters to be specified when required. In fact this version of Basic was far better than anything else around at the time, and it was many years before anything came close on personal computers.
Another feature of this computer was that it had facilities in the language to write event-driven programming, and I made use of this in my work. Event driven programming is now an important aspect of Windows programming.
I also did some programming in Pascal on the HP 9836.
I first encountered GPIB, also called HPIB and IEE 488. The standard was invented by Hewlett Packard and the 9836 had instructions specially for its use in interfacing with electronic test equipment. I was also involved with other equipment which used GPIB and I learnt about the details of the GPIB protocol.
At Wayne Kerr I began working with PCs and the MSDOS operating system.
This work introduced me to in-circuit testing of individual electronic components using automatic test equipment in general. I learnt methods of testing components which had already been installed in a circuit, and how to test them without removal, and minimising or eliminating the effect of neighbouring components on the results. I also learnt various techniques applicable to the design of electronic circuits so as to facilitate such testing.
This work included techniques of applying fast patterns of digital data designed to exercise and test all logic components.
I now had an "IBM compatible" PC at home. I did some programming in Pascal at this time, both at work and at home using Borland's Turbo Pascal version 3. Although the user interface was very primitive, this was a very good implementation of Pascal and I was able to improve my skill in using the language.
At Highbury college I furthered my knowledge of PCs from both a hardware and software point of view. I had involvement with networks for the first time. Also I was continually in the vicinity of the teaching of Pascal which served as a reminder of the language. I got some experience of part time teaching and class supervision.
After leaving Highbury College I did a Business Enterprise course where I learnt about the legal issues involved in running a business, including taxation. Also accounting and marketing. This was very valuable knowledge.
I then did a period of Open Learning as preparation for my future business. I already had some familiarity with the C programming language from Wayne Kerr. It was used in the company by programmers I was working with. I also encountered it at Highbury college. I began to learn C in the open learning course at a computer centre.
When I started my business I bought Borland's Turbo C for about £100 and did a lot of C programming with particular application to the PC. This work included file handling and taking complete control of the computer's display screen to present information in fast efficient way.
My knowledge of C increased considerably at this time. I learnt the techniques of using multiple files in a project and building libraries for functions which would be common to many applications. I also did much work with the 8086 assembly language used on the PC, using MASM, and learnt how to incorporate the code into C programs.
Some of my first software projects were a program to perform file encryption and a financial analysis program. I became aware of the need to improve the presentation and user-interfacing and began to look more carefully at these aspects.
I developed a number of software libraries for my own use, much of which was related to user interfacing. This raised issues of configuration control. If a number of applications have been written which use a library, then when the library is updated, the existing applications will not be capable of being reconstructed unless earlier versions of the library are kept. This starts to become important when software has been distributed in some way. It would be unacceptable to release a product, but be unable to reconstruct it if necessary.
I observed that the most successful software products of the world are successful largely because of their ease of use. I became interested in the ergonomic aspects of a software product. This also includes the effective use of language in help and documentation.
I recognised that reliable functioning of software cannot be proved by testing, because testing simply cannot test all possible combinations of events which might occur. Reliability is best ascertained by taking care to write code which is self-evidently free of errors, and this is best achieved by clarity of the code. In modern computers there is no shortage of processing power (hence speed) and memory so a few extra lines of code will do no harm. I formed the view that it is better to compromise some efficiency in favour of clarity. In other words the code could be made fundamentally clear by taking actions which are evident and clear. It is also possible to build in extra error detection to deal with things which are 'impossible' or intended to be. It is better to have an odd error message occur in a program than for it to crash.
I devised methods of copy protection and incorporated them into my programs. This used encryption techniques.
Also at this time I wrote software for real-time processing of a continuous data stream which was then output again without significant delay. This was done for the processing of MIDI data between electronic musical instruments.
In my work for Goodmans Loudspeakers I learnt techniques of digital signal processing of audio signals.
I also acquired skill in marketing and advertising, and designed my own material.
At Alenia Marconi I encountered formal methodologies for the production of software.
Previously the software I had written had been entirely my own work, or in some cases was a re-work of something already written. Here the overall software project was large and consisted of the combined work of several programmers. I saw how the task was broken down into separate modules for implementation by different programmers, and participated in the overall project by writing modules which worked in conjunction with modules written by other programmers.
The method for achieving software reliability practiced here was a form of peer review. Computer code was inspected in detail by four people at once using a formal process due to Fagan. This method of using inspection of code rather than extensive testing confirmed my own earlier views.
The Fagan method also advocates process improvement when a need for such improvements can be identified.
This was the first time I had used a Vax computer. Also the first time I had developed software for a different target computer from the one the software was developed on. This meant using complicated methods of development and testing.
I also used Unix and Oracle databases here.
The work gave me a great insight into early computer technology. The software test room was more like a museum!
Here I later took courses on Object Oriented methodologies for analysis design and programming. Having already got some knowledge of C++ I could now see that C++ really makes sense when looked at as part of Object Oriented design, and in fact cannot be used to proper advantage if it is not part of such a design method.
At Amfax Ltd I got a lot of experience in developing applications for Windows 98 and NT. This included writing software to create and use DLLs and I got a proper understanding of the reasons for their use. I was encouraged to learn advanced topics of Windows programming including OLE, COM, and ActiveX.
I had my first experience of designing a large software project which combined my own code with input from other programmers. I made good use of the methods of software design which I had learnt by observation at Alenia Marconi.
I updated my knowledge of instrument control using GPIB to the current state of the art, learnt a lot about controlling a robot from the computer and learnt some useful material on computer vision, especially methods of processing graphical data in ways which the computer can interpret.
I encountered fibre optics for the first time, including many special instruments used for the purpose, and special techniques needed. I also learnt modern methods of analysing the quality of very high speed digital data transfers such as the use of a Bit Error Rate test and eye/mask diagrams.
At Fareham College I did a teaching course and obtained a City and Guilds certificate in Further and Adult Education and learnt valuable skills in giving professional presentations to adults and the use of various other teaching methods.
I was surprised at the large part the study of databases plays in the curriculum and recognised my database knowledge was inadequate and so have since updated it to the standard of A-level computing.
From around the mid 1990's I got connected to the Internet, using Windows 3.1 and AOL. There was web space provided by AOL and I began some early web site design using AolPress, also provided free by AOL. I also looked into graphics on a P.C. doing some basic things like cropping and re-sizing pictures.
I continued to develop skills in these things and also got a domain name british-isles.org.uk. On that site I included some material on english folk music. I then expanded this and obtained the domain name english-music.co.uk and put the material there. Eventually I let british-isles.org.uk expire and as far as I know is still available. Around this time I got a scanner and was then able to add my own photographs to the site. There were virtually no digital cameras available at that time.
Later in the 1990's I set up more web sites and was using Claris Home Page and Front Page Express. I also did quite a lot of web design by writing directly in HTML. I preferred this because the web design software would destroy ther formatting of the HTML text. I furthered my skills in processing and editing photographs. I did much of this after leaving Alenia Marconi. Sometime while working at Amfax I stopped using AOL for my internet connection and became more familiar with Microsoft Internet Explorer, and Outlook Express. I started using Namo version 3 for nearly all my web site design. I found this particularly good because it did not mess up my handwritten HTML as its rivals, and had a facility to edit the HTML directly alongside the normal editing.
At the time of writing, 2005, I am starting to experiment with CGI but the limitations in facilities offered by web space providers restricts what I can do.