Bowdoin College Catalogue and Academic Handbook

Computer Science (CSCI)

CSCI 1101  (a, MCSR)   Introduction to Computer Science  

Christopher Martin; Christopher Braun.
Every Semester. Fall 2024. Enrollment limit: 30.
  

What is computer science, what are its applications in other disciplines, and what is its impact in society? A step-by-step introduction to the art of problem solving using the computer and programming. Provides a broad introduction to computer science and programming through real-life applications. Weekly labs provide experience with the concepts presented in class. Assumes no prior knowledge of computers or programming. Students with prior programming experience may instead be placed into CSCI 1103. Final grade must be C- or better to serve as a prerequisite for Computer Science 2101.

Prerequisites: MATH 1050 or Placement in MATH 1600 (M) or Placement in MATH 1600 or Placement in MATH 1700 (M) or Placement in MATH 1700 or Placement in MATH 1750 (M) or Placement in MATH 1750 or Placement in MATH 1800 (M) or Placement in MATH 1800 or Placement in MATH 2020 or 2206 (M) or Placement in MATH 2000 or 2020 or Placement in 2000, 2020, 2206 (M) or Placement in MATH 2020 or Placement in CSCI 1101.

Previous terms offered: Spring 2024, Fall 2023, Spring 2023, Fall 2022, Spring 2022, Fall 2021, Spring 2021, Fall 2020.

CSCI 1103  (a, MCSR)   Accelerated Introduction to Computer Science  

Mohammad Irfan.
Every Fall. Fall 2024. Enrollment limit: 30.
  

Covers the same introductory material as CSCI 1101, but at an accelerated pace and without an associated lab section. Appropriate for students with prior programming experience, though not necessarily in any specific programming language. Final course grade must be C- or better to serve as a prerequisite for CSCI 2101.

Prerequisites: Two of: CSCI 1055 or either DCS 1100 or DCS 1200 or Placement in CSCI 1103 and MATH 1050 or Placement in MATH 1600 (M) or Placement in MATH 1600 or Placement in MATH 1700 (M) or Placement in MATH 1700 or Placement in MATH 1750 (M) or Placement in MATH 1750 or Placement in MATH 1800 (M) or Placement in MATH 1800 or Placement in MATH 2020 or 2206 (M) or Placement in MATH 2000 or 2020 or Placement in 2000, 2020, 2206 (M) or Placement in MATH 2020.

Previous terms offered: Fall 2023, Fall 2022, Fall 2021, Fall 2020.

CSCI 2101  (a, MCSR)   Data Structures and Advanced Programming I  

Sarah Harmon; Christopher Braun.
Every Semester. Fall 2024. Enrollment limit: 30.
  

Builds on the computational and programming skills acquired in the introductory course, focusing on efficient ways of storing and accessing data using essential data structures. Explores the design of linear data structures such as dynamic arrays, linked lists, stacks, and queues as well as their practical applications within complex computer programs. Also emphasizes object-oriented program design and the development of clear, modular programs that are easy to read, modify, and debug. Regular and significant programming assignments in Java provide the opportunity to apply the principles studied. Prior experience in a high-level programming language such as Python or Java is assumed, but no experience with Java specifically is required.

Prerequisites: Two of: either CSCI 1101 or CSCI 1103 (same as DCS 1300) or Placement in CSCI 2101 and MATH 1600 or Placement in MATH 1600 (M) or Placement in MATH 1600 or Placement in MATH 1700 (M) or Placement in MATH 1700 or Placement in MATH 1750 (M) or Placement in MATH 1750 or Placement in MATH 1800 (M) or Placement in MATH 1800 or Placement in MATH 2020 or 2206 (M) or Placement in MATH 2000 or 2020 or Placement in 2000, 2020, 2206 (M) or Placement in MATH 2020.

Previous terms offered: Spring 2024, Fall 2023, Spring 2023, Fall 2022, Spring 2022, Fall 2021, Spring 2021, Fall 2020.

CSCI 2200  (a, MCSR)   Algorithms  

Laura Toma; Cibele Freire.
Every Semester. Fall 2024. Enrollment limit: 22.
  

An introductory course on the design and analysis of algorithms. Introduces a number of basic algorithms for a variety of problems such as searching, sorting, selection, and graph problems (e.g., spanning trees and shortest paths). Discusses analysis techniques, such as recurrences and amortization, as well as algorithm design paradigms such as divide-and-conquer, dynamic programming, and greedy algorithms.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024, Fall 2023, Spring 2023, Fall 2022, Spring 2022, Fall 2021, Spring 2021, Fall 2020.

CSCI 2210  (a, MCSR)   Theory of Computation  

Cibele Freire.
Non-Standard Rotation. Fall 2024. Enrollment limit: 30.
  

Studies the nature of computation and examines the principles that determine what computational capabilities are required to solve particular classes of problems. Topics include an introduction to the connections between language theory and models of computation, and a study of unsolvable problems.

Prerequisites: CSCI 2101.

Previous terms offered: Fall 2023, Fall 2022, Fall 2021, Fall 2020.

CSCI 2320  (a, MCSR)   Principles of Programming Languages  

Every Year. Enrollment limit: 30.  

Studies design principles and paradigms of programming languages. Different paradigms of languages correspond to distinct ways of thinking about problem solving. For example, functional languages (such as Haskell) focus attention on the behavioral aspects of a problem; object-oriented languages (such as Ruby) focus attention on data--how to model and manipulate it. Despite their differences, a common set of principles often guide language design. Covers principles of language design and implementation including syntax, semantics, type systems, control structures, and compilers. Also covers various paradigms of languages including imperative, object-oriented, web, and functional languages.

Prerequisites: CSCI 2330.

Previous terms offered: Spring 2024, Fall 2023, Spring 2022, Spring 2021.

CSCI 2330  (a, MCSR)   Foundations of Computer Systems  

Stephen Houser.
Every Semester. Fall 2024. Enrollment limit: 22.
  

A broad introduction to how modern computer systems execute programs, store information, and communicate. Examines the hardware and software components required to go from a program expressed in a high-level programming language like C to the computer actually running the program. Topics include concepts of program compilation and assembly, machine code, data representation and computer arithmetic, basic microarchitecture, the memory hierarchy, processes, and system-level I/O. Regular, programming-intensive projects provide hands-on experience with the key components of computer systems.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024, Fall 2023, Spring 2023, Fall 2022, Spring 2022, Fall 2021, Spring 2021, Fall 2020.

CSCI 2335  (a)   Software Engineering  

Every Fall. Enrollment limit: 35.  

A Java-based introduction to the processes of software engineering. How to design, implement, and test small-to medium-sized object-oriented systems, including the use of appropriate design notation to create a design before implementation. Closed-box and open-boxed testing, including writing and executing system test plans, writing unit tests, and using code coverage. An introduction to the best practices of software engineering, including pair programming, test-first development, static analysis, version control, and continuous integration. An introduction to project management. Class will feature several multi-week, hands-on projects; some projects will require students to work together in small teams (three to four members). Time permitting, we may also cover an introduction to full-stack web development, including HTML, JavaScript, and Databases.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024, Spring 2023, Fall 2022.

CSCI 2350  (a)   Social and Economic Networks  

Mohammad Irfan.
Non-Standard Rotation. Fall 2024. Enrollment limit: 22.
  

Examines the social and economic aspects of today's connected world from a multitude of perspectives; namely, network science, computer science, sociology, and economics. The fundamental questions to be addressed are: What are the properties of real-world networks? What are the effects of networks on our behavioral choices like quitting smoking or eating healthy? How do cascades in networks lead to outcomes like videos going viral? How does Google search the Internet and make money doing so? Debates issues around centrality in networks. Uses game theory to study strategic interactions in networks and markets. (Same as: DCS 2350)

Prerequisites: DCS 1500 or CSCI 1101 or CSCI 1103 (same as DCS 1300).

Previous terms offered: Fall 2023, Spring 2022, Fall 2020.

CSCI 2400  (a, MCSR)   Artificial Intelligence  

Jeova Farias.
Every Year. Fall 2024. Enrollment limit: 35.
  

Explores the principles and techniques involved in programming computers to do tasks that would require intelligence if people did them. State-space and heuristic search techniques, logic and other knowledge representations, reinforcement learning, neural networks, and other approaches are applied to a variety of problems with an emphasis on agent-based approaches.

Prerequisites: CSCI 2101.

Previous terms offered: Fall 2023, Fall 2022, Fall 2021, Fall 2020.

CSCI 2520  (a, MCSR)   Dependently Typed Functional Programming  

Non-Standard Rotation. Enrollment limit: 30.  

An important aspect of the expressiveness of a programming language, concerns what kinds of things it can manipulate as data. This course introduces programming in a dependently typed functional language. In such a language both functions and types are ordinary data. This enables features such as higher-order and generic functions, as well as data whose type depends on the value of other data. One benefit of working in this setting is that properties of programs can be both expressed and proved within the language itself, providing much stronger guarantees of correctness than is possible using testing.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024.

CSCI 2715  (a, MCSR)   Human-Computer Interaction  

Every Year. Enrollment limit: 30.  

How can we design technologies that result in positive and valuable (instead of ineffective and frustrating) experiences? Introduces key principles of user interface development by way of theory and hands-on practice. Topics include design principles (as informed by human perception and cognition) and prototyping techniques, as well as how to inspect and measure usability. Culminates in a final project, which is presented at the end of the term.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024, Spring 2023.

CSCI 3210  (a)   Computational Game Theory  

Every Year. Enrollment limit: 16.  

Advanced algorithms course with a focus on game theory. Topics include computational complexity, linear programming, approximation algorithms, and algorithms for solving games. Game theory, also known as the mathematical theory of strategic interactions, rose to prominence due to its applicability to a variety of strategic scenarios ranging from markets and auctions to kidney exchanges to social influence. These scenarios often involve complex interactions in large-scale systems, giving rise to many computational questions, including: how algorithms for certain games are devised; how local interactions lead to global outcomes; how individual choices, such as selfishness, impact outcomes.

Prerequisites: CSCI 2200.

Previous terms offered: Spring 2024, Fall 2021, Fall 2020.

CSCI 3225  (a)   Algorithms for GIS  

Every Year. Enrollment limit: 16.  

Studies key algorithms and data structures for geographical data. Topics include modeling processes on terrain such as drainage, watersheds, flooding, sea level rise and visibility, line and terrain simplification, spatial data structures such as B-trees, quad-trees and R-trees, space-filling curves, Delaunay triangulations, and Voronoi diagrams. Students gain exposure to algorithmic modeling of spatial processes, transferring algorithms into practice and working with large spatial datasets through programming-intensive projects.

Prerequisites: Two of: CSCI 2330 and CSCI 2330 and CSCI 2200 and CSCI 2200.

Previous terms offered: Fall 2023.

CSCI 3250  (a)   Computational Geometry  

Laura Toma.
Every Year. Fall 2024. Enrollment limit: 22.
  

Computational Geometry refers to the study of geometric problems from a computational point of view, with focus on the design and analysis of algorithms for problems involving collections of points, lines and polygons. Computational Geometry emerged as a field driven by geometric problems in graphics and robotics, and its list of applications has continued to grow to areas such as pattern recognition, graph drawing, surface simplification and meshing, crystallography, molecular simulation, planning and autonomous vehicles. Class covers some of the basic concepts and fundamental geometric problems, such as: convex hulls, art gallery and visibility problems, geometric searching with range trees and kd-trees, intersection problems, proximity problems, point and polygon triangulation, and motion planning. Requirements include regular, programming-intensive projects.

Previous terms offered: Spring 2023, Fall 2021.

CSCI 3310  (a)   Operating Systems  

Every Other Year. Enrollment limit: 16.  

Explores the design and implementation of computer operating systems, which provide a well-known, convenient, and efficient interface between user programs and the underlying computer hardware. The operating system is responsible for sharing resources such as processors, memory, and disks, as well as providing common services needed by many different programs. Topics include process and thread management, synchronization and concurrency, memory management, I/O and file systems, and virtual machines. Intensive programming projects involve implementing key components of operating systems and provide exposure to design principles used in many different types of computer systems.

Prerequisites: CSCI 2330.

Previous terms offered: Spring 2024, Fall 2022, Spring 2021.

CSCI 3325  (a)   Distributed Systems  

Every Other Year. Enrollment limit: 16.  

Studies the key design principles and implementation challenges of distributed systems, which are collections of independent, networked machines functioning as single systems. Topics include networking and communication protocols, naming, synchronization, consistency and replication, fault tolerance, and security. Students gain exposure to real-world distributed systems through programming-intensive projects, as well as critiques of research papers covering a variety of real-world systems ranging from the Internet to file systems.

Prerequisites: CSCI 2330.

Previous terms offered: Fall 2023, Spring 2022.

CSCI 3400  (a)   Cognitive Architecture  

Non-Standard Rotation. Enrollment limit: 16.  

Advances in computer science, psychology, and neuroscience have shown that humans process information in ways that are very different from those used by computers. Explores the architecture and mechanisms that the human brain uses to process information. In many cases, these mechanisms are contrasted with their counterparts in traditional computer design. A central focus is to discern when the human cognitive architecture works well, when it performs poorly, and why. Conceptually oriented, drawing ideas from computer science, psychology, and neuroscience. No programming experience necessary. (Same as: DCS 3400)

Prerequisites: CSCI 2101 or BIOL 2135 or PSYC 2040 or PSYC 2740.

Previous terms offered: Spring 2024, Fall 2022.

CSCI 3465  (a, MCSR)   Financial Machine Learning  

Every Spring. Enrollment limit: 16.  

Machine learning (ML) is the study of computer programs that can autonomously improve performance by exposure to additional data, and it is increasingly central to financial research and the finance industry. Both established firms and “FinTech” startups use ML to determine creditworthiness, allocate investment resources, and predict the future of company, sector, or national equities. These efforts raise interesting technical and ethical questions. Course content is divided between advanced technical topics like deep neural networks, deep reinforcement learning, and multi-agent simulation, and financial topics like the efficient markets hypothesis, capital assets pricing model, and mean-variance portfolio optimization. Emphasis is on empirical machine learning applied to financial topics, careful analysis of the results, and the need for responsible approaches to ML. Programming-heavy, project-heavy course. Strong CS background is needed. No prior finance knowledge is expected.

Prerequisites: CSCI 2400.

Previous terms offered: Spring 2024, Spring 2023, Spring 2022.

CSCI 3485  (a, MCSR)   Deep Learning for Computer Vision  

Jeova Farias.
Non-Standard Rotation. Fall 2024. Enrollment limit: 16.
  

Computer vision has become ubiquitous in our society, from image searches to self-driving cars. On the other hand, deep learning has shaken the world of artificial intelligence in recent years. Most of these developments greatly advanced the performance of state-of-the-art visual recognition systems, which put computer vision at the epicenter of most technological progress from the past decade. In this context, this course aims at providing a consistent exploration of how deep learning began to its most recent achievements, always using computer vision tasks as their main application, historically or practically. During the course, we'll also understand many of the main computer vision problems and use them as cases for the introduction of various deep learning-related problems. Finally, this course hopes to give students working knowledge of one of the main deep learning frameworks, such as PyTorch, and prepare them for future industrial and academic careers in the field.

Prerequisites: CSCI 2101.

Previous terms offered: Fall 2023.

CSCI 3500  (a, MCSR)   Software and Cognition  

Non-Standard Rotation. Enrollment limit: 20.  

Does your brain treat writing a program more like writing a poem or more like solving an equation? What does the psychology of perception say about user interface design? Covers the intersection of software topics (e.g., reading, writing and debugging programs) and human factors (e.g., perception, bias, cognition). Will explore classic topics in psychology (e.g., Asch's conformity experiment, zero-risk bias, functional magnetic resonance imaging, mental rotation, Hick's law, etc.) in a manner that is approachable to students without prior psychology experience. Will relate these topics to activities in computer science and discuss the resulting implications. Group discussions will focus on constructive conversations that summarize the work, analyze its strengths, and brainstorm ways in which it might be improved in the future.

Prerequisites: CSCI 2101.

Previous terms offered: Spring 2024.

CSCI 3725  (a)   Computational Creativity  

Sarah Harmon.
Every Year. Fall 2024. Enrollment limit: 16.
  

Introduces theoretical foundations of modeling and evaluating creativity. Students learn techniques to assess creative systems and implement, analyze, and extend algorithms relevant to the latest state of the art. Special topics may include augmented creativity, hybrid systems, narrative intelligence, and algorithmic composition. Culminates in a final report that describes a novel creative technique or framework.

Prerequisites: CSCI 2101.

Previous terms offered: Fall 2023, Fall 2022, Spring 2021, Fall 2020.