By Anne Rogers
February 24, 2022

In a series of meetings over the last year, the faculty in Computer Science undertook a reevaluation of the three introductory CS sequences. The result of those discussions is a new four-course sequence that blends many of the best elements of our current introductory courses with new material. The new sequence will begin with applications programming in Python and transition into systems programming in C. As part of this initiative, we will begin offering placement tests to allow students with different levels of experience to join the sequence at different entry points.

The new introductory sequence will include the following courses:

  • CMSC 14100: Introduction to Computer Science I
  • CMSC 14200: Introduction to Computer Science II
  • CMSC 14300: Systems Programming I
  • CMSC 14400: Systems Programming II

(See below for course descriptions.)

Many of the topics that have long been staples of our introductory courses, such as recursion, program design, and what it means to be the client of an operating system, will continue to be an important part of what we teach. In addition, we will be covering content, notably object-oriented programming, that is new to our curriculum. Expanding to four quarters will also allow us to devote more time to existing topics, especially data structures and concurrency, and will give students more time to become proficient programmers before diving into advanced material. These courses will also help students master important software development skills, such as working from the command line, debugging, and using version control to work collaboratively, that are necessary for success in upper-level courses.

Students without prior experience in computer science should plan to start in Introduction to Computer Science I (CMSC 14100). We will be offering placement exams for students with prior experience. See below for more information about placement.

Two of the current introductory sequences (CMSC 12x and CMSC 16x) will be retired after this academic year. CMSC 15200 will be offered in Autumn 2022 and CMSC 15400 will be offered in Autumn 2022 and Winter 2023 to allow students who are in the midst of taking the CMSC 15x sequence to complete it. To fulfill a commitment to the summer program, CMSC 15100 will be offered one last time in Summer 2022. In addition, the material previously taught in CMSC 16100 will be covered in a revised version of Functional Programming (CMSC 22300). (See below for the course description.)

The number of courses required for a Computer Science major will remain at 14. To accommodate the longer introductory sequence, the number of courses required from the Programming Languages and Systems category will be reduced from three to two. The number of courses required for a Computer Science minor will remain at seven.

We have assembled a page to answer questions that we expect to be asked frequently. If that page does not answer your question, please contact Anne Rogers.

Placement

Starting in Summer 2022, the Department, in collaboration with the College, will offer two placement exams to help students with prior experience in computer science determine the correct starting point. The first exam, which will be offered online, will test the material covered in CMSC 14100 and CMSC 14200. This exam will be offered in multiple programming languages. It is intended to evaluate students’ grasp of concepts, not their fluency with a specific programming language.

Solely based on this exam, students may be placed into:

  • CMSC 14100: Introduction to Computer Science I
  • CMSC 14200: Introduction to Computer Science II
  • CMSC 14300: Systems Programming I

Students who are placed into Introduction to Computer Science II (CMSC 14200) will receive credit for Introduction to Computer Science I (CMSC 14100) upon successfully completing Introduction to Computer Science II.

Students who are placed into Systems Programming I (CMSC 14300) will be invited to sit for the Systems Programming Exam, which will be offered in person before the start of the Autumn quarter. Based on this exam, students may place into:

  • CMSC 14300: Systems Programming I
  • CMSC 14400: Systems Programming II
  • Upper-level computer science courses

Students who are placed into Systems Programming I (CMSC 14300) will receive credit for Introduction to Computer Science I (CMSC 14100) and Introduction to Computer Science II (CMSC 14200) upon passing Systems Programming I (CMSC 14300).

Students who are placed into Systems Programming II (CMSC 14400) will receive credit for Introduction to Computer Science I (CMSC 14100) and Introduction to Computer Science II (CMSC 14200) upon passing Systems Programming II (CMSC 14400). In addition, Computer Science majors who place out of Systems Programming I (CMSC 14300) will be expected to replace it with an additional course from the Programming Languages and Systems list for a total of three from this category.

Computer Science majors who place out of Systems Programming II (CMSC 14400) based on the Systems Programming Exam will be required to take an additional course from the Programming Languages and Systems list for a total of three from this category and an additional computer science elective course for a total of six electives.

We expect to announce more information about these exams during the spring quarter. Please complete this form if you wish to be notified when this information becomes available.

Course Descriptions

CMSC 14100: Introduction to Computer Science I

This course is the first of a pair of courses that are designed to introduce students to computer science and will help them build computational skills, such as abstraction and decomposition, and will cover basic algorithms and data structures. Students will also be introduced to the basics of programming in Python including designing and calling functions, designing and using classes and objects, writing recursive functions, and building and traversing recursive data structures. Students will also gain basic facility with the Linux command-line and version control.

Placement into MATH 15100 or completion of MATH 13100, or instructor’s consent, is a prerequisite for taking this course.

CMSC 14200: Introduction to Computer Science II

This course is a direct continuation of CMSC 14100. Students will explore more advanced concepts in computer science and Python programming, with an emphasis on skills required to build complex software, such as object-oriented programming, advanced data structures, functions as first-class objects, testing, and debugging. The class will also introduce students to basic aspects of the software development lifecycle, with an emphasis on software design. Students will also gain further fluency in working with the Linux command-line, including some basic operating system concepts, as well as the use of version control systems for collaborative software development.

CMSC 14100, or placement into CMSC 14200, is a prerequisite for taking this course.

CMSC 14300: Systems Programming I

This course is the first in a pair of courses designed to teach students about systems programming. In this course, students will develop a deeper understanding of what a computer does when executing a program. In order to make the operations of the computer more transparent, students will study the C programming language, with special attention devoted to bit-level programming, pointers, allocation, file input and output, and memory layout. In the context of the C language, the course will revisit fundamental data structures by way of programming exercises, including strings, arrays, lists, trees, and dictionaries. Furthermore, the course will examine how memory is organized and structured in a modern machine. Students will gain basic fluency with debugging tools such as gdb and Valgrind and build systems such as make.

CMSC 14200, or placement into CMSC 14300, is a prerequisite for taking this course.

CMSC 14400: Systems Programming II

This course is a direct continuation of CMSC 14300. This course covers the basics of computer systems from a programmer’s perspective. Topics include machine language programming, exceptions, code optimization, performance measurement, system-level I/O, and concurrency. Students will gain further fluency with debugging tools and build systems.

CMSC 14300, or placement into CMSC 14400, is a prerequisite for taking this course.

Related Courses

As noted above, the material previously taught in Honors Introduction to Computer Science I (CMSC 16100) will be covered in Functional Programming (CMSC 22300). Here is the course description for the revised version of this course.

CMSC 22300: Functional Programming

Programming languages often conflate the definition of mathematical functions, which deterministically map inputs to outputs, and computations that effect changes, such as interacting with users and their machines. This course will enrich students’ perspective about these two related but distinct mechanisms, by studying the statically-typed pure functional programming language Haskell. Topics include: algebraic datatypes, an elegant language for describing and manipulating domain-specific data; higher-order functions and type polymorphism, expressive mechanisms for abstracting programs; and a core set of type classes, with strong connections to category theory, that serve as a foundational and practical basis for mixing pure functions with stateful and interactive computations. In addition to small and medium-sized programming assignments, the course includes a larger open-ended final project.

Starting AY 2022-23, students who have taken CMSC 16100 are not allowed to register for CMSC 22300.