Foundations of computer science: what are they and how do we teach them?

Computer science as a discipline is changing rapidly. New developments in software and hardware are changing the way we write programs, design systems, and create applications. The role of the first year curriculum in computer science is to lay the foundations for becoming a professional in the field. We examine the ways in which the changing nature of computer science influences our teaching methods, our view of which concepts are fundamental, and the overall sense of what it takes to become a successful computer scientist. We propose a first year curriculum model that has a strong emphasis on design, on programming in a structured project based environment, and on the extensive use of tools, libraries, and templates. We illustrate this model by describing a collection of graphicsbased exercises that apply computing across the disciplines. 1 Curriculum trends in computer science 1.1 Depth first versus breadth first Unlike mathematics where the freshman curriculum has consisted of calculus for generations, there is a significant debate among computer science educators about what to teach to freshman computer science majors. The two main views have been described as ‘breadth first’ and ‘depth first’ ACM/IEEE Curriculum 91 [21]. The proponents of the ‘breadth first’ view recommend that students receive a broad introduction to computer science including topics such as algorithmic, logic, computer architecture, machine languages, high level languages, compilation, the elements of programming, artificial intelligence, etc. The proponents of the ‘depth first’ view recommend that programming be the focal topic for the freshman year and that related topics such as algorithms, data structures, and design be motivated as providing a more powerful perspective on the programming process. Both views have merit which is why the debate has not and probably cannot be entirely resolved. At Northeastern University, we organize the freshman program on the ‘depth first’ model. We do this from a belief that what brings a student into computer science in the first place is the fact that a computer program designed from pure thought can make the computer do wonderful things. We want to build on Permission to tnal(e Cfigitalmarcl mpy of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or mmmercial advantage, the copyright notice, the title of the ublication and its date appear, and notice is given that ! copying is y permission of ACM, Inc. To copy otherwise, to republish, to post on servers, or to redistribute to lists, requires prior specific permission andlor a fee. Integrating Tech. into C.S.E. W96 Barcelona, Spain 01996 ACM O-89791 -844-u9WOO09...$505O this excitement. We also have a practical reason. After the freshman year, our students follow a cooperative education plan in which they alternate academic work with work in industry every three months. It is only by following a ‘depth first’ model that we can prepare our students to be ready for their first job assignments in the software industry. 1.2 The importance of design The rapid developments in both hardware and software that have taken place in the past few years call into question the traditional approaches to computer science education for undergraduates. In 1976, Niklaus Wirth could summarize the essence of software design in the title of his book Algorithms + Data Structures = Programs. The philosophy of this text is that a knowledge of the classic algorithms and data structures is the critical component in the education of a computer scientist. The development of complete programs is seen as a relatively simple top-down process in which the functional decomposition of a design problem leads naturally to the use of appropriate algorithms and data structures. Today, the design and development of programs is more complex and more subtle than the simple model suggested by Wirth’s title. To train students to work in a modern software development environment, it is essential to recognize that classic algorithms and data structures are just the starting point. The design process itself must be a major focus throughout the curriculum. Traditionally, computer science education has been most concerned with the design and performance of individual algorithms on individual data structures. It is now imperative that the design of large program structures with elaborate functionalities and elegant interfaces be treated as one of the central problems of computer science education. To build an innovative curriculum with a focus on issues of design, it is important to recognize certain critical realities: . The object-oriented paradigm has become central to the design process [2, 10, 16]. The concept of object combines a data structure with the algorithms that operate on it. Although this combination may at first seem merely convenient, it changes the entire design process from a top-down functional model to a model of objects that interact with one another. The bells and whistles of object-oriented design such as inheritance, function and operator overloading, and templates also make the use of objects more natural and more powerful than classic data structures. . Graphics and user interface design are now as fundamental to programming as text [1,5,6,9,10,13,14, 18,19]. Due to the needs of graphics and user interface design, modern operating