Software development in engineering, commercial, educational and research contexts has been an indispensable part of my career. Whilst I have used other paradigms, I prefer object-oriented analysis, design and programming. My main languages are Java, C & C++, Ruby and most recently Python, although I also have some experience in Coral 66, Eiffel and Lisp.
C & C++
In 1986-8, at Plessey (later GPT), I spent eighteen months initially developing engineering management software (in C on CP/M), and then as part of a team of three developing a test harness (in C on Unix) used company-wide for system proving of the System X public telephony system. In 1989-90, for the research project on my MSc in Telecommunication & Information Systems at the University of Essex, I spent six months developing software (in C++ on Windows) to model telephony networks, with the goal of fault-tolerant routing. This included object-oriented design and implementation of both event-based simulation and detailed mathematical modelling. My PhD at Essex (1996-2001), Evolutionary Algorithms for Optical Network Design: A Genetic-algorithm/Heuristic Hybrid Approach, required the development of software for the detailed modelling, design and optimisation of all-optical multi-wavelength transport networks. This was implemented in C++ (and tcl/tk) on SunOS, and the core framework was used in several European Commission and industrially funded research projects by two research officers and myself, as well as in my own PhD work. At Essex (1991-2001), most of my research software development, including both network modelling and computational intelligence, was in C++, both stand-alone code and in combination with appropriate research software frameworks. I have taught extensively in C & C++, from first programming courses up to MSc level, both through lectures and hands-on in labs, as well as mentoring, and debugging the code of, several PhD students and research officers.
As well as lecturing on Java (both the language and network programming) and teaching Java in labs at MSc level at Essex, since 2001, I have increasingly adopted Java for software development for my own research. From 2010-15, I undertook part-time research into genetic programming for evolving vision systems as a Visiting Fellow at the University of Essex. This largely consisted of extracting the essential algorithms from a large body of, at times, poorly structured code in Java written by a recently graduated PhD student, so it could both be reused in another PhD project and also re-implementing by an academic colleague in Python. In 2017-18, I spent an eighteen-month period training the academics at NPIC Computer Science in research supervision, metaheuristics and the ECJ (Evolutionary Computation in Java) research framework. I reimplemented for ECJ my earlier published research work in network topology design (using genetic algorithms) and data mining (using genetic programming), as well as developing a novel, but simplified mobile network base station planning case study (using genetic algorithms).
I was initially drawn to Ruby as a pure object-oriented language (in contrast to the multi-paradigm approach of C++, or the C/C++ influence that still persisted in Java). As well as teaching a first-programming course at NPIC (2007-8) and again choosing Ruby to mentor a new software developer in 2015-16, I used Ruby on Rails to develop a Khmer-language student-course-teacher management suite for a Cambodian educational NGO in 2006-8.
Since returning to the UK in late 2018, I have resumed my interest in Python. I have passed the Cisco Academy PCAP: Programming Essentials in Python Course, as well as the Python Institute PCEP (Certified Entry-Level Python Programmer) and PCAP (Certified Associate in Python Programming) exams. I look forward to opportunities to put my newly certified skills in Python to use!
Coral 66, Eiffel, Lisp ...
Coral 66: In 1982-3 at Plessey (later GPT), I spent six months developing engineering planning software (budget, actual spend, financial analysis and management summaries) in Coral 66 on a George III mainframe. My software was used company-wide for over five years to plan many tens of millions of pounds of engineering projects.
Eiffel: I was an early adopter of the Eiffel language, including its mixed compilation and interpretation development environment. I was attracted by its pure object oriented approach, but in the end its enduring influence on my software development has been programming by contract, which I’ve used in the design and testing of much of my code in other languages.
Lisp: As part of my research into genetic programming (GP), I have had to grapple with the Lisp programming language, including Koza's original Lisp implementation, using Lisp to simplify GP trees, and also writing function and terminal sets in Lisp. I have also taught a subset of Lisp both for evolutionary algorithm courses, and in mentoring and supervision of GP research. However the bulk of my software development for GP has remained in C++ or Java.