Alan A. Donovan

Summary: Ph.D. candidate in Computer Science and longtime programmer with 8 years professional experience on diverse systems engineering and research projects. My main interests are in programming languages, compilers, and program analysis tools.

Personal Details

Work Address

MIT Computer Science & AI Lab, Rm 32-G728
32 Vassar Street
Cambridge, MA 02139
Tel: (617) 253-7710
E-mail: adonovan@csail.mit.edu

Citizenship

United Kingdom.
U.S. F-1 (student) visa holder.

Education

Aug 2001 -- present, Massachusetts Institute of Technology

Ph.D. candidate, Computer Science. (see below)
S.M., Sep 2004.
(Thesis: Converting Java Programs to Use Generic Libraries)

1996 -- 2001, work in industry

1993 -- 1996, University of Cambridge (Pembroke College)

B.A. (Hons), First Class, Computer Science Tripos
1996 Pembroke College Foundation Scholarship
1996 Pembroke College Foundress Prize

Professional Experience

Aug 2001 -- present
Massachusetts Institute of Technology -- PhD candidate

I joined the Program Analysis Group (in the Laboratory of Computer Science) in the fall of 2001, to pursue research into algorithms, techniques and tools with the aim of aiding programmers in the tasks of software design, maintenance, understanding, documentation, and debugging.

Fall 2001: Designed and implemented an extension to the Daikon dynamic invariant detector, to permit the detection of context-sensitive invariants, i.e. those in which the identity of the caller of a function affects the invariants observed over calls to that function.

Spring 2002: Designed and implemented a new Daikon front-end (using the JVM Debug Interface) that operates on ordinary uninstrumented class files, and executes the entire Daikon process in a single, pipelined step.

Summer 2002: IBM T.J.Watson Research Center, Hawthorne NY: Worked with Dr. David Bacon on Kava, a compatible variant of Java that aims to solve many of the shortcomings identified by the Java Grande Numerics Working Group, by introducing enumerated types, immutable types, and overloaded operators to the language, and by removing the distinction between primitive and reference types.

Summer 2003: IBM T.J.Watson Research Center, Hawthorne NY: Worked with Dr. Stephen Fink on high-level optimisation of serialisation- intensive Java programs. Implemented a static analysis (based on Andersen's pointer analysis) capable of determining "transience" properties at a fine grain, enabling conditional transmission of heap subgraphs during serialisation.

Fall 2003 -- ...: I have designed and implemented a tool for automatic translation of Java code to generic Java 1.5 code, inferring instantiations of generic types. A paper on this work will appear at OOPSLA'04.

Sep 2004: Awarded S.M.

Aug 2000 -- Aug 2001
ARM Ltd., Cambridge, UK -- Development of and research into compilers and toolchain

Initially I was working in the Core Tools group, on maintenance of the ARM toolchain (compiler, linker, assembler, etc); on research into configurable-toolchain technologies to permit easy addition of customer-specified architecture variations; and on the design and implementation of a tool to provide the illusion of portable object-oriented interfaces to dynamic shared objects on platforms lacking a C++ ABI (by generation of C++ client and server classes and C thunk functions from a C++-like interface definition language).

In November 2000, I moved into the newly-formed Research group, investigating C compiler-construction toolkits and configurable-toolchain technologies, with a view to using them for rapid turnaround of test compilers for evaluation of experimental new architecture variations. I spent six months using ACE's CoSy compiler framework to create an optimising C compiler for the ARM architecture.

(From the outset ARM were aware of my intentions to study for a PhD, and for a time were interested in a sponsorship arrangement)

Aug 1999 -- Aug 2000
Imerge Ltd., Cambridge, UK -- Development of domestic and commercial media servers

Work included: maintenance of video servers; design and implementation of drivers, test-tools and some programmable logic for a multi-channel PCI audio device (this work took place on-site at Linn Products in Glasgow); creation of a Linux distribution resilient to power-failure (by elimination of race conditions and analysis of `restartability', i.e. ensuring that program logic modified the system state in such a way that no matter which instruction is pre-empted by power failure, the filesystem was restored to a stable state upon reboot); interfacing and integration of various consumer electronic devices, primarily through reverse-engineering of control protocols; field maintenance of video server installations, e.g. at Millenium Dome; design and implementation of TCP client/server programs for in-field software and media update of deployed high-availability systems. Extensive test-design. (All projects on Linux)

Dec 1997 -- Aug 1999
Adherent Systems Ltd., Cambridge, UK -- Design, development, maintenance and testing of digital TV test systems

I worked on a product line of test-and-measurement tools for the DVB and ATSC (derivatives of MPEG-2 TSs) digital television standards, mostly based on high-performance x86-based workstations running Windows NT, with additional custom hardware.

My first project was to design and implement an NT device driver to interface to a custom ISA-bus satellite receiver card for MPEG-2 transport streams, and an integration library for usermode programs.

Throughout this post, I was involved in maintenance and extension of both the embedded 68K code and NT device driver for a custom PCI-bus card to preprocess MPEG streams, through which I gained an understanding of DMA, programmable logic and PCI.

The second project, which spanned more than a year, was to design and implement a large distributed, graphical, monitoring and recording system using the above hardware, to allow real-time quality analysis and debugging of high-bandwidth MPEG streams. Output included multiplex composition, MPEG table information, and accurate timing measurements. The system was RPC based: the Transport Stream Processor was a DCOM server, and clients, which could be run either locally or remotely, would be able to control recordings and measurement parameters and display results in real-time in a sophisticated MFC GUI. Much effort was spent in profiling and optimisation to achieve the highest possible performance.

Interim projects included: design and initial prototyping of an interpreted declarative language for decoding and encoding custom MPEG bitstream syntaces, using Lex and Yacc; design of a simple private-key cryptographic licensing system for the hardware; and planning of company source control policies.

My final project involved the design and implementation of a remultiplexing editor for Japanese-standard MPEG streams. This consisted of a sophisticated graphical MFC UI, and a highly optimised off-line back-end. This 10KLOC project was delivered months ahead of schedule, and I was pleased to learn in mid-2001 that not only had it generated revenues of over $1m, but there had been no bugs reported against it.

In all projects I was involved in documentation, both for the User Guides and for the internal design reports; and in testing, through the construction of test harnesses and manual test plans.

Jul 1996 -- Nov 1997
FORE Systems Inc., Cambridge, UK -- Development of audio & video codecs for ATM networks.

I worked on a product line of custom-hardware audio & video codecs, which would plug into a TV, camera, mic and hi-fi, and had an ATM network interface. On the workstation side, `manager' programs would do ATM signalling for, and export RPCs interfaces to, the codecs. RPC client programs would allow diverse means of controlling communication between the codecs.

On the embedded side, I was involved in the addition of serial data transfer capabilities, and extending the TV GUI. On the workstation, I was involved in development and maintenance of RPC client programs, including a complete `video telephone' signalling system: this would enable each site to act analogously to a telephone, with metaphors for dial, accept, hang-up, caller ID, etc. Also, maintenance of configuration tools written for a modified Tcl/Tk interpreter (with language support for object-RPC) on the workstation.

I was involved in a considerable amout of testing, and of developer support (production of test programs, internal documentation, user guides). Also production of website maintenance tools, and document format conversion tools.

All projects were written portably for various UNIX & NT.

Jun 1995 -- Sep 1995
Dragon Systems Ltd., Cheltenham, UK -- A summer internship, helping with a speech recognition system.

Work included: hand optimisation in assembler of a speech engine for TI 'C30-family parallel DSPs on a standard embedded platform for telephony applications. Implementation of several speech optimisation techniques, such as Beam Search and linlop. Design and implementation of a regular expression parser for simple speech grammars. Construction and maintenance of a suite of off-line speech analysis, processing and visualisation tools for use in shell-pipelines.


Technical skills

  • I have been programming for over twenty years, and professionally since 1996.
  • Thorough knowledge of: Java, C, C++, Scheme, Perl, Bourne shell and ARM assembly. Experience in many others, including Haskell, Lisp, Modula-3, ML, Tcl/Tk.
  • Project experience ranges from gate-level logic and embedded microprocessors, WinNT and Linux device drivers, up to user-mode apps, distributed applications, and GUIs.
  • Specialist in compilers, interpreters, and program analysis tools.

Miscellaneous

  • Full clean UK driving licence.
  • Reasonable fluency in French.
  • Member of the ACM's Special Interest Group on Programming Languages (SIGPLAN)
  • Interests include: recreational programming (in my `copious free time'), cinema, cycling, swimming, teaching C/C++, reading (history, politics, science), travel, listening to music, cooking (and eating).


adonovan@csail.mit.edu
Last updated: 15 September 2004