Theory

Undergraduate Computer Science Courses

COMP 112: Introduction to Programming

The course will provide an introduction to a modern high-level programming language including a discussion of input/output, basic control structures, types, functions, and classes. The lectures will also discuss a variety of algorithms as well as program design issues.

COMP 131: Can Machines Think?  (Logic and Computation) (FYS)

This course will explore the question "Can machines think?" through the special perspective of computation and some 20th century developments in mathmatical logic. We will start with a rigorous study of formal proofs and their automation for the first third of the course. In the second third we will learn how to program in a modern programming language suitable for proof development and other AI applications. The last, writing-intensive part of the semester will focus on the question from the perspective of artificial intelligence, and cognitive science, drawing on our foundation in logic and computation. In addition to handouts on the technical components of the course, we will read extensively from a number of classic sources including Penrose's "The Emperor's New Mind" and Hofstadter's "Goedel, Escher, Bach".  The course gives one NSM credit.

COMP 132: Computing, Privacy, and Security (FYI)

This course will discuss both technical and ethical issues related to computing. On the technical side, the material will cover topics such as networking and cryptography. The technical material will be learned in the service of discussing social and ethical issues such as privacy, security, and intellectual property. Neither list is exhaustive and each list is likely to be modified according to the interests of the instructor, interests of the students, and current events.

COMP 133: Crytography (FYI)

This course will discuss historical, mathematical, programming and public policy issues related to codemaking and codebreaking. Emphasis will vary according to the interests of the instructor.

COMP 134: Human and Machine Inference (FYI)

This course will explore how people and computers perform inference - the process of reaching conclusions based on premises - with investigation of computational, philosophical, and psychological perspectives. Discussions of puzzles and brainteasers will help expose and illuminate intricacies of inference.

COMP 211: Computer Science I (Core)

This is the first course in a two-course sequence (COMP 211-212) that is the gateway to the Computer Science major. It provides an introduction to the fundamental ideas of object-oriented programming in particular and Computer Science in general. Part of the course will focus on an intensive study of one particular programming language, and the remainder on associated mathematical concepts and formalisms. This course is intended for Computer Science majors and others who want an in-depth understanding of programming and expect to continue programming after this course. While there are no prerequisites beyond some familiarity with using computers, it is a significantly more challenging course than COMP 112. Because of the non-programming topics that will be addressed, permission to place out of this course using AP Computer Science credit will be decided on a case-by-case basis by the instructor. This course may have additional laboratory sections.

COMP 212: Data Structures (Computer Science II) (Core)

This is the second course in a two-course sequence (COMP 211-212) that is the gateway to the Computer Science major. This course provides an introduction to fundamental algorithms and data structures based on the notion of an abstract data type. The topics will include abstract data types, stacks, queues, sets, hashing, and graphs; these will be addressed from both a programming and mathematical standpoint. Because of the non-programming topics that are addressed in COMP 211, permission to take COMP 212 without having taken COMP 211 will be decided on a case-by-case basis by the instructor. COMP 112 is not typically acceptable as a prerequisite for this course. This course may have addtional laboratory sections. Prerequisite: COMP 211

COMP 231: Computer Structure and Organization (Core)

The purpose of the course is to introduce and discuss the structure and operation of digital computers. Topics will include the logic of circuits, microarchitectures, microprogramming, conventional machine architectures, and an introduction to software/hardware interface issues. Assembly language programming will be used to demonstrate some of the basic concepts. Prerequisites: COMP 211

COMP 265: Bioinformatics Programming

An introduction for life science students with little or no prior programming experience, this course will introduce the fundamental concepts and mechanisms of computer programs using a language (Perl or Python) and examples (sequence matching and manipulation, database access, output parsing, etc.) frequently encountered in the use and development of informatics software.

COMP 301: Automata Theory and Formal Languages (Core)

This course is an introduction to formalisms studied in computer science and mathematical models of computing machines. The language formalisms discussed include regular, context-free, and recursively enumerable languages. The machines discussed include finite-state automata, pushdown automata and Turing machines. Prerequisites: COMP 211 and MATH 228

COMP 312: Algorithms and Complexity (Core)

The course will cover the design and analysis of correct and efficient algorithms. Basic topics will include greedy algorithms, divide-and-conquer algorithms, dynamic programming, and graph algorithms. Some advanced topics in algorithms may be selected from other areas of computer science. Prerequisites: COMP 212 and MATH 228

COMP 321: Design of Programming Languages (Core 321/322)

This course provides an introduction to various concepts in programming languages. Topics will include parameter passing, type checking and inference, control mechanisms, data abstraction, module systems, and concurrency. Basic ideas in functional, object-oriented, and logic programming languages will also be discussed. Prerequisites: COMP 212

COMP 322: Compilers (Core 321/322)

This course provides an introduction to the basic ideas of language translation. Topics will include context-free grammars, parsing, syntax-directed translation, optimization, and code generation. There will be a project involving the design and implementation of a compiler for a simple imperative language. Prerequisites: COMP 212

COMP 327: Evolutionary and Ecological Bioinformatics

This course will discuss evolutionary and ecological topics from a bioinformatics perspective with an emphasis on phylogenetics and meta-genomics. Cross-listing: BIOL 327. Prerequisites: [MB&B205 or BIOL205] OR [BIOL206 or MB&B206] OR BIOL207 OR COMP212 OR [COMP312 or COMP510] OR [MB&B225 or BIOL225] OR [MB&B181 or BIOL181] OR [MB&B195 or BIOL195] OR [BIOL182 or MB&B182]

COMP 342: Programming Methods

This course provides an introduction to methods of modern programming. Topics may include a survey of current programming languages, advanced topics in a specific language, design patterns, code reorganization techniques, specification languages, verification, tools for managing multiple-programmer software projects, and possibly others. The specific topics will vary according to the tastes of the instructor, though the course may only be taken once for credit. The topics will be discussed in the context of either several smaller programming projects or one large one. Prerequisites: COMP 212

COMP 350: Bioinformatics and Functional Genomics

This course will interweave the discussion of biological and informatics topics focusing on computational approaches to biological problems. Possible topics include genomic databases, scoring methods, alignment algorithms, prediction of RNA secondary structures, overview of genome projects, and the analysis of micro-array data. Crosslistings: BIOL 350, MB&B 350. Prerequisites: BIOL 206 OR MB&B 206 OR COMP 212

COMP 352: Topics in Artficial Intelligence

This upper-level course in artificial intelligence focuses on multiagent systems. Prerequisites: COMP 212 and MATH 228.

COMP 354: Principles of Databases

This course provides an introduction to the design and implementation of relational databases. Topics will include an introduction to relational algebra and SQL, relational database design, database management systems, and transaction processing. Prerequisites: COMP 212

COMP 356: Computer Graphics

This course covers fundamental algorithms in two- and three-dimensional graphics. The theory and application of the algorithms will be studied, and implementation of the algorithms or applications of them will be an integral part of the course. According to the tastes of the instructor, additional topics such as elementary animation or more advanced techniques may be covered. Prerequisites: COMP 212

COMP 360: Topics in Computer Science

Topics not regularly offered in the curriculum are covered at the discretion of the instructor. In the last few years, topics such as human-computer interaction, applied logic, data analysis, and networking have been taught. This course may be repeated for credit. The current instructor should be consulted when enrolling for information about prerequisites.