Apr 29, 2024  
2018-2019 Catalog 
    
2018-2019 Catalog [ARCHIVED PUBLICATION] Use the dropdown above to select the current catalog.

Computer Science Courses


Department of Computer Science

Courses

Computer Science

  • CSCI005 HM - Introduction to Computer Science


    Credit(s): 3

    Instructor(s): Dodds, Kuenning, Libeskind-Hadas

    Offered: Fall

    Description: Introduction to elements of computer science. Students learn computational problem-solving techniques and gain experience with the design, implementa­tion, testing, and documentation of programs in a high-level language. In addition, students learn to design digital devices, understand how computers operate, and learn to program in a small machine language. Students are also exposed to ideas in computability theory. The course also integrates societal and ethical issues related to computer science.

  • CSCI005GR HM - Introduction to Biology and Computer Science


    Credit(s): 3

    Instructor(s): Libeskind-Hadas, Wu, Bush (Biology)

    Offered: Fall

    Description: This course introduces fundamental concepts from the Core course CSCI005 HM  using biology as the context for those computational ideas. Students see both the intellectual and practical connections between these two disciplines and write computer programs to explore biological phenomena. Biology topics include the basics of bio­chemistry, the central dogma, population genetics, molecular evolution, metabolism, regulation, and phylogenetics. Computer science material includes basic data types and control structures, recursion, dynamic programming, and an introduction to automata and computability. This course fulfills the computer science Core requirement at Harvey Mudd College. It does not fulfill the Harvey Mudd biology Core requirement.

  • CSCI035 HM - Computer Science for Insight


    Credit(s): 3

    Instructor(s): Dodds

    Description: This course extends CSCI005 HM  in developing software-composition skills. Pairing lectures and lab sessions, the experience will deepen foundations in algorithms and data structures, introduce machine learning and its mindset, weigh tradeoffs between human- and machine-efficiency, and build sophistication in software, both assembling existing software packages and from-scratch design. Students will deploy and assess computing projects of their own design – with substantive application beyond CS itself – as the course’s final capstone. The course continues in the language of CSCI005 HM  and especially encourages computing efforts which contribute to fields of interest beyond CS, whether academic or extracurricular.

    Prerequisite(s): CSCI005 HM  or CSCI005GR HM  
  • CSCI042 HM - Principles and Practice of Computer Science


    Credit(s): 3

    Instructor(s): Keller, Stone, Wiedermann

    Offered: Fall

    Description: Accelerated breadth-first introduction to computer science as a discipline for students (usually first-year) who have a strong programming background. Computational models of functional, object-oriented, and logic programming. Data structures and algorithm analysis. Computer logic and architecture. Grammars and parsing. Regular expressions. Computability. Extensive practice constructing applications from principles, using a variety of languages. Successful completion of this course satisfies the CSCI005 HM  Core requirement and CSCI060 HM  coursework.

    Prerequisite(s): Permission of instructor
  • CSCI060 HM - Principles of Computer Science


    Credit(s): 3

    Instructor(s): Dodds, Lewis, Stone, Trushkowsky

    Offered: Fall and Spring

    Description: Introduction to principles of computer science: Information structures, functional programming, object-oriented programming, grammars, logic, logic programming, correctness, algorithms, complexity analysis, finite-state machines, basic processor architecture and theoretical limitations. Those who have completed CSCI042 HM  cannot take CSCI060 HM.

    Prerequisite(s): CSCI005 HM  or CSCI005GR HM  
  • CSCI070 HM - Data Structures and Program Development


    Credit(s): 3

    Instructor(s): Medero, O’Neill, Stone, Wiedermann

    Offered: Fall and Spring

    Description: Abstract data types including priority queues and dynamic dictionaries and efficient data structures for these data types, including heaps, self-balancing trees, and hash tables. Analysis of data structures including worst-case, average-case and amortized analysis. Storage allocation and reclamation. Secondary storage considerations. Extensive practice building programs for a variety of applications.

    Prerequisite(s): (CSCI060 HM  or CSCI042 HM ), and at least one mathematics course at the level of calculus or higher; MATH055 HM  recommended
  • CSCI081 HM - Computability and Logic


    Credit(s): 3

    Instructor(s): Keller, Stone

    Offered: Fall and Spring

    Description: An introduction to some of the mathematical foundations of computer science, particularly logic, automata, and computability theory. Develops skill in constructing and writing proofs, and demonstrates the applications of the aforementioned areas to problems of practical significance.

    Prerequisite(s): MATH055 HM  and (CSCI060 HM  or CSCI042 HM )
  • CSCI105 HM - Computer Systems


    Credit(s): 3

    Instructor(s): Kuenning, Sweedyk, Trushkowsky

    Offered: Fall and Spring

    Description: An introduction to computer systems. In particular the course investigates data representations, machine level representations of programs, processor architecture, program optimizations, the memory hierarchy, exceptional control flow (exceptions, interrupts, processes and Unix signals), performance measurement, virtual memory, system-level I/O, and basic concurrent programming. These concepts are supported by a series of hands-on lab assignments.

    Prerequisite(s): CSCI070 HM  
  • CSCI106 HM - Computer Science Education Research


    Credit(s): 3

    Instructor(s): Lewis

    Description: An introduction to computer science education. Participants in this seminar-style course will discuss readings that explore general issues of teaching and learning as well as readings that explore how students learn within computer science. Weekly assignments will build toward all course participants (individually or in partnership) conducting qualitative research to document how people understand a concept of their choosing.

  • CSCI111 HM - Domain-Specific Languages


    Credit(s): 3

    Instructor(s): Wiedermann

    Offered: Fall

    Description: This course explores how to design a new programming language. In particular, we’ll focus on “Domain-Specific Languages”— languages designed for people who want to use a computer to perform a specialized task (e.g., to compose music or query a database or make games). Through readings, discussions, and programming, we’ll investigate why and how you would create a domain-specific language. The course also features a project that asks you to propose, design, and implement your own domain-specific language.

    Prerequisite(s): CSCI070 HM  
  • CSCI121 HM - Software Development


    Credit(s): 3

    Instructor(s): Lewis, Wu

    Offered: Fall and Spring

    Description: Introduction to the discipline concerned with the design and implementation of software systems. The course presents a historical perspective on software development practice and explores modern, agile techniques for eliciting software requirements, designing and imple­menting software architecture and modules, robust testing practices, and project management. Student teams design, develop, and test a substantial software project.

    Prerequisite(s): CSCI070 HM  
  • CSCI124 HM - Interaction Design


    Credit(s): 3

    Instructor(s): Boerkoel

    Offered: Spring

    Description: This course introduces students to issues in the design, implementation, and evalu­ation of human-computer interfaces, with emphasis on user-centered design and graphical interfaces. In this course, students learn skills that aid them in choosing the right user interaction technique and developing an interface that is well-suited to the people for whom it is designed.

    Prerequisite(s): CSCI042 HM  or CSCI060 HM  
  • CSCI125 HM - Computer Networks


    Credit(s): 3

    Instructor(s): Stone

    Offered: Fall

    Description: Principles and analysis techniques for internetworking. Analysis of network­ing models and protocols. Presentation of computer communication with emphasis on protocol architecture.

    Prerequisite(s): CSCI105 HM  
  • CSCI131 HM - Programming Languages


    Credit(s): 3

    Instructor(s): Keller, O’Neill, Stone

    Offered: Fall and Spring

    Description: A thorough examination of issues and features in language design and implementation including language-provided data structuring and data-typing, modularity, scoping, inheritance, and concurrency. Compilation and run-time issues. Introduction to formal semantics.

    Prerequisite(s): CSCI070 HM  and CSCI081 HM  
  • CSCI132 HM - Compiler Design


    Credit(s): 3

    Instructor(s): Stone

    Offered: Spring, alternate years

    Description: The design and implementation of compilers. Topics include elegant theoretical results underlying compilation techniques, practical issues in efficient implementation of program­ming languages, and bit-level interactions with operating systems and computer architec­tures. Over the course of the semester, students build a working compiler.

    Prerequisite(s): CSCI105 HM  and CSCI131 HM  
  • CSCI133 HM - Databases


    Credit(s): 3

    Instructor(s): Trushkowsky

    Offered: Fall, alternate years

    Description: Fundamental models of databases: entity-relationship, relational, deductive, object-oriented. Relational algebra and calculus, query languages. Data storage, caching, indexing, and sorting. Locking protocols and other issues in concurrent and distributed data­bases.

    Prerequisite(s): CSCI070 HM  and CSCI081 HM ; CSCI131 HM  recommended
  • CSCI134 HM - Operating Systems: Design and Implementation


    Credit(s): 3

    Instructor(s): O’Neill

    Offered: Spring, alternate years

    Description: Design and implementation of operating systems, including processes, memory management, synchronization, scheduling, protection, file systems, and I/O. These concepts are used to illustrate wider concepts in the design of other large software systems, including simplicity; efficiency; event-driven programming; abstraction design; client-server architec­ture; mechanism vs. policy; orthogonality; naming and binding; static vs. dynamic, space vs. time, and other trade-offs; optimization; caching; and managing large code bases. Group projects provide experience in working with and extending a real operating system.

    Prerequisite(s): CSCI105 HM  
  • CSCI136 HM - Advanced Computer Architecture


    Credit(s): 3

    Instructor(s): Staff

    Description: Reduced vs. complex instruction-set architecture, pipelining, instruction-level parallelism, superscalar architectures, advanced memory-hierarchy design, advanced computer arithmetic, multiprocessor systems, cache coherence, interconnection networks, performance analysis, and case studies.

    Prerequisite(s): CSCI105 HM  
  • CSCI137 HM - File Systems


    Credit(s): 3

    Instructor(s): Kuenning

    Offered: Fall, alternate years

    Description: Computer storage and file systems. Characteristics of nonvolatile storage, including magnetic disks and solid-state memories. RAID storage. Data structures used in file systems. Performance, reliability, privacy, replication, and backup. A major portion of the course is devoted to readings selected from current research in the field.

    Prerequisite(s): CSCI105 HM  
  • CSCI140 HM - Algorithms


    Credit(s): 3

    Instructor(s): Boerkoel, Libeskind-Hadas, Stone, Pippenger (Mathematics)

    Offered: Fall and Spring

    Description: Algorithm design, analysis, and correctness. Design techniques including divide-and-conquer and dynamic programming. Analysis techniques including solutions to recurrence relations and amortization. Correctness techniques including invariants and inductive proofs. Applications including sorting and searching, graph theoretic problems such as shortest path and network flow, and topics selected from arithmetic circuits, parallel algorithms, computational geometry, and oth­ers. An introduction to computational complexity, NP-completeness, and approximation algorithms. Proficiency with programming is expected as some assignments require algorithm implementation. (Crosslisted as MATH168 HM )

    Prerequisite(s): ((CSCI070 HM  and CSCI081 HM ) or ((CSCI060 HM  or CSCI042 HM ) and MATH131 HM ))
  • CSCI142 HM - Complexity Theory


    Credit(s): 3

    Instructor(s): Libeskind-Hadas, Pippenger (Mathematics)

    Offered: Fall, alternate years

    Description: Brief review of computability theory through Rice’s Theorem and the Recursion Theorem followed by a rigorous treatment of complexity theory. The complexity classes P, NP, and the Cook-Levin Theorem. Approximability of NP-complete problems. The polynomial hierarchy, PSPACE-completeness, L and NL-completeness, #P-completeness. IP and Zero-knowledge proofs. Randomized and parallel complexity classes. The speedup, hierarchy, and gap theorems. (Crosslisted as MATH167 HM )

    Prerequisite(s): CSCI081 HM  
  • CSCI144 HM - Scientific Computing


    Credit(s): 3

    Instructor(s): de Pillis (Mathematics), Yong (Mathematics)

    Offered: Spring

    Description: Computational techniques applied to problems in the sciences and engineering. Modeling of physical problems, computer implementation, analysis of results; use of mathematical software; numerical methods chosen from: solutions of linear and nonlinear algebraic equations, solutions of ordinary and partial differential equations, finite elements, linear programming, optimization algorithms, and fast Fourier transforms. (Crosslisted as MATH164 HM )

    Prerequisite(s): MATH065 HM  and (CSCI060 HM  or CSCI042 HM 
  • CSCI145 HM - Advanced Topics in Algorithms


    Credit(s): 1.5

    Instructor(s): Libeskind-Hadas

    Offered: Fall

    Description: The objective of this course is to explore sophisticated algorithm design and analysis techniques that are generally not taught in a first algorithms course. The course addresses topics such as graph matching, competitive analysis of online algorithms, matroid theory, and approximation algorithms and schemes.

    Prerequisite(s): CSCI140 HM  or MATH168 HM  
  • CSCI147 HM - Computer Systems Performance Analysis


    Credit(s): 3

    Instructor(s): Staff

    Description: Measurement and analysis of computer software and systems performance, with emphasis on methodological issues. Measurement planning and experimental design. Statistical methods for data analysis. Hypothesis testing. Effective graphical and tabular presentation of data. Common errors in performance measurement. Elementary queuing theory. Simulation methods. Project in performance measurement. Typical projects include measurement of databases, theorem provers, file systems, networks, OS kernels, and computer processors.

    Prerequisite(s): MATH035 HM  and CSCI070 HM  
  • CSCI151 HM - Artificial Intelligence


    Credit(s): 3

    Instructor(s): Boerkoel

    Offered: Fall and Spring

    Description: This course presents a general introduction to the field of Artificial Intelligence. It examines the question: What does (will) it take for computers to perform human tasks? It presents a broad introduction to topics such as knowledge representation, search, learning and reasoning under uncertainty. For each topic, it examines real-world applications of core techniques to problems which may include game playing, text classification and visual pattern recognition.

    Prerequisite(s): MATH035 HM  and CSCI070 HM  
  • CSCI152 HM - Neural Networks


    Credit(s): 3

    Instructor(s): Keller

    Offered: Fall

    Description: Modeling, simulation, and analysis of artificial neural networks and their relation to biological networks. Design and optimization of discrete and continuous neural networks. Back propagation and other gradient descent methods. Hopfield and Boltzmann networks. Unsupervised learning. Self-organizing feature maps. Applications chosen from function approximation, signal processing, control, computer graphics, pattern recognition, time-series analysis. Relationship to fuzzy logic, genetic algorithms, and artificial life.

    Prerequisite(s): (CSCI060 HM  or CSCI042 HM ) and MATH065 HM  
  • CSCI153 HM - Computer Vision


    Credit(s): 3

    Instructor(s): Staff

    Description: Computational algorithms for visual perception. Students will develop applications that acquire, process and interpret still images and image streams. The course will cover representations of color, shading, texture and shape along with stereo and motion analysis, object recognition and approaches for three-dimensional representation. Applications include robotics, human perception and the use of large image databases.

    Prerequisite(s): CSCI060 HM  or CSCI042 HM  
  • CSCI154 HM - Robotics


    Credit(s): 3

    Instructor(s): Boerkoel, Dodds

    Offered: Spring

    Description: Introduction to algorithmic robotics. Topics span from sensor operation and low-level actuator control to architectures and algorithms for accomplishing tasks such as localization, navigation, and mapping. The basic framework and analysis of both industrial and biologically-motivated robots are addressed. The laboratory component of the class provides experience in developing algorithms, programming, and testing a range of robot behaviors on our hardware platforms.

    Prerequisite(s): CSCI060 HM  or CSCI042 HM  
  • CSCI155 HM - Computer Graphics


    Credit(s): 3

    Instructor(s): Sweedyk

    Offered: Fall

    Description: This course introduces students to modern computer graphics. Topics include image processing, ray tracing and pipeline rendering, GPU processing, and 3D modeling. The course also covers a selection of recent research results. Students work on four substantial projects across the semester.

    Prerequisite(s): CSCI070 HM MATH035 HM MATH060 HM , and MATH065 HM  
  • CSCI156 HM - Parallel and Real-Time Computing


    Credit(s): 3

    Instructor(s): Keller

    Offered: Spring, alternate years

    Description: Characteristics and applications for parallel and real-time systems. Specification techniques, algorithms, architectures, languages, design, and implementation.

    Prerequisite(s): CSCI105 HM  and CSCI140 HM ; CSCI131 HM  recommended
  • CSCI157 HM - Computer Animation


    Credit(s): 3

    Instructor(s): Sweedyk

    Offered: Spring, alternate years

    Description: This course introduces students to the theory and practice of computer animation. The course covers the algorithms and data structures for building and animating articulated figures and particle systems including interpolation techniques, deformations, forward and inverse kinematics, rigid body dynamics, and physically based modeling. In addition, the course surveys the art, history, and production of animation.

    Prerequisite(s): CSCI155 HM  
  • CSCI158 HM - Machine Learning


    Credit(s): 3

    Instructor(s): Wu

    Offered: Fall, alternate years

    Description: Machine learning is concerned with the study and development of systems that learn patterns in data. This course introduces the most common problems in the field and the techniques used to tackle these problems, with a focus on supervised and unsupervised learning. Concepts include mathematical foundations and algorithmic approaches.

    Prerequisite(s): CSCI070 HM MATH035 HM MATH060 HM , and MATH065 HM CSCI151 HM  recommended
  • CSCI159 HM - Natural Language Processing


    Credit(s): 3

    Instructor(s): Medero

    Offered: Spring, alternate years

    Description: An introduction to the fundamental concepts and ideas in natural language processing, sometimes called computational linguistics. The goals of the field range from text translation and understanding to enabling humans to converse with robots. We will study language processing starting from the word level to syntactic structure to the semantic meaning of text. Approaches include statistical as well as symbolic methods using logic and the lambda calculus. Students will build and modify systems and will use large existing corpora for validating their systems.

    Prerequisite(s): CSCI081 HM   
  • CSCI181 HM - Computer Science Seminar


    Credit(s): 1-3

    Instructor(s): Staff

    Offered: Fall and Spring

    Description: Advanced topics of current interest in computer science.

    Prerequisite(s): Permission of instructor
  • CSCI183 HM - Computer Science Clinic I


    Credit(s): 3

    Instructor(s): Staff

    Offered: Fall

    Description: The Clinic Program brings together teams of students to work on a research problem sponsored by business, industry, or government. Teams work closely with a faculty advisor and a liaison provided by the sponsoring organization to solve complex real-world problems. Students are expected to present their work orally and to produce a final report conforming to professional publication standards. CSCI183  HM and CSCI184 HM  must be taken consecutively to count toward the major.

    Prerequisite(s): CSCI121 HM  and senior standing; or permission of the Computer Science Clinic director
  • CSCI184 HM - Computer Science Clinic II


    Credit(s): 3

    Instructor(s): Staff

    Offered: Spring

    Description: The Clinic Program brings together teams of students to work on a research problem sponsored by business, industry, or government. Teams work closely with a faculty advisor and a liaison provided by the sponsoring organization to solve complex real-world problems. Students are expected to present their work orally and to produce a final report conforming to professional publication standards. CSCI183 HM  and CSCI184  HM must be taken consecutively to count toward the major.

    Prerequisite(s): CSCI121 HM CSCI183 HM , and senior standing; or permission of the Computer Science Clinic director
  • CSCI186 HM - Computer Science Research and Independent Study


    Credit(s): 0.5-3

    Instructor(s): Staff

    Offered: Fall and Spring

    Description: A research or development project under computer science faculty supervision. No more than 3 units can count toward major elective credit.

    Prerequisite(s): Permission of instructor
  • CSCI189 HM - Programming Practicum


    Credit(s): 1

    Instructor(s): Dodds, Stone, Sweedyk

    Offered: Fall and Spring

    Description: This course is a weekly programming seminar, emphasizing efficient recognition of computational problems and their difficulty, developing and implementing algorithms to solve them, and the testing of those implementations. Attention is given to the effective use of programming tools and available libraries, as well as to the dynamics of team problem-solving.

    Repeatable: May be taken for major elective credit up to three times

    Prerequisite(s): CSCI005 HM  or CSCI005GR HM  or CSCI042 HM  
  • CSCI195 HM - Computer Science Colloquium


    Credit(s): 0.5

    Instructor(s): Staff

    Offered: Fall and Spring

    Description: Oral presentations and discussions of selected topics, including recent developments in computer science. Participants include computer science majors, Clinic participants, faculty members, and visiting speakers. No more than 2.0 credits can be earned for departmental seminars/col­loquia. All majors welcome.

    Grading Type: Pass/No Credit grading.

    Prerequisite(s): Juniors and seniors only