Mathematics & Computer Science
Associate Professor of Computer Science
Education & Experience
B.A. & B.S., Swarthmore College
M.A., M.S.., Dartmouth College
Ph.D., University of California, Davis
• Muhlenberg College, Associate Professor (2008-), Assistant Professor (2003-2008)
• University of Kerala, Visiting Fulbright-Nehru Scholar (2009-2010)
• Elegance Technologies, Inc, CTO & Principal Consultant (2002-2010)
• NeST Technologies, Inc, Senior Member of Technical Staff (2000-2002)
• Moravian College, Assistant Professor (1997-2000)
Much of my work is influenced by key challenges that affect computer science (CS) as a discipline, as well as the broader IT industry. In brief, we face continual dramatic change as we seek to leverage theory and practice to develop software systems for a variety of problem domains. Continual dramatic change is a fact of life in IT. For example, Moore observed that the number of transistors on a chip doubles every 2 years, or by a factor of 1000 every 20 years.
Furthermore, large quantitative changes usually lead to significant qualitative changes; thus, as technologies become smaller, faster, or cheaper, we use then in radically different ways. Theory and practice are tightly coupled, and the rate of change in computing can result in radical ideas becoming accepted practice in a few years.
Computer scientists have been described as the blacksmiths of the 21st century; we create tools for ourselves as well as for many other people. Furthermore, our tools are also artifacts we might study or enhance (e.g. with open-source software). Developing software systems is a key part of computing in general, and software engineering in particular. Such work can be extremely challenging, for several reasons. First, the work of an individual developer requires expertise, discipline, and extended periods of uninterrupted concentration; in some ways software development resembles research in other disciplines. Second, larger projects are progressively more difficult; productivity declines dramatically for larger projects.
A variety of problem domains motivate progress in CS. For example, military code breaking led to some of the first electronic computers, business uses of spreadsheets spurred the growth of the personal computer, and the need to share information across organizational boundaries led to the today’s Internet.
I teach a variety of courses in the CS curriculum, ranging from Computer Science I and II through Software Engineering to advanced courses such as Programming Languages.
To help students prepare to address the challenges described above, I seek to:
- Engage and motivate. I seek to be a “guide on the side” rather than a “sage on the stage”, and so I encourage students to think for themselves, ask questions, and exceed their own expectations.
- Model behavior and processes. I use examples, assignments, and projects that extend over several weeks to help the students see larger systems and understand the importance of abstraction and documentation.
- Encourage realistic, self-directed activities, to help students see how topics relate to other disciplines and their own future goals, and to help motivate them to acquire knowledge and skills on their own.
- Continually improve the curriculum and facilities in response to changes in pedagogy, technology, and student interests.
Free and Open Source Software (OSS) has a long history in academia and is increasingly important in non-academic settings as well. In the early 1990s I made several enhancements to the Event Related Potential Software System, originally developed at UC San Diego. More recently, I have developed plug-ins, themes, or other enhancements for a variety of OSS projects. OSS enables students to see, analyze, and contribute to real software systems that are usually much larger than typical student projects. OSS also provides valuable opportunities to study how software evolves.
Product Development and Consulting: At Moravian College, I worked with several companies and a state-funded business incubator. In 2000, I joined NeST Technologies, Inc. and worked on projects with teams in India and the US. In 2002, I co-founded Elegance Technologies, Inc, (ET) to develop software products and provide software product development services. C-Sharpener for VB translates programs from Visual Basic into C#. Thus, it parses any VB project, builds symbol tables, resolves all symbols, and generates the corresponding C# code. Lucid Spec facilitates requirements analysis and screen prototyping for software products. It allows users to design and simulate graphical interfaces, and describe related requirements and functionality. This involvement with real software projects and products enables me to Identify industry practices that are relevant to CS students, and to identify and share best practices between academic and industry. I have given multiple presentations based on these experiences.
Entrepreneurship Education overlaps with my experience as an entrepreneur. Recently, this has led to an ongoing collaboration with faculty and staff at other primarily undergraduate institutions (PUIs). I have focused on a general model for team projects, based on Cooper's “Stage Gate” model, and on ways to foster heterogeneous teams.
Programming Languages are an interest motivated by graduate courses and by several projects to develop translators or emulators. I am intrigued by the effects of design goals on language features, and would like to explore features that might support and improve emerging practices for documentation, refactoring, and test-driven development. As legacy systems become more difficult to support, translation may be more cost-effective than replacement. Finally, I continue to be curious about the relationships between programming languages, natural languages, and music.
Cognitive Neuroscience is an interest that developed in graduate school at Dartmouth and UC Davis, where I collaborated extensively with neuroscientists and psychologists. At Muhlenberg, I have collaborated with faculty and students in psychology on a variety of projects, often by adapting existing software or developing custom software.