CS1 and CS2: Foundations of Computer Science and Discrete Mathematics D.S.Tomer, Moderator University of Central Arkansas
[email protected]
Doug Baldwin State University of New York
[email protected]
Peter B. Henderson State University of New York
[email protected] Introduction I Overview (D. S. Tomer) Over a period of thirty years there have been many curriculum reforms in the Undergraduate Computer Science curriculum. The ACM/IEEE-CS task force is currently working on the Curriculum 2001. In this struggle to define and develop this dynamic field of computer science, we have the opportunity to identify the foundations and related concepts of mathematics we would like to see in the new CS curriculum and introduce these in CS 1 and CS2. Many standard topics of discrete mathematics can encourage the use of mathematical thinking when taught along with the CS courses. The more complex foundations and other theoretical topics may be introduced later in the curriculum. This session will present some of the views and examples in this direction. Our goal is not to eliminate the need of discrete math but to integrate it into the basics of CS so that the student will experience mathematical reasoning in the early stages of the development of CS topics. Currently discrete math is taught as one of the early math requirements and many students do not see the relationship between the programming concepts and these mathematical concepts. An early blend of these ideas of will provide a richer experience to CS majors and the new topics can be learned more quickly if the underlying theoretical concepts are well understood. The programming languages of choice can be introduced in separate laboratory components taken parallel to CS 1 and CS2. We hope that we all can agree that CS is not just programming and we have a new discipline that must develop its basic theory rather than depending on other disciplines to do it for us. Someday, the courses we know now as CS1 and CS2 maybe known as University Computing I and II as we now have in some of the other sciences.
Doug Baldwin All too many computer science students believe that math and computer science are completely separate disciplines that "real" computer science is design and programming, and that computer science courses that draw on mathematics are at best peripheral. Not coincidentally, all
Carl H. Smith University of Maryland
[email protected]
Venu Vadisigi Southern Polytechnic State University
[email protected] too many computer science graduates are unable or unwilling to apply mathematics and mathematical thinking in their professional lives. If we are to correct this situation, math must be treated as an integral part of computer science throughout the curriculum, especially in the introductory courses where students form their initial impressions of the field• SUNY Geneseo integrates math into the introductory courses through a "three-fold introduction" to computer science. This is a two-semester sequence that characterizes computer science via a set of mutually supporting methods of inquiry, in particular including mathematical analysis of correctness and performance as part of the process of designing a correct and efficient solution to a problem. The sequence thus teaches mathematical tools such as induction, finite series, etc. hand-in-hand with algorithmic techniques such as recursion, iteration, etc.
Peter B. Henderson In the engineering disciplines students learn foundational calculus in the freshman year. This mathematics is used as the foundation for understanding fundamental concepts and rigorous design techniques. Analogously, mathematical thinking and problem solving are central to computer science education and should be introduced as early as possible. This raises two relevant questions: What are the fundamental mathematical concepts? How should these concepts be incorporated into the curriculum? The computer science educational community does not agree on answers to either question. However, we are making progress as evidenced by the number of computer science based math courses (e.g, discrete math) which are being taught earlier in the curriculum. Many of the books used for these courses have a common core of concepts. There are many models used for introducing this material. The most popular one seems to be a discrete math course typically taught in the second or third year. At SUNY Stony Brook, we use a model which is closer to engineering. The first course for computer science and computer engineering majors is Foundations of Computer Science. This course introduces mathematical thinking, 397
Science, with little reception. Perhaps there is a need for the community as a whole to consider the question so a creative blend of the old and new is possible in a family of textbooks. It is for us to decide.
problem solving and concepts before CS-I. These mathematical foundations are used in CS-I to increase the rigor of thinking and to help students understand not only how to develop software, but also the mathematics underlying software. A recent survey of Stony Brook CS alumni who graduated over the past 10 years was extremely positive about this approach.
Carl H. Smith At the forefront of computer science research, more and more work is relying on deeper and deeper analysis techniques. This is putting pressure on applied researchers to maintain an intimate familiarity with a growing body of analysis techniques, all of. which are based on the foundational elements of CS1 and CS2. Algorithms researchers are constantly employing more and more sophisticated mathematical techniques in their analyses, stimulating a continuing broadening of the mathematical topics we are, and will be, calling foundations of computer science. Practitioners of the future will need a firm basis in the foundational elements in order to understand and use the latest techniques and procedures.
Venu Dasigi Issues surrounding the teaching of mathematical foundations in Computer Science are hard to resolve. There are two extreme positions in response: either ignore the foundations and focus on skills that are marketable in the short term, or teach separate theory courses such as, discrete mathematics, logic, automata theory and formal languages, etc. Frequently, neither of these positions is implemented properly: In the former position, enduring foundational material is not introduced at all or introduced only in passing, and in the latter position, the courses are only left in the books and rarely offered or the requirement rarely enforced. With the demand for software increasing very rapidly and the quality of the same degrading (frequent program crashes), I believe the time has come to ask ourselves whether we are only focused on the quantity rather than the quality of our graduates, and to raise some tough issues. My assumption is that the q,ality of graduates and that of their software is related to their theoretical foundation. With the demand for computer programmers steadily increasing, a large number of students are getting into the field, including many students with undergraduate preparation in areas far removed from computer science entering at the graduate level. With a large number of major courses to be covered at the undergraduate level, and a relatively large number of transition / prerequisite courses to be covered at the graduate level, students often do not have an opportunity to take the mix of courses that provide them the necessary theoretical background. Nor are any such rules always enforced. A good solution to this problem would be to integrate theory across the curriculum, or at least in the first few required courses. Such efforts call for a revamping of existing courses and are hard to implement, but if it is believed that the mathematical background is a critical attribute of quality, it can be done. Whether the foundational material is integrated across the curriculum, included into a very small number of core courses, or taught separately, I believe it should be done ff we want to turn out high quality programmers. Some textbooks supporting this view have appeared in the market, e.g., Aho and Ullman's Foundations of Computer
Some elements of CS1 and CS2, like mathematical induction, are notoriously difficult to teach previously unexposed students. Often, as many as three weeks worth of instruction are spent on this one topic. A deep understanding of the while loops found in most programming languages is impossible without an understanding of mathematical induction. Topics such as mathematical induction point to the difficulty of distributing the foundational elements across the curriculum. Should it be part of the analysis of algorithms course, or the course discussing proving programs correct? The only reasonable alternative is to have mathematical induction, and the other topics, that are common to several other courses, like functions, relations and beginning logic, in a single introductory foundations course. The difficulty lies in the fact that often computer science departments are short of faculty to teach the necessary courses. The material covered in the course that we would call foundations of computing is astoundingly similar to the material covered in a traditional discrete mathematics course. Hence, computer scientists rely on the mathematicians to teach the course. What ends up missing when such a course is taught is how the material relates to other courses in the computer science curriculum_ Students need to be reminded that logic is used in artificial intelligence and data bases, that induction is need to prove program correct, etc. What is needed is better integration of the curriculum into the foundations of computing course that should be taught by computer scientists.
398