I've worked on a variety of research and industrial projects in the last few years.
Sofware Development Tool Discovery (Sponsor: National Security Agency)
Programmers interact with a variety of tools that help them do their jobs, from "undo" to FindBugs' security warnings to entire development environments. However, programmers typically know about only a small subset of tools that are available, even when many of those tools might be valuable to them. In this project, I investigate how and why software developers find out about -- and don't find out about -- useful programming tools. The goal of the project is to help developers find more relevant tools, more often.
Phishing Susceptibility Profiles (Sponsor: National Security Agency)with Chris Mayhorn
Phishing has become a serious threat in the past several years, and combating it is increasingly important. Why do certain people get phished and others do not? In this project, we aim to identify the factors that cause people to be susceptible and resistant to phishing attacks. In doing so, we aim to deploy adaptive anti-phishing measures.
Refactoring Tools (Sponsor: Microsoft Research, NCSU)Refactoring tools enable software developers to quickly and accurately adapt existing code to changing design requirements. Unfortunately, most of the time, software developers do not use these tools. In this project, I aim to solve this problem by aligning refactoring tools with the way that developers work.
Static Analysis Tools (Sponsor: Google)Static analysis tools allow developers to easily find potential defects in their code. How can we improve static analysis tools to make them more developer friendly?
Empirical Programming Language Research (Sponsor: Microsoft Research)Programming languages are developed with more and more powerful features, but we have little understanding of how software developers actually use those features. For instance, what kinds of generic classes to developers declare in Java 5? What kinds of problems come along with using optional parameters in .NET 4.0? Do developers migrate all their accessors to properties in Objective-C 2.0, or "if it ain't broke, don't fix it"? Answering such questions can have a profound effect on how we introduce new language features, how developers can be expected to cope with those features, and how we teach developers about how those features work.
Software Development Across Age GroupsPeople are faced with new opportunities and challenges as they grow older. For instance, we're less able to filter out irrelevant information, but we gain superior decision making skills. These opportunities and challenges have an effect on the traditionally intense, compressed careers of software developers. How can the different strengths of developers at different ages be enhanced and the challenges be overcome?
The Multiview project sought to find alternative ways for programmers to design, construct, view, and maintain software. I worked on two main areas under Andrew P. Black as my dissertation advisor. First, I helped implement the traits language feature in Java for the Eclipse environment. Second, I built a variety of refactoring tools for Eclipse that changed the "wizard" user interface that programmers are typically forced to use when they refactor their programs with refactoring tools.
I spent an internship in the spring of 2008 with Apple's development technologies group, building and maintaining Xcode's refactoring tools. More specifically, I worked with Apple's in-house LLVM team, as well as yet-unreleased language features for the next version of Objective-C.
I used infopipes, an abstraction for data streaming, for researching the construction of traffic analysis applications. Specifically, I used infopipes to built an application that calculates vehicle velocity with legacy in-highway hardware.
Databank is a resource for presenting, sharing, archiving, and searching for ecological studies. I helped rewrite the existing databank web application as a plugin to the plone content management system.
I helped maintain CanopyView, an interactive forest canopy visualization, built as a way to entice scientists to use structured databases to store their data, rather than flat spreadsheets.