Computer Science Courses

Note that some courses may have mathematics prerequisites.

CSCI 1074

The Digital World: An Introduction to Information and Computing (periodically)

Satisfies Mathematics Core Requirement

This course is an introductory-level survey of computer science for non-majors. Students study the historical and intellectual sources of the discipline, examine important problems and the techniques used to solve them, and consider their social impact. Example problems include the representation of information (such as text, images, audio and video), how computer hardware and networks work, computer vision, machine learning, and cryptography. In order to enhance their understanding of these topics, students will also be given a gentle introduction to computer programming.

 

CSCI 1075

The Digital World of Robots (periodically)

This course is a gentle introduction to computer programming for non-majors. Students will learn about computers and computer software by working with a small personal robot. Students will learn the Python programming language, and write Python programs to control their robot's behavior, explore its environment, and perform various tasks. As we get our robots to do more and more, we learn how software is designed and written to solve real problems.

 

CSCI 1101

Computer Science I (fall/spring)

Students enrolling in a section must register in a corresponding discussion group.

This course is an introduction to the world of computer programming and some of the fundamental concepts of computer science. You will learn to write programs in a modern programming language, such as Python or ML. By the end of the course you will be able to design fairly complex programs that do interesting and useful things. You will also study some of the basic notions of computer science, including computer system organization, files, and some algorithms of fundamental importance. The course assumes no previous programming experience. You may enroll in either a Python-based section or an ML-based section. The latter would be an appropriate choice for you if you are more mathematically inclined. Both sections will prepare you well for the follow-on course CSCI 1102.

 

CSCI 1102

Computer Science II (fall/spring)

Prerequisite CSCI 1101

In CSCI 1101 you were introduced to the basics of programming. You wrote some relatively simple programs, and your primary focus was getting your code to work. In this course you will take a more sophisticated look at programming. You will learn several useful ways to organize data within a program (such as lists, stacks, queues, and trees), some of which are quite clever. Each of these data structures has its own advantages and disadvantages, and you will learn how to evaluate tradeoffs in order to determine which one is the best for a particular program. And you will learn to think of programming as a two-stage process: The design stage, in which you figure out what the program ought to be doing and what classes it requires, and the implementation stage, in which you determine which technique(s) should be used to implement each class and write the code for it. The course will use the Java programming language, which will be taught at the beginning of the semester.

 

CSCI 1103

Computer Science I Honors (fall/spring)

Description: CSCI 1103 is a good choice for students with strong backgrounds in mathematics. Students who are unsure about the fit should consult with Professor Muller.This is the honors introductory computer science course. The course is organized around three themes: 1. computation, as a subject of study, 2. coding, as a skill and 3. computer science, as an introduction to the field. The first half of the course explores computation from a simple mathematical perspective. From this point of view, computing can be understood as an extension of basic algebra. Midway through, the course turns to a machine-oriented view, considering storage and processor architecture, mutation and mutation-based repetition idioms. The course explores a number of fundamental algorithms with applications in various disciplines. Good program design methodology is stressed throughout. The course is taught using the OCaml programming language. Students will be well prepared for the follow-on course CSCI 1102 Computer Science II.

 

CSCI 1154

Intro to Programming and Web Applications (spring)

In this course, students create interactive web-based applications. We begin by learning how to use HTML and CSS to create simple web pages. Topics include basic databases, SQL queries, and client-side scripts. Sample projects may include shopping-cart based sales, student registration systems, etc. The course is currently taught using JavaScript and MySQL. No prior programming experience is required.

CSCI 2201

Computer Security (periodically)

The instructor, Etay Maor, is a computer security expert at IBM. Last fall he gave a series of informal lectures to the student ACM group. This course is an expansion of those themes.

 

CSCI 2227

Introduction to Scientific Computation (fall)

Prerequisite MATH 1101

This is an introductory course in computer programming for students interested numerical and scientific computation. Emphasis will be placed on problems drawn from the sciences. Many problems, such as the behavior of complex physical systems, have no closed-form solution, and computational modeling is needed to obtain an approximate solution. The course discusses different approximation methods, how to implement them as computer programs, and the factors that determine the accuracy. Topics include solutions of nonlinear equations, numerical integration, solving systems of linear equations, error optimization, and data visualization. Students will write programs in the MATLAB or Python programming language.

 

CSCI 2243

Logic and Computation (fall

Prerequisite CSCI 1101

This course, together with CSCI 2244, form a two-semester introduction to the mathematical foundations of computer science. Students who successfully complete these courses will have acquired the necessary mathematical tools used in upper-division computer science courses. This course is concerned with the areas of propositional and predicate logic, proof techniques, basic number theory, and mathematical models of computation (such as formal languages, finite state machines, and Turing machines). Each topic will be illustrated with applications to diverse areas of computer science, such as designing boolean circuits, satisfiability solvers, database query languages, proofs of program correctness, cryptography, and regular expression-based pattern matchers.

 

CSCI 2244

Randomness and Computation (spring)

Prerequisites: CSCI 1101 and MATH 1100

This course presents the mathematical and computational tools needed to solve problems that involve randomness. For example, an understanding of randomness allows us to efficiently generate the very large prime numbers needed for information security, and to understand the long-term behavior of random sequences used to rank web search results. Multidimensional random variables provide useful models for data mining, computer vision, social networks, and machine learning. Topics include combinatorics and counting, random experiments and probability, computational modeling of randomness, random variables and distributions, Bayes rule, collective behavior of random phenomena, vectors and matrices, and Markov chains. Each topic is illustrated with applications of its use.

 

CSCI 2254

Web Application Development (spring)

In this course, students create interactive web-based applications. We begin by learning how to use HTML and CSS to create simple web pages. Emphasis then shifts to creating pages that access databases over the web. Topics include basic database design, SQL queries, and client and server-side scripts. Sample projects may include shopping-cart based sales, student registration systems, etc. The course is currently taught using JavaScript and MySQL. Programming experience required.

 

CSCI 2257

Database Systems and Applications (fall/spring)

Prerequisites: CSCI 1101, ISYS 1157, or equivalent. Crosslisted with ISYS 2257

Database systems play a critical role in the corporate world. Activities such as order fulfillment, billing, and inventory management depend on the prompt availability of the appropriate data. The goal of this course is to give you the knowledge and skills to use databases effectively in any business situation. We will explore how to design database tables to meet the needs of the company, access these tables using the SQL language, use database system features to improve the efficiency of database access, and build a web site that enables users to interact with a database via a browser.

 

CSCI 2267

Technology and Culture (fall/spring)

Crosslisted with ISYS 2267 and SOCY 6670

This interdisciplinary course will first investigate the social, political, psychological, ethical, and spiritual aspects of the Western cultural development with a special emphasis on scientific and technological metaphors and narratives. We will then focus on the contemporary world, examining the impact of our various technological creations on cultural directions, democratic process, the world of work, quality of life, and especially on the emergent meanings for the terms "citizen" and "ethics" in contemporary society. Students will explore technologies in four broad and interrelated domains: (1) Computer, Media, Communications, and Information Technologies; (2) Biotechnology; (3) Globalization; and (4) Environmental Issues.

 

CSCI 2271

Computer Systems (fall/spring)

Prerequisite: CSCI 1102

This course is concerned with machine-level program and data representation on modern computer systems, how the underlying system uses these representations (in particular, the system stack and memory heap) to support the execution of user code, and the issues associated with the execution of multi-threaded code. Students also learn how various implementation choices can affect the efficiency, reliability, and security of a computing system. This is a hands-on course; programming will be completed in the procedural language C with comparisons to object-oriented languages such as Java.

 

CSCI 2272

Computer Organization and Lab (fall, 4 credits)

Prerequisite: CSCI 1101

This course studies the internal organization of computers and the processing of machine instructions. Students will obtain a high-level understanding of how to design a general-purpose computer, starting with simple logic gates. Topics include computer representation of numbers, combinational circuit design (decoders, multiplexers), sequential circuit design and analysis, memory design (registers and main memory), and simple processors including data paths, instruction formats, and control units. CSCI 2272 includes laboratory-based computer hardware activities in which the students design and build digital circuits related to the topics of the course.

CSCI 3333

Computer Graphics (periodically)

Prerequisite: CSCI 1102

This course introduces algorithms and techniques involved in representing, animating, and interacting with three-dimensional objects on a computer screen. The course will involve significant programming in Java and OpenGL.

 

CSCI 3335

Principles of Multimedia Systems (periodically)

This course introduces principles and current technologies of multimedia systems. Topics include multimedia systems design, multimedia hardware and software, issues in effectively representing, processing, and transmitting multimedia data including text, graphics, sound and music, image, and video. Image, video, and audio standards such as JPEG, MPEG, H.26x, Dolby Digital, and AAC will be reviewed. Applications such as video conferencing, video streaming, multimedia data indexing, and retrieval will also be introduced.

 

CSCI 3341

Artificial Intelligence (fall, alternate years)

Prerequisites: CSCI 1102, CSCI 2244

This course addresses the modeling and design of intelligent computational software. Artificial intelligence ideas have played a key role in the development of master-level board game players, natural language understanding, self-driving vehicles, and the predictive modeling methods used in data mining. Course topics include perception and action, search techniques such as A* heuristic search and adversarial search, knowledge representation formalisms including logic and probability, and an introduction to machine learning. Programming assignments will be given throughout the course.

 

CSCI 3343

Computer Vision (fall, alternate years)

Prerequisites: CSCI 1102, CSCI 2244

Computers are gaining abilities to “see” things just like our vision system. Face recognition has been embedded in almost all the digital cameras. Car detection and tracking have been used in self-driving vehicles. Modern search engines are not only able to find similar text patterns but also able to search for similar objects in huge image databases. This course introduces principles and computational methods of obtaining information from images and videos. Topics include image processing, shape analysis, image matching, segmentation, 3D projective geometry, object tracking, human pose and action, image retrieval, and object recognition.

 

CSCI 3344

Mobile Application Development (spring)

Prerequisite: CSCI 1102

This is a project-oriented course focusing on the development of applications for smart phones and tablets. The course is currently taught using Google’s Android platform. The course will focus on software and user interface design, emphasizing best practices. The course examines issues arising from the unique characteristics of mobile input devices including touch and gesture input, access to a microphone, camera, and orientation and location awareness. We will also explore engineering aspects of targeting small memory platforms and small screens. Students will be required to design and develop substantial projects by the end of the course.

 

CSCI 3345

Machine Learning (spring, alternate years)

Prerequisite: CSCI 1102, CSCI 2244

This course provides an introduction to computational mechanisms that improve their performance based on experience. Machine learning can be used in engineered systems for a wide variety of tasks in personalized information filtering, health care, security, games, computer vision, and human-computer interaction, and can provide computational models of information processing in biological systems. Supervised, unsupervised, and reinforcement learning will be discussed, including sample applications, as well as specific learning paradigms such as decision trees, instance-based learning, neural networks and deep learning, Bayesian approaches, meta-learning, clustering, and Q learning. General concepts to be described include feature space representations, inductive bias, overfitting, and fundamental tradeoffs.

 

CSCI 3346

Data Mining (spring, alternate years)

Prerequisite: CSCI 1102, CSCI 2244

The goal of data mining is to discover patterns in data that are informative and useful. This course provides an overview of the field of knowledge discovery and data mining, which deals with the semi-automated analysis of large collections of data that arise in contexts ranging from medical informatics and bioinformatics to e-commerce and security. The course will cover fundamental data mining tasks, relevant concepts and techniques from machine learning and statistics and data mining applications to real-world domains such as e-mail filtering, gene expression, analysis of biomedical signals, and fraud detection.

 

CSCI 3347

Robotics (spring, alternate years)

Prerequisite: CSCI 1101

This is a hands-on laboratory course about the programming of robots. Topics covered include locomotion, steering, moving an “arm” and “hand,” dealing with sensory input, voice synthesis, and planning. Students will complete several projects using the robots in the Boston College Robotics Laboratory.

 

CSCI 3353

Object Oriented Design (fall)

Prerequisite: CSCI 1102

CSCI 1102 introduced you to the basic concepts of object-oriented programming: classes, inheritance, and polymorphism. In this course, we look at object-oriented programming from a higher level, and focus on the design of object-oriented software. As an analogy, consider a list—it is a lot easier to understand its operations by drawing pictures than by looking at code. Similarly, you will learn how to draw pictures to describe the design of an object-oriented program. And from these pictures we can develop design rules, such as "separate the model from the view" and "program to interfaces". We will also go over fundamental design patterns that give us a simple way to talk about complex interactions of classes.

Another analogy is the difference between an architect and a building contractor. An architect designs the building, and is responsible for its usability, aesthetics, and feasibility. The contractor follows the plan, making low-level decisions about each component. Both are professionals, but the architect gets to be more creative and is often more highly valued. This course teaches you how to be a software architect.

Homework assignments will involve the design of inter-related classes and their implementation in Java.

 

CSCI 3356

Software Engineering (spring, alternate years)

Prerequisite: CSCI 3353

This course covers industrial system development using object-oriented techniques. Students will learn a methodical approach to the development of software and will use this methodology to design, implement, test and evolve Java applications. Students will work in teams to develop applications, experiencing the different roles that are required on projects in industry.

 

CSCI 3357

Database System Implementation (spring, alternate years)

Prerequisite: CSCI 1102

This course will not cover the use of commercial database systems; students interested in that topic should consider taking CSCI 2257.

A database system is an amazingly sophisticated piece of software. It contains (1) a language interpreter, for processing user queries; (2) query rewrite strategies, for transforming inefficient queries into more efficient ones; (3) complex algorithms for indexing data, to support fast access; (4) a separate file system from that of the operating system, for managing the disk efficiently; (5) recovery mechanisms, for ensuring database integrity when the system crashes; and (6) an ability to handle concurrent accesses from multiple users. In this course we examine the various algorithms, data structures, and techniques for implementing these features. And to make these theoretical ideas concrete, we will also examine the Java source code for a real-life database system – first to see how it works, and then to write our own additions and improvements to it.

The goals of this course go beyond the study of database systems principles. The algorithms you learn can be used in many other systems and applications. And you get to see how a large software system is structured. The course requires extensive Java programming. You do not need experience using a commercial database system; you will learn all necessary database concepts during the course.

 

CSCI 3359

Distributed Systems (fall, alternate years)

Prerequisite: CSCI 2271

In this course you will learn the major paradigms of distributed computing, including client-server and peer-to-peer models. We will study how each model addresses the problems of communication, synchronization, performance, fault-tolerance, and security. You will learn how to analyze the correctness of distributed protocols and will be required to build distributed applications.

 

CSCI 3362

Operating Systems (fall, alternate years)

Prerequisite: CSCI 2271

This course will provide a broad introduction to software systems with emphasis on operating system design and implementation. Its objective is to introduce students to operating systems with main focus on resource management and interfacing issues with hardware layers. Particular emphasis will be given to process management (processes, threads, CPU scheduling, synchronization, and deadlock), (virtual) memory management (segmentation, paging, swapping, caching) with focus on the interplay between architectural components and software layers. If there is time, we will investigate and discuss these same issues for distributed systems. The course programming assignments will be in Java/C.

 

CSCI 3363

Computer Networks (spring, alternate years)

Prerequisite: CSCI 2271

This course studies computer networks and the services built on top of them. Topics include packet-switch and multi-access networks, routing and flow control, congestion control and quality-of-service, resource sharing, Internet protocols (IP, TCP, BGP), the client-server model and RPC, elements of distributed systems (naming, security, caching, consistency) and the design of network services (peer-to-peer networks, file and web servers, content distribution networks). Coursework involves a significant amount of Java/C programming.

 

CSCI 3366

Principles of Programming Language (spring, alternate years)

Prerequisite: CSCI 2271

Starting with a simple language of expressions, this course develops a sequence of progressively more expressive programming languages keeping in mind the conflicting constraints between the expressiveness of the language and the requirement that it be reliably and efficiently implemented. The course focuses on these essential concepts and the run-time behavior of programs. Type systems play an essential role. By understanding the concepts the student will be able to evaluate the advantages and disadvantages of a language for a given application.

 

CSCI 3367

Compilers (periodically)

Prerequisite: CSCI 2271

Compilers are programs that implement high level programming languages by translating programs in such languages into machine code or some other easy to process representation. This course deals with the principles and techniques used in the design of compilers. Topics include parsing, static analysis, translation, memory management, and code optimization. This course includes a significant programming project.

 

CSCI 3372

Computer Architecture and Lab (spring, alternate years, 4 credits)

Prerequisites: CSCI 2272

This course discusses hardware considerations in computer design. Topics include hardware description languages, arithmetic and logic units, input/output circuits, memory hierarchy, instruction programming and control, data paths, pipelining, processor design, and advanced architecture topics. CSCI 3372 includes laboratory-based computer hardware activities in which students design and build digital circuits related to the topics of the course.

 

CSCI 3381

Cryptography (fall, alternate years)

Prerequisites: CSCI 2243 or MATH 2216 or permission of instructor.

When you log onto a secure web site, for example to pay a bill from your bank account, you need to be assured of certain things: Is your communication private? An eavesdropper should not be able to determine what information you and the bank are exchanging. Does the website you are communicating with really belong to the bank? A third party should not be able to successfully impersonate the bank. Are you you? A third party should not be able to impersonate you and make payments from your account. Are the messages you and the bank receive from each other the same ones that were sent? No one should be able to alter the messages in transit without this being detected.

Behind the scenes, an extraordinary series of computations takes place to ensure that these security requirements are met. This course some sophisticated ideas from both mathematics and computer science that make it all work. We will begin the course with a look at some classical cryptographic systems that were in use before the advent of computers, then study modern block ciphers, both the general principles behind their construction and use, and some details about widely-used systems: the Data Encryption Standard (DES) and Advanced Encryption Standard (AES). These are symmetric systems in which the parties share some secret information (a key) used for both encryption and decryption. Cryptography was profoundly changed by the invention, in the late 1970's, of asymmetric, or public-key cryptosystems, in which the two parties do not need to share a secret in order to communicate securely. We will study public-key cryptosystems like RSA, cryptographic hash functions, schemes for digital signatures, and zero-knowledge identification schemes. We'll finish the course looking at some real-world cryptographic protocols (for example, SSL), more speculative protocols (electronic elections or digital cash), and some different ideas for the construction of cryptosystems (quantum cryptography).

 

CSCI 3383

Algorithms (fall)

Prerequisites: CSCI 1102, CSCI 2243, CSCI 2244

Algorithms are the basis of computing, and their study is, in many ways, the essence of computer science. In this course we study several algorithm-creation techniques, such as "divide and conquer", "dynamic programming", and "be greedy". We shall also learn mathematical tools to help us analyze the efficiency of our algorithms. These techniques are illustrated by the study of interesting algorithms of practical importance.

 

CSCI 3390

Topics in Computer Science (periodically)

This course can be taken multiple times for credit. It covers new and other interesting topics not included among the department's regular course offerings. Two sections will be offered in spring 2018, as described below.

CSCI 3390-01
Everyone should know how to design parallel algorithms. Even a laptop or cellphone has multiple CPU cores at our disposal these days. In this hands-on, project-oriented course you will learn the main ideas of parallel computing with GPUs. Our focus will be on the CUDA programming language. You will learn about GPU architectures, parallel algorithms, CUDA libraries and GPU computing applications. Prerequisites: CSCI 3383 / 2271 / 2244, and MATH 2210 / 2202, or permission of the instructor.

CSCI 3390-02
We will study natural language processing, the subfield of artificial intelligence focused on analyzing, producing, and understanding human language. Using models and algorithms from formal language theory, statistics, and machine learning, we will explore methods for gaining insight into the structure and meaning of text. We will apply these methods to tasks such as information extraction, sentiment analysis, and machine translation. Prerequisite: CSCI 1102.

CSCI 4911

Reading in Computer Science (fall/spring)

Arrangements with a faculty supervisor and the permission of the department are required for registration.

Independent reading and research for students who wish to study topics not covered in the regular curriculum.

 

CSCI 4961

Honors Thesis (fall/spring)

Arrangements with a faculty supervisor and the permission of the department are required for registration.

Independent study project for students in the departmental honors program. It is intended to be taken for an entire year.

 

CSCI 5564

Computational Models of Cognition (periodically: 3)

Introduction to computational theories of human cognition. Focus on principles of inductive learning and inference, and the representation of knowledge. Computational frameworks covered include Bayesian and hierarchical Bayesian models; probabilistic graphical models; nonparametric statistical models and the Bayesian Occam's razor; sampling algorithms for approximate learning and inference; and probabilistic models defined over structured representations such as first-order logic, grammars, or relational schemas. Applications to understanding core aspects of cognition, such as concept learning and categorization, causal reasoning, theory formation, language acquisition, and social inference.

Instructor(s): Joshua Hartshorne

Prerequisites: This course will assume at least the equivalent of two courses in computer programming and undergraduate-level courses in developmental psychology and cognitive psychology. Students who do not have this background should consult with the instructor on how to prepare.

Cross-listed with: PSYC 5564