May 03, 2024  
Catalogue 2021-2022 
    
Catalogue 2021-2022 [ARCHIVED CATALOG]

Computer Science Department


Chair: First semester, Luke Hunsbergerb; second semester, Thomas Ellman;

Professor: Luke Hunsbergerb;

Associate Professors: Thomas Ellman,  Marc L. Smithb

Assistant Professors: Anna Gommerstadt, Rui Manuel Pacheco Meireles, Jason Waterman;

Visiting Assistant Professors: Jonathan Gordon, Matthew Lambert;

Visiting Senior Lecturer: Phyllis Frankl;

Adjunct Instructor: Peter Lemieszewski.

b on leave 2021/22, second semester

Advanced Placement: Students eligible for Advanced Placement may be able to bypass CMPU 101  or CMPU 102  with permission of the department. A bypassed course cannot be counted toward the 10 units plus the intensive required for the Computer Science concentration or the 6-unit requirement for the Computer Science correlate.

Departmental Honors : A 3.6 GPA overall; and 3.8 GPA in all 200-level and 300-level courses in the major; or  distinction in a CMPU Senior Thesis; or nomination by CMPU faculty.

Non-Majors: Students majoring in the sciences are advised to complete CMPU 101 , CMPU 102 , and CMPU 145 , or to complete a correlate sequence in Computer Science.

Programs

Major

Correlate Sequence in Computer Science

Courses

Computer Science: I. Introductory

  • CMPU 101 - Computer Science I: Problem-Solving and Abstraction

    Semester Offered: Fall and Spring
    1 unit(s)
    Introduces the fundamentals of computer science by introducing the functional programming paradigm, including basic recursive and iterative algorithms, data structures such as lists, vectors and trees. Introduces procedural and data abstraction, and elementary programming patterns. A weekly laboratory period provides guided hands-on experience. The department.

    Open to all classes.

    Two 75-minute periods plus laboratory.

    Course Format: CLS
  • CMPU 102 - Computer Science II: Data Structures and Algorithms

    Semester Offered: Fall and Spring
    1 unit(s)


    Continues CMPU 101 . Examines object-oriented programming and associated algorithms using more complex data structures as the focus. Discusses nested structures and non-linear structures, such as stacks, queues, linked lists, trees, heaps, maps, and graphs.  Emphasizes abstraction, encapsulation, inheritance, polymorphism, recursion, and object-oriented design patterns. Applies these concepts to sample applications that illustrate the breadth of computer science. A weekly laboratory period provides guided hands-on experience. The department.

    Prerequisite(s): CMPU 101 .

    Open to all classes.

    Computer Science 102 and CMPU 145  may be taken in either order or concurrently.

    Two 75-minute periods plus laboratory.

    Course Format: CLS

  • CMPU 144 - Foundations of Data Science


    1 unit(s)
    (Same as MATH 144 )  This course focuses on students’ development and practice of computational thinking and inferential thinking. Students learn the basics of the Python programming language to make generalizations based on limited data while accounting for uncertainty in the data collection process. Students learn to write programs, generate images to visualize data, and work with real-world datasets, culminating in a final project centered around analyzing climate change data. Jingchen (Monika) Hu, Jason Waterman.

    Two 75 minute periods and one 2-hour lab.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 145 - Foundations of Computer Science

    Semester Offered: Fall and Spring
    1 unit(s)


    Introduces the theoretical, structural and algorithmic foundations of computer science. Topics include: sets, relations, functions, recursive data structures, recursive functions, induction, structural induction, probability, logic, and boolean algebra. Concepts are reinforced by regular programming assignments. A weekly laboratory period provides guided hands-on experience. The department.

    Prerequisite(s): CMPU 101 .

    Open to all classes.

    CMPU 145 and CMPU 102  may be taken in either order or concurrently.

    CMPU 145 and CMPU 203  may be taken in either order or concurrently.

    Two 75-minute periods plus laboratory.

    Course Format: CLS

  • CMPU 195 - Introduction to Digital Design and Fabrication


    0.5 unit(s)


    Students will learn and employ user-centered design to develop and fabricate two- and three-dimensional projects. Hands-on lab topics will include computer aided design, computer aided manufacturing, basic circuitry, and microcontroller programming. 

     

    No previous experience in design, fabrication, electronics, or programming is required. 

    One 75 minute meeting

    Not offered in 2021/22.

    Course Format: CLS

  • CMPU 196 - Data Visualization Tools and Techniques using Python


    0.5 unit(s)
    This course introduces data visualization, data management, and how to use visualization tools effectively to present data. This course also teaches how to collect data, process data, and visualize and present data using practical data sets with guided hands-on experience. Students learn how to use visualization tools such as Python’s pandas library and Microsoft’s PowerBI. The Department.

    One 2-hour period.

    Not offered in 2021/22.

    Course Format: CLS

Computer Science: II. Intermediate

  • CMPU 203 - Computer Science III: Software Design and Implementation

    Semester Offered: Fall and Spring
    1 unit(s)
    Develops techniques for design and implementation of complex software systems. Advanced techniques in object-oriented modeling, design patterns, component libraries, inheritance, parametric polymorphism, generic algorithms, containers, iterators, function objects and storage management, with a focus on collaborative software development. Advanced topics in programming and Graphical User Interface (GUI) development are covered.  Development of a software system of significant complexity is required. A weekly laboratory period provides guided hands-on experience. The Department.

    Prerequisite(s): CMPU 102 .

    CMPU 203 and CMPU 145  may be taken in either order or concurrently.

    Two 75-minute periods plus laboratory.

    Course Format: CLS
  • CMPU 224 - Computer Organization

    Semester Offered: Fall and Spring
    1 unit(s)
    Examines the hierarchical structure of computing systems, from digital logic and microprogramming through machine and assembly languages. Topics include the structure and workings of the central processor, instruction execution, memory and register organization, addressing schemes, input and output channels, and control sequencing. The course includes a weekly hardware/software laboratory where digital logic is explored and assembly language programming projects are implemented.  The Department.

    Prerequisite(s): CMPU 102 .

    Two 75-minute periods plus laboratory.

    Course Format: CLS
  • CMPU 235 - Programming Languages


    1 unit(s)
    Introduces a systematic approach to understanding the behavior of programming languages. Topics include interpreters; static and dynamic scope; environments; binding and assignment; functions and recursion; continuation passing; parameter-passing and method dispatch; objects, classes, inheritance, and polymorphism; type rules and type checking. The Department.

    Prerequisite(s): CMPU 102  and CMPU 145  

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 240 - Theory of Computation

    Semester Offered: Fall and Spring
    1 unit(s)
    Introduces the theory of computation while exploring the fundamental powers and limitations of all computing machines. Considers appropriate models of a computer and what problems are and are not solvable in such models. Aims to develop an understanding of the intimate connection between computation and language recognition, using as examples several classes of abstract machines and the corresponding classes of formal languages. Students learn how to reason about the nature of computation itself, and develop the intuition of a computer scientist. Provides theoretical foundations for CMPU 331  and 366 .  Jonathan Gordon.

    Prerequisite(s): CMPU 102  and CMPU 145 .

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 241 - Analysis of Algorithms

    Semester Offered: Fall and Spring
    1 unit(s)
    Introduces the systematic study of algorithms and their analysis with regard to time and space complexity. Topics include divide-and-conquer, dynamic programming, greediness, randomization, upper and lower-bound analysis, and introduction to NP completeness. Emphasis is placed on general design and analysis techniques that underlie algorithmic paradigms. Builds a foundation for advanced work in computer science. The Department.

    Prerequisite(s): CMPU 102  and CMPU 145 .

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 245 - Declarative Programming Models


    1 unit(s)
    Declarative programming languages are important alternatives to the imperative languages used in most software systems. This course covers two kinds of declarative programming: functional programming and logic programming. Topics include the semantics of declarative languages, techniques for programming in declarative languages, and the use of mathematical logic as a tool for reasoning about programs. Luke Hunsberger.

    Prerequisite(s): CMPU 102  and CMPU 145 .

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 250 - Modeling, Simulation and Analysis


    1 unit(s)
    Principles of computation in the sciences, driven by current applications in biology, physics, chemistry, natural and social sciences, and computer science. Topics include: Discrete and continuous stochastic models, random number generation, elementary statistics, numerical analysis and algorithms, discrete event simulation, and point and interval parameter estimation. Students pursue projects that involve modeling phenomena in two to three different fields and simulate the model in order to understand mechanisms and/or explore new hypotheses or conditions. The Department.

    Prerequisite(s): CMPU 102 , MATH 126  and MATH 127 .

    Recommended: CMPU 241  and/or MATH 221  but not required.

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 290 - Community-Engaged Learning

    Semester Offered: Fall or Spring
    0.5 to 1 unit(s)
    Course Format: OTH
  • CMPU 295 - Special Topics

    Semester Offered: Fall or Spring
    0.5 to 1 unit(s)
    Intermediate-level treatment of specialized topics in computer science.

    Prerequisite(s): Permission of instructor.

    Course Format: CLS
  • CMPU 298 - Independent Work

    Semester Offered: Fall or Spring
    0.5 to 1 unit(s)
    Prerequisite(s): Permission of the instructor.

    Course Format: OTH

Computer Science: III. Advanced

Two units of 200-level computer science are prerequisite for entry into 300-level courses; see each course for specific courses required or exceptions.

  • CMPU 300 - Senior Research and Thesis

    Semester Offered: Fall
    0.5 unit(s)
    Investigation and critical analysis of a topic in experimental or theoretical computer science. Experimental research may include building or experimentation with a non-trivial hardware or software system. A student electing this course must first gain, by submission of a written research proposal, the support of at least one member of the computer science faculty with whom to work out details of a research strategy. The formal research proposal, a written thesis, and oral presentation of results are required for the course. A second faculty member participates in both the planning of the research and final evaluation.

    Prerequisite(s): Minimum 3.5 GPA in 200- and 300-level Computer Science coursework at the end of the junior year, and permission of the department.

    Yearlong course 300-CMPU 301 .

    Course Format: OTH
  • CMPU 301 - Senior Research and Thesis

    Semester Offered: Spring
    0.5 unit(s)
    Continuation of CMPU 300 .

    Prerequisite(s): CMPU 300 .

    Yearlong course CMPU 300 -301.

    Course Format: OTH
  • CMPU 310 - Topics in Virtualization

    Semester Offered: Spring
    1 unit(s)
    This course covers basic and advanced concepts related to Virtual Machines, surveying classic and modern research on virtualization.  The course is organized as a mixture of paper reading and Virtual Machine Monitor (VMM) implementation.  Jason Waterman.

    Prerequisite(s): CMPU 224  and 334 .

    Two 75-minute periods.

    Course Format: INT
  • CMPU 311 - Database Systems

    Semester Offered: Fall
    1 unit(s)
    A database is a collection of data that is managed by a database management system, or DBMS. DBMSs emerged in the 1960s with the development of mainframe computers. DBMSs could be considered one of the first killer apps! Many database models have been proposed and implemented since then, but in 1970 a model was introduced that endures today: the relational model. One of the strengths of the relational model was that it provided a structured query language (SQL) for creating, modifying, and querying databases. This Intensive focuses on relational database design, normal forms and normalization techniques, entity-relationship diagrams, and querying databases using SQL. Students work individually or in pairs on database projects throughout the semester.  Marc Smith.

    Prerequisite(s): CMPU 145 CMPU 203 .

    One 2-hour period.

    Course Format: INT
  • CMPU 312 - Applications of Artificial Intelligence

    Semester Offered: Fall
    1 unit(s)
    Artificial Intelligence (AI) has a history of algorithmic innovations stretching back to the mid-1950s. Over the ensuing decades, techniques in AI have enabled advances in a wide variety of areas, including voice recognition, automated reasoning, vision processing, planning and scheduling, game-playing programs, and many more. This intensive focuses on using Temporal Networks to reason about time. Students work in small collaborative groups on programming projects throughout the semester.  Luke Hunsberger.

    Prerequisite(s): CMPU 203  and CMPU 241 .

    One 2-hour period.

    Course Format: INT
  • CMPU 314 - Projects in Digital Media Production: Animation, Games and Generative Art

    Semester Offered: Spring
    1 unit(s)
    An interdisciplinary course investigating the challenge of combining technological and aesthetic goals in developing digital media artifacts. We consider two models of practice: (1) Programmer(s) and artist(s) collaborating with each other. (2) A single programmer-artist working alone. Projects are proposed by students and approved by the instructor. Work may be carried out individually, in pairs or in small groups, as appropriate to the project. Students’ work is critiqued in class in terms of technical proficiency and aesthetic value. Tom Ellman.

    Prerequisite(s): Permission of the instructor.

    One 2-hour period.

    Course Format: INT
  • CMPU 315 - Computer Security


    0.5 unit(s)
    The goal of this intensive is to expose students to a broad range of security challenges that can occur in software. We explore various topics in the field of computer security including cryptography, network and web security, and software verification. For each topic, students read papers and complete a collaborative programming project. The Department.

    Prerequisite(s): CMPU 145 , CMPU 224 , and permission of the instructor.

    One 2-hour period.

    Not offered in 2021/22.

    Course Format: INT
  • CMPU 324 - Computer Architecture


    1 unit(s)
    An exploration of current research areas in computer organization including an examination of data-flow, microcode, cache memory, distributed, parallel, and other nonstandard architectures, and related topics.

    Prerequisite(s): CMPU 224 .

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 331 - Compilers

    Semester Offered: Fall and Spring
    1 unit(s)
    This course covers the implementation of compilers – programs that transform source programs written in a higher-level language into executable formats. Topics include syntax, error-handling, and code generation. Throughout the course, increasingly sophisticated compilers are implemented to demonstrate how different language features are handled, and the design challenges that each language feature introduces. Additional topics may include compiler optimizations and other advanced topics. Anna Gommerstadt.

    Prerequisite(s): CMPU 224  and CMPU 240 . In addition, CMPU 235  or CMPU 245  is recommended, but not required.

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 334 - Operating Systems

    Semester Offered: Fall and Spring
    1 unit(s)
    Deals with the theory and implementation of the software that governs the management of system resources. Topics that are covered include file organization, process scheduling, system services, memory management, security methods, resource contention, and design principles. Operating systems for parallel and distributed processing, real-time processing, virtual machines, and networking are also considered. The Department.

    Prerequisite(s): CMPU 203  and CMPU 224 .

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 353 - Bioinformatics


    1 unit(s)


    (Same as BIOL 353 ) DNA is the blueprint of life. Although it’s composed of only four nucleotide “letters” (A, C. T, G), the order and arrangement of these letters in a genome gives rise to the diversity of life on earth. Thousands of genomes have been partially sequenced, representing billions of nucleotides. How can we reach this vast expanse of sequence data to find patterns that provide answers to ecological, evolutionary, agricultural, and biomedical questions? Bioinformatics applies high-performance computing to discover patterns in large sequence datasets. In this class students from biology and computer science work together to formulate interesting biological questions and to design algorithms and computational experiments to answer them. Jodi Schwarz, Marc Smith.

    Prerequisite(s): For students registering under the BIOL prefix, ​​the prerequisites are o​ne unit of any 200-level biology and one unit of Genetics (BIOL 238 , BIOL 244 , or BIOL 248 )​; BIOL students do not need to have any Computer Science background​.

    ​For students registering under the CMPU prefix, the prerequisite is CMPU 203  or permission of the instructor; CMPU students do not need to have any Biology background.

    To register for this course students must satisfy either the Biology or Computer Science prerequisites, but not both.

    Two 2-hour periods.

    Not offered in 2021/22.

    Course Format: CLS

  • CMPU 365 - Artificial Intelligence


    1 unit(s)
    An introduction to Artificial Intelligence as a discipline of Computer Science, covering the traditional foundations of the field and a selection of recent advances. Traditional topics include: search, two-player adversarial games, constraint satisfaction, knowledge representation and reasoning, and planning. Additional topics will vary from year to year and will be selected from the following: reasoning about time, probabilistic reasoning, neural networks, philosophical foundations, multiagent systems, robotics, and recent advances in planning. Significant programming assignments and a course project complement the material presented in class. Jonathan Gordon.

    Prerequisite(s): CMPU 145 , CMPU 203 , and CMPU 245 , or permission of the instructor.

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 366 - Computational Linguistics

    Semester Offered: Spring
    1 unit(s)
    Addresses the fundamental question at the intersection of human languages and computer science: how can computers acquire, comprehend and produce natural languages such as English? Introduces computational methods for modeling human language, including morphology, syntax, semantics and discourse; corpus-based and statistical methods for language analysis; and natural language applications such as information extraction and retrieval, summarization, and machine translation. Students gain experience with sophisticated systems for linguistic analysis and machine learning. Jonathan Gordon.

    Prerequisite(s): CMPU 240  recommended, but not required.

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 375 - Computer Networks


    1 unit(s)
    Computer networks, in the form of the Internet, have revolutionized society in the last 3 decades. This course provides an introduction to the design and operation of the Internet and computer networks in general. Topics include layered communication protocols, routing, transport, naming, security and mobility. Knowledge is consolidated through projects involving the creation of network applications. Rui Meireles.

    Prerequisite(s): CMPU 203  and CMPU 224 , or permission of the instructor.

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 377 - Parallel Programming


    1 unit(s)
    An introduction to parallel computing, with coverage of parallel architectures, programming models, and techniques. Topics include SIMD and MIMD models, shared-memory and message-passing styles of computation, synchronization, deadlock, and parallel language design. Students are exposed to common techniques for solving problems in sorting, searching, numerical methods, and graph theory, and gain practical experience through programming assignments run on a parallel processing system. Marc Smith.

    Prerequisite(s): CMPU 203  and CMPU 224 .

    Two 75-minute periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 378 - Graphics

    Semester Offered: Fall
    1 unit(s)
    A survey of computational and mathematical techniques for modeling and rendering realistic images of three-dimensional scenes. Topics include: event-driven user interfaces; geometric transformations and projections; scene graphs; implicit and parametric surfaces; models of color and light; surface shading and texturing; local and global rendering algorithms; and an introduction to computer animation. The Department.

    Prerequisite(s): CMPU 203  and MATH 221 .

    Two 75-minute periods.

    Course Format: CLS
  • CMPU 379 - Computer Animation: Art, Science and Criticism


    1 unit(s)
    (Same as ART 379 , FILM 379 , and MEDS 379 ) An interdisciplinary course in Computer Animation aimed at students with previous experience in Computer Science, Studio Art, or Media Studies. The course introduces students to mathematical and computational principles and techniques for describing the shape, motion and shading of three-dimensional figures in Computer Animation. It introduces students to artistic principles and techniques used in drawing, painting and sculpture, as they are translated into the context of Computer Animation. It also encourages students to critically examine Computer Animation as a medium of communication. Finally, the course exposes students to issues that arise when people from different scholarly cultures attempt to collaborate on a project of mutual interest. The course is structured as a series of animation projects interleaved with screenings and classroom discussions. Tom Ellman, Harry Roseman.

    Prerequisite(s): Permission of the instructor.

    Two 2-hour periods.

    Not offered in 2021/22.

    Course Format: CLS
  • CMPU 395 - Database Management Systems and Applications

    Semester Offered: Spring
    1 unit(s)


    Managing large data collections is a key component of many applications. This course examines how data can be modeled, stored, accessed, and manipulated using relational database management systems (DBMSs) and how DBMSs support efficient data access and protect the integrity of the data stored.

    Topics covered include database design, query languages (relational algebra, SQL), indexing, query processing, and transaction management techniques. Techniques for interfacing host languages with a DBMS are discussed and students design and implement a web-based database application project. Phyllis Frankl.

    Prerequisite(s): CMPU 241 

    Two 75-minute periods.

    Course Format: CLS

  • CMPU 399 - Senior Independent Work

    Semester Offered: Fall or Spring
    0.5 to 1 unit(s)
    Course Format: OTH