Doing an MSc or final year project with Achim Jung
Note: In the summer of 2013 I will be on a sabbatical and not supervise any MSc projects. I will start with teaching duties in the Autumn Term 2013/14 and accept undergraduate students for their final year project.
Below I describe some general areas as well as some concrete project
ideas:
Teaching Computer Science in schools
The teaching of computing in schools is changing: The Government have declared that ICT will be phased out and proper Computer Science will be brought in. The problem that we are facing is that there are not many prepared materials available at the moment, and that teachers have difficulties re-training from ICT to CS. Projects in this area are about working out one particular topic of Computer Science at a level appropriate for school children. This can be geared towards small children or towards A-level students. Ideally, the project is combined with enrolment in the final year module "Teaching Computer Science in Schools" which will allow you to try out your project ideas in a real school.
Requirements: You need to be enthusiastic about teaching young people.
Visualisation
Some algorithms contain very clever ideas
which are hard to explain on the basis of program code alone. In these
cases a visualisation of how a data structure evolves over time can be
helpful. Sometimes the core of the algorithm comes from a completely
different area such as Geometry, Physics, or Combinatorics. With a
visualisation we can then try to illustrate the connection between the
program and the non-computing field.
If you are interested in this then I can easily come up with a
concrete Project idea for you and you can also suggest your own.
Requirements: Good programming skills are important but even
more so a feeling for pedagogical concerns. Aesthetics is as important
as technical correctness.
Generally, you should only attempt a project in these two areas if you
are as enthusiastic as I am about teaching and education in general.
(Perhaps it is worth pointing out that, from past experience, these
projects are not "soft options".)
Programming support tools
What I have in mind here are code
generators, analysers, or optimisers. You should be a very able
programmer if you think you can create a tool to support other
programmers.
Your idea
I am happy to consider supervising virtually any project
that you are enthusiastic about. The list of past projects below gives
you an idea of the range of topics that I have supervised in the past.
Regarding these, please note that in many cases I would be happy to
supervise a project with a similar specification again, because often
it was not possible to implement all aspects of the original idea in
the time available.
One important note: I will supervise a non-programming project only if you demonstrate mastery of practical programming through your workshop performance in Years 1 and 2. A minimum mark of 60% in the relevant exams is required.
If you are considering choosing me as your supervisor, then please
download the following form (undergraduate, MSc students), fill in the questions, and bring it along to
the meeting with me.
I should also warn you that I take my supervision duties very
seriously, and will require weekly (email) reports from all project
students. If you tend to leave things to the last minute then you will
probably not enjoy working with me.
Past projects
An animation of tree algorithms
An animation of Bezier curves
An application of the travelling salesman problem
An animation of TCP/IP
An animation of traffic flow under different road lay-outs
A teaching tool for cellular automata
A C++ tutoring tool
A spatial awareness tool
A teaching tool for functional dependencies
A lift simulation
A workbench for evaluating graph algorithms
An HTML teaching tool
Visualising Dijkstra's Algorithm
A file management system
A Java programming environment
A Motif interface generator
A Swing interface generator
An assembly code optimiser
A 3D graphics engine
A de-Tex facility
Protecting audio data against unauthorised copying
A Taxi base system
A WWW geographical information system
A sensitive city map
Electronic watermarking (no programming)
An electronic voting system
An academic computing environment
A Java crossword puzzle applet
An online stock trading tool
Denotational semantics with coherent spaces
Research interests
I do not generally expect students in their third year to be able to do original research in my area. Too much mathematical background is needed which the course does not provide. However, for a student in the joint Math/Computer Science programme, a research oriented project is feasible.
Semantic domains
These are mathematical structures which are used to describe the behaviour of programs. Since programs can be recursive or iterative, extra work has to be done to model faithfully the potential for non-termination. Ideas from order theory, topology, and category theory are used in the study of domains.
Denotational semantics
This is the process of translating from a programming language into a mathematical model. Many questions arise regarding the accuracy of the translation itself as well as the kind of knowledge one can gain about the language.
Lambda calculus
Lambda calculus is a very pure notation for functional programming. Abstracting away from details of input/output, program variables etc, one can study computational phenomena in a very clean setting. Surprisingly, the calculus is extremely expressive and hence often serves as a metalanguage for describing other programming languages.
Cryptography
Cryptography is the science of concealing messages or proving their authenticity. The subject has become respectable with the advent of public key cryptosystems. In their design a lot of number theory and algebra is being used. That makes Cryptography interesting from a mathematical perspective. From the computer science side there are fascinating problems in setting up secure protocols which use cryptographic techniques.
Databases
My main interest in databases concerns the treatment of partial information. This touches upon logic and, again, domain theory, but is a very practical issue in database design as well.
Last modified: 21 January 2013
Achim Jung
(A.Jung@cs.bham.ac.uk)