During my PhD I developed a new programming language named Nitro. The purpose of Nitro was to bridge the gap between applications programming languages and the system programming languages that are used to provide the runtime services, such as automatic memory management, for these application languages. To do this Nitro allows the user to not only specify types but how those types are represented in memory. Because such memory representations are formally specified the type-checker can then ensure that they are used correctly. As part of my PhD I developed the language, specified in formally in structural operational semantics, proved some useful properties that the language has, developed a stable compiler for the Nitro language, and used it to write some software such as a text editor which used the NCurses library directly without any need to marshal the native NCurses data types into a Nitro data type.
less ...I was involved in the PEPA research group. PEPA is a language for expressing mathematical models of systems, which is used to investigate properties of many different kinds of systems from server-client systems, distributed systems, epidemiology processes, and the modelling of crowds. Bio-PEPA is a varient of PEPA particularly suitable for systems biology modelling. Users typically create a model of the system under investigation and then ask performance related queries such as: What is the average number of waiting customers? or What is the probability that a request has been served within a given time constraint?
My work was mostly involved in the development of solution techniques and the development of software to realise those solution techniques. In addition I worked on the difficult problem of designing a sound and useful language for the user to specify their query. I also worked on extensions to the modelling languages themselves and techniques to analyse models for modelling errors, in a similar way that static code analysis analyses software code for possible programming errors.
less ...I have taken over the development and/or joined the development team on several projects in a variety of programming languages, for example:
I have lectured 4th undergraduate and Masters courses, Distributed Systems and Software Architecture, Process, and Management. Both courses had over 120 students however I engaged well with the students enough to win a Teaching Award for the feedback I gave to students. I have also taught two 3rd year undergraduate courses the Computer Science Large Practical and the Software Engineering Large Practical. Both are core courses for 3rd year students and involve lectures as well as the setting and grading of a substantial individual practical. In addition, I have tutored 1st year students learning to program in Haskell and Java. I have also supervised several students through their Masters or 4th year undergraduate projects, guiding many to first class awards.
After my teaching award I was appointed as the feedback officer for the school of Informatics with the remit of improving the school's scores for feedback on student surveys, a remit that was achieved every year for which I was the school's feedback officer.
I was also tasked with the role of personal tutor for approximately 20 students each year. This role, is mostly a pastoral role guiding students through their studies but does involve exercising judgement in suggesting study directions/courses for students.
Alongside this I continued research as part of the PEPA group and in particular made contributions towards the QUANTICOL project including data collection, analysis and modelling of the City of Edinburgh's bus services. Developing almost exclusively in Python.
less ...Continued my role as a post-doctoral researcher but was now jointly affiliated with the School of Informatics and the Centre for Systems Biology at Edinburgh (which is now a part of SynthSys). This has lead me both to focus more energy on biologically themed models (and their associated solution techniques) as well as become part of a development team for the SBSI software. I was once again developing in Haskell, Python, and Java, but also maintaining legacy C code.
less ...I became a member of the PEPA modelling research group. PEPA is a language for modelling complex systems and reasoning about their performance (or timing) properties. My research involved developing new solution techniques and new methods to specify the model and importantly the queries of those models. As a part of this I wrote sofware to support these modelling innovations as well as collaborate with others to incorporate their new insights into my software. Developing mostly in Haskell, Java and Python.
less ...