Doctoral study with me
I receive many requests from students wanting to work under my supervision. However, most of these requests are out of scope and hence wasted effort. I end up giving potential students the same advice again and again. In order to save time all round, I have decided to write that advice down, once and for all. So if you wish to study for a doctorate with me, please read this page; if I believe you haven't read this page, the most you will receive back from me is a pointer to this page.
DPhil study
First some general advice about DPhil study. (In Oxford, the doctoral degree is called a "DPhil" rather than a "PhD".) I see a doctorate as an apprenticeship in research, with the supervisor as a mentor. The doctorate is successful if the graduating student is equipped for a career as an independent researcher (whether or not the student chooses to follow that career).
Once conseqeuence of this perspective is that the supervisor spends a lot of time with the student, working closely together: it is not simply a matter of providing a student with laboratory space and letting them get on with it. The collaboration may start with topics of the supervisor's choosing, with the student learning from the supervisor; but ideally, as the student gains independence, the topics start to be of the student's choosing, and the supervisor learns new things from the student as well. A DPhil should be a voyage of joint discovery.
As a corollary, if you are applying to work with a certain supervisor, you are applying to take up some considerable fraction of their time, and you have to persuade the potential supervisor to make that investment. Obtaining funding for your position is important; but it is not the only criterion, or even the most important one. Do not expect to gain admission to a research group simply because you have received funding from your parents, or your employer, or your government.
Because you are applying to take up some of your supervisor's time, and (like all academics) their time is already more than fully accounted for, you are effectively asking them to stop doing one of the things they currently do in order to supervise you instead. Why should they do that? You need to be able to tell a compelling story as to why your proposal is more interesting than something else they are doing. And that means more interesting to them, not to you. Find out what their research vision is, by studying what they are currently working on, and think about ways in which you can help move that vision forwards, perhaps in a slightly different direction. But don't be surprised if they are unwilling to drop their own interests in favour of yours.
Research topics
So much for generalities; now for some specifics about studying with me. You should start by reading some of my papers; they are all freely available online on my webpage. However, just because I have worked on something in the past, it does not follow that I am interested in continuing to work on it in the future.
I am interested in supervising work in functional programming, mathematics of program construction, programming patterns, types in programming, generic programming, domain-specific languages, program correctness—all of which I have published on in the past. If you are to be sufficiently prepared to work in this area, you almost certainly need a strong background in functional programming and in programming language theory, for example through undergraduate or postgraduate courses in these areas. My work also draws on category theory and type theory; it is less likely that you will encounter this material in an undergraduate degree, but you should have sufficient mathematical background that you can pick it up.
I wrote a blog post some years ago listing some suitable background materials for the kind of work I do. This includes a few sets of lecture notes that I have written myself, but also lecture notes and inspiring papers written by others. If you want to work with me, you should study as many of these as you can. If you haven't already read a few of them, you might ask yourself whether you really have the right background. And if you can't understand them, then I'm probably not the right person to supervise you.
Master's degrees and internships
In the UK, to a first approximation, only doctoral study (the PhD) is seen as a "research degree"; lower degrees (in particular, the MSc) is a "taught degree". The advice above concerns doctoral study. If you are studying on the part-time professional MSc in Software Engineering, it is part of my job description to supervise students like you, and I would be delighted to discuss potential dissertation topics. If you are studying on the full-time MScs in CS or MFoCS, it is not part of my job to supervise you; but if you are passionate about a topic for which I am clearly the most appropriate supervisor in the department, I would still be happy to talk about it with you.
I get dozens of requests for internships, but I'm afraid that I have neither the time nor the resources to host these.