Word - the David R. Cheriton School of Computer Science

advertisement
A Self-Directed Program
For A Bachelor of Computer Science Degree
Dan Brown, Mark Giesbrecht, Naomi Nishimura, J.P. Pretti, Geoff Pounder, Prabhakar Ragde
December 12, 2001
Summary
The self-directed approach to designing a degree starts with a modest core and permits more
choice in third and fourth year, with distribution requirements to ensure that students avoid
extremes. We have applied this philosophy to designing a B.CS, and propose a core with
reductions in both Mathematics and CS courses. The number of required Math courses is
reduced from 11 to 7, and the number of core CS courses is reduced from 11 to 9. The total
number of CS courses required for graduation remains the same. We also propose distribution
requirements on the non-Math and free-choice courses to ensure they are used wisely. The first
year of our B.CS program is the same as all other BMath programs. We also propose
modifications to the BMath(CS) program which increase both the number and seriousness of the
Math courses, and offer some observations on the possibility of a 3-year general CS program. All
of our decisions are explained at length, and alternatives are indicated where feasible.
Index
1. Introduction
1.1 Myth: It's all Math's fault
1.2 Myth: Changing the way we teach will threaten our reputation
1.3 Drawbacks of the comprehensive or "thick core" approach
1.4 Myth: With a self-directed approach, students get off easy
1.5 Myth: Allowing flexibility damages the value of the degree
1.6 The use of comparisons to model curricula or other programs
2. The self-directed program proposal
3. Rationales for details of B.CS proposal
3.1 Math content
3.2 Systems courses
3.3 Algorithms and data structures courses
3.4 Scientific computation courses
3.5 Distribution requirements
3.5.1 Requirements on specialization CS courses
3.5.2 Requirements on non-Math courses
3.6 Upper-year courses, options, and other programs
3.7 Justifications for other CS core courses
4. Renewing the BMath(CS)
5. Rationales for BMath(CS) changes
5.1 Math content
5.2 Mathematical CS content
5.3 Other details
6. A 3-year general program in CS
6.1 The current General Mathematics program
6.2 The general B.CS program
6.3 Notes on the general B.CS program
Appendix A: References
1. Introduction
The self-directed model for our programs offers flexibility to both students and faculty. It
permits individuals to create plans of study that can be broad, focussed, or interdisciplinary. It
does not squeeze all students into a "one size fits all" framework. At a time when many other
disciplines are introducing "computational" programs, it avoids a narrow, exclusionary definition
of computer science.
The B.CS program proposed here is not a radical change from our current practice. At a time of
strained resources and increased responsibilities, any additional change can be seen as excessive.
Nevertheless, we support a reorientation of our flagship undergraduate program, because a
modest effort now, in the context of the creation of a School of Computer Science, will pay off in
the long run. Our proposal would set in place a framework within which our curriculum can
evolve gracefully over the next ten to fifteen years.
1.1 Myth: It's all Math's fault
The B.CS initiative came out of a desire of CS to gain more autonomy over its affairs, and a
feeling that too much of the content of the B.Math(CS) was not under the control of CS. But
some of our injuries are also self-inflicted. Many of our problems cannot be wholly or even
largely blamed on Math intransigence or interference: student workload, burnout, frustration, and
attrition; overlap or gaps in coverage; curricular inflexibility and inertia; loss of control over the
content or delivery of CS courses. As we re-examine and re-engineer many of the ways in which
we operate, we should also take a close and critical look at all aspects of our curriculum. A selfdirected approach will not solve all of our problems magically. However, we believe that the
flexibility and diversity possible within this approach offer more scope to address our problems.
Getting our own house in order will demonstrate our fair-minded approach to reform.
1.2 Myth: Changing the way we teach will threaten our reputation
We constantly change the way we teach. In the last decade we have introduced two CS courses
in second year and more requirements in fourth year, moved from breadth-first introductory
courses to the CS1/CS2 model and then from imperative-based to object-based approaches in
those courses, changed teaching languages and platforms, moved away from digital design
towards architecture, and suffered the near-doubling of many class sizes. About the only constant
has been the philosophy of specifying courses through third year, which we inherited from a 48credit degree created under very different circumstances. Our current curriculum has not been in
place long enough to be responsible for a significant share of our reputation, yet its problems
threaten the future development of our image.
1.3 Drawbacks of the comprehensive or "thick core" approach
From a faculty member's point of view, requiring courses through third year makes adapability
difficult. Upper-year courses have a limited teaching pool under current policy; they are often
left in the hands of groups or individuals who may aim at enthusiasts rather than general
audiences -- one of the attitudes we complain about with respect to Math courses. It is harder to
ensure universal acceptance and respect for all core material if the core is too thick. Introducing
new material requires removing something; because the core covers a wide area, those who
"own" the removed material can find other material that is equally marginal and deserving of
removal. Those whose "owned" material is not in the core resent this.
A thick core increases the amount of material a student sees as irrelevant or overly timeconsuming. While this attitude can be overcome with careful motivation, that is not always
provided. Students have difficulty pursuing other interests (whether supplementing or
complementing their CS studies), getting a well-rounded education, or focussing their studies in
preparation for graduate school. It is difficult to design new interdisciplinary programs without
arguments over what part of the core to leave out. As computing becomes an integral part of
most other disciplines, computer science risks being marginalized unless it can demonstrate its
willingness to build bridges to these other areas.
Our current core, in certain areas, goes well beyond what is required for Ph.D exams in most
graduate computer science programs. It is natural to base qualifying requirements on
undergraduate core, but graduate students from diverse backgrounds who join our program are
put at an early disadvantage that is largely unnecessary and discourages interdisciplinary
approaches to research. The same discouragement holds at the undergraduate level. Evidence
suggests that women value applicability of CS concepts, and a self-directed program could
permit them the space to explore areas of application.
1.4 Myth: With a self-directed approach, students get off easy
This presumes both a desire on the part of students to shortchange themselves and the presence
of easy or trivial options. Both are present in our current program, but they are the result of the
comprehensive approach, not prevented by it. Both students and faculty members argue that
courses such as CS 494 -- which we have never had in-house expertise to teach, and on which
most students report spending zero to two hours a week outside of class -- should be retained as
compensation for the legendary demands of some other courses, including ones in the core.
Those demands are also responsible for a culture in which non-CS courses are given short shrift,
instead of being an integral part of a well-rounded education. Recognizing this, colleagues both
within the Math Faculty and in other faculties are moved to create undemanding courses,
knowing that our students will avoid ones with challenging content.
Attention to quality of individual offerings (which will be naturally focussed by not having a
captive audience for higher material) and distributional requirements to avoid extreme
imbalances in choices will avoid such problems. It is hard to find someone to argue that students
at Berkeley, CMU, and MIT (all self-directed programs with requirements similar to our
proposal) are getting off easy.
1.5 Myth: Allowing flexibility damages the value of the degree
The value of the degree primarily lies in the knowledge and skills acquired by the degree holder.
Under the thick core approach, graduates are more similar to each other, and those who have
experience with one UW CS graduate can more easily judge another. Leaving aside the question
of whether this type of transferred judgement is one we wish to encourage, the fact remains that
this consistency, to the extent it actually exists, has been ensured at the cost of discouraging or
barring those who wish to move beyond our relatively narrow parameters. Diversity is a source
of strength.
1.6 The use of comparisons to model curricula or other programs
Why should we design our curriculum a particular way just because some committee advocates
that approach, or because other institutions use it? The answer is that we should not, and this
proposal does not suggest blindly following any given external model. We have unique strengths
and circumstances at UW and can build on them. We have used model curricula and other
programs as "reality checks", preventing us from circular reasoning in which what we do is
valued simply because we do it. They allow us to test our decisions by comparison with the
academic world we inhabit.
Here we rely on two such checks. The first is the Steelman draft (following Strawman and
Ironman) of the ACM Computing Curricula 2001, a successor to the much-used Computing
Curricula 1991. The classification of core knowledge and description of sample curricula in this
report is the result of work by several teams of well-known and distinguished researchers and
educators. Each of us can find something in this report to criticize; it attempts to reflect a wide
range of practices, and to cover decade-old traditions as well as recent trends that might prove
pervasive in the future. The details may change in the final report. Still, it is a well-researched
document, and extreme divergence from its models deserves increased scrutiny. There is a link to
it on the B.CS Web page (see Appendix A for references). In this proposal, when we refer to a
course design in the Steelman report, we append the letter S to create the acronym SCS; this
allows us to distinguish Steelman courses from our CS courses.
The other comparison we make is to self-directed programs among the top 20 CS research
departments in the US (as ranked by a 1995 NRC report) and a number of top Canadian
departments. Since we are a research-intensive department in a university which prizes and
publicizes such activity, it is natural to use these programs as a basis for comparison, and to look
for good ideas that might transfer into our context. Details are generally available on institutional
Web pages, though members of both design teams have summarized the results on the B.CS
Web page for those who don't wish to hunt for them.
2. The self-directed program proposal
It is easiest to understand our proposals to create a new B.CS and modify the existing
BMath(CS) by comparison to current practice. We based our decisions on the benchmarking of
the current BMath(CS) against the core described in the Steelman report and the cores of selfdirected programs at other institutions. Central to our analysis are the practical issues of
interchangeability with other Math degrees and the inability to mandate a large amount of new
course development. Our aim is to have both programs remain viable, not to have a BMath(CS)
which will wither away due to lack of enrollment.
Below we describe the requirements for the current BMath(CS) and the proposed B.CS degree,
as structured by the checklists in the CS Undergraduate Handbook. Translation of these into
calendar format is straightforward. The description is followed by notes pointing to more
detailed discussions in Section 3 of particular suggested changes.
Current BMath(CS) degree
11 Math courses: Math 135, 136, 137, 138, 235, 239, Stat 230, 231, 3 others not in CS
11 CS core courses: CS 130, 134, 241, 251, 240, 246, 341, 342, 354, 360, 370
4 CS specialization courses: CS 4xx (three must be 440-489)
10 Non-Math courses
4 Free-Choice courses
New self-directed B.CS degree:
7 Math courses: Math 135, 136, 137, 138, 239, Stat 230, 231
9 CS core courses: CS 130, 134, 241, 251, 240, 246, 341, Logic and Computation, Sys 1 (see
notes below)
6 CS specialization courses: CS 3xx, 4xx, or 7xx (with distribution requirements to avoid
excessive concentration in subject or year)
10 Non-Math courses (with distribution requirements)
8 Free-Choice courses (above distribution requirements may affect these)
Notes:

Section 3.1 describes the modifications to core Math and Stats courses, as well as the new
Logic and Computation course.

Section 3.2 describes changes to systems courses. The new courses Sys 1 (core) and Sys
2 (specialization) replace CS 342 and CS 354.

Section 3.3 describes changes to algorithms and data structures courses. The advanced
algorithmic content of CS 341 will be moved to CS 466; basic computability moves from
CS 360 to CS 341, and CS 360 becomes a specialization course.

Section 3.4 discusses the reasons for making CS 370/371 a specialization course.

Section 3.5 discusses the details of our proposal for the distribution requirements for CS
courses and non-CS courses.

Section 3.6 discusses implications for other 3xx and 4xx courses, and for other programs
and options.

Section 3.7 briefly justifies the CS and Math core courses we have not addressed in the
other sections.
3. Rationales for details of B.CS proposal
In the following sections, we present detailed rationales for the changes proposed here. Note that,
modulo some changes in emphasis in various topics, a B.CS student could still make choices that
result in exactly the same program that they could take under the current BMath(CS) rules, with
the one addition of the required Logic and Computation course. They could also make choices
which would not be allowed under current BMath(CS) rules; the current BMath(CS) is more
restrictive.
3.1 Math content
In specifying the Math content of the B.CS degree, we were motivated by the desire to preserve
what is useful and desirable, and to enhance the value of this content both to faculty and to
students. The amount of supporting math content, as specified by the Steelman report or by a
perusal of topics in CS courses requiring math background, is relatively small. But the study of
mathematics has benefits beyond direct support of CS topics, and we cannot ignore the argument
that the reputation of Waterloo CS is based in part on the mathematical exposure of our students.
Our proposal reduces the non-supporting math content of the B.CS relative to the current
B.Math(CS). The three extra non-CS Math courses (otherwise unspecified) have been removed,
as well as the second linear algebra course. This latter course is taught in a fairly abstract
fashion, and while it may be valuable as general mental exercise, it results in a crowded second
year and reduces flexibility.
On the positive side, our proposal would result in all Math Faculty students taking the same
Math and CS courses in first year, allowing transferability between programs at least to the end
of first year (and probably later, with judicious choices). We have assumed that the changes in
1st year algebra and calculus proposed by the Ad-Hoc Committee to set up a program in
Computational Mathematics will be made. These changes make the first year courses more
accessible to CS students while improving the core for all students (at least from the point of
view of the non-CS people on the Ad Hoc committee).
We assume that Math 239 will be changed to make enumeration coverage more concrete and to
make graph theory coverage more algorithmic; this puts most of Math 239 within the Steelman
core. We also assume that a CS version of Stat 231 will be developed to focus specifically on CS
examples. The experimental nature of computer science is underemphasized in our current
program; one cannot seriously talk about the performance of a processor, a network, or a system
without bringing in statistical concepts. The current version of Stat 231 does not work for most
of our students, but we have faith that this can be overcome. Signs indicate that the Math Faculty
seems inclined to cooperate on all of the above changes.
A changed Math 239 will satisfy the discrete mathematics requirements described in the
Steelman report and common to many institutions. It does not address the need for coverage of
propositional and predicate logic and their applications. Students need not only exposure to
logic, but exercise in its use in a CS context, and we do not believe that a Math course, even one
specifically offered to CS students, will achieve this. A Math course in logic will be seen as part
of their Math requirements rather than part of their main course of study, especially if it
resembles PMath 330 or if logic is handled in a "grab bag" manner such as the list of topics in
CO 103 or the Steelman course SCS 115.
Instead, we propose a CS course in Logic and Computation, similar to the one to be offered by
the joint SE program for the first time in winter 2002. This course uses program verification
through assertions to motivate logical manipulations. It strengthens the ability of students to
reason about control flow in the design process, and emphasizes the possibilities and limitations
of formal methods, both pencil-and-paper and machine-assisted. The course seems ambitious as
designed for the SE program, but we believe a version of it will be suitable for B.CS students in
their 2B term.
3.2 Systems courses
It is difficult to suggest changes to CS 342 and CS 354. These two courses are central to our
current program, popular with students, and taught for the most part by excellent instructors.
They put students through a tempering process by which they gain a deep understanding of
important material. Why, then, are we suggesting revising them?
To put it briefly, they are too much of a good thing. If one were to try to design a program in
mathematics, one might be tempted to make the Sylow theorems on subgroups or Goedel's
incompleteness theorem required material; in a program in science, one might insist on quantum
mechanics or protein synthesis. These are all excellent topics, and learning them properly will do
any student good. But they are not core material. They are appropriate for certain mathematicians
or scientists and not appropriate for others. Similarly, the material in CS 342 and CS 354, taken
together, is appropriate for many (perhaps even most) CS majors, but not for all.
Our comparison of CS 342 and CS 354 to the Steelman core and to systems courses at other
institutions is on the B.CS Web page; the precise URL is given in Appendix A. Below we
summarize the result of our investigations.
The combination of CS 342 and CS 354 make the current CS core overweight in the systems
area. The main problem is with CS 342. By our estimate, 23 out of the 36 lecture hours in CS
342 are not in the Steelman core. In fact, in the Steelman report, some topics from CS 342 only
show up in the advanced course SCS 337 (Concurrency and Distributed Systems), designed
primarily for the systems-based approach. But that course is based around a distributed
networked approach, whereas 342 is based on shared memory. Other 342 topics do not appear at
all in Steelman.
CS 354, being an operating systems course, conforms more closely to the Steelman core. The
areas in which it exceeds core (in topics such as file systems and security) are not extreme
outliers. Its main problem is that CS 342 is a prerequisite. While some understanding of
concurrency is necessary for proper coverage of operating systems material, most institutions
devote six to eight hours to this background. CS 342 far exceeds the required amount.
Adding the concurrency material makes CS 354 overfull, but the new CS 251 relieves some of
the pressure: it contains initial discussions of pipelining, caches, virtual memory, I/O, and
multiprocessors, all of which will help. We believe this permits the design of a single course,
which we call Sys 1 here, covering most of 354 plus the core parts of 342 (six hours of
concurrency). This is in line with the practice at other institutions we surveyed (details on the
B.CS Web page).
The self-directed design team does not have the expertise to design a handbook description of
Sys 1; we suggest (as an example rather than a prescription) something along the lines of SCS
230 (Operating Systems), with some of the parts of SCS 221 (Architecture and Operating
Systems) included (alternately, 251 could incorporate some of that material). Note that the
lecture material in the current 354 is due for revision in the light of the new 251, and that 354
instructors are scheduled to update or replace the NachOS system which forms the basis of the
lab work. Currently more than 40% of students report spending more than 15 hours a week on
354, and we suggest that a solid but less excessive workload be a goal of any revision. There are
persistent rumours of excessive collusion on the programming assignments, and we are
unconvinced that the students who might decline a second systems course under the self-directed
scheme are really reaping much benefit from the present situation.
This leaves the non-core material in CS 342 for the specialization course Sys 2. We would
suggest as an example the approach taken in SCS 337. Students also report spending a lot of time
on CS 342, though the numbers are lower, and fewer of them are inclined to rate the course as
requiring too much work. But many students decide at about this time to lengthen their program
of study from eight to nine or more terms, spreading out the workload by taking fewer than five
courses a term. Given that Sys 2 will not be a core course, its workload can rise somewhat above
the norm for courses at its level without having too deleterious an effect. We believe a significant
number of students will choose to take Sys 2 voluntarily, either out of interest, or because it may
be a prerequisite for some fourth-year CS courses.
3.3 Algorithms and data structures courses
The combination of CS 341 and CS 360 together make core overweight in advanced algorithms
and complexity. The problem is with CS 360. Historically, this material was part of many
undergraduate programs, but increasingly it has moved to being a specialized topic. Finite-state
machines and context-free grammars are still vital, but they can be studied in application
contexts (programming language compilation and sequential circuit synthesis), which is what is
currently done in CS 241 and CS 251.
Out of the 36 hours in CS 360, 30 are not in the Steelman core, and not core in any examined
self-directed program. The remaining 6 hours, an introduction to computability and the halting
problem, are in the Steelman core, and we suggest retaining this material in the CS core by
moving it to CS 341 as a warmup to the treatment of NP-completeness.
Some of the material in CS 341 is also outside the Steelman core. It also creates an awkward
situation when the same topics are revisited in more depth in CS 466. We suggest removing 8 to
10 hours of advanced algorithmic material from CS 341, including amortized analysis,
randomized algorithms, and approximation algorithms. These topics can be moved to CS 466.
The remainder of CS 341 mostly adheres to the core. CS 360 will become a specialization
course, and it can be filled out with material that is often neglected (eg proper coverage of
recursively enumerable languages and their complements, and the uncomputability hierarchy).
3.4 Scientific computation courses
Scientific computation, formerly known as numerical analysis, was also historically a part of
most CS programs; in fact, a popular approach in a first computing course was to have the
students write algorithms for numerical approximation or integration in FORTRAN. But in
recent times, this material has increasingly become a specialized topic. The current content of CS
370 is not in the Steelman core, or in the core of any examined self-directed program. In the
context of the interplay between CS and mathematics, this course is central, and we recommend
that it remain core for the BMath(CS) program we describe below. The similar course CS 371
(with a somewhat different approach) will be core for the new Computational Math program. By
removing CS 370 from the core, it is possible to restore the prerequisite of Math 237 that it once
had.
It remains important to show students that real numbers cannot be exactly represented in a
computer, that manipulating floating-point numbers requires new algorithms, and that roundoff
and numerical stability are serious issues. Some of that is done in the new CS 251, which now
contains material on floating-point representation (the IEEE 754 standard), on algorithms for
floating-point addition and multiplication, and on the need to keep guard and round bits in
intermediate results to avoid roundoff errors. In addition, the modified first-year Math courses
will emphasize computational aspects of algebra and calculus (e.g. Taylor series for
approximation, interpolation, numerical integration, Newton's method), and might even discuss
numerical stability.
3.5 Distribution requirements
We propose distribution requirements on both the specialization CS courses and the non-Math
and free choice courses. These requirements are intended to ensure quality and to send a message
to students that these credits are important to their education and should not be wasted on the
easiest courses they can find in the calendar.
3.5.1 Requirements on specialization CS courses
With the current roster of CS 3xx and 4xx courses, it is hard to construct programs that are
highly imbalanced; there simply aren't enough choices. But this could change as more 3rd and
4th year courses are developed, and we should put rules in place now that embody the spirit of
our vision for the degree. We need to limit the number of CS courses taken in total (with more
free choices, this is an issue), and we want to ensure a mix between 3rd and 4th year, and across
areas. The situation is complicated by the presence of CS 7xx courses which should count
towards the B.CS for good students. These reasons suggest the following rules:

At least 3 CS 4xx or CS 7xx courses.

At most 10 total CS courses above and beyond the core (19 total maximum).

Grad courses can only be taken with explicit consent of an advisor.

If more than one grad course is taken, an advisor must approve a student's entire selection
of specialization courses. (We expect this to be rare.)
These rules do not address the question of excessive concentration in one area. CIPS
accreditation rules (see the B.CS Web page) forbid this, but the categories used there are
criticizable. We prefer to use different categories, though choices fitting our rules should also
satisfy theirs. The categories implied by the "middle digit" system are also problematic, and this
system may not be sustainable, depending as it does on a modest number of courses in any broad
area. We suggest the following rule:

At least one course from at least two of the following areas:

Systems and SE: Systems 2, 442, 444, 445, 446, 447, 450, 452, 454, 456, 457

Applications: 448, 486, 488, Computer Vision

Mathematical Foundations of CS: 360, 370, 462, 466, 472, 476, 487
Not all the 4th year courses have been placed in one of the above areas. The intention of these
lists is to ensure a modest amount of breadth in specialization courses. Courses like CS 480 or
CS 492 are broad enough that they cannot be taken as part of an excessively narrow selection.
New courses that are proposed should be assigned to an area (or not assigned at all) with the
spirit of this requirement in mind.
3.5.2 Requirements on non-Math courses
There are two legitimate but potentially conflicting goals one might have for effective use of
non-Math courses: breadth and depth. If someone is trying to do an entire second major or fulfil
a joint requirement, their task should not be made difficult or impossible by breadth
requirements. Students should also not be permitted to simply take "101" courses in a number of
different areas without ever exploring any of them in more depth. We suggest that students
should satisfy at least one of requirements 1 or 2 below:
1. (Serious depth)
Fulfil the requirements for a minor, joint, or full honours program outside Mathematics; OR
2a. (Breadth)
At least two courses from Arts group A (Humanities)
At least two courses from Arts group B (Anthropology, Economics, Geography, Political
Science, Psychology, Sociology)
At least one course from Science
At least one course from Science, ES, or AHS
AND
2b. (Depth)
Three 3rd year courses in one non-Math department; OR
Three courses forming a prerequisite chain of length 3; OR
A coherent plan approved by a CS advisor
The Arts group A and B classifications are used for breadth in programs leading to a Bachelor of
Arts, and are described in the calendar. We were somewhat worried about the science
requirement; while we feel it is important, introductory courses in Chemistry and Physics require
the corresponding OAC credits (and will probably require Grade 12 credits from 2003 on). Our
design team member with experience in admissions believes that more than a negligible number
of our students have neither. There are a few Biology and general Science courses open to those
students, but this situation should be carefully monitored to avoid this requirement becoming too
restrictive or onerous.
3.6 Upper-year courses, options, and other programs
We need to review the prerequisites needed for all specialization courses and make sure they are
accurate. Some adjustment of content will be needed in some of them; for example, CS 454 and
CS 456 may change slightly depending on how Sys 2 looks and whether it contains any network
concepts. Similarly, CS 462 and CS 466 need to change somewhat as a result of the changes to
CS 341 and CS 360. CS 450 is due for updating as a result of the recent changes to CS 251.
All 4th year courses should be subject to a proper quality assurance process to ensure that they
do not lead to weaknesses in the program. It may even make sense to give some of them 3rd year
course numbers. CS 448 (Databases) might benefit from this approach, and many students have
suggested a one-term survey of software engineering. We recommend that CS 494 be converted
to a MTHEL (math elective) course; its weaknesses were discussed in section 1.4, and the
sessionals who teach it do not seem willing to alter their delivery to bring it into line with the
way other 4th year CS courses are taught.
The self-directed approach allows students to take responsibility for crafting their education. We
believe that it is unnecessary to offer many options that show up on diplomas and transcripts.
Doing so creates an atmosphere where the credential is valued over the actual content of the
courses and the skills imparted, and disadvantages the student who pursues breadth or constructs
their own concentration which simply lacks a formal name. The only reason to have such
options, bureaucratically, is if access to certain courses outside CS is limited and requires
commitment to an option. This would argue for continuation of the Digital Hardware Option, for
example. The Software Engineering and Information System options should be replaced by
suggested concentrations, which would not appear in the title of a degree. Students could still
discuss these in their CVs, if they were seen to be valuable.
We have not examined the Bioinformatics program in detail, but it may make sense to replace
the BMath(CS) Bioinformatics option with a B.CS Bioinformatics option. Alternately, if the new
B.CS proves to be compatible enough with the joint Honours Bioinformatics program, the option
can simply be removed.
3.7 Justifications for other CS and Math core courses
In this section, we briefly discuss the CS and Math courses required in the proposed B.CS
program but not mentioned above.
CS 130 and CS 134 are standard object-oriented CS 1 and CS 2 courses, and fit well with
courses suggested by the Steelman report (CS 111o, CS 112o) and with practice at most other
institutions. There are many possible choices of textbooks, languages, and programming
environments. One can question the speed at which advanced OO concepts are introduced, but
the course is open to tinkering without requiring drastic redesign.
CS 241, the "baby compilers" course, is an unusual course in a global context. It has some of the
aspects of a first course in computer organization (such as the Steelman course SCS120s) but
goes deeper into the process of parsing and code generation. We feel it provides a nice mix of
practice and theory; finite-state machines and context-free grammars are introduced with good
motivation, and the data structures studied in CS 134 are utilized.
CS 251, the architecture course, was redesigned in 2001 with recommendations from the
Ironman report (Steelman's predecessor) in mind. It looks very much like SCS 220. The material
in this course could easily be combined with that in CS 241 into a coherent two-course sequence,
taken either sequentially or in parallel. Currently most students take CS 241 and CS 251 at the
same time, but the courses do not yet fully mesh. CS 251 could be moved earlier in the
curriculum, but moving it into first year would violate the principle that all Math faculty students
should have a common first year for purposes of transferability. We did not feel it necessary to
precede CS 251 with a course in digital design, though a followup specialization course (perhaps
taught with cooperation from ECE) might make sense.
CS 246 treats the important topics of programming in the medium and software engineering, and
is necessary to lay the foundations for the more challenging of the upper-year systems courses.
Care needs to be taken to avoid overlap with CS 130, since many of the topics from that course
are revisited in CS 246, but in more depth.
CS 240 is not a standard data structures course; it is also a mix of practice and theory, with topics
such as memory management, hashing, string matching (another good use of finite automata),
and with nontrivial programming assignments. Some advanced topics could be removed without
weakening the core.
From the above description, we conclude that while there may be a few hours that can be
trimmed from our core here and there, it is not really possible to remove an entire course and still
match our benchmarks for core content without a considerable amount of course redesign.
Math 135, the classical algebra course, is difficult to justify just from the list of topics, but it is
one of the most successful courses in the Faculty, having been polished over more than two
decades. It is the underlying subtext of this course that is important: it delineates for the student
the difference between doing mathematics in high school and doing mathematics in university.
As such, it is crucial for subsequent Math courses and for any treatment of formal methods in CS
courses.
Math 136, the first course in linear algebra, treats topics necessary for many upper-year Math
and CS courses, such as matrices, linear transformations, vector spaces, and solving linear
equations.
Math 137 and Math 138 are courses in calculus. We feel that calculus is somewhat of a sacred
cow; it is useful in engineering and science courses where the real world must be described and
analyzed, but it is perhaps of less use (though definitely of some use) in the human-constructed
digital world. Nevertheless, the mental exercise it gives students is valuable, and the goal of
maintaining a common first year is worthwhile. The changes to these courses discussed above
will emphasize the connection between discrete and continuous mathematics, and the
computational aspects of calculus.
Stat 230 is a first course in probability. Probability is a valuable tool in both theoretical and
practical courses, and is definitely core in the Steelman report. We feel that lumping basic
probability and statistics together in one course, or even throwing in counting, graph theory, and
logic as some institutions do, would result in excessively shallow coverage and would be a waste
of the resources offered us by being in a Faculty of Mathematics. Without a good grounding in
probability, students are reduced to relying on intuition which is often wrong, and must accept
statistical tests on faith without understanding their basis and limitations.
The material in Stat 230, Stat 231, Math 239, and the Logic and Computation course is usually
covered in other programs in three or fewer courses. Much as we would like to reduce the course
count, we find it difficult to see how this material can be distributed among fewer courses
without seriously compromising both the ability of students to apply the material and the
pedagogy of those courses.
4. Renewing the BMath(CS)
The thick core approach has resulted in a tug-of-war between CS and Math for precious
curricular space, with the paradoxical result that the BMath(CS) degree has a high math content
but its claim to be a degree in mathematics is significantly weakened by the degree of choice
permitted and the absence of key required math courses. The self-directed approach allows a
move closer to the ideal of what a BMath(CS) might be, namely a degree with decent
concentration in both CS and math. In effect, we are taking advantage of the flexibility inherent
in the self-directed approach to strengthen a special and historically important interdisciplinary
program, namely one combining CS and mathematics.
The new BMath(CS) cannot be called self-directed, because of the relative lack of choice, but
this would be true of any interdisciplinary program built from the B.CS without significantly
sacrificing CS content. Our goal here is to improve the BMath(CS), in ways that will be
considered beneficial by both the CS department and the rest of the Math Faculty. The result is a
program that is clearly distinct from the self-directed B.CS, which should make it attractive to
students who value mathematics.
New BMath(CS) degree [to go with proposed self-directed B.CS]:
12 Math courses: Math 135, 136, 137, 138, 235, 237, 239, Stat 230, 231, 3 others (either from
short list of "real" math courses e.g. group theory, real and complex analysis, mathematical
optimization, applied probability; or as part of a minor, joint, or double honours)
11 CS core courses: CS 130, 134, 241, 251, 240, 246, 341, 360, 370/371, Logic/Comp, Sys 1
[see above notes]
4 CS specialization courses: CS 3xx, 4xx, 7xx (at least 3 from 440-489)
10 Non-Math courses (with distribution requirements)
3 Free-Choice courses
5. Rationales for BMath(CS) changes
Here, we briefly discuss the rationales for the proposed changes to the B.Math(CS) degree. Note
that a current BMath(CS) student could make choices which match the future BMath(CS)
requirements, were Logic and Computation available to them, but not all such choices will work
(that is, the new BMath(CS) is more restrictive). Future B.CS students will also be able to move
to the new BMath(CS) easily at the end of their 2A term, and later if they make judicious
choices.
5.1 Math content
We have put Math 237 (Calculus 3) back into the BMath(CS) core. It was there for most of the
degree's history, until it was sacrificed to make it possible to take more than one CS course a
term in second year. This was not easily accepted by the Math Faculty, and we believe that the
restoration of Math 237 to the BMath(CS) will make the B.CS more acceptable. Many of our
students (certainly those taking double honours, but others as well) take it as one of their three
extra required Math courses. We have also retained Math 235 in the BMath(CS) core; it was
removed from the B.CS requirements.
The current BMath(CS) requires three extra Math courses, but does not place any restrictions on
them. This is a concession to deal with reluctant students forced to take these three courses in
order to take CS; it weakens the claim of the BMath(CS) to be a true Bachelor of Mathematics.
Not all students take the easiest math courses they can find, but many do. Given that the B.CS is
available to these reluctant students, we recommend having these courses in the new BMath(CS)
chosen from a short list of more serious courses developed in consultation with other
departments in the Math Faculty. Students doing a minor, joint, or double honours in another
department should not be subject to any such requirement, as they are already demonstrating
their seriousness.
5.2 Mathematical CS content
The BMath(CS) should naturally contain the more mathematical and theoretical of the 3rd year
CS courses. We recommend that both CS 360 and CS 370 remain core for the BMath(CS), even
though they have been removed from the B.CS core.
5.3 Other details
The specialization requirement of four 4th year CS courses in the current BMath(CS) program
has been slightly relaxed here to include 3rd year courses. Currently the only one would be Sys
2, though a User Interfaces course (CS 498R, developed to be a second year course in the joint
SE program) could be added, and other 3rd year courses may be proposed later; alternately, the
current requirement of four 4th-year CS courses (or Sys 2) could be retained, and additional 3rd
year courses could be free-choice.
The non-Math courses should be taken seriously as well, but the program is more constrained, so
a freer choice than offered for the B.CS might be permitted here. We suggest either the same
formula as for the B.CS (req 1 OR [req 2a AND req 2b]), or a slightly looser formula (req 1 OR
req 2a OR req 2b).
6. A 3-year general program in CS
For the purposes of this proposal, we will call this program the General B.CS, though it almost
certainly cannot be called this in practice, as the name does not distinguish it enough from the
B.CS above. We need a different name, such as Bachelor of Information Technology, by the
time the final proposal is approved. We have not specified a complete program here, because it
requires the commitment of additional teaching resources and the creation of new courses, and
the department has to have a separate discussion as to whether this is worthwhile.
A considerable number of our students that want to stay in the Faculty are forced from Honours
Computer Science to the General Mathematics program because they struggle with the math
content in their first two years. Ironically, this means that they must take more math and less
computer science in order to obtain their degree. They need a fallback option that matches their
interests. Until our attrition rate decreases dramatically, there will be more than enough students
interested in a General B.CS degree. These are talented students, as demonstrated by their
acceptance into our program, and it does not make sense to simply lose these students.
A General B.CS degree would increase our accountability to our CS minor programs and
sometimes neglected non-major courses. Though we have not specified a complete program, we
doubt whether the completion of our line of reasoning would very much affected by the selfdirected philosophy of the B.CS above; we have not seen the comprehensive proposal at the time
of writing, but we would not be surprised if a similar program below could be added to that as
well.
6.1 The current General Mathematics program
The current General Mathematics program requirements include:
1. 30 total courses
2. at least 16 Math courses
3. at least 10 non-Math courses
At least 10 (or one third) of courses must be non-CS math. This means that students may take at
most 10 (or one third) CS courses. In total, there are about 15 non-specialist CS courses to
choose from.
The theory behind the General Math program is that it is for students wanting a less intense
education than that provided by an Honours program, and for students unable to meet the
requirements of the Honours program. In practice, it is much more for the latter group of students
than the former. This will likely be the case for a General BCS program as well, and students
should not be directly admitted into it.
6.2 Towards a General B.CS program
It seems reasonable to assume that the proportion of CS, non-CS Math and non-Math courses of
the General B.CS program should be comparable to that of the Honours program, while
preserving the non-Math content of the Math General program. This suggests a mix of
approximately 10 CS, 6 non-CS Math and 10 non-Math. The problem is that we do not have
enough CS non-major courses to offer a reasonable core plus some choice totalling 10 courses.
The ones that might fit (together with permitted major substitutions) are:
CS 113 (CS 130)
CS 114 (CS 134)
CS 234 (CS 240)
CS 230 (CS 241)
CS 330 (Management Information Systems)
CS 338 (Databases)
CS 430 (Applications Software Engineering)
CS 432 (Business Systems Analysis)
CS 436 (Distributed Computer Systems)
CS 437 (Computer Simulation of Complex Systems)
At least two or three more CS non-major courses are needed, as some of the courses above
should not be core in a General B.CS program. One obvious suggestion is a non-major
equivalent of CS 246. Developing and offering these courses would take a serious commitment
of resources, and we hesitate to make further recommendations without broader discussion of the
merits of the idea.
The Math requirements could be:
MATH 127 (MATH 137)
MATH 128 (MATH 138)
MATH 125 (MATH 136)
MATH 126 (MATH 235)
Two more from the General Math short list, excluding the CS courses
The English language requirements, average requirements and limits on failures and course
attempts should be the same as for the General Math program.
Appendix A: References
B.CS Web page: http://www.cs.uwaterloo.ca/admin/curric/bcs/
Overview of programs at other institutions:
http://www.cs.uwaterloo.ca/admin/curric/bcs/overview.html
Overview of self-directed programs at other institutions:
http://www.cs.uwaterloo.ca/admin/curric/bcs/sd-overview.txt
Steelman draft of ACM Computing Curricula 2001:
http://www.computer.org/education/cc2001/steelman/cc2001/index.htm
Knowledge modules in Steelman core and their coverage in current BMath(CS):
http://www.cs.uwaterloo.ca/admin/curric/bcs/Steel-in-CS.txt
Content of current BMath(CS) core courses in Steelman module terms:
http://www.cs.uwaterloo.ca/admin/curric/bcs/CS-in-Steel.txt
Systems courses at UW compared to Steelman and other institutions:
http://www.cs.uwaterloo.ca/admin/curric/bcs/sys-comp.txt
Comments can be sent to Prabhakar Ragde (plragde@uwaterloo.ca)
Download