Separating Computer Skills from Computer Science:
The Evolution of Computing Courses
at the University of Alberta
Renee
Elio
Associate Professor
Department of Computing Science
University of Alberta
Edmonton, Alberta T6G 2H1
ree@cs.ualberta.ca
Abstract
For over a decade, the University of Alberta's Department of Computing Science has offered nine distinct introductory computing courses each year, with an average yearly enrollment of about 3100 students. Two of these courses serve as the default route for prospective computer science majors. The remaining courses were designed for and delivered to specific client groups, including two courses restricted to Arts and Education students, two courses targeted for science students, two courses restricted to Engineering students, and still another course restricted to Business students. These courses were either programming courses or computer skills and literacy courses. In 1996, only four introductory courses, defining two two-semester sequences, were offered. One of these courses is a newly-defined introduction to computer science course for both potential majors and non-majors alike, who have little or no prior computing experience. The course aims to present some fundamental ideas of computing science, without being a semester course on programming. This paper presents the factors that lead the Department of Computing Science to this substantive reorganization and redefinition of its introductory computing curriculum, a decision that it embraces despite some continuing challenges. It also outlines how non-academic units at the University of Alberta are effectively teaching computer skills for the client groups who previously looked to the Department of Computing Science for this service. The plausibility of specifying that certain computing skills are prerequisite for admission to university, at least functionally, is also considered.
1. Introduction
In Fall, 1996, the Department of Computing Science at the University of Alberta launched an "Introduction to Computer Science" course, designed for students who had little or no prior experience with computers, and who did not necessarily intend to pursue computer science as a major. The course does not focus on general computer skills or the use of applications software. Neither is it a semester course on programming. Its goal is to introduce some fundamental concepts about the science and technology underlying computers and computing, at a level appropriate for an introductory university course. With the advent of this course, the Department of Computing Science no longer offers courses that teach and evaluate a student's mastery of computer skills, applications software and productivity tools, and general microcomputer knowledge. Instead, it is currently concerned with identifying a plausible set of fundamental concepts associated with the discipline of computer science, and how those concepts can be introduced in a first-year university course.
The ramifications of this curriculum reorganization extend well-outside the Department and indeed, outside the university to the colleges that educate a large number of students who transfer to the university after their first or second year. In this paper, I focus on two of the broad questions arising from this transition: (1) If the Department of Computing Science is out of the business of teaching general computer skills and general computer knowledge at the UofA, who is in that business? and (2) What might an introductory course on computer science look like, if it is not exclusively focused either on programming or on applications software? I also outline some of the factors that promoted this transition, with the following caveat: My viewpoint comes from within the Department of Computing Science, as a regular tenured faculty member concerned, as are my colleagues, with both research and teaching duties. For three years, I directed the undergraduate program for the Department, which included overseeing the evolution and delivery of our so-called "service courses" to various groups, such as the Education, Business, Arts, and Engineering faculties. It is from this Departmental viewpoint that I offer some perspectives on past and present computer courses at the University of Alberta. There are other academic and non-academic units who have in some way or other participated in this evolution, and members of those units would plausibly have different viewpoints on some of the matters I address here.
The rest of this paper is organized as follows. First, I present some general background facts on the University of Alberta and the Department of Computing Science, followed by an overview of the introductory course offerings that have been part of the curriculum for the last 15 years. I then focus on the factors that, from my viewpoint, lead to a severe reduction in the number of distinct course offerings and the decision to replace the introductory skills and general information course, with an introductory computer science for a general audience. I present the current curriculum for this introductory course, and then outline how non-academic units at the University of Alberta are effectively teaching computer skills for the client groups who previously looked to the Department of Computing Science for this service. I close with brief discussion of the challenges still facing the Department as it emerges from the first year of this new curriculum.
2. Background
The University of Alberta enrolls approximately 25,000 undergraduates and approximately 10,000 graduate students. The Department of Computing Science resides within the Faculty of Science. It currently has 30 full-time academic staff, 24 support staff, and both a Masters and a Ph.D. degree program.
In 1984, the Department was allowed to institute a quota of 110 on the number of undergraduate students that newly enroll each year as majors, starting at the second-year. Students interested in taking senior courses to obtain a specialization or honors degree must take a set of quota-admission courses in their first year, which includes two introductory, first-year computing courses. Students who are not pursuing a computing science degree may also enroll in computing courses beyond the first year, provided there is space in the lab facilities. The Department has several joint programs with other departments and faculties, and spaces in our senior (non-first year) courses are reserved for such students as well.
In principle, the Department has at any time approximately 300 second-to-fourth year students enrolled as computer science majors. I will not, for the most part, be concerned with these students or with the courses defining the core, computer-science curriculum beyond the first year.
3. 1980-1995: Many Courses for Many Clients
For each year between 1980 and 1995, the Department offered nine distinct introductory computing courses, for which there was an average yearly enrollment of about 3100 students. Because these courses were defined with a particular clientele in mind, I will use client groups as a way of introducing them. I avoid referring to them only by esoteric course numbers, except where the context is helped by using the numbers.
Client Group 1: Officially, any student, but primarily prospective computing science students.
Courses:
A two-course, two-semester sequence (C114-C115). The first course, C114, is a full-semester programming course that covers standard programming constructs and static, user-defined data structures, and emphasizes good software engineering practices such as modular design. The second programming course covers more advanced constructs, such as dynamic data structures, abstract data types, and some algorithm complexity. Languages used in the past years have been Modula-2 and Pascal.
Enrollment:
Currently, about 500-600 across both courses, per year.
Client Group 2: Officially, any student, excluding students wishing to obtain Computing Science degree; typically, Faculty of Science students pursuing other science degrees, for whom a computing course is a program requirement.
Courses:
A two-course, two semester sequence on programming (C251-252). The first course was essentially a slower paced version of C114, using FORTRAN. The follow-up course involved more complex programming, but was not equivalent to C115 described above.
Enrollment:
About 240 for the first course, 30 for the second.
Client Group 3: Restricted to Faculty of Business students
Course:
A one-semester course (C157), required of all Faculty of Business students, whose topics included a general introduction to the parts and operation of a microcomputer, word processing, spreadsheets, databases, and simple programming in a procedural language. Software used for this course included Microsoft Office and QBASIC.
Enrollment:
About 420 students per year
Client Group 4: Primarily Faculty of Education students; open to all other students excluding Faculty of Business and Faculty of Science students.
Courses:
A two-course, two-semester sequence (C161-162) The first course was highly similar the course offered to Business students, and used the same software. The second course focused on programming and problem solving, similar to C252 described earlier.
Enrollment:
About 1200 per year in the first course, 90 in the second course.
Client Group 5: Restricted to Faculty of Engineering students
Course:
One course (ENCMP 100), required for all engineering students, on programming and algorithm development in a procedural language. This course began in the Department of Computing Science and is now officially a Faculty of Engineering course; instructors are drawn from both academic units and a Steering Committee from both units oversees the course direction. The Department of Computing Science provides lab facilities and infrastructure in the form of non-academic staff support who assist instructors in course management and delivery. Essentially, this course mirrors the C114 course described above for CS majors, with assignments geared towards engineering topics. A second course (C169) was an accelerated one-semester course, targeted to engineering students who wished to switch to the computer science program. The goal of this course was to bring these cross-over students to the same point as those who had taken the C114-115 sequence described in category A; it covered much the same material as C114 and C115 combined.
Enrollment:
About 550 in ENCMP-100, 100 in C169.
In addition to these, other introductory courses have been offered at the 100-level, but they are not relevant to the issues I'm considering here.
4. The tension between teaching computer skills v. computing concepts
In 1993, the Department of Computing Science and the Faculty of Business jointly agreed that the introductory computer course for business students would be dropped from the computing curriculum (and from the Faculty's requirements), and not be replaced by another university-credit course. I wish to focus briefly on this decision, because I believe it reflects exactly the kind of issues which both the Department and its client groups were and are still grappling with.
Essentially, the Department of Computing Science and the Faculty of Business could not agree, in the early 1990's, on the course content of the computing course offered for business students. The Computing Science Department felt that the course no longer had sufficient 'science' content to merit university credit in computing science, and did not wish to see it evolve further in that direction. The Business Faculty felt that the course, on the one hand, did not give sufficient treatment to the use of spreadsheet problem solving for business applications, and on the other hand, spent time on topics perceived as non-central to the needs of Business students. Business students were registering various complaints the role of this course as a degree requirement. Some objected to it as a requirement, because they had experience with personal computers and spreadsheet software; for them, it was a waste of time. Others objected to it as a degree requirement on the grounds that any instruction in programming and other computing concepts was irrelevant to their academic goals. To my mind, the clash of these two perspectives crystallizes the tension surrounding the instruction on computer skills and productivity/analysis tools v. instruction on more broadly-based computing concepts and problem-solving skills.
Like any other student group on campus, business students were arriving with a mixed background of computing knowledge. During much of the discussion of the content of this course, it was argued that learning basic control, data structure, and algorithm-design concepts in a procedural language would support and enable sophisticated problem-solving with spreadsheets. The counter pedagogical argument was that such ideas could be effectively taught within a spreadsheet context exclusively. And that was just the debate on programming. Ultimately, the Faculty of Business decided that what they really wanted their students to have, before entering certain business courses, were particular computer skills, and ascertained that short, non-credit modules could deliver just those skills to just those students who lacked them. I elaborate on this in more detail in a later section.
There are two points about this particular 'clash' of perspectives. First, it neatly illustrates the position that one can effectively use computer as an analysis and productivity tool, without recourse to the underlying science of computers and computing. Second, this clash and its ultimate resolution probably could not have happened at an earlier time. Indeed, it is the advances in the scientific and engineering disciplines have given us a virtual machine that allows us to problem-solve at a level of abstraction far removed from what the real machine is doing or how it is doing it. At this point in time, a course on computing science may be no more relevant to pursuing scholarly work in a discipline like business than is, say, a course on chemistry.
The removal of the introductory course for Business students was the first step in the Department's move away from courses that taught applications software as a service. Other factors served to motivate further streamlining and redefinition of the introductory curriculum.
4. Factors leading to Curriculum Restructuring and Redefinition
In 1996-97, the Department's introductory offerings dropped from its all-time high of nine distinct courses to just four, with enrollment at approximately 2400 students. In this section, I present my perspective on the factors driving this reorganization.
To my mind, at least the following factors contributed to the reorganization: (a) budgetary cutbacks at the university; (b) duplication of effort across courses; (c) the need to upgrade lab facilities in the most cost effective way possible, and (d) a move within the Faculty of Science to impose a certain structure on introductory offerings within its constituent departments.
Budgets, duplicated efforts, and upgrades. Not surprisingly, factors (a) through (c) are all intertwined. The University of Alberta underwent extensive cutbacks to its operating budget between 1993 and 1996. At the Departmental level, these cutbacks meant less money for sessional lecturers, who taught some of the introductory lecture sections, and "giving back" both academic and non-academic positions that had become open through retirements or resignations. One such affected unit was the Department's Instructional Support Group, a set of non-academic staff members that oversaw the hardware, software, and administrative infrastructure required to manage the instruction of 3000 or so students moving through the first-year courses. The ISG staff assist the instructors and the Department in the preparation and vetting of various curriculum materials (e.g., assignments, specialized lab manuals, teaching assistant training) and in the design and implementation of various system functions (e.g., distributing temporary IDs to students, automatic collection and testing of programming assignments). For many years, the distinct introductory courses made use of different hardware and software, necessitating different lab manuals, different ID-distribution systems, different methods of automating the collection and testing of submitted work, and so forth.
There was also a pressing need to upgrade the Macintosh Classic Lab, used by about 2000 students enrolled in service courses. Most of the students using this facility were not Faculty of Science students, because courses using that facility were exactly those courses that science students were prohibited from taking. The upgrade to those facilities cost $250K, to be paid via capital equipment allocations from the Faculty of Science. In tight economic times, that is a large amount of money for a science faculty to spend on a facility that, simply put, did not contribute to the education of science students.
On Streamlining Introductory Science Courses. Coincidentally with the pressures outlined above, the Faculty of Science was standardizing the structure of introductory courses across its constituent departments, to achieve two goals. The first goal was to remove 'dead-end' courses within a department i.e., a course that did not prepare a student to take some other course within a department. Put another way, any introductory course in a Department ought to be on some path that, in principle, could lead to a specialization or honors degree. Any so-called "service" course would typically not meet this goal. The second goal was to ensure that science students had sufficient flexibility in exploring different disciplines within science during their first year, and still be sufficiently prepared to specialize in their area of choice in their second year. To promote this, it was recommended that there be no more than a two-course introductory sequence that was required for further study at the second-year level.
The Result. These constraints made it impossible to maintain a large set of introductory courses tailor-made for different audiences, some leading to other computing science courses and some not, and others that differed only in the pace at which they taught programming and in the languages they used. Further, there could be no more "service" coursesÛcourses from which science students were excluded and which did not lead to other courses within the computing curriculum.
5. The Current Departmental Situation: Out of the Skills Business
As of 1996-97, students wanting introductory computing science courses have the following two choices during their first year.
The C114-115 Sequence. The CMPUT 114-115 sequence still exists. CMPUT 114 is officially aimed at any student from any faculty who either has had some prior computing experience or who wishes to have a computing course that focuses exclusively on programming skills. Its content has not changed under this curriculum reorganization and at the moment, it remains essentially an introductory programming course, to be followed by C115.
The C101-102 Sequence. CMPUT 101 was introduced in Fall, 1996. It is presented as a course for a student with little or no prior computing experience who (a) wishes to fulfill a formal studies requirement for an Arts degree, (b) must take the course for an Education degree, (c) is a science student contemplating computer science as a major, or (d) wishes to have a course on computer science that does not exclusive focus on programming. (As I note below, this heterogeneous set of goals may be unique with respect to most other introductory science courses). The mandate of its follow-up course, C102, is to bring students to the same level of knowledge and experience that would possess, had they taken the C114-115 route. This would satisfy the goal that either set of introductory courses would allow a student to continue with second-year courses. Because C101 is not a slower version of C114, but a qualitatively different course, C102 had to be an accelerated version of topics from C114 and C115. The Departmental expectation was that only about 30 of the students taking C101 would enroll in C102, and that this group would be prospective computing science majors inherently able to handle the accelerated pace. This did not prove to be the case. I will not comment further on C102, except in my concluding remarks section below.
Defining C101. The goal was to identify a set of underlying topics that speak to the foundations of computing and computer science. Practically speaking, the majority of textbooks for introductory computer courses fall into one of two categories. The first type is the sort of book we had used for our service courses in the past, such as Peter Norton's "Introduction to Computers" (Glencoe), which was no longer appropriate for this new course we had in mind. The second type is the sort of book that is exclusively a programming text in one language or another. This type of book was also in appropriate. In 1996-97, the Department used J. Glenn Brookshear's text " Computer Science: An Overview" (Addison Wesley).
The current lecture contents of the course are summarized in Table 1. The (new) lab facilities consist of 48 NCD Explora-X terminals connected to two SUN SPARC SS/5 servers, running NCD Wincenter Pro, Windows NT 3.51, Borland Turbo Pascal, and Netscape. Labs are 3-hours long and are supervised by teaching assistants. During the first three labs, students learn how to use the file manager, Netscape, e-mail and news, and the Turbo Pascal compiler. There are no graded assignments associated with acquiring these skills. Students complete four in-lab assignments on programming. During 1996-97, we adopted Brookshear's companion text "Experiments in Computer Science." This book makes use of a library of code, available through the Internet. For many of lab exercises, students download and run sample code, observe its behavior, and answer of an extensive library of code, available through the Internet. Exercises are designed to be "experimental" in nature: in questions or modify the code to do expanded tasks. These lab exercises were capped by a programming assignment of about 150 lines of code. For Winter, 1997, we have increased the amount of code students produce during their four assigned Pascal lab sessions.
At the moment, we are committed to spending about 40% of the course on introductory programming, because the course must be no more than one other course away from second-year studies. The remaining topics we currently address are summarized in Table 1, and map closely to Brookshear's presentation of this material. These topics fall into two distinct subcategories: computers and computing. The first category includes representation of data, machine architecture, and operating systems. We take these topics to a particular level of depth, so that a student can appreciate certain larger issues, such as overflow and round-off errors, the concept of stored instructions, and the machine as a rule-governed device. The presentation of a simple, hypothetical machine language seems to be extremely useful in securing a good mental model before moving students to a high-level programming language. Topics under the "computing" category are anchored around the centrality of algorithms to computer science. The course introduces the subjects of computability and problem classification according to time complexity. This is important so that students appreciate that not all problems are solvable. The operative word in these remarks is "introduces"....we do not expect students to master these concepts to any level of sophistication, but rather to be aware that such topics exist and to appreciate their importance to the discipline.
Students are assigned three homework assignments, which are pencil-and-paper problem-solving questions on conceptual topics taken from the textbook; two in-class tests; four lab reports (consisting of short programming exercises); a final programming assignment; and a final exam.
6. The University's Non-academic Units: Into the Skills Business
The need for teaching computer skills to University of Alberta students is being met by certain non-academic units. One such unit is the Academic Support Center, which traditionally offered workshops in calculus, writing, and library skills. It now offers a large range of 3-hour, $25-$50 workshops on topics such as "Introduction to Computers and Word-processing", "Word-processing with Microsoft Word 6.0 and Spreadsheets for Engineers", and "Introduction to the Internet."
Both the Faculty of Business and the Faculty of Engineering essentially 'subcontract' the job of teaching computer skills to their students to this unit. In the Faculty of Business, skills-assessment questionnaires are distributed to students in just those courses that require use of particular software packages at some given level of sophistication. Students are motivated to enroll in these courses by knowing that an upcoming assignment requires, say, advanced use of spreadsheet software. There are currently about 400 enrollments from Business students during the fall semester for these sorts of workshops, and about half that many during the winter semester.
The Faculty of Engineering takes the similar route. It has worked with the Academic Support Center to develop workshops specifically for Engineering students. Thus, the spreadsheet and graphing workshops for engineers use engineering problems and examples. The Faculty also aids students in doing a skills assessment using a questionnaire that is distributed with pre-registration materials, and workshop courses are scheduled during the week prior to classes.
The University of Alberta's Computing and Network Services Group is a non-academic unit that oversees computing facilities across campus. With the Academic Support Center, it has been extremely proactive in defining and promoting the availability of these crash workshops to all newly-arriving university students. In September, 1996, information about these computer-skills workshops was included in each student's registration package. Surprisingly, this registration-week blitz generated less than 500 enrollments (from the several thousand newly-arriving students). One account is that, without an immediate motivation for taking such workshops (i.e., the ability to complete an upcoming course assignment), students may not chose to enroll in such classes.
7. Concluding Remarks
There has been a separation in the teaching of computer science from the teaching of computer skills in the computing curriculum at the University of Alberta. I believe that, at least for this university and its Department of Computing Science, this separation is both desirable and effective from a number of perspectives. That said, there are still many issues that remain to be resolved. I touch briefly on them here.
Skills and Tools. The Computing Science/Engineering steering committee that oversees the introductory programming course for engineers has been most articulate in identifying that there are different sorts of computing knowledge that are crucial to the education of Engineering students, and most importantly, that these types can be acquired via different routes. This group has distinguished between "Fundamental Knowledge," "Programming Knowledge," "Productivity Tools" (e.g., spreadsheets, graphing packages), and "Communications Tools (e.g., Web browsers, e-mail)" The former two are addressed in the context of the regular computer science and computer engineering curriculum; the latter two types are being acquired via the workshops offered by the Academic Support Center. The Faculty of Business implicitly made a similar distinction, insofar as it ultimately decided that Business students benefit primarily from instruction in the latter two areas.
Extrapolating from the routes that the Faculties of Business and Engineering have taken, we can ask whether it is plausible to identify a set of computer skills that are, functionally, prerequisite for admission to university. There will be many different courses across many different departments and faculties that make use of these skills. Provided that the University offers a vehicle for obtaining the skills (e.g., through 3-hour workshops offered on campus), then it can become plausible for any instructor, in any course, to announce that assigned course work presumes that students possess these skills. I should note here that a slate of computer-skills workshops has been defined for and offered to faculty as well as students; enrollment in these courses is high.
Looking back, it is understandable that courses on computers and computing for scientific analysis were the domain of a post-secondary curriculum offered by a Department of Computer Science. For a long time, it was just that group of professionals who had the necessary background, and typically, the necessary specialized equipment for offering such courses. That is no longer the case. The "laboratory" for teaching this material is not significantly different than what the average person can purchase for the home. Knowledge of computers and computing skills is shared by a much larger group of professionals, outside of the traditional academic units; those professionals can be very effective in the design and delivery of computer skills instruction within a post-secondary environment.
Introductory Computer Science. The Department's definition of CMPUT101 continues to evolve. A useful question we continue to ask ourselves is "If this is the one course a student takes on the discipline of computer science, what are the fundamental ideas to present?" This is a tall order to fill. I would wager that the kinds of students who enroll in this course (at least for the near future) are not as homogeneous a setÛeither in terms of their high school preparation or their program of studyÛ as those who enroll in other introductory science courses, such as Physics, Chemistry, or Biology. For the first offering of the course, 40% of the students were Arts students, 15% were Education students, and 28% were Science students, with the remaining coming from Business, Nursing, Physical Education, and other programs. We have also discovered that C101 does notÛand perhaps cannotÛadequately prepare students for the accelerated programming pace that C102 demands. Thus, while C101 may in principle have a follow-up course, it may still function as a dead-end course for many students who wish to take a further computing course, but have no reason to take an accelerated course that is designed to produce computer science majors, ready for specialized second-year courses. It is also apparent that even those students 'destined' to become computer science majors are finding it difficult to sustain the pace that C102 requires. Thus, we continue to be challenged by needing to meet a number of goals for a variety of studentsÛthe vast majority of which are not entering our programÛ within a constrained set of introductory offerings.
On the interface between secondary and post-secondary education. A factor that exacerbates the problem of offering a streamlined set of first-year courses is that, unlike math or chemistry, there is no standardized high school course for computer science in Alberta. Some high schools do not offer a computing course or have computer labs; across high schools that do, the content of such a course can range from word processing skills to programming in C++. Finally, even where a recognizably good high-school course on computing exists, high school students understandably fill their schedules with those subjects that are in fact standardized and required for university admissions (e.g., Math 30, English 30, Chemistry 30, etc.). This situation adds further distinction to Computer Science vis · vis other science courses: no assumption that can be made about even the most basic, prerequisite knowledge.
Outlook for the future. Despite the problems we have encountered during our first year of these new offerings, it seems that the restructuring and redefinition of the introductory curriculum is on the right track for this Department. Further, the void in teaching much of the basic skills and literacy knowledge required by other programs is being effectively filled by other, non-academic units at the University. I predict that, on the one hand, computer skills will be de facto graduation, if not admission, requirements insofar as university credit-courses will simply assume students possess these skills to complete their course work. On the other hand, I think our new introduction to computers and computation course will eventually have a smaller, more homogenous subscriber base, not unlike other introductory science courses.
8. Acknowledgments
The perspectives offered in this paper are solely those of the author, who is also responsible for any inaccuracies in the information presented here. That said, my fellow Department members have contributed to the clarity of these issues during many discussions. I would like to particularly thank Norma Nocente, who has taught many of the Academic Support Center courses for the Business and Engineering Faculties, and was able to broaden my understanding of the trends on campus.
Table 1
Lecture Topics for CMPUT 101: Introduction to Computer Science
(39 hours)
Binary and hexadecimal coding schemes for character, integer, and floating point data, including two's complement and excess notation; round-off errors and overflow errors; defining features a of random-access memory and mass storage; quantifying data storage and retrieval times; remarks on current technology.
The idea of stored instructions and the architecture that supports their sequential execution in the standard von Neumann design; the fetch-decode-execute cycle; the CPU's control unit, program counter, ALU and registers; data and address buses; factors affecting processor speed; understanding a simple machine language; classes of machine language instructions, such as compare, jump, and data transfer, to introduce basic control concepts of sequence, selection, and repetition that the student will later see in a high-level language.
The central role of algorithms in computing science; the evolution of languages from machine languages through procedural and fourth-generation languages; compilers and interpreters; syntax and semantics for programming languages; stages of the compilation process; the correspondence between high-level language instructions and their realization as machine level language instructions; data types.
Primitive data types and control constructs in Pascal; single dimensional arrays; design modularity afforded by user-defined functions and parameter-less procedures.
The idea that algorithms have analyzable properties such as required space and time; illustration of time complexity of different searching algorithms; Big O notation; defining classes of problems in terms of time complexity; computability; Turing machines and finite-state diagrams.
Functions of operating systems; notion of the virtual machine; evolution of operating systems; general OS architecture; aspects of time-sharing and resource allocation; overview of network topologies and protocols.
Note: This definition is a streamlined
version of the first offering of the course in Fall 1996, which included other
topics such as database concepts. The remaining lecture hours are allocated to
testing and other course mechanics.