SIGCSE 2020 Pre-Symposium Event by the SIGCSE Committee on Computing Education in Liberal Arts Colleges
Contributed by Jessen Havill, havill@denison.edu
The following eight 4-credit courses and one 1-credit course are required by both the BA and BS.
The BA requires the core plus 2 courses (10.25 total):
The BS requires the core plus 5 courses (13.25 total):
Systems
Theory
Applied
Our introductory Discovering Computer Science courses were designed, starting about ten years ago, to be of interest and accessible to students in any discipline. We currently have three “flavors” of the course in the catalog (listed above), plus a new “Storytelling” flavor, which expects less mathematical comfort, that is being developed by one of our new CS colleagues. Development of these courses led to the textbook Discovering Computer Science. A second edition is underway.
A number of CS faculty were instrumental in the creation of Denison’s interdisciplinary Data Analytics program, now in its fourth year.
Parallel to the development of the Data Analytics major, we created a new Data Systems (CS 181) course that is now required for both the DA and CS majors. This applied course is organized around four different data models – tabular, relational, hierarchical, and unstructured (text) – and how to work with them in client-server environments. The only prerequisite is the introductory CS course. Since no textbook currently exists for such a course, one is being developed by our colleague Tom Bressoud. This course also guarantees that all CS majors are introduced to databases, from a practical point of view, even if they do not take a more advanced database elective.
Over the years, we have struggled with how to best teach discrete mathematics and writing proofs to CS majors. We want this course to be both rigorous and contextual, to convey the importance of mathematics to the discipline. We have recently settled on an approach that seems somewhat obvious in retrospect: introduce these topics in the context of the basics of the theory of computation. The content of this new course, Mathematical Foundations of Computer Science (CS 234), includes finite automata, regular languages, and the basics of Turing machines (no pushdown automata or context-free languages), far less than the typical Theory of Computation course, to make it more appropriate for the sophomore level and provide room for explicit mathematical and proof-writing instruction. Our optional Theory of Computation (CS 334) elective builds on this course, but CS 234 guarantees that all CS majors have some exposure to automata and Turing machines.
We have always been proud of our longer-than-typical data structures-algorithms sequence. Our Intermediate Computer Science (CS 173) course introduces C++ programming, the implementation of linear data structures, and the basics of asymptotic notation and sorting. This is followed by Data Structures (CS 271), which steps up the mathematical rigor and covers priority queues and heaps, trees, graphs, hash tables, and an introduction to dynamic programming. Finally, Algorithm Design and Analysis (CS 371) covers the canonical algorithm design techniques of divide and conquer, dynamic programming, backtracking, greedy, and network flow, along with an introduction to the theory of NP-completeness. This course also satisfies a college-wide writing requirement.
Our 1-credit Technical Communication course is required of all CS and Mathematics majors. In it, students are instructed in effective oral communication of technical topics to a general audience, and they deliver a progression of talks of increasing duration over the semester. We wrote a paper about the course in 2007.
As the number of students taking CS classes has grown, so has the disparity in preparation and deep motivation. Are others seeing these issues as well, and what can be done to reach all students without sacrificing rigor?
We are running out of space to teach CS classes, as the numbers of both students and faculty has grown. We are also short on offices, lab space, and social spaces for CS students. This has taken on serious toll on department culture. We have come up with some creative solutions, like dual boot machines and retrofitting a chemistry computer lab. We are in talks with the administration which will hopefully soon finally bear fruit. In the meantime, any suggestions?
While our prerequisite structure does allow students starting in their second year to complete a BA, it is sometimes tricky to fit everything in the right order. What ideas do folks have about flattening the prerequisite chain?