Research
Research Groups > Programming Languages and Software Engineering
|
|
|||||||||||||||
|
Better languages for better software are the goal of Northeastern's programming languages and software engineering group. "We are all focused on making programmers more efficient in expressing their thoughts so that the programs they produce are more reliable, more manageable, and more secure, and so that they run fast enough," says Matthias Felleisen. "A large program needs to have carefully specified interfaces, so that others can modify it," Felleisen says, "but a programmer shouldn't have to do that for a small program." Felleisen and his students are working on techniques that will allow programmers to smoothly adapt their systems as they grow from one-person projects to larger systems that require more engineering. "Programming languages are our basic tools as computer scientists," says Mitchell Wand, who is concerned with building mathematical models of programming languages. "If we don't understand our tools, we are building on sand. A good model captures the key elements of a programming language so a programmer can predict what his or her program will do." One of Wand's contributions was the first published model for Aspect-Oriented Software Design (AOSD), a new approach to constructing software that was pioneered by Northeastern's Karl Lieberherr. "AOSD is a technique for reorganizing a software application by adding new forms of modularity so that a design decision can be located in a single place within the code," explains Lieberherr. "That means if you want to make a change to the code, you change it in one place instead of a million places." Another area of interest for the group is macros. "Macros enable a programmer to program in an individualized language that is tailored to the application," says William Clinger. "This enables the programmer to express his or her intentions much more directly." Clinger was one of the inventors of hygiene, which is a technique for making sure different macros don't interfere with one another. "That way, developers have an easier time writing reliable macros and end users get better, more reliable systems," Clinger says. Macros are also a preoccupation for Olin Shivers, one of the most accomplished researchers in the field, who recently came to Northeastern from Georgia Tech. His primary focus is the development of powerful programming languages as practical, efficient tools for real programming tasks. He's currently using macros to create algorithms that let programmers express things at a high level, while enabling their programs to run as fast as they would in a lower-level language like C++. Riccardo Pucella, another new researcher at CCIS, has been designing languages for expressing the privacy and security properties of data. His goal is to provide Web programmers with the right tools to ensure that the code in Web software doesn't suffer from security problems. "It's easy for information to leak out of a ‘secure' database, like a credit card company's Web site," Pucella says. "A card company's data is anonymous, but there could still be leakage of information that could identify me, if I'm one of only several people with certain characteristics. The techniques of mathematical logic and programming languages give us tools to prevent this." Gene Cooperman's goal is to make it easier for programmers to write high-performance applications. Cooperman has created Task-Oriented Parallel C, which is a library of C functions that allows a programmer to quickly and easily alter a program so it can run in a distributed computing environment. "With other approaches, parallelizing might take a week or more unless you were already an expert," Cooperman says. "My goal is to make it easy for typical programmers so that they don't need an expert to do it for them." "Programming languages often determine how people think about their problems," says Felleisen. "Our goal as a group is to design languages that will help developers in thinking about their problems. The less time a developer needs to spend on extraneous details, the more time he or she has to improve the program. The result is better, more reliable software." | ||||||||||||||||
|
||||||||||||||||