The Software Engineering and Human-Computer Interaction group is a multi-perspective group focusing on a single problem: how to help people develop software that is effective and accurate. The people we are trying to help range from professional programmers to end users who use special-purpose tools to create their own software.
The approaches we use in conducting this research range from automated behind-the-scenes reasoning about the software being created, to human-computer-interaction methods for targeting software tools to the needs of the human programmers using it, to formal methods of reasoning precisely about the properties of software being developed, to language design to create the right kind of language for the kind of task the software is trying to address.
Our work is collaborative, spanning across department boundaries and beyond, with collaborators at IBM, Microsoft, and numerous other industrial and university researchers involved. In some of our research thrusts, such as end-user software engineering, we are regarded as international leaders.
- End-User Software Engineering
- Programming Tools, Environments, and Analysis
- Human Factors in Software Engineering
- Software Maintenance and Evolution
- CS 519: Special topics
- CS 561: Software engineering
- CS 562: Applied software engineering
- CS 569: Special topics in software engineering
- CS 581: Programming languages
- CS 582: Object-oriented analysis and programming
- CS 583: Functional programming
- CS 584: Human factors of programming languages
- CS 589: Special topics in programming languages
Human issues of programming & software engineering: end-user programming, end-user software engineering, information foraging theory as applied to programming, how gender issues relate to software
Language design and domain-specific languages; functional programming; visual languages; end-user programming (in particular, spreadsheets); end-user software engineering
Usability aspects of open source software development, distributed collaboration, and social aspects of joining open source projects; information overload; usable privacy and security
Intersection of software engineering and human-computer interaction, especially related to end-user programming and code reuse
Software engineering, in particular interactive program transformation, automated refactoring, concurrency and parallelism, object-oriented frameworks, software testing, and software evolution
Software engineering, particularly testing, model checking, code analysis, debugging, and error explanation
Coordination and collaboration in distributed teams; configuration management systems; software maintenance and evolution; software visualization
Type systems; functional programming; visual languages; designing languages for domain experts who may not be professional programmers