Andrew Colin Rice, BA, PhD. Director of Studies in Computer Science.
I am currently working away from the university as Principal Researcher at Github. My work there is on Copilot, a project delivering an AI-powered pair-programmer. I remain involved with Queens' College through a Bye-Fellowship. I have previously been away from college working as a Visiting Faculty member at Google in California. I worked on the Java compiler team developing new static analysis checks (among other things). These checks run when a developer submits their code to the repository and help to detect bugs before the tests are even run. My principal goal from working at Google was to work in a professional software engineering team. I wanted to understand more about what skills we should be teaching our undergraduates to prepare them for this environment. I not only got to do this but I also came back a much better programmer! I supervise a variety of courses. In the recent past I have covered: Prolog, Software Engineering, C and C++, Computer Networking, Databases, Concepts in Programming Languages, Foundations of Computer Science. My favourite thing about Computer Science at Queens' is that we are able to provide lots of extra-curricular computer science too. It's very important to me that I get to know my students and that everyone gets to know each other too. You would be surprised how much wisdom you can learn from the people in the year ahead of you.
I'm currently interested in the application of machine learning to programming. Traditionally in program analysis we try to reason about how a program will execute: for example we might try to show that a variable which is used in parallel by multiple threads is always protected by a lock. However, there is a lot more information in source code: choice of variable names, comments, even the design of the program. My interest is in how we can use machine learning to exploit this information. One example is the so-called VarMisuse task which aims to identify variables which have been used incorrectly. This can be done by using information about how variables with particular properties are used within a corpus of other programs. I also teach a module on the Advanced Computer Science MPhil on this topic. I also study the use of programming languages in the sciences. My work is looking at taking established ideas from programming language theory and applying them to computational models in science. In the Camfort project (https://camfort.github.io) we are working with long-lived code written in Fortran and trying to provide tools which can help improve the quality and maintainability of the code without interrupting established working practices. I help run a number of projects investigating the use of technology in education. The Isaac Physics (https://isaacphysics.org) and Isaac Computer Science (https://isaaccomputerscience.org) projects provide learning materials and resources for A-level students. We develop the software for these websites and use the data for various research projects such as adaptive learning and smart tutoring. I lead similar effects within the Automated Language Teaching and Assessment (ALTA) institute which aims to progress the state-of-the-art for learners of English as a foreign language. Previously I worked for some time on research around smart phones. One project from this was Device Analyzer, an Android app which collects information about what you can do with your phone. The idea was to build a dataset about how people actually use their phones so that academia and industry can validate research results or identify new directions. We took special care with privacy and consent and so now are in a position where we are able to share the data (more than 18,000 people have contributed). The Device Analyzer data was also used as part of the new Information Age gallery in the Science Museum.
In the Faculty of Computer Science and Technology I taught mostly courses on programming languages: 1A Programming in Java, 1B Further Java, 1B Prolog. Since most of my teaching involves learning a practical skill I've experimented over the years with shifting away from lectures and introduced teaching using practical classes and video lectures. It was for initiatives including this that in 2014 I was awarded the Pilkington Prize for excellence in teaching, an annual University-wide award.
I originally learned to program in BASIC by typing in programs from magazines and library books. I found it really rewarding how programming let me turn my ideas in to concrete reality. My interest in computer science arose from there. One of the things I found most exciting about studying computer science was our understanding of the principles of computing. The practical aspects of our field change almost daily as new technology comes along but despite this we are still able to rely on theoretical ideas from 50 years ago.