Computer Science

Margaret Robinson, Chair

Wendy Queiros, Academic Department Coordinator


207 Clapp Laboratory
413-538-2420
https://www.mtholyoke.edu/acad/computerscience

Overview and Contact Information

Computer science is an exciting field with applications across many other disciplines, including biology, chemistry, physics, environmental science, mathematics, economics, sociology, psychology, and art. 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 on 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, developing video games and computer animations, and more. In truth, it is difficult to think of a scenario in which the tools acquired in computer science do not provide a powerful advantage.

Honors

To graduate with honors in computer science, a student must complete a project and write an accompanying thesis. This is often a full year commitment, during which the student works closely with a faculty member to explore a topic in depth by reading research papers, writing programs, and experimenting with ideas. Preliminary research usually begins in the summer following the junior year, with the student submitting and defending a thesis proposal early in the fall of the senior year. Upon department approval of this proposal, the student will complete the research during the senior year, writing and defending the thesis in the spring. Some honors students attend conferences and/or coauthor papers with their mentors.

See Also

Faculty

This area of study is administered by the Department of Computer Science:

Margaret Robinson, Julia and Sarah Ann Adams Professor of Mathematics

Lisa Ballesteros, Associate Professor of Computer Science

Audrey Lee St. John, Associate Professor of Computer Science, On Leave 2016-2017

Barbara Lerner, Associate Professor of Computer Science

Heather Pon-Barry, Assistant Professor of Computer Science

Eitan Mendelowitz, Visiting Assistant Professor of Data Science

Daniel Sheldon, Five College Assistant Professor of Computer Science

Peter Klemperer, Visiting Lecturer in Computer Science

Janet Slocum, Lab Instructor; Visiting Lecturer in Computer Science

Yueming Yang, Visiting Lecturer in Computer Science

Requirements for the Major

A minimum of 40 credits:

Computer Science (36 credits)
COMSC-101Problem Solving and Object-Oriented Programming 4
COMSC-201Advanced Problem-Solving and Object-Oriented Programming 4
COMSC-211Data Structures 4
COMSC-221Computer System & Assembly Language 4
COMSC-312Algorithms 4
COMSC-322Operating Systems 4
Three additional computer science courses: 112
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) 2
Mathematics (4 credits)
MATH-232Discrete Mathematics 34
Total Credits40
1

Independent study courses do not count as electives

2

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

3

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

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 take additional computer science courses and include independent research leading to a thesis in their plans.

Requirements for the Minor

A minimum of 20 credits:

Computer Science
COMSC-101Problem Solving and Object-Oriented Programming 4
COMSC-201Advanced Problem-Solving and Object-Oriented Programming 4
COMSC-211Data Structures 4
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

Course Advice

The recommended way to begin a study of computer science is with COMSC-101. This course is an introduction to the use of computers as a problem-solving tool. Students with programming experience may consider beginning with COMSC-201. Any member of the computer science faculty can advise students who have questions about their course of study. COMSC-101 and COMSC-201 are offered both semesters.

Courses designed to offer students software design and programming experience are labeled as "Programming intensive."

Course Offerings

COMSC-100 An Introduction to Computer Science

Fall and Spring. Credits: 4

An introduction to basic computer science concepts with a focus on Python programming to manipulate images and sounds. Laboratory assignments will provide the main programming opportunities with Python, images, and sounds, while lectures will cover topics such as the origins of computing, computer architecture, artificial intelligence, and robotics.

Applies to requirement(s): Math Sciences
J. Slocum
Coreq: COMSC-100L.
Notes: Students should NOT take this course after Computer Science 101

COMSC-101 Problem Solving and Object-Oriented Programming

Fall and Spring. Credits: 4

Computers are used every day for an enormous variety of tasks, from playing games and chatting with friends to transferring billions of dollars, delivering radiation treatments, and controlling the electrical grid. Computer programs are an essential ingredient in allowing for this great diversity of applications. In this course, you will learn to create your own programs, based on core programming concepts and analytical problem solving approaches. You will develop programs involving graphics, animation and games using Java, a very popular modern programming language. We assume no prior study of computer science. Programming intensive.

Applies to requirement(s): Math Sciences
L. Ballesteros, B. Lerner, E. Mendelowitz
Coreq: COMSC-101L.
Notes: Students must choose a lab with the same instructor as the lecture. 9 seats open to sophomores, then 18 to first-years. When the course fills, juniors and seniors may join the waitlist.

COMSC-103 Networks

Not Scheduled for This Year. Credits: 4

How do opinions, fads, and political movements spread through society? What makes food webs and financial markets robust? What are the technological, political, and economic forces at play in online communities? This course examines connections between the social, technological, and natural worlds through the lens of networks. Students will learn basics of graph theory and game theory and apply them to build mathematical models of processes that take place in networks.

Applies to requirement(s): Math Sciences
D. Sheldon

COMSC-106 Introduction to Scientific 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? Course material will be framed in the context of computer vision, an active area of research in computer science addressing this general topic. This introduction to scientific computing will use the Python programming language and open source libraries. No prior study of computer science is expected.

Applies to requirement(s): Math Sciences
A. St. John
Advisory: Students should NOT take this course after Computer Science 100 or 101.

COMSC-109 iDesign Studio

Fall and Spring. 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
P. Klemperer, J. Slocum

COMSC-131 Introduction to Data Science

Spring. Credits: 4

This course will survey the foundational topics of the emerging field of Data Science. This course will introduce the skills, techniques, and tools needed to collect, prepare, analyze, and visualize data to quantitatively ask and answer questions. Through readings, discussions, case studies, and projects, students will explore a breadth of subjects including programming for data manipulation, the presentation and representation of data, statistics and machine learning, "Big Data," and the ethics of working with data at scale.

Applies to requirement(s): Math Sciences
E. Mendelowitz

COMSC-141 Introduction to Computing and the Arts

Spring. Credits: 4

This introductory course will explore computation as an artistic medium with creative approaches to computer programming as its central theme. We will examine a range of computational art practices through readings, viewings discussions, labs, projects, critiques, and guest artist/researcher presentations. 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.

Crosslisted as: ARTST-141
Applies to requirement(s): Math Sciences
E. Mendelowitz

COMSC-201 Advanced Problem-Solving and Object-Oriented Programming

Fall and Spring. Credits: 4

This course builds on the basic programming concepts learned in Computer Science 101. Emphasis is on developing the skills needed to write more sophisticated programs. This includes strategies to aid in assuring the correctness of programs through the use of assertions and unit testing as well as advanced Java features such as inheritance, polymorphism, and network programming. We will also introduce some widely used data structures such as vectors and linked lists. This course is programming-intensive.

Applies to requirement(s): Math Sciences
H. Pon-Barry, Y. Yang, The department
Prereq: COMSC-101 with a grade of C or better. Coreq: COMSC-201L.
Notes: Students must choose a lab with the same instructor as the lecture. 18 seats open to sophomores, juniors, and seniors, then 6 to first-years. When the course fills, students may join the waitlist.

COMSC-211 Data Structures

Fall and Spring. 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
P. Klemperer
Prereq: COMSC-201.

COMSC-215 Software Design

Spring. Credits: 4

Building large software systems introduces new challenges to software development. Appropriate design decisions early in the development of large software can make a major difference in developing software that is correct and maintainable. In this course, students will learn techniques and tools to help them address these problems and develop larger software projects, improving their skills in designing, writing, debugging, and testing software. Topics include design patterns, UML, designing for maintainability, software architecture, and designing concurrent and fault tolerant systems. Programming intensive.

Applies to requirement(s): Math Sciences
B. Lerner
Prereq: COMSC-201.

COMSC-221 Computer System & Assembly Language

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
Y. Yang
Prereq: COMSC-201. Coreq: COMSC-221L.

COMSC-243 Topic

COMSC-243RW Topic: 'Robotics Workshop'

Not Scheduled for This Year. Credits: 4

This intermediate-level course will give students hands-on experience designing and developing robots. Not traditionally lecture-based, material will be delivered through an initial set of tutorial-style laboratory sessions. In the first few weeks, students will learn basic hardware components through the use of a microcontroller (e.g., the Arduino Uno). Students will then pitch and develop a robot for the remainder of the semester. A three-dimensional printer is available to produce components for student designs.

Applies to requirement(s): Math Sciences
A. St. John
Instructor permission required.
Prereq: COMSC-101.

COMSC-285 MaGE Practicum

Fall and Spring. Credits: 2

This course is a discussion and practicum for students currently acting as mentors in the Computer Science Megas and Gigas Educate (MaGE) peer mentoring program. Through discussion, we will draw connections between the peer mentor experience and existing research and philosophies of peer mentoring and computer science education, to develop effective practical strategies.

Applies to requirement(s): Meets No Distribution Requirement
H. Pon-Barry
Instructor permission required.
Prereq: CUSP-216.

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
A. St. John
Prereq: COMSC-201 and MATH-232.

COMSC-312 Algorithms

Fall and Spring. Credits: 4

How does Mapquest 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 will explore graph algorithms, greedy algorithms, divide-and-conquer, dynamic programming, and network flow. We will learn to recognize when to apply each of these strategies as well as to evaluate the expected runtime costs of the algorithms we design.

Applies to requirement(s): Math Sciences
B. Lerner, D. Sheldon
Prereq: COMSC-211 and MATH-232.

COMSC-316 Software Practicum

Not Scheduled for This Year. Credits: 4

Tired of writing programs that nobody ever uses? Then, this is the course for you. Software enables enterprises to carry out previously tedious or impossible tasks, but many organizations lack the resources to develop needed software. You will apply your programming skills to develop and deliver software to meet the requirements of a client from the community. You will learn critical communication skills required to work with a client, work as a team with classmates, and experience the software lifecycle from requirements elicitation through delivery. You will synthesize many topics learned in courses as well as new technologies required to complete the project. Programming intensive.

Applies to requirement(s): Math Sciences
The department
Instructor permission required.
Prereq: COMSC-215.

COMSC-322 Operating Systems

Fall. Credits: 4

An introduction to the issues involved in orchestrating the use of computer resources. Topics include operating system evolution, file-handling systems, memory management, virtual memory, resource scheduling, multiprogramming, deadlocks, concurrent processes, protection, and design principles. Course emphasis: understanding the effects of operating system design on computer system performance. This course is programming intensive.

Applies to requirement(s): Math Sciences
B. Lerner
Prereq: COMSC-211 and COMSC-221.

COMSC-334 Artificial Intelligence

Spring. 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
Prereq: COMSC-211 and MATH-232.

COMSC-335 Machine Learning

Fall. 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
D. Sheldon
Prereq: COMSC-211, MATH-232, and a Calculus course (MATH-101, MATH-102, or MATH-203).

COMSC-336 Intelligent Information Retrieval

Fall. Credits: 4

Introduces the basic concepts, methodologies, and research findings in information retrieval. Special topics include Web searching, cross-language retrieval, data mining, and data extraction. Completion of this course will provide the necessary foundation to work in today's business environment where competitive advantage is obtained by retrieving needed information.

Applies to requirement(s): Math Sciences
L. Ballesteros
Prereq: COMSC-211.

COMSC-341 Topics

COMSC-341NL Topics: 'Natural Language Processing'

Spring. Credits: 4

This seminar provides an introduction to natural language processing, the discipline of getting computers to understand human language. We will cover core ideas and algorithms relevant to both speech processing and text processing, with emphasis on applications in human-computer natural language interaction. Students will design and complete an open-ended final project.

Applies to requirement(s): Math Sciences
H. Pon-Barry
Prereq: COMSC-211.

COMSC-341SP Topics: 'Computer Security & Privacy'

Not Scheduled for This Year. Credits: 4

Data security is an everyday concern for people but also for high-profile targets like the United States Director of National Intelligence, the United States Federal Bureau of Investigation, Target and Home Depot. In the course we will study the security vulnerabilities that make attacks possible and actions that can be taken to mitigate them.This course will introduce a variety of security topics: identifying software security vulnerabilities, malicious software, cryptography, authentication, access-control, networking, risk-analysis, usability, and ethics. Students will complete readings, in-class discussions, and hands-on programming activities.

Applies to requirement(s): Math Sciences
P. Klemperer
Prereq: COMSC-211.

COMSC-343 Programming Language Design and Implementation

Not Scheduled for This Year. 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-211.

COMSC-395 Independent Study

Fall and Spring. Credits: 1 - 8

The department
Instructor permission required.