The goal of the computer science education group is to design and develop software tools and both traditional (paper) and web-based materials for the support of teaching and learning in computer science courses. Computer science education has two foci: developing effective practices for teaching the subdisciplines that comprise the field and developing materials that support learning in a wide variety of computer science courses. Principle concerns include incorporating new research and new technology into the subject and delivery of current courses, and the development of new courses to reflect rapid changes in research and technology.
The Computer Science Education group has expertise and is highly regarded in three principle areas: research and development of materials for the first two years of courses in computer science; development of software tools supporting visualization and animation of topics from theoretical computer science; incorporation of current, core research into undergraduate computer science courses.
Current project activities in these areas include the development of material to support an apprentice style of learning of object-oriented programming and design that spans beginning to advanced courses in computer science. We are also implementing several tools that visually illustrate topics from the theory of computation, including finite automata and grammars, with animations and interactive programs. We are facilitating the development of tools to integrate and visualize performance metrics from several areas, including cache performance, in several undergraduate courses.
These projects relate directly to our mission to develop state-of-the-art educational practices and to ensure that these practices and those of the Department's core research groups build on each other.
The faculty in the Computer Science Education group are listed below. More detailed information appears on subsequent pages.
My research in object-oriented design and software architecture focuses on how to use patterns in developing software and in teaching about programming and software design. I am interested in how to use and teach design patterns and, more generally software architectures, rather than on discovering new patterns. I have developed a course, Software Design and Implementation, in which patterns help in the design of large, team-oriented projects.
I am also interested in general computer science education, particularly at the level of introductory courses for majors. My research focuses on methods for introducing advanced concepts in introductory courses without sacrificing technical rigor, but at a level capable of being understood by students new to the field. I am also investigating how to incorporate object-oriented design and programming in introductory courses. I advocate an apprenticeship approach to learning whereby students read and study well-designed programs before writing them from scratch.
In the area of automated reasoning I am interested in the use of automated and semi-automated methods for proving theorems. I have implemented METEOR, a general-purpose theorem prover than runs on networks of workstations and on sequential machines. METEOR is among the fastest general purpose theorem provers in the world, and serves as a testbed for empirical studies of different theorem proving strategies and tactics. My current research focuses on methods for reducing redundancy in the search methods employed by the prover and on automatic generation and use of lemmas. I espouse the view inherent in current state-of-the-art chess playing program: both speed and intelligence are important in delivering good performance.
Selected
Publications
My research focuses on improving the computer science education curriculum by combining object-oriented design techniques, computer graphics and visualization, and high-level integrated programming environments. I am interested in making tools that both give students the ability to create more interesting programs and serve as examples from which they can learn. In this way, students not only learn how to use tools effectively but also how to build good tools themselves. I believe this pedagogical pattern can be used at any level in the curriculum, and more importantly, help strengthen it by better revealing relationships between the variety of subjects.
Selected
Publications
M. Berman and R. Duvall, ``Thinking about binary trees in an object-oriented world,'' Proceedings of the 27th SIGCSE Technical Symposium on Computer Science Education, ACM Press, 1996.
In my research I seek to advance the practice and contribution of the computer science discipline. My interests include the design and development of web-based tools for the support of teaching and learning and for the effective dissemination of information. I have participated in the research, development, and implementation of new and innovative technology management and transfer methodologies. These advancements are necessary if the United States is to maintain its preeminent position in computer-related commerce and education in the rapidly changing global competitive environment.
I manage external relations for the Department to insure effective collaborations with other academic researchers, to develop mutually beneficial interactions with industrial partners, and to acquire research funding from government agencies and private foundations. These activities provide a mechanism to insure the relevance and quality Department's research and teaching, and generates the necessary funding for Duke Computer Science to compete effectively with other universities as a national resource for the performance of research and the production of the highest quality graduates. In addition to research and education funding, the Industrial Partners Program provides a conduit to the corporate information science community to facilitate personal interactions, and to provide a forum for technical information exchange.
I assist Chair in the administration and coordination of the Department and act as advisor to the Department's Computing Lab Committee.
Selected
Publications
I have been working with colleagues to develop software to help in the teaching of introductory computer science courses. The centerpiece of this work is a simulation program that allows the student to observe execution of programs at various levels in a step-by-step fashion. In the past, primary research interests have been in medical computing as applied to gerontology and psychiatry.
I am very interested in Duke undergraduate education and specifically the Computer Science Major. I want it to continue to provide first rate preparation for both graduate school and the job market, while giving the student the greatest of flexibility in allowing the major to support the student's interests.
I assist in department administration in various capacities and am responsible for scheduling courses. I am involved with departmental facilities and act as an advisor to the Department's Computing Lab.
Selected
Publications
My research focuses on designing tools for visualizing and interacting with theoretical computer science concepts. We have developed JFLAP (Java Formal Languages and Automata Package), a tool for designing, and simulating several variations of finite automata, pushdown automata, and Turing machines. For example, using JFLAP one can draw a picture (transition diagram) of a nondeterministic pushdown automaton. Once the picture is complete, the user enters an input string and then controls a step-by-step simulation showing all configurations currently possible. New features of JFLAP include instructional conversions from one representation of a language to another, such as converting an NFA to a DFA and then to a minimum state DFA. JFLAP is currently used internationally in teaching automata theory.
Current work includes tools for experimenting with grammars, parsing, and the animation of algorithms and data structures.
Selected
Publications