Computer Science (COMSC)

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 may not take this course after Computer Science 101 or Computer Science 106.

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, V. Barr
Restrictions: This course is limited to First-year and Sophomore students.
Coreq: COMSC-101L.
Notes: Students taking the 01 lecture must choose either the 01 (Tuesday) or 02 (Thursday) lab. Students taking the 02 lecture must choose either the 03 (Wednesday) or 04 (Friday) lab.

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
The department

COMSC-106 Fundamentals of Applied Computing

Spring. 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
A. St. John
Advisory: No prior study of computer science is expected. Students may not take this course after Computer Science 100 or 101. Students may not take Computer Science 100 after taking 106, but may take 101.
Notes: Course does not count toward the Computer Science major or minor.

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

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-132 Engineering for Everyone

Spring. Credits: 4

Engineers change the world we live in every day by developing and improving nearly every aspect of our lives. In this course, we will study the interaction of technology and society and how the engineering design process helps shape the world we live in. Engineering comprises many disciplines, but one common theme is the engineering design process: research, problem definition, feasibility, conceptualization, prototyping, and testing. In this class, students will learn the engineering design process through application to contemporary technological and societal issues put into practice with pitch presentations, design reviews, prototypes, and written reports.

Applies to requirement(s): Math Sciences
P. Klemperer
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-141 Introduction to Computing and the Arts

Not Scheduled for This Year. 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
A. St. John, Y. Yang
Prereq: COMSC-101 with a grade of C or better. Coreq: COMSC-201L.
Notes: 14 seats open to sophomores, juniors, and seniors, then 10 to first-years.

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
L. Conover, E. Mendelowitz
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 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, J. Slocum
Prereq: COMSC-201. Coreq: COMSC-221L.

COMSC-226 Engineering Robotic Systems

Fall. Credits: 4

This intermediate-level course presents a hands-on introduction to robotics. Each participant will construct and modify a robot controlled by an Arduino-compatible 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. Participants will use the Makerspace facilities to fabricate and demonstrate their robots.

Applies to requirement(s): Math Sciences
P. Klemperer
Instructor permission required.
Prereq: COMSC-109 or COMSC-201.

COMSC-243 Topic

COMSC-243EM Topic: 'Embodied Interaction'

Fall. Credits: 4

This class will expose students to programming techniques used in computer-based interactive art including real-time graphics, data visualization, human-computer interaction, sensor networks, computer vision, and physical computing through analysis of existing computational art and synthesis of original works. The course will place particular emphasis on embodied interation -- interaction that uses sensors to react to the whole body. Weekly assignments and reading will serve to reinforce concepts from lectures, build technical skills, and develop a personal aesthetic.

Applies to requirement(s): Math Sciences
E. Mendelowitz
Prereq: COMSC-211.

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
A. St. John
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

Spring. 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
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 and Spring. 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

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

COMSC-335 Machine Learning

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

Spring. 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-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 for a simple object-oriented language.

Applies to requirement(s): Math Sciences
V. Barr
Prereq: COMSC-312.

COMSC-341NL Topics: 'Natural Language Processing'

Not Scheduled for This Year. 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-341SC Topics: 'Scientific Computing'

Fall. Credits: 4

The goal of this course is to study the most fundamental numerical algorithms for solving some of the more mathematical research and practice problems that arise in computer science. In this course, you will practice and develop algorithms to solve linear and nonlinear systems for given problems in computer science contexts like vision, machine learning, and robotics. Topics include understanding the errors caused by computer approximation, linear least squares, nonlinear equations, optimization, and polynomial interpolation. At the end of the semester, we will also practice the course material by working through the mathematical details in some classical research papers on image processing and computer vision. This course is programming-intensive and will introduce Python.

Applies to requirement(s): Math Sciences
Y. Yang
Prereq: MATH-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

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
V. Barr
Prereq: COMSC-211.

COMSC-395 Independent Study

Fall and Spring. Credits: 1 - 8

The department
Instructor permission required.