Computer Science

Undergraduate

Computer science is an exciting field with applications to many disciplines across the humanities, social sciences, and sciences. The main role of a computer scientist is that of a problem solver. A degree in the field signifies formal training in computational and analytical approaches to problem solving as well as the skills necessary to develop software to tackle new challenges. These computational approaches can be applied to a wide spectrum of problems, including protein folding and flexibility, modeling and forecasting bird migration, improving the capabilities of search engines to retrieve the most relevant documents, understanding how the connectedness provided by social networks impact the lives we lead, supporting scientists in the management and analysis of the data they collect, and more.

Program Overview

Problem solving in computer science starts with the identification of a challenge, such as planning a spacecraft trajectory, enabling a swarm of robots to deliver a pizza, or finding the best possible answers to your web query. The Computer Science program is constructed to build the conceptual understanding and skills necessary for computational problem solving. The curriculum engages you in core topics that range from learning how to program to building computer systems using boolean algebra to developing software methodologies that ensure robust programs to analyzing algorithms for correctness and cost. Co-curricular activities and programs, including embedded peer mentoring at the introductory level, seek to support students by cultivating a community of learning.

Computer scientists also develop and analyze the algorithms that reach into biology, chemistry, physics, economics and business, that are transforming mathematical research and that provide new tools and media for art and music. 

The importance of the liberal arts in the study of computer science

Strong communication and collaboration skills and the ability to think broadly and flexibly set our graduates apart. Our graduates pursue industry positions at technology giants, found their own startups and study at competitive graduate schools, including Carnegie Mellon, Stanford, MIT and Brown.

Why study computer science?

We are living in the midst of a revolution powered by computers that is infused throughout almost all aspects of society — communication, transportation, medical, commerce and entertainment — to name a few.

Beyond the daily interactions you may have with social networks or smartphones, technology has impacted other fields. Scientific research often uses experimentation done on computer models rather than the real world. Climate change research, for example, uses computer models because it is not possible to design and carry out an experiment to evaluate the effects of carbon emissions on the environment.

Medicine and medical research rely extensively on computers. Drug discovery research, for example, can involves studying computer models of proteins, viruses and drugs prior to actually synthesizing and experimenting with potential drugs.

The Discipline of Computer Science

Computer science studies how to solve problems with computers. This problem solving can be viewed from many angles:

  • Logic. How can you describe a solution to a problem so precisely that a computer (a device that, at its core, can only execute extremely simple instructions, very quickly) can execute it?
  • Algorithms. How do you compose logical steps together to solve a problem? How do you do so efficiently? How do you prove mathematically that your algorithm is correct?
  • Abstraction. Problems that are solved with computers tend to be large and complicated. Developing abstractions allow a computer scientist to decompose a problem into smaller pieces, solve those pieces individually and combine the results to form a comprehensive solution.
  • Computability. What problems are solvable by computers? Currently, some things that are very easy for people to do are still very difficult for computers. There are even problems that we know can never be solved by computers. Still other problems have simple algorithms, but the algorithms would take many years to calculate the solutions to problems of any realistic size. How do we know if a problem is intractable?

Beyond these essential elements of computational thinking, computer science encompasses many more specialized fields, including: information retrieval, software engineering, computational geometry, computer graphics and animation, computer architecture, networking, programming languages, robotics and more.

Alum Connections

Stories from Computer Science alums

Selecting courses in your first year

Interested in getting started with computer science?

The computer science department offers multiple ways to begin study of computer science, both for students considering a CS major and those who are curious about CS but looking for an introduction that is not programming-intensive.

For those considering a major or minor in computer science

If you are interested in a major or minor in computer science, the recommended entry point is any COMSC-151 offering. This is a programming-intensive course introducing the use of computers as a problem-solving tool. There are a variety of COMSC-151 offerings (for example, COMSC-151AA,COMSC-151AR, COMSC-151DS, COMSC-151HC, and COMSC-151MD) which all cover the same essential material but with differing motivating examples.

Some semesters, the department offers an alternative and slightly slower-paced entry point to the major or minor: COMSC-150. This course should be followed by COMSC-121; the combination of the two is equivalent to COMSC-151.

Students with prior programming experience may take a placement test to determine eligibility to skip the above and start with COMSC-205.

For those who are CS-curious

If you are interested in exploring computer science, with a less intensive programming experience, the department typically offers at least one non-major course each semester (for example, COMSC-100, COMSC-106, COMSC-108, and COMSC-109).

Any member of the computer science faculty can answer your questions about your course of study.

Courses and Requirements

Introductory courses focus on the fundamentals of programming, enabling students to implement ideas and approaches in code. Intermediate and advanced courses offer breadth and depth in areas such as computing systems, artificial intelligence, robotics, networking and algorithms.

Learning Goals

The computer science curriculum is designed to encourage students to:

  • Develop the critical thinking skills to solve problems by designing and implementing algorithms.
  • Develop the analytical skills for reasoning about algorithmic complexity.
  • Be able to design, implement, test, and document computer programs that solve substantial computational problems.
  • Build skills for developing a working understanding of a complex code base and ability to effectively modify it.
  • Be able to think at multiple levels of detail and abstraction.
  • Develop a foundation that allows and encourages learning new and relevant skills and technologies as the field evolves.
  • Understand the interplay between theory and practice.
  • Understand the interplay between software and hardware.
  • Be able to communicate clearly in written and oral form.
  • Be able to work effectively on a team.

More specifically, students are expected to master the following concepts:

  • Computer programming — including working knowledge of at least two programming languages in different paradigms.
  • Data structures: an ability to use and implement fundamental abstract data types including queues, stacks, balanced search trees, hash tables, and graphs.
  • Abstraction to manage complexity.
  • Recursion and induction.
  • Algorithmic problem-solving: an ability to design, code, analyze, and prove the correctness of algorithms using recursive divide-and-conquer, dynamic programming, and greedy approaches.
  • The conceptual organization of computers—including both computer architecture (the hardware level) and operating system issues.
  • Data storage on a computer.
  • Applications of computing: an understanding of how computers, algorithms, programs, and/or data structures are used in several application areas.

Requirements for the Major

A minimum of 40 credits:

Computer Science (36 credits)
COMSC-151Introduction to Computational Problem Solving 14
COMSC-205Data Structures4
COMSC-221Introduction to Computing Systems4
COMSC-225Software Design and Development4
COMSC-312Algorithms4
COMSC-322Operating Systems4
Three additional computer science courses: 212
Two of these must be at the 300 level (8 credits)
The third may be at either the 200 level or 300 level (4 credits) 3
Mathematics (4 credits)
MATH-232Discrete Mathematics 44
Humanities and Social Sciences 5, 6
Beyond those used to fulfill the College's distribution requirements:
One additional designated Humanities course 7
One additional designated Social Science course 7
Total Credits40
1

Any COMSC-151 offering, for example COMSC-151AA, COMSC-151AR, COMSC-151CP, COMSC-151DS, or COMSC-151HC.

2

Independent study courses do not count as electives

3

Students may also count PHIL-225 as an elective because of its strong connection to computer science

4

Computer science majors who elect a mathematics or statistics minor may not count MATH-232 for credit in both mathematics or statistics and computer science

5

These courses can also count towards the College's Outside the Major requirement or towards the requirements of a second major and therefore are not counted directly toward the credits required for the major.

6

The ungraded option cannot be elected after declaration of the major in courses used to meet these requirements

7

Designated courses are those that have been classified to meet the College's applicable distribution requirement

Additional Specifications

  • The skills and abstract reasoning of mathematics are especially important in computer science. It is strongly recommended that students take additional mathematics courses (at least through MATH-101 and MATH-102). MATH-211, is very useful for some fields, like machine learning and computer graphics.
  • Students planning to pursue an advanced degree in computer science should include in their plans additional computer science courses and independent research leading to a thesis.

Requirements for the Minor

A minimum of 20 credits:

Computer Science
COMSC-151Introduction to Computational Problem Solving 1, 24
COMSC-205Data Structures 34
COMSC-225Software Design and Development4
Two additional computer science courses (8 credits), including:8
One at the 300 level
The second can be at either the 200 level or 300 level
Total Credits20
1

Any COMSC-151 offering, for example COMSC-151AA, COMSC-151AR, COMSC-151CP, COMSC-151DS, or COMSC-151HC.

2

COMSC-150 plus COMSC-121 can substitute for COMSC-151

3

COMSC-205PY plus COMSC-122 can substitute for COMSC-205

Course Advice

The Computer Science department offers multiple ways to begin study of computer science, suitable for students considering a computer science major or minor, those who may want to use computing within another major, and those who are curious about computer science and want to start with an introduction that is not programming-intensive.
 
For students considering a major or minor in computer science:
 
If you are interested in a major or minor in computer science, the recommended entry point is any COMSC-151 offering. This is a programming-intensive course introducing the use of computers as a problem-solving tool. There are a variety of COMSC-151 offerings (for example, COMSC-151AA, COMSC-151AR, COMSC-151CP, COMSC-151DS, and COMSC-151HC) which all cover the same essential material but with differing motivating examples.
 
Students with prior programming experience may take a placement test to determine eligibility to skip the above and start with COMSC-205.

For students interested in programming but undecided about a computer science major or minor:

Some semesters, the department offers an alternative entry point: COMSC-150. This course focuses on the core constructs used in many programming languages, but does not include the topic of object-oriented programming. If a student then wishes to continue with more computer science study, COMSC-150 should be followed by COMSC-161; the combination of the two is equivalent to COMSC-151.

For student curious about computer science:
 
For students interested in exploring computer science with less emphasis on programming, the department typically offers at least one non-major course each semester (for example, COMSC-100, COMSC-106, COMSC-108, or COMSC-109).

Course Offerings

COMSC-100 Computing and the Digital World

Not Scheduled for This Year. Credits: 4

An introduction to basic computer science concepts. Lectures will cover topics such as the origins of computing, computer architecture, artificial intelligence, and privacy and security. There will be some programming exercises.

Applies to requirement(s): Math Sciences
S. Biswal
Advisory: No prior study of computer science is expected. Students may not take this course after Computer Science 106, 150, or 151.
Notes: Course does not count toward the Computer Science major or minor.

COMSC-106 Fundamentals of Applied Computing

Not Scheduled for This Year. Credits: 4

Have you ever used Google's image search tool and wondered how the search results were found? Why is it so difficult for a computer to "see" as we do? Computer scientists are actively researching how to approach this challenge of "computer vision." This course will introduce the fundamentals of applied computing using computer vision as a motivating theme. Students will learn foundations of programming (in the Python programming language) before working with computational tools more independently.

Applies to requirement(s): Math Sciences
S. Biswal, A. St. John
Advisory: No prior study of computer science is expected. Students may not take this course after Computer Science 100, 150, or 151.
Notes: Course does not count toward the Computer Science major or minor.

COMSC-107 iDesign Learning Lab

Fall and Spring. Credits: 2

When charting a path through college and beyond, a metacognitive framework can provide scaffolding for intentional reflection. Situated in the Fimbel Maker & Innovation lab, this course will leverage tangible activities to ground discussions on factors and strategies that impact learning. For example, embedding a microcontroller to create motion-sensitive lights in a ballet skirt parallels the cycle of self-regulated learning. No prior experience with electronics or computer science is assumed, and students will work with hands-on tutorials that teach the basics required to develop their own interactive technology projects.

A. Burns
Notes: Half semester.

COMSC-108 Computing and Dance

Not Scheduled for This Year. Credits: 4

Designers are continually innovating ways of incorporating technology into today's world, from apps that monitor physical activity to 3D-printed toe shoes to dancing avatars trained via Machine Learning. The recent emergence of low-cost, user- friendly components makes this new world of design accessible to a broad community. In this course, students will think critically about technologies that can enhance dance technique and performance. Through a sequence of hands-on workshops on electronics basics and microcontroller programming, students will gain the surprisingly minimal level of comfort and background necessary to learn tools to produce prototypes and address these dance-related technologies.

Applies to requirement(s): Math Sciences
L. Ballesteros

COMSC-109 iDesign Studio

Not Scheduled for This Year. Credits: 4

Designers are continually innovating ways of incorporating technology into today's world, from projections of butterflies on Grammy performance dresses to "smart" purses that sense when your wallet is missing. The recent emergence of low-cost, user-friendly components is making this new world of design accessible to a broad community. In this course, students will think critically about products already in the marketplace and will be given the tools to create their own designs. A sequence of hands-on workshops on electronics basics and microcontroller programming will provide the surprisingly minimal level of comfort and background in technology required to produce prototypes of these designs.

Applies to requirement(s): Math Sciences
The department

COMSC-120 Introduction to R

Spring. Credits: 1

An introduction to the programming language R and how it can be used for statistical analysis and visualization of data. Students will learn how to write basic R programs that can read, write, and manipulate data. They will make use of R functions for executing common statistical analysis and learn how to display the results using graphs and charts. Through a series of projects, students will get experience with writing their own functions, learn how to make use of R documentation and how to extend their own knowledge of the language.

Applies to requirement(s): Meets No Distribution Requirement
V. Barr
Notes: Credit/no credit grading.

COMSC-121 Object-Oriented Programming

Not Scheduled for This Year. Credits: 1

This course will introduce object-oriented programming to students who have a foundation in Python programming and are interested in continuing on to COMSC-205 Data Structures. It includes coverage of classes, objects, methods, and sub-typing.

Applies to requirement(s): Meets No Distribution Requirement
The department
Prereq: COMSC-150 or computer science placement test.

COMSC-122 Java Programming Language

Not Scheduled for This Year. Credits: 1

This course will teach the Java programming language to students who already have programming ability in another object-oriented programming language.

Applies to requirement(s): Meets No Distribution Requirement
The department
Prereq: COMSC-205PY.

COMSC-132 Engineering for Everyone

Not Scheduled for This Year. Credits: 4

Engineers change the world we live in every day by developing technologies that influence nearly every aspect of our lives. In this course, we will study how engineered things shape the world we live in. Students will engage in a team-based, hands-on engineering design project, from brainstorming solutions to a contemporary problem, to building, testing, and iterating design solutions. In the process, students will learn basic programming and fabrication skills. We will reflect together on the ethics of engineering design, and leave with a more nuanced understanding of the ways technology and society interact. Who decides what technologies matter? What is a "good" technological solution, and for whom is it "good"?

Crosslisted as: PHYS-132
Applies to requirement(s): Math Sciences
The department
Advisory: This course has no prerequisites and is recommended for all students interested in engineering and technology.
Notes: Students interested in continuing with the Engineering Nexus are strongly recommended to take the course.

COMSC-150 Introduction to Computer Science

Spring. Credits: 4

Introduction to the field of computer science. Introduces students to Python programming including algorithms, basic data structures (lists, dictionaries), and programming techniques. Does not include object-oriented programming.

Applies to requirement(s): Math Sciences
B. Lerner
Notes: Students pursuing a Computer Science major or minor or the Data Science major should take COMSC-161 following this course. Alternatively, students may wish to consider the more programming-intensive course COMSC-151.

COMSC-151 Introduction to Computational Problem Solving

Thematic introduction to the field of computer science. Draws on problems found in the thematic focus of each topics course. All topics courses within COMSC-151 cover the same concepts and skills and satisfy requirements in the Computer Science major and minor as well as the Data Science major. This course is programming-intensive and includes the topic of object-oriented programming. Students may wish to consider COMSC-150 as an alternative entry point that does not cover the topic of object-oriented programming.

COMSC-151AA Introduction to Computational Problem Solving: 'Algorithmic Arts'

Not Scheduled for This Year. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques. Explores computation as an artistic medium, examining a range of computational art practices. By combining aspects of a studio art course, a media art survey, and an introductory computing lab, course participants will develop a solid foundation in computer programming approaches and techniques as they pertain to art production as well as an understanding of their emerging importance in the contemporary art world.

Applies to requirement(s): Math Sciences
The department
Coreq: COMSC-151AAL.
Notes: Additional seats will open for all students after first year students have registered.

COMSC-151AR Introduction to Computational Problem Solving: 'Artificial Intelligence'

Not Scheduled for This Year. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques, and basic methods from artificial intelligence. Includes discussion of foundational papers in AI. Programming exercises will explore what is necessary in order to get computers to operate in ways that seem intelligent such as in game play or solving puzzles.

Applies to requirement(s): Math Sciences
The department
Coreq: COMSC-151ARL.
Notes: Additional seats will open for all students after first year students have registered.

COMSC-151CP Introduction to Computational Problem Solving: 'Computing Principles'

Fall. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques. Students learn computing principles by exploring problems drawn from a broad set of domains, such as cryptography, data analysis and games.

Applies to requirement(s): Math Sciences
A. Burns
Coreq: COMSC-151CPL.

COMSC-151DS Introduction to Computational Problem Solving: 'Big Data'

Not Scheduled for This Year. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques, and focuses on data collection, preparation, analysis. Explores programming for data manipulation, the presentation and representation of data, and the ethics of working with data at scale.

Applies to requirement(s): Math Sciences
B. Lerner
Coreq: COMSC-151DSL.

COMSC-151HC Introduction to Computational Problem Solving: 'Humanities Computing'

Not Scheduled for This Year. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques. Students will explore solving problems that arise in humanities disciplines: various forms of text analysis, image manipulation, animation, and sound manipulation.

Applies to requirement(s): Math Sciences
The department
Coreq: COMSC-151HCL.

COMSC-151SG Introduction to Computational Problem Solving: 'Computing for Social Good'

Not Scheduled for This Year. Credits: 4

Introduces students to algorithms, basic data structures, and programming techniques. Includes discussion of the ways in which computing can improve human lives and society, such as improving accessibility for people with disabilities, or helping organize a rescue team during an emergency.

Applies to requirement(s): Math Sciences
B. Lerner
Coreq: COMSC-151SGL.

COMSC-161 Introduction to Computer Science Part 2: Object-Oriented Programming

Fall and Spring. Credits: 2

This course builds on the programming concepts learned in COMSC-150, covering object-oriented programming and introducing the Java programming language.

A. Burns
Prereq: COMSC-150 or placement test.
Advisory: Students may not take this course after Computer Science 151. Just getting started with computer science? We recommend taking the CS Problem Solving Assessment. You can access it via Gradescope with Entry Code RWG253.
Notes: Half semester. The combination of COMSC-150 and COMSC-161 serves as an alternate prerequisite route for COMSC-205 Data Structures.

COMSC-205 Data Structures

Fall and Spring. Credits: 4

This course builds on the basic programming concepts learned in Computer Science 151, shifting the focus to the organization of data in order to improve efficiency and simplicity of programs. Topics include the study of abstract data types and data structures (such as linked lists, stacks, queues, and binary trees). This course is programming-intensive and introduces the Java programming language.

Applies to requirement(s): Math Sciences
S. Biswal
Prereq: COMSC-151 (with a grade of C or better) or COMSC-161 (with a grade of C or better). Coreq: COMSC-205L.
Advisory: This course cannot be taken by students who have completed COMSC-201 or COMSC-211. Just getting started with computer science? We recommend taking the CS Problem Solving Assessment. You can access it via Gradescope with Entry Code RWG253.

COMSC-205PY Data Structures (in Python)

Not Scheduled for This Year. Credits: 4

This course builds on the basic programming concepts learned in Computer Science 150 and Computer Science 121, shifting the focus to the organization of data in order to improve efficiency and simplicity of programs. Topics include the study of abstract data types and data structures (such as linked lists, stacks, queues, and binary trees). This course is programming-intensive.

Applies to requirement(s): Math Sciences
The department
Prereq: COMSC-150 (with grade of C or better) and COMSC-121; or COMSC-151 (with grade of C or better).
Notes: Students taking this course will need to take COMSC-122 Java Programming Language before continuing with COMSC-225.

COMSC-211 Advanced Data Structures

Not Scheduled for This Year. Credits: 4

Using Java. Solving problems with computers is accomplished by writing programs that operate on data to produce a desired result. The way data is organized and presented to the program can significantly affect its efficiency and simplicity and can sometimes determine whether or not a program can be written to solve the problem at all. This course presents ways of organizing data into 'data structures' and analyzes how structuring the data can improve program performance.This course is programming intensive.

Applies to requirement(s): Math Sciences
The department
Prereq: COMSC-201.

COMSC-221 Introduction to Computing Systems

Fall and Spring. Credits: 4

This course looks at the inner workings of a computer and computer systems. It is an introduction to computer architecture. Specific topics include assembly language programming, memory, and parallelism. This course is programming intensive.

Applies to requirement(s): Math Sciences
L. Ballesteros
Prereq: COMSC-201, COMSC-205, or COMSC-205PY; and MATH-232. Coreq: COMSC-221L.
Advisory: The department recommends, but does not require, that students take COMSC-225 prior to COMSC-221.

COMSC-225 Software Design and Development

Fall and Spring. Credits: 4

Building large software systems introduces new challenges to software development. Appropriate design decisions and programming methodology can make a major difference in developing software that is correct and maintainable. In this course, students will learn techniques and tools that are used to build correct and maintainable software, improving their skills in designing, writing, debugging, and testing software. Topics include object-oriented design, testing, design patterns, and software architecture. This course is programming intensive.

Applies to requirement(s): Math Sciences
S. Biswal, Y. Su
Prereq: COMSC-205 (with a grade of C or better), or COMSC-205PY (with a grade of C or better).
Advisory: Students who have taken COMSC-215 may not take COMSC-225.

COMSC-226 Engineering Robotic Systems

Spring. Credits: 4

This intermediate-level course presents a hands-on introduction to robotics. Each student will construct and modify a robot controlled by an Arduino-like microcontroller. Topics include kinematics, inverse kinematics, control-theory, sensors, mechatronics, and motion planning. Material will be delivered through one weekly lecture and one weekly guided laboratory. Assignments include a lab-preparatory homework, guided lab sessions, and out-of-class projects that build upon the in-class sessions. Students have access to the Fimbel Maker and Innovation lab for fabricating and demonstrating their robots.

Applies to requirement(s): Math Sciences
M. Su
Instructor permission required.
Prereq: COMSC-150 or COMSC-151.
Advisory: Use this form to apply for permission: https://forms.gle/gmPFFyokU1a64QB69

COMSC-243 Topic

COMSC-243ST Topic: 'Introduction to Search Technologies'

Fall. Credits: 4

The vast amount of unstructured and structured data on the web and in organizational databases has increased the need for approaches to processing large volumes of text. Such analyses help researchers and businesses to gain insights -- that would otherwise be too resource- and time-consuming to do manually -- into issues such as how much a consumer can be expected to spend in a particular context, the rise of hate groups and their impact on social media, or to whom a newly discovered manuscript may be attributed. In this course, students are introduced to tools and techniques used to gain these insights, such as Map-Reduce and Sentiment Analysis, in the context of Natural Language Processing and search technologies (e.g., Google).

Applies to requirement(s): Math Sciences
L. Ballesteros
Prereq: COMSC-150 or COMSC-151.
Advisory: Waitlisted? Please fill out this form: https://forms.gle/jziK4Ka2vcZVxKYi9

COMSC-243SW Topic: 'Computing Systems Workshop'

Fall. Credits: 4

Beneath the polished surface of high-level programming languages like Python and consumer devices like gaming consoles and smartphones lie the elemental parts of computer systems -- elements like hardware components, operating systems, and digital logic. This course will use a hands-on approach combining both hardware and software as a way of understanding such systems at a low level. Students will have the chance to construct various tangible projects using Raspberry Pi computers and will have access to the Fimbel Maker & Innovation lab. Specific topics will touch on low level data representation, sound generation, and the classic Nintendo Entertainment System.

Applies to requirement(s): Math Sciences
J. McCauley
Prereq: COMSC-150 or COMSC-151.

COMSC-243WS Topic: 'Web Search'

Not Scheduled for This Year. Credits: 4

This course explores how web search engines work and will cover basic text processing, index construction and compression, crawler architecture, link analysis and retrieval functions, spam reduction, and system evaluation. It will also explore applications such as clustering, classification, duplicate detection, web mining, and online advertising.

Applies to requirement(s): Math Sciences
The department
Prereq: COMSC-205 or COMSC-211.

COMSC-295 Independent Study

Fall and Spring. Credits: 1 - 4

The department
Instructor permission required.

COMSC-311 Theory of Computation

Not Scheduled for This Year. Credits: 4

Are there any limits to what computers can do? Does the answer to this question depend on whether you use a PC or a Mac? Is C more powerful than PASCAL? This seminar explores these questions by investigating several models of computation, illustrating the power and limitations of each of these models, and relating them to computational problems and applications. Topics include finite state automata, pushdown automata, grammars, Turing machines, the Universal Turing Machine, and computability.

Applies to requirement(s): Math Sciences
S. Biswal
Prereq: COMSC-201 or COMSC-205; MATH-232.
Advisory: Waitlisted? Please fill out this form: https://forms.gle/jziK4Ka2vcZVxKYi9

COMSC-312 Algorithms

Fall and Spring. Credits: 4

How does Google Maps find the best route between two locations? How do computers help to decode the human genome? At the heart of these and other complex computer applications are nontrivial algorithms. While algorithms must be specialized to an application, there are some standard ways of approaching algorithmic problems that tend to be useful in many applications. Among other topics, we explore graph algorithms, greedy algorithms, divide-and-conquer, dynamic programming, and network flow. Students learn to recognize when to apply each of these strategies as well as to evaluate the expected runtime costs of the algorithms they design.

Applies to requirement(s): Math Sciences
B. Lerner, D. Rai
Prereq: COMSC-201 or COMSC-205 or COMSC-205PY; MATH-232.

COMSC-316 Developing Innovative Software

Spring. Credits: 4

Tired of writing programs that nobody ever uses? Then, this is the course for you. Many people come up with novel ideas for software, but lack the resources or ability to develop the software. Students will apply their programming skills to develop and deliver software based on the requirements of a client. Students will learn critical communication skills required to work with a client, work in teams with classmates, and experience the software lifecycle from requirements elicitation through delivery. Students will synthesize many topics learned in prior courses as well as explore new technologies required to complete a specific project. Programming intensive.

Applies to requirement(s): Math Sciences
B. Lerner
Prereq: COMSC-215 or COMSC-225.

COMSC-322 Operating Systems

Fall and Spring. Credits: 4

An introduction to the issues involved in orchestrating the use of computer resources. Topics include operating system evolution, memory management, virtual memory, resource scheduling, multiprogramming, deadlocks, concurrent processes, protection, and design principles. Course emphasis: understanding the implications of OS design on the programs you run and write (i.e., on their security, performance, etc.). This course is programming intensive.

Applies to requirement(s): Math Sciences
J. McCauley
Prereq: COMSC-221, and either COMSC-211 or COMSC-225.

COMSC-331 Computer Graphics

Not Scheduled for This Year. Credits: 4

The creation of pictorial images using a computer. Topics include drawing of two- and three-dimensional scenes using OpenGL and other graphical environments; transformations of objects (translations, scalings, rotations, shearings) using homogeneous coordinates; creating perspective in three-dimensional drawing; algorithms for enhancing realism and visual effect; and ray tracing. Students will complete a number of graphics projects based on readings and class discussion.This course is programming intensive.

Applies to requirement(s): Math Sciences
The department
Prereq: COMSC-205 or COMSC-211, and at least one of the following: MATH-203, MATH-211, or MATH-232.

COMSC-334 Artificial Intelligence

Not Scheduled for This Year. Credits: 4

Artificial Intelligence, as a field, has grown from its humble beginnings in science fiction to become one of the broadest fields in computer science, encompassing an incredibly wide array of topics. One of the common threads between these topics is "How do we build computer systems which exhibit logic and reason?" or rather "How do we build systems which can solve problems intelligently without resorting to brute force?" We'll cover a few major topics in this course, most notably search, logical reasoning, and planning as well as game playing/theory, uncertain reasoning, and graphical models. This course is programming intensive.

Applies to requirement(s): Math Sciences
L. Ballesteros
Instructor permission required.
Prereq: COMSC-225 and MATH-232.
Advisory: Apply for permission using this form: https://forms.gle/nar9XSGTDrjpbZEL7

COMSC-335 Machine Learning

Spring. Credits: 4

How does Neflix learn what movies a person likes? How do computers read handwritten addresses on packages, or detect faces in images? Machine learning is the practice of programming computers to learn and improve through experience, and it is becoming pervasive in technology and science. This course will cover the mathematical underpinnings, algorithms, and practices that enable a computer to learn. Topics will include supervised learning, unsupervised learning, evaluation methodology, and Bayesian probabilistic modeling. Students will learn to program in MATLAB or Python and apply course skills to solve real world prediction and pattern recognition problems. Programming Intensive.

Applies to requirement(s): Math Sciences
Y. Su
Instructor permission required.
Prereq: A grade of C or better in one of COMSC-205 or COMSC-205PY or COMSC-211, MATH-232, and a Calculus course (MATH-101, MATH-102, or MATH-203).
Advisory: Preference will be given to Computer Science seniors in need of a final 300-level elective and Data Science seniors. Use this form to apply for permission: https://forms.gle/gmPFFyokU1a64QB69

COMSC-341 Topics

COMSC-341CC Topics: 'Compiler Design'

Spring. Credits: 4

Principles and practices for the design and implementation of compilers and interpreters. Will cover the stages of the compilation and execution process: lexical analysis; parsing; symbol tables; type systems; scope; semantic analysis; intermediate representations; run-time environments and interpreters; code generation; program analysis and optimization; and garbage collection. Students will construct a full compiler.

Applies to requirement(s): Math Sciences
V. Barr
Instructor permission required.
Prereq: COMSC-221, COMSC-225, and COMSC-312.

COMSC-341GP Topics: 'Game Programming'

Not Scheduled for This Year. Credits: 4

Video games are not only fun to play but interesting and challenging to program, involving elements that are useful in programming other sorts of systems as well. They incorporate graphics, audio, and animation, must model relatively complex systems, and often have relatively strict requirements on timing. In this course, we explore techniques behind game implementation by implementing some of our own. This course is programming (and gaming) intensive.

Applies to requirement(s): Math Sciences
J. McCauley
Instructor permission required.
Prereq: COMSC-225 and either MATH-100 or equivalent as indicated by the math placement test or completion of a higher level math course.
Advisory: Use this form: https://forms.gle/nar9XSGTDrjpbZEL7 to apply for permission.

COMSC-341NL Topics: 'Natural Language Processing'

Not Scheduled for This Year. Credits: 4

This course provides an introduction to natural language processing, the discipline of enabling computers to process and understand human language. We will learn fundamental techniques for automated text and speech analysis and understanding, with insights from linguistics. Students will get hands-on practice implementing computational algorithms, reading scholarly research articles and will design and carry out an independent final project.

Applies to requirement(s): Math Sciences
H. Pon-Barry
Prereq: COMSC-225, MATH-232, and a Calculus course (MATH-101, MATH-102, or MATH-203).

COMSC-341NP Topics: 'Intro to Networking Architecture and Protocols'

Fall. Credits: 4

This course is an introduction to computer networking with a focus on the Internet. At the high level, we will emphasize concepts and principles which have contributed to the Internet's success scaling from its modest beginnings to a system used by over half of the world's population. At the low level, we will survey techniques, technologies and protocols that underlie networks, as well as key protocols built atop these networks. Specific topics include layering, routing, addressing, reliable delivery, congestion control, DNS, HTTP, and others.

Applies to requirement(s): Math Sciences
J. McCauley
Prereq: COMSC-221 and COMSC-312.
Advisory: Waitlisted? Please fill out this form: https://forms.gle/jziK4Ka2vcZVxKYi9

COMSC-343 Programming Language Design and Implementation

Fall. Credits: 4

Ever wonder why there are so many semicolons in Java programs, or what it would mean for a language to not be object-oriented? In this course, we will explore issues related to the design and implementation of programming languages. Along the way, we will discover answers to these questions and more. Topics will include syntax, semantics, runtime support for languages as well as an introduction to functional programming.

Applies to requirement(s): Math Sciences
B. Lerner
Prereq: COMSC-225.
Advisory: Waitlisted? Please fill out this form: https://forms.gle/jziK4Ka2vcZVxKYi9

COMSC-395 Independent Study

Fall and Spring. Credits: 1 - 8

The department
Instructor permission required.

Contact Us

The Department of Computer Science teaches students to examine, at one extreme, the core question of what can be computed and at the other, whether the combination of algorithms and computers can lead to intelligence.

Wendy D. Queiros
  • Academic Department Coordinator

Next Steps

Apply to Mount Holyoke

Mount Holyoke seeks intellectually curious applicants who understand the value of a liberal arts education and are driven by a love of learning. As a women's college that is gender diverse, we welcome applications from female, trans and non-binary students.

Financing your education

Everyone’s financial situation is unique, and we’re here to make sure cost does not get in the way of an exceptional education.