Curriculum Vitae

Vitae in PDF

Research Interests | Education | Honors and Awards | Research Experience | Teaching Experience | Professional Experience | Publications | Services | Invited Talks | Professional Membership | Software | References | Personal Data

Research Interests

Application of programming language techniques to support software engineering. Specifically, designing language abstraction mechanisms to support modular program construction; using advanced type systems to guarantee program correctness properties at compile-time; applying program generation techniques to aid in domain-specific language implementation and automated software engineering.


  • Ph.D. in Computer Science, expected (August 2003 — July 2009)
    Georgia Institute of Technology, College of Computing, Atlanta, GA
    Advisor: Yannis Smaragdakis
    Design and develop language abstraction mechanisms that support better modularity and code reuse; Apply advanced type system techniques to statically guarantee the various safety properties of programs; Develop program generation tools to aid in automated software engineering.
  • B.S. in Electrical Engineering and Computer Science (September 1996 — June 2000)
    Massachusetts Institute of Technology, Cambridge, MA

Honors and Awards

  • Fellowships & Scholarships
    • National Science Foundation (NSF) Graduate Research Fellowship, 2005 — 2010.
    • Intel Ph.D. Fellowship, 2005.
    • Presidential Fellowship, Georgia Institute of Technology, 2003 — 2008.
    • College of Computing Dean’s Supplement Award, Georgia Institute of Technology, 2003 — 2008.
  • Paper Awards
    • Best Paper Award [8], Generative Programming and Component Engineering Conference (GPCE 2004).

Research Experience

  • Summer Research Intern (June 2007 — August 2007)
    IBM T.J. Watson Research Center, Hawthorne, NY
    Mentors: David Bacon, Rodric Rabbah
    Summer research intern on the Liquid Metal project. Liquid Metal aims to have one unified language, Lime, whose programs can be compiled against and run on a heterogeneous architecture—an architecture where CPUs, FPGAs, cell processors, etc., co-exist. I designed and developed Lime, an extension of Java that provides the high-level abstractions that software engineers are familiar with, yet at the same time, amenable to bit-level analysis and exposes parallelism—crucial properties for efficient synthesis to hardware. Work resulted in publication [3].
  • Summer Research Intern (June 2005 — August 2005)
    Sandia National Laboratory, Albuquerque, NM
    Mentor: Zhaofang Wen
    Designed and implemented an extension of C++ supporting SIMD-style parallel programming. Conducted experiments to evaluate the performance benefits of the language on problems with large numbers of fine-grain random accesses. Resulted in publication [13].
  • Undergraduate Research Assistant (September 1999 — February 2000)
    Massachusetts Institute of Technology, Media Laboratory, Cambridge, MA
    Integrated a speech synthesis system with an digital interactive agent.
  • Undergraduate Research Assistant (September 1998 — February 1999)
    Massachusetts Institute of Technology, Media Laboratory, Cambridge, MA
    Implemented algorithms for image analysis for an image search engine.

Teaching Experience

  • CIS 410/510 Object Oriented Languages and Systems (2008)
      with Professor Yannis Smaragdakis
      Delivered lectures on the survey of type systems.

Professional Experience

  • Principal Software Engineer (May 2001 – May 2003 )
    Fidelity Investments, Boston, MA
    Project lead on the design and development site, Fidelity's web application built specifically for PDA's.
  • Software Engineer (July 2000 – April 2003)
    ArsDigita, Inc., Cambridge, MA
  • Software Engineer Summer Intern (June 1999 – August 1999)
    GemStar, Inc., Bedford, MA



  • Program Committee

    • GPCE 2009 : 8th Conference on Generative Programming and Component Engineering.
    • PEPM 2008 : 2008 Workshop on Partial Evaluation and Program Manipulation
  • Conference Co-reviewing

    • PLDI 2009 : 2009 Conference on Programming Languages Design and Implementation.
    • CC 2009 : 12th International Conference on Compiler Construction.
    • GPCE 2008 : 7th Conference on Generative Programming and Component Engineering.
    • FSE 2008 : Sixteenth International Symposium on Foundations of Software Engineering
    • OOPSLA 2008 : 2008 International Conference on Object-Oriented Programming, Systems, Languages, and Applications
    • ISSTA 2008 : 2008 International Symposium on Software Testing and Analysis
    • PLDI 2008 : 2008 Conference on Programming Languages Design and Implementation
    • POPL 2008 : 35th Symposium on Principles of Programming Languages
    • OOPSLA 2007 : 22nd Conference on Object-Oriented Programming Systems and Applications
    • FSE 2006: 14th Symposium on Foundations of Software Engineering
    • GPCE 2005 : 4th Conference on Generative Programming and Component Engineering
  • Journal Reviewing

    • TOPLAS : Transactions on Programming Languages and Systems.
    • SCP : Science of Computer Programming, Special Issue on Generative Programming
  • On-Campus Committees

    • Organizer of Graduate Research Forum, University of Oregon, Fall 2007
    • Faculty Recruiting Committee Student Representative, College of Computing, Georgia Institute of Technology, 2006.
    • Ph.D. Recruiting Chair, College of Computing, Georgia Institute of Technology, 2003 — 2005.
    • Women@CC Membership Chair, College of Computing, Georgia Institute of Technology, 2003.

Invited Talks

  • “Disciplined Meta-Programming for Object-Oriented Languages”, January 2008, Delft University of Technology, Delft, The Netherlands.

Professional Membership

  • Association for Computing Machinery (SIGSOFT, SIGPLAN).
  • Institute of Electrical and Electronic Engineers.


  • MorphJ:

    MorphJ is an extension of Java that supports “morphing”. Morphing allows code to be declared by statically reflecting over and pattern-matching on the methods or fields of other types—including unknown type parameters. For instance, one can declare a MorphJ generic class SynchronizeMe<X> such that, for every method of X, SynchronizeMe<X> declares a method with the same signature, but inserts synchronization code in each method. MorphJ is the only language to reach this level of expressiveness while maintaining the guarantee of separate type-checking — a MorphJ generic class is type-checked independently of its uses to guarantee that it is well-typed for all possible instantiations.

  • cJ:

    cJ is an extension of Java that allows fields and methods of a class or interface to be provided only under some static subtyping conditions. cJ allows the statically type-safe expression of a program’s conditional features—a disciplined implementation #ifdef, where not only the consis- tency of the definition and use of features is statically checked, conditions are also much more expressive. cJ is shown to be useful in a concise and type-safe reimplementation of the Java Collections Framework, the standard data structures library for Java, as well as for applications in the Feature-Oriented Programming domain.

  • Meta-AspectJ:

    Meta-AspectJ is a language tool for generating AspectJ (and, by extension, Java). Meta-AspectJ can be used to implement Domain-Specific Languages using AspectJ as a bytecode transforma- tion backend, or to enhance AspectJ itself with more expressive pointcuts and introductions.


Please see the pdf version of my vitae for detailed contact information.

Personal Data

    Citizenship: United States of America