In this article, we shine the spotlight on Anthony Simons, an academic software engineer, and senior lecturer in Computer Science at the University of Sheffield.
What is your role?
I am an academic software engineer and senior lecturer in Computer Science and teach courses in Software Engineering and Cloud Computing at the University of Sheffield. I lead research in Model-Based Testing and Model-Driven Engineering, looking into systematic ways of conducting software testing, recently with applications to Cloud Computing. I am also the Director of Undergraduate Admissions in Computer Science. I was former head of the Testing Research Group in the Department of Computer Science.
Which role do you enjoy the most?
At different times I like different aspects of my roles. I enjoy the research side, especially if I have got something new to offer that is solving a real problem in industry. The admissions role is demanding, but it has been satisfying to see year-on-year growth in the undergraduate population of the department. Likewise, when teaching, I enjoy the interaction with students.
What is your background?
I graduated from the University of Cambridge as a technical linguist. I began my degree on the strength of languages but gravitated towards linguistics and phonetics. The phonetic analysis of unknown languages was a big interest of mine. However, I was unable to pursue this due to lack of funding. Eventually, I joined the University of Sheffield as one of the founder members of the Speech and Hearing Research Group, based in the Department of Computer Science. The group then consisted of an Artificial Intelligence (AI) expert and two junior researchers, a signal processing expert and myself, a linguistic expert. We worked together to build early speech recognisers in the late 80s. I was already a hobby programmer, so adapted quickly to Computer Science.
We built our speech systems using the brand-new object-oriented programming paradigm. This was revolutionising the way software systems were developed. In old-style software development, each system was built from scratch, as a single program. This was rather like having a made-to-measure suit from a tailor: it would fit perfectly, but took a long time and was very expensive. New-style software development was based around reusable components, known as objects. This was rather like buying mix-and-match separates from Marks and Spencer: a quicker and cheaper way of outfitting yourself!
Object-oriented programming languages brought the new notion of defining components in relation to each other, a property known as inheritance. The idea was that, if you wanted a new component, you didn’t have to design it from scratch, instead you could say that it was a subtype of something else and just add any extra features. At the time, there was a big debate over whether derived subtype components could be substituted where the original type had been expected. This was the much-vaunted plug-in compatibility offered by object-oriented programming, which seemed a highly desirable idea, but no-one knew whether it was safe, or formally correct!
I found this an interesting software engineering challenge. My PhD dissertation focused on the theoretical side of these languages. In the early 90s I was one of about 5 people in the world who helped establish the formal foundations for object-oriented programming languages, using higher-order lambda calculus as the mathematical basis for proving the correctness of such notions as inheritance, polymorphism and generic typing. Since I was Sheffield’s first expert in this technology, they appointed me as a lecturer which led to me teaching a number of object oriented programming languages. In the beginning I was teaching Smalltalk and Eiffel, followed by C++ and Objective C, then much later came Java and that’s when everyone else started to catch up.
Companies would approach me for advice on what design methods were best for targeting the new object-oriented family of languages. This made me assess critically various claims made by industry gurus about proprietary methods, many of which were pretty poor. I started a new line of research in software engineering, looking into which development techniques were fruitful and which ones were not. I put my findings into a software design method of my own, which was taught at the university for a couple of decades. Towards the end of the 90s I was given the choice of heading down the telematics systems route or verification and testing. My first research grant was in verification and testing, so I gravitated towards that and have been involved in the software testing and model-based area since then. I have developed automatic testing tools for Java (JWalk) and also for testing software services in the cloud (Broker@Cloud). These infer models and use models as the basis for generating tests.
Are you working on any projects?
I am part of the Future Engineering System (FES) project which is in model-based systems engineering, using software models to drive the manufacturing processes. My contribution has mostly been in analysing aerospace requirements in English, detecting inconsistencies and omissions, and generating requirements models. This relates to my work in the model driven engineering area, attempting to discover how, in the future, we won’t need to write programs at all but rather assemble software systems from high level model abstractions and press a button to generate the code. In the same way that no one writes assembly code anymore, this may lead to the end of programming as we know it. At the moment, we don’t have the right understanding or sophistication to blend together the different abstract views of a software system to generate all that is required.
I have PhD students working in multi-agent simulation; and in service monitoring and adaptation in the cloud. I also have a PhD student working on the automatic diagnosis of stuttering in children. We have an automated system coming out which will determine how severe a child’s stutter is. This is all the more challenging due to the little data accumulated for children’s speech, with even less for stuttering children’s speech. This project highlights how to make best use of the available training data, when following an approach which depends on sufficient training data for machine learning.
Are there any trends or predictions in your area of expertise?
Cloud computing is massive and the take up is predicted to be huge. Businesses no longer need to maintain their own data centres, instead choosing to rent space in the cloud. This has made security of business data in the cloud a big issue. In software engineering, people are gradually moving towards higher level programming languages which they can translate into other programming languages. This can be time effective, cutting training periods for new engineers down to two weeks. People are also increasingly trying to push towards abstract modelling in different business domains. I am hoping, eventually, we will have the right understanding of software and system models to simply click and drag things together in a way that makes perfect sense to the end user.
What advice would you give to people wanted to get into the industry?
I recruit for the Computer Science, Software Engineering and Artificial Intelligence degree programs. You need good mathematics if you want to train in any of these disciplines. But you will also need good people-facing skills to be useful in industry.
If you were stranded on a desert island, and you were granted three items, what would they be?
I would take a copy of the Bible; being a Christian I believe that it tells you how to find the way back to God through Jesus Christ, how to live life well and be ready to meet God at the end. The second thing would be a good read; if you will allow me all three volumes of the Lord of the Rings, I would read them over and over again. For my third item, I would take one of my guitars to play music, as I am a pretty serious amateur musician in my spare time.