At SIGCSE 2019 this past February, we organized a birds of a feather session (a one-hour discussion group) on modernizing mathematics in computer science. We expected a modest number of attendees but were surprised and delighted to host a completely filled room of discrete mathematics, algorithms, and theory of computation educators—60 attendees in total—interested in evolving how we, as a discipline, situate mathematical foundations in our curriculum!
What was even more surprising to us was how the discussion evolved over the hour. Our original intention was to focus on how we might re-shape the foundational portions of the computer curriculum in light of how computing has evolved over the last decade:
The undergraduate computer science curriculum is ever-changing but has seen particular turmoil recently. Topics such as machine learning, data science, and concurrency and parallelism have grown in importance over the last few years. As the content of our curriculum changes, so too does the mathematical foundations on which it rests. Do our current theoretical courses adequately support these foundations or must we consider new pedagogy that is more relevant to our students’ needs? In this BoF, we will discuss what a modern mathematics curriculum for computer scientists should cover and how we should go about accomplishing this in our classrooms. (https://dl.acm.org/citation.cfm?id=3293748)
Our intended focus was ultimately concept-focused—What additional concepts do we need to include in our curricula to address these issues? What less-relevant concepts could we drop to make room in our already-packed courses? In the midst of this, how do we balance mathematical rigor (proofs, in particular) with a need to convey how these concepts apply in the real world for computer scientists?
However, the scope of our discussion quickly broadened as we collectively discovered that even before we can broach the topic of what concepts we teach in our foundational courses, we needed to address the intertwined questions of what context we teach the courses under and what philosophy we have for having mathematics in our curriculum in the first place. At this point, we shifted our focus from trying to answer the original “concept” question to identifying the myriad of problems that educators wrestled with along these three dimensions. We outline the problems that people raised below:
Context and Politics
- What prerequisites do we place on our foundations courses? Does your initial foundations course (usually discrete mathematics) have no requirements? Does it require calculus I, calculus II, linear algebra, or something else?
- What post-requisites do we place on our foundations courses? Does your algorithms course require discrete mathematics? How do other courses in the curriculum depend on your initial foundations course and to what degree?
- What mathematics courses are required before graduation? Is linear algebra a required course? Prob/stats? Any upper-level mathematics class? What are the purpose of these requirements?
- Who is responsible for teaching your foundations courses? Who is responsible for specifying their content? Some departments are wholly independent while others delegate their discrete mathematics courses to the mathematics department. Some CS departments are joint math-CS departments where the distinction is blurry. In cases of delegation, sometimes the hosting department controls the content entirely. In other cases, the asking department specifies the required content to varying degrees. In another dimension, do regular faculty teach your foundations courses or is the course frequently given to visitors or adjuncts?
- What kind of undergraduates do our programs intend to produce and how is mathematics related to their goals? Does your program produce “software engineers”, “web designers”, “data scientists”, “computer scientists” or something else? What are the mathematical needs of these students with respect to downstream courses (post-requisites), their future professions?
- What sorts of motivation do our students need for foundations curriculum? What indirect motivation is there—e.g., appreciating mathematical beauty, breadth of understanding of the discipline, developing mathematical maturity? What direct motivation is there—e.g., applications of logic to program correctness, prob/stats to machine learning? What balance do we strike between the two sorts of motivation?
- What is the purpose of mathematical rigor in foundational CS courses? Is it to develop “mathematical maturity”? Read mathematics? Write proofs? Communicate proof-like ideas? Reason about and deconstruct problems? Something else?
- How comfortable and competent do we expect our students to grow in our foundations classes? Do we expect undergraduate computer scientists to have the same mindset towards mathematics as undergraduate mathematicians? How are the mindsets similar or different?
Concepts and Organization
- What concepts ought to be covered throughout the entire foundations curriculum? The 2013 ACM curricular guidelines offers a starting point, but topics like probability and statistics seem far more relevant and necessary now than back in 2013. Some items in the guidelines such as the well-ordering principle also don’t feel particular relevant. Regardless, there is near universal consensus that there are many more “required” concepts than optional ones, so hard cuts are inevitable and guidance on what those should like is greatly appreciated.
- How are these concepts distributed among the courses of a curriculum? What courses constitute the “foundational” portion of our curricula? Do the concepts fit neatly into traditional “mathematics” courses found within computer science or are they distributed more broadly between the more “applied” courses? Are there non-standard courses (beyond “discrete mathematics”, “algorithms”, and “theory of computation”) in the curriculum designed to target specific mathematics topics?
- How specialized can/should we make foundations courses for computer science students? Should a discrete mathematics class for mathematics students be different from computer science students? Is it beneficial to create specialized versions of courses for CS needs, e.g., a specialized calculus or pre-discrete mathematics course that addresses the needs of the discipline directly?
- How are individual courses organized? Are classes taught in large lecture-style, smaller recitation-style, flipped, or something else? Does the burden of proof grading impact how the classes are taught?
Ultimately the BoF raised far more questions than it delivered answers, but that was to be expected given the enormity of the topic. In raising these questions, what we found most striking was the (a) lack of clear consensus on the answer to almost any of the questions posed coupled with (b) the numerous “oh, we’re not crazy!” moments as someone with a quirky situation in their curriculum finally found someone that shared a similar quirk. The first point speaks to a need to better understand the landscape of how foundational topics are addressed in computer science departments across the world, and the second point hints at the benefit that such a study would produce.
To this end, our next step is to put together a survey of how mathematical foundations are addressed in various department’s curricula, drawing on many of the questions outlined above. With this information, we hope that we as a community can better reflect on how mathematics are taught within computer science and identify what we need to address to truly modernizing our curriculum. If you have any questions that you think would be particularly insightful to add to the survey, please let us know!