Employment

  • Present 2014

    Senior Researcher

    Microsoft Research, Redmond, WA USA

  • Winter 2013

    Visiting Lecturer

    University of Washington, Information School

  • 2014 2006

    Researcher

    Microsoft Research, Redmond, WA USA

  • 1997 1997

    Intern

    Xerox PARC Computer Science Laboratory, Supervisor: Michael Spreitzer

  • 2001 1993

    UROP (Undergraduate Research Opportunities Program

    MIT Media Lab, Supervisor: Mitchel Resnick

Education

  • Ph.D. 2005

    Ph.D. in Computer Science

    University of California at Berkeley

    Advisor: Susan L. Graham

  • M.Eng.1997

    Master of Engineering in Electrical Engineering and Computer Science

    Massachusetts Institute of Technology

    Advisor: Mitchel Resnick

  • B.S.1996

    Bachelor of Science in Computer Science and Engineering

    Massachusetts Institute of Technology

    Advisor: Mitchel Resnick

Honors and Awards

  • 2005
    Demitri Angelakos Memorial Award
  • 1992
    National Merit Scholarship

Microsoft Researchers

Mary Czerwinski

Research Manager, VIBE

Microsoft Research, Redmond

Rob DeLine

Principal Researcher, VIBE

Microsoft Research, Redmond

Tom Zimmermann

Researcher, RiSE

Microsoft Research, Redmond

Chris Bird

Researcher, RiSE

Microsoft Research, Redmond

Gina Venolia

Senior Researcher, neXus

Microsoft Research, Redmond

Kael Rowan

Senior Research Software Design Engineer, VIBE

Microsoft Research, Redmond

Nachi Nagappan

Principal Researcher, RiSE

Microsoft Research, Redmond

Microsoft Interns

Nicolas Bettenburg

Queen's University, Post Doc

Summer 2012

Anja Guzzi

Delft University of Technology, PhD Student

Summer 2011

Alicia Grubb

University of Toronto, PhD Student

Summer 2010

Khoo Yit Phang

The Mathworks, Senior Software Engineer

Summer 2009

Libby Hemphill

Illinois Institute of Technology, Asst. Professor

Summer 2008

Reid Holmes

University of Waterloo, Asst. Professor

Fall 2007

Christopher Poile

University of Saskatchewan, Asst. Professor

Summer 2006

Lucas Layman

Fraunhofer Center for Experimental Software Engineering, Research Scientist

Summer 2006

Looking for Interns!

If you are a graduate student or US high school student interested in doing an internship at Microsoft Research with me, please send me some mail.

Send me your name, school (you must be enrolled at an accredited university or US-based high school), advisor, research interests, Ph.D. topic (if you've already decided on it), curriculum vita, and some ideas of what you'd like to investigate while you're here at Microsoft Research.

Click here to read more (generic) information on Microsoft Research Internships.

Visiting Researchers

Yvonne Dittrich

IT University of Copenhagen, Professor

Spring 2014

Thomas Fritz

University of Zurich

2013

Jonathan Sillito

Amazon, Software Development Manager

Summer 2013

Beth Simon

University of California at San Diego

Spring 2007

Research Projects

  • image

    Codebook

    Microsoft Research

    Social Media for Software Engineers

    We use social networking to connect people and artifacts in software development-related repositories.

  • image

    Deep Intellisense

    Microsoft Research

    Dig up the Dirt on your Code

    Deep Intellisense is a Visual Studio 2008 plugin that surfaces information from various silos (source control, bug tracking, mailing lists, etc.) to provide developers with instant context-sensitive feedback on any source code they are reading in the editor. Deep Intellisense works with Visual Studio Team Foundation System projects (such as those hosted on CodePlex), email archives (from Outlook) and Sharepoint sites.

  • image

    Agile Methods

    Microsoft Research

    Studies of Agile Development at Microsoft

  • image

    Onboarding New Software Engineers

    Microsoft Research

    Studies of Collocated and Remote Onboarding

  • image

    Software Team Coordination

    Microsoft Research

    Studies of Inter-team Coordination

  • image

    Programming by Voice

    University of California at Berkeley

    SPEED: SPEech EDitor: Code Dictation, Editing by Voice, Commenting by Voice

    Programmers who suffer from repetitive stress injuries find it difficult to program by typing. Speech interfaces can reduce the amount of typing, but existing programming-by-voice techniques make it awkward for programmers to enter and edit program text. We used a human-centric approach to address these problems. We first studied how programmers verbalize code, and found that spoken programs contain lexical, syntactic and semantic ambiguities that do not appear in written programs. Using the results from this study, we designed Spoken Java, a semantically identical variant of Java that is easier to speak. Inspired by a study of how voice recognition users navigate through documents, we developed a novel program navigation technique that can quickly take a software developer to a desired program position.

    Spoken Java is analyzed by extending a conventional Java programming language analysis engine written in our Harmonia program analysis framework. Our new XGLR parsing framework extends GLR parsing to process the input stream ambiguities that arise from spoken programs (and from embedded languages). XGLR parses Spoken Java utterances into their many possible interpretations. To semantically analyze these interpretations and discover which ones are legal, we implemented and extended the Inheritance Graph, a semantic analysis formalism which supports constant-time access to type and use-definition information for all names defined in a program. The legal interpretations are the ones most likely to be correct, and can be presented to the programmer for confirmation.

    We built an Eclipse IDE plugin called SPEED (for SPEech EDitor) to support the combination of Spoken Java, an associated command language, and a structure-based editing model called Shorthand. Our evaluation of this software with expert Java developers showed that most developers had little trouble learning to use the system, but found it slower than typing.

    Although programming-by-voice is still in its infancy, it has already proved to be a viable alternative to typing for those who rely on voice recognition to use a computer. In addition, by providing an alternative means of programming a computer, we can learn more about how programmers communicate about code.

  • image

    Harmonia

    University of California at Berkeley

    A Framework for Language-Aware Programming Tools

    Harmonia is an open, extensible framework for constructing interactive, language-aware programming tools. Harmonia is a descendent of our earlier projects, Pan and Ensemble and utilizes many analysis technologies developed for those projects. Harmonia includes an incremental GLR parser (which admits a more natural syntax specification than LR), a static semantic analysis engine, and other language-based facilities. Program source code is represented by annotated abstract syntax trees augmented with non-linguistic material such as whitespace and comments. The analysis engine can support any textual language that has formal syntactic and semantic specifications. The incremental nature of the analysis supports a history mechanism that is used both for history-based diagnostic information and for contextual rollback. New languages can be easily added to Harmonia by giving the system a syntactic and semantic description, which is compiled into a dynamically loadable extension for that language. Among the languages for which descriptions exist are Java, Cool (a teaching language), XML, Scheme, Cobol, C, and C++. Other languages are being added to Harmonia as resources permit.

    The language technology implemented in the Harmonia framework is being used in two current research projects: support for high-level interactive transformations and programming by voice. Our research in interactive program transformations focuses on the problem of programmers' expression and interaction with a programming tool. We are combining the results from psychology of programming, user-interface design, software visualization, program analysis, and program transformation to create a novel programming environment that enables the programmer to express source code manipulations in a high-level conceptual manner. Programming by voice research augments traditional text editing by allowing the developer dictate chunks of program source code as well as verbalize high-level editing operations. This research helps to lower frustrating barriers for software developers that suffer from repetitive strain injuries and other related disabilities that make typing difficult or impossible.

    Harmonia can be used to augment text editors to robustly support the language-aware editing and navigation of documents, including those that are malformed, incomplete, or inconsistent (i.e. the document can remain in that state indefinitely). We have integrated Harmonia into XEmacs by creating a new Emacs "mode" that provides interactive, on-line services to the end user in the program composition, editing and navigation process.

  • image

    StarLogo, StarLogo TNG

    Massachusetts Institute of Technology

    Parallel Programming for Kids!

    StarLogo is a programmable modeling environment for exploring the workings of decentralized systems -- systems that are organized without an organizer, coordinated without a coordinator. With StarLogo, you can model (and gain insights into) many real-life phenomena, such as bird flocks, traffic jams, ant colonies, and market economies.

    In decentralized systems, orderly patterns can arise without centralized control. Increasingly, researchers are choosing decentralized models for the organizations and technologies that they construct in the world, and for the theories that they construct about the world. But many people continue to resist these ideas, assuming centralized control where none exists -- for example, assuming (incorrectly) that bird flocks have leaders. StarLogo is designed to help students (as well as researchers) develop new ways of thinking about and understanding decentralized systems.

    StarLogo is a specialized version of the Logo programming language. With traditional versions of Logo, you can create drawings and animations by giving commands to graphic "turtles" on the computer screen. StarLogo extends this idea by allowing you to control thousands of graphic turtles in parallel. In addition, StarLogo makes the turtles' world computationally active: you can write programs for thousands of "patches" that make up the turtles' environment. Turtles and patches can interact with one another -- for example, you can program the turtles to "sniff" around the world, and change their behaviors based on what they sense in the patches below. StarLogo is particularly well-suited for Artificial Life projects.

    StarLogo TNG is The Next Generation of StarLogo modeling and simulation software. While this version holds true to the premise of StarLogo as a tool to create and understand simulations of complex systems, it also brings with it several advances - 3D graphics and sound, a blocks-based programming interface, and keyboard input - that make it a great tool for programming educational video games.

    Through TNG we hope to:

    1. Lower the barrier to entry for programming with a graphical interface where language elements are represented by colored blocks that fit together like puzzle pieces.
    2. Entice more young people into programming through tools that facilitate making games.
    3. Use 3D graphics to make more compelling and rich games and simulation models.

Filter by type:

Sort by year:

Teaching History

  • Winter 2013

    INFO 461: Cooperative Software Development

    University of Washington, Information School

    Course Instructor

  • Spring 2001

    CS301: Teaching Techniques for Computer Science

    University of California at Berkeley

    Co-taught with Daniel D. Garcia

  • Spring 2000

    CS164: Introduction to Compilers

    University of California at Berkeley

    Graduate Student Instructor. Course taught by Alexander Aiken and George Necula

  • Fall 1997

    CS61a: Structure and Interpretation of Computer Programs

    University of California at Berkeley

    Graduate Student Instructor. Course taught by Brian Harvey

In My Office

You can find me at my office in Building 99 on the Microsoft Campus in Redmond, Washington.

I am usually in my office every day from 11:00am until 6:00 pm, but please email me to make an appointment.