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

2019-2020 Course Catalog

Select

This catalog was created on Friday, November 22, 2019.


Computer Science

Professor:K. Krebsbach (Mathematics)
Associate professor:J. Gregg (Mathematics) (on leave term(s) I)
Assistant professors:A. Chakraborty (Mathematics), A. Sage (Mathematics)

The computer science major offers students an opportunity to combine these two disciplines, enriching both.

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 220 Applied Combinatorics
  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. MATH 155 Multivariable Calculus
    3. MATH 220 Applied Combinatorics
  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 400 or above

Teacher certification in computer science

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 A or AB computer science exam administered by the College Board. Consult the department for details and proper placement.

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 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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required

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.
Units: 6.
Prerequisite: One prior course in mathematics or computer science, or BIOL 170, or consent of instructor

CMSC 208: 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.
Units: 6.
Also listed as Linguistics 208, Mathematics 208
Prerequisite: One course in mathematics or computer science, or BIOL 170, 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 C language, design and implementation of numerical algorithms, and an introduction to symbolic computation.
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.
Units: 6.
Prerequisite: 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.
Units: 6.
Prerequisite: CMSC 150 and CMSC 250, or consent of instructor

CMSC 390: Tutorial Studies in Computer Science

Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required

CMSC 399: Independent Study in Computer Science

Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
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.
Units: 6.
Prerequisite: MATH 140 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.
Units: 6.
Prerequisite: CMSC 250 and CMSC 270

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.
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.
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.
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.
Units: 6.
Prerequisite: CMSC 270 and MATH 220

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.
Units: 6.
Prerequisite: CMSC 150 and either MATH 220 or MATH 300

CMSC 590: Tutorial Studies in Computer Science

Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required

CMSC 599: Independent Study in Computer Science

Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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

Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required.

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.
Units: 1 TO 98.
Prerequisite: Counter Registration Required

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.
Units: 6.
Prerequisite: Instructor Approval required

CMSC 699: Independent Study in Computer Science

Units: 1 TO 98.
Prerequisite: Counter Registration Required.