2024-2025 Course Catalog

Please note: The information displayed here is current as of Thursday, November 21, 2024, but the official Course Catalog should be used for all official planning.

Computer Science

ProfessorK. Krebsbach (on leave term(s) I)
Associate professorJ. Gregg
Assistant professorsA. Ackles (Assistant Professor of Computer Science), A. Chakraborty

Computer science combines an empirical aspect—which involves implementing specific algorithms—with a theoretical aspect—which involves analysis of abstract processes using methods of applied mathematics. Both aspects of the discipline contribute to understanding what problems are amenable to computer solution and what methods are optimal.

Today, computing importantly serves academic research no less than commercial enterprise. Moreover, a disciplined exposure to computer science within the context of studies in liberal arts and sciences fosters in the student the development of clarity and precision in analysis, logic, and expression.

Computing facilities on campus are abundant, offering students the opportunity to work with all major operating systems and programming languages.


Required for the major in computer science

The major in computer science prepares students to demonstrate independent learning in the context of an independent project: to establish a project of appropriate scope; to identify appropriate approaches and problem-solving strategies, including the appropriate level of abstraction to apply to the project to design and implement software that satisfies the requirements of the project; and to communicate the results of the project work to others clearly using methods appropriate to the discipline of computer science.

The major in computer science requires the following:

  1. The following math courses:
    1. MATH 140 Calculus
    2. MATH 155 Multivariable Calculus
    3. MATH 230 Discrete Mathematics
  2. The following computer science courses:
    1. CMSC 150 Introduction to Computer Science
    2. CMSC 250 Intermediate Programming Concepts
    3. CMSC 270 Introduction to Data Structures
    4. CMSC 510 Data Structures and Algorithm Analysis
  3. One of the following courses:
    1. CMSC 205 Data-Scientific Programming or
    2. CMSC 208 Machine Learning
  4. Three additional six-unit CMSC courses numbered 400 or above, excluding tutorial, directed study, and independent study courses taken for any reason.
  5. The following courses taken in the senior year:
    1. CMSC 698 Senior Projects or CMSC 699 Independent Study in Computer Science (6 units) if CMSC 698 is not offered
    2. CMSC 600 Senior Seminar (3 units)

Required for the minor in computer science

  1. The following math courses:
    1. MATH 140 Calculus
  2. The following computer science courses:
    1. CMSC 150 Introduction to Computer Science
    2. CMSC 250 Intermediate Programming Concepts
    3. CMSC 270 Introduction to Data Structures
  3. One additional six-unit CMSC course numbered 200 or above
  4. One additional six-unit CMSC course numbered 400 or above

Teacher certification in computer science (grades 4-12)

Computer science majors can seek certification to teach computer science at the secondary level. Students can add an endorsement in a second area by completing an appropriate minor. Students who plan to seek teacher certification should review the requirements in the Education section of the catalog and meet with the director of teacher education, preferably before the end of the sophomore year.


Tutorials

Tutorials are opportunities to enhance usual course offerings, not duplicate them. In order to reserve tutorials for this purpose, no tutorials or directed studies are given for courses routinely offered, and the department does not normally permit a tutorial to satisfy a major or minor requirement for graduation.


Placement

  • Advanced placement and six units of Lawrence credit (for CMSC 150) may be obtained by scoring 4 or 5 on the computer science A exam administered by the College Board. Consult the department for details and proper placement.
  • Six units of Lawrence credit (but generally no advanced placement) may be obtained by scoring 4 or 5 on the computer science Principles exam administered by the College Board. 

Senior Experience in computer science

Computer science majors complete an independent project during the senior year in either the fall term Senior Projects course (CMSC 698) or, if the Senior Projects course is not offered, in a 6-unit independent study. They present the results of their project in the winter term Senior Seminar (CMSC 600, 3 units). The project must be approved and supervised by a faculty member in the department. Students should consult with department faculty in the spring before their senior year in order to plan for their Senior Experience.



Courses - Computer Science

CMSC 106: Web Client Programming

An introduction to some of the technologies underlying the world wide web, with emphasis on client-side programming. Topics covered include introductions to HTML, CSS, and JavaScript. This course is suitable for students with no prior experience in programming.
Units: 6

CMSC 140: Introduction to Programming with Python

An introduction to computer programming for non-majors or other students interested in building basic programming skills. Topics include basic programming constructs such as decision statements, iteration, and functions. Students will complete a number of programming assignments over the course of the term, culminating in a final project. Instruction in the Python language.
Units: 6

CMSC 150: Introduction to Computer Science

An introduction to computer programming for potential mathematics/computer science majors and other students with a strong interest in computing. Topics include elementary programming constructs, design and implementation of algorithms, and object-oriented programming. Introductory instruction in the Java language.
Units: 6

CMSC 191: Directed Study in Computer Science

Directed study follows a syllabus set primarily by the instructor to meet the needs or interests of an individual student or small group of students. The main goal of directed study is knowledge or skill acquisition, not research or creative work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 195: Internship In Computer Science

The academic component of the internship includes readings related to the substance of the internship, discussions with the faculty supervisor, and a written report appropriate to the discipline. Course grades are based on this academic work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor

CMSC 205: Data-Scientific Programming

An introduction to programming with emphasis on learning from data in order to gain useful insights. Topics focus on elementary programming concepts in the R language and the necessary tools to handle, analyze and interpret data. This course will be taught in a workshop format, and students will complete regular assignments and a final project that provide hands-on programming/analysis experiences. PREREQUISITES: One prior course MATH, STAT, or CMSC course, or BIOL 170, or BIOL 280, or consent of instructor
Units: 6
Also listed as Statistics 205
Prerequisite: One prior course MATH, STAT, or CMSC course, or BIOL 170, or BIOL 280, or consent of instructor

CMSC 208: Statistical Machine Learning

An overview of techniques used to discover structural patterns and make predictions using complex datasets that are prevalent in today's world. The central machine learning tasks of classification, clustering, and regression will be explored, along with methods for training models and evaluating predictions. This course will be taught in a workshop format. Assignments will involve the use of statistical software. PREREQUISITES: CMSC 150, or CMSC 205, or CMSC 210, or consent of instructor
Units: 6
Also listed as Linguistics 208, Statistics 208
Prerequisite: CMSC 150, or CMSC 205, or CMSC 210, or consent of instructor

CMSC 210: Introduction to Scientific Programming

An introduction to computer programming with an emphasis on numerical applications in mathematics and the sciences. Topics include elementary programming concepts in the Python language, design and implementation of numerical algorithms, and an introduction to symbolic computation. PREREQUISITES: One term of calculus (either MATH 140 or MATH 120), or consent of instructor
Units: 6
Prerequisite: One term of calculus (either MATH 140 or MATH 120), or consent of instructor

CMSC 250: Intermediate Programming Concepts

A study of more advanced programming techniques in the Java language. Topics include graphical user interfaces, exception-handling, multithreading, networking, databases, and web applications. PREREQUISITES: MATH 140 and C- or better in CMSC 150
Units: 6
Prerequisite: MATH 140 and C- or better in CMSC 150

CMSC 270: Introduction to Data Structures

A study of advanced programming and an introduction to data structures. Topics focus on programming skills needed for the design and implementation of standard data structures such as lists, trees, and graphs and their associated algorithms. Additional topics include recursion, analysis of algorithms, and advanced aspects of object-oriented programming in the C++ language. PREREQUISITES: C- or better in CMSC 250
Units: 6
Prerequisite: C- or better in CMSC 250

CMSC 390: Tutorial Studies in Computer Science

PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 391: Directed Study in Computer Science

Directed study follows a syllabus set primarily by the instructor to meet the needs or interests of an individual student or small group of students. The main goal of directed study is knowledge or skill acquisition, not research or creative work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 395: Internship In Computer Science

The academic component of the internship includes readings related to the substance of the internship, discussions with the faculty supervisor, and a written report appropriate to the discipline. Course grades are based on this academic work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor

CMSC 399: Independent Study in Computer Science

PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 405: Advanced Data Computing

This course builds on CMSC/STAT 205, providing a deeper exploration of statistical computing in R. Topics might include efficient programming techniques, parallelization, statistical algorithms, advanced data visualization, and creation of R packages. Statistical software will be used extensively in this course. The class will be taught in an interactive lab-based format. There will be regular assignments and a project. PREREQUISITES: CMSC 205
Units: 6
Also listed as Statistics 405
Prerequisite: CMSC 205

CMSC 406: Web Development

Introduction to client side and server side web development with HTML, CSS, and JavaScript. Topics covered include the use of client side and server side JavaScript frameworks. Students will complete a number of small projects over the course of the term. PREREQUISITES: CMSC 270
Units: 6
Prerequisite: CMSC 270

CMSC 410: Systems Analysis and Design

An introduction to techniques for analyzing and modeling systems for implementation as computer programs. Topics include a survey of modeling methodologies for structured and object-oriented systems and case studies of system development. Also, applications of analysis and design methods to database design and design of distributed systems. PREREQUISITES: CMSC 250
Units: 6
Prerequisite: CMSC 250

CMSC 420: Computer Graphics

The fundamentals of computer graphics and their applications in visualizing a variety of scientific phenomena. Topics include graphics primitives, two- and three-dimensional transformations, three-dimensional viewing techniques, spline curves, surface patches, hidden line algorithms, ray tracing, radiosity, texture-mapping, and fractals. PREREQUISITES: MATH 155 and CMSC 270
Units: 6
Prerequisite: MATH 155 and CMSC 270

CMSC 435: Computer Organization & Architecture

The structure and function of computers as viewed from the hardware/software interface. Hardware topics include elementary digital logic, data storage devices, dataflow pathways, and central processor organization with special emphasis on parallelism. Corresponding software topics include data representation and manipulation, instruction sets, addressing techniques, and program control mechanisms. PREREQUISITES: CMSC 250 and CMSC 270
Units: 6
Prerequisite: CMSC 250 and CMSC 270

CMSC 445: Mobile Application Development

Introduction to mobile application development with modern application development frameworks. Frameworks covered may include Swift/iOS, Kotlin/Android or other similar frameworks. Topics covered will include user interfaces for mobile applications and the use of back end services. Students will complete a series of app development projects over the course of the term. PREREQUISITES: CMSC 270
Units: 6
Prerequisite: CMSC 270

CMSC 455: Back End Programming

Tools and techniques for constructing server side back end software for modern web and mobile applications. Topics covered will include working with both SQL and NoSQL databases and frameworks for constructing back end applications. This course will be structured as a traditional lecture course with regular programming assignments. PREREQUISITES: CMSC 250
Units: 6
Prerequisite: CMSC 250

CMSC 460: Programming Languages

An examination of issues in the design and implementation of programming languages. Students will first gain proficiency in the functional programming paradigm (using Scheme), and will then design and implement, in Scheme, an interpreter for a brand-new programming language. PREREQUISITES: CMSC 250 and CMSC 270
Units: 6
Prerequisite: CMSC 250 and CMSC 270

CMSC 470: Artificial Intelligence

A detailed investigation into foundational concepts of artificial intelligence: search, knowledge representation, and automated planning. Specific topics include uninformed and heuristic search techniques, logic-based knowledge representations, automated theorem-proving, logic programming (Prolog), action representations, means-ends analysis, regression and partial-order planning, and reachability analysis using graphs. PREREQUISITES: CMSC 250 and CMSC 270
Units: 6
Prerequisite: CMSC 250 and CMSC 270

CMSC 480: Systems Programming

A survey of some fundamental aspects of computer operating systems and their impact on the performance of software. Topics include process and memory management, system level input/output, concurrency, and parallel programming. PREREQUISITES: CMSC 270
Units: 6
Prerequisite: CMSC 270

CMSC 490: Neural Networks

A survey of modern applications for neural networks and programming toolkits used to implement them. Applications surveyed will include image recognition, natural language processing, and machine learning applications. Students will complete programming projects using modern toolkits for neural network construction. Course is structured as a traditional lecture course with programming assignments. PREREQUISITES: CMSC 270
Units: 6
Prerequisite: CMSC 270

CMSC 500: Special Topics in Computer Science

An exploration of advanced computing techniques such as artificial life, constraint logic, continuation-passing, lazy evaluation, production systems, and robot programming, to name a few. The choice of topics for any given term will vary according to the interests of the students and faculty.
Units: 6
Prerequisite: CMSC 270

CMSC 510: Data Structures and Algorithm Analysis

Advanced data structures and the time and space efficiency of the algorithms that manipulate such structures. Topics include proof of correctness for algorithms, recursion, dynamic programming, optimized tree structures, union-find problems, graphs, path-finding algorithms, and string search algorithms. PREREQUISITES: MATH 230, and C- or better in CMSC 270
Units: 6
Prerequisite: MATH 230, and C- or better in CMSC 270

CMSC 515: Theory of Computation

A study of programming in the abstract, leading to an understanding of the precise nature and limitations of computing machines. Topics include universal computing machines such as Turing machines, decidable and undecidable predicates, regular and pushdown automata, and regular and context-free grammars. PREREQUISITES: CMSC 150 and MATH 230
Units: 6
Prerequisite: CMSC 150 and MATH 230

CMSC 590: Tutorial Studies in Computer Science

Advanced study arranged and carried out under the direction of an instructor. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 591: Directed Study in Computer Science

Directed study follows a syllabus set primarily by the instructor to meet the needs or interests of an individual student or small group of students. The main goal of directed study is knowledge or skill acquisition, not research or creative work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 595: Internship In Computer Science

The academic component of the internship includes readings related to the substance of the internship, discussions with the faculty supervisor, and a written report appropriate to the discipline. Course grades are based on this academic work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor

CMSC 599: Independent Study in Computer Science

Advanced research. Students considering an honors project should register for this course, for one or more terms. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 600: Computer Science Senior Seminar

Intended as a capstone experience for math-computer science majors, this course provides a forum for seniors to formally present the results of their required independent study projects. CMSC minors and other students doing senior projects involving computing are also invited to present their work in this seminar.
Units: 3

CMSC 690: Tutorial Studies in Computer Science

Advanced study arranged and carried out under the direction of an instructor. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 691: Directed Study in Computer Science

Directed study follows a syllabus set primarily by the instructor to meet the needs or interests of an individual student or small group of students. The main goal of directed study is knowledge or skill acquisition, not research or creative work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.

CMSC 695: Internship In Computer Science

The academic component of the internship includes readings related to the substance of the internship, discussions with the faculty supervisor, and a written report appropriate to the discipline. Course grades are based on this academic work. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor

CMSC 698: Computer Science Senior Projects

Designed as an inclusive alternative to separately-scheduled, required independent studies (CMSC 699). Students in the graduating cohort will present proposals, progress reports, and preliminary results of their self-directed senior projects to be evaluated by their peers while learning about each others' capstone projects in computer science. PREREQUISITES: Instructor Approval required
Units: 6
Prerequisite: Instructor Approval required

CMSC 699: Independent Study in Computer Science

Advanced research. Students considering an honors project should register for this course, for one or more terms. PREREQUISITES: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.
Units: 1 TO 98
Prerequisite: To register student must complete the Student Initiated Course Form with consultation of supervising instructor.