CMPSCI 187 is an "R2" General Education course, fulfilling one of the graduation requirements for any bachelor's degree at UMass. (In practice, nearly all students in the course will have already filled this requirement with a mathematics course or with CMPSCI 121, but exceptions are possible.)

As part of the university's supervision of General Education, departments are required every five years to renew each course's gen-ed designation, explaining exactly how the course fulfills the goals set out for the designation by the General Education Council. As part of this review in 2012, I learned that instructors are required to address this question in their syllabus, explaining the learning goals for the course and how the gen-ed goals are being met.

- Develop programming maturity in Java beyond that developed in CMPSCI 121, so that students are able to write and validate large programs with multiple classes.
- Learn about the specification, use, and implementation of important data structures such as stacks, queues, lists, search trees, and graphs.
- Begin the study of the mathematical analysis of algorithms, so that students may compare the worst-case asymptotic running times of different algorithms solving the same problem.

The General Education Council has listed ten overall learning goals for General Education courses, four of which are primary for CMPSCI 187 and two of which are secondary:

- (a) Fundamental questions, ideas, and methods of analysis: Data structures and their interplay with algorithms form a fundamental concept of computer science and arguably of mathematics.
- (b) Application and intergration of these methods to real world problems and contexts: Students learn to create software that can affect the real world.We also begin the study of software engineering, which is the body of knowledge used by people to create software, both singly and in teams.
- (c) (secondary) Creative, analytical, quantitative, and/or critical thinking: Programming is a creative process and critical analysis of programs is fundamental to the process of creating software that is correct and reliable.
- (h) (secondary) Working effectively and collaboratively in groups: We assign discussion problems to pairs, and also study how language concepts and programming practice can enhance collaboration in the creation of software.
- (i) Information Literacy: After CMPSCI 187 students are much better equipped to communicate effectively about information technology, having hands-on experience with the creation of software in a general-purpose language.
- (j) Technological literacy: After CMPSCI 187 students are much better equipped to communicate effectively about technology, having direct experience with the creation of software.

- Numeracy skills: Students learn to better understand quantitative information by learning techniques to manipulate it with computer programs. They learn to test and validate programs, reinforcing a critical perspective toward the ways in which information is manipulated.
- Mathematical and quantitative reasoning: Writing correct and reliable programs requires confidence that the program will have the desired behavior, a confidence that comes from both testing and analytic validation. While formal mathematical proof is not stressed in this course as it is later in computer science, the tools of analysis for programs are essentially those of formal mathematics. In addition, students learn asymptotic analysis in order to measure the resources used by programs -- this mathematical topic is likely to be new to them.

Last modified 18 August 2014