SCS Undergraduate Courses
- 15-125: Introduction to Programming and Computation
Fall and Spring: 10 units
- Introduction to problem solving and programming
in C++ for students who are planning to take 15-200
to satisfy a degree requirement or MCS students not planning
to take 15-211/212.
Emphasis is on basic computer science concepts: problem solving, program
structure and style, and programming applications in several domains. Credit
is by mastery examination. Students who take 15-125 may not take 15-121
or 15-127 for credit. Students
who take 15-125 but subsequently
need 15-127 to satisfy degree
requirements should contact the CS Undergraduate Office.
- 15-127: Introduction to Programming and Computer Science
Fall and Spring: 10 units
- Introduction to programming and problem solving for Computer Science
majors, all CIT students, and any other students intending to continue
on to 15-211. The course is taught
in C with an emphasis on programming methodology and style: problem analysis,
program structure, algorithm analysis, data abstraction, and dynamic data.
Credit is by mastery examination. Students who take 15-127
may not take 15-121 or 15-125
for credit.
- 15-129: Introduction to Modern Mathematics in Computer Science
- Fall and Spring: 15 units
- This course appied advanced novice programming in a mthematical context.
It explores elementary data structures and algorithms for problem represtntation,
storage and retrieval from a mathematical perspective. The focus is on
programming, informal logic, and the methods of mathematical proof. Mathematical
contents include an introduction to the algebra of sets, relations, functions,
and partitions, and elementary number theory. Techniques of proof introduced
include proof by specialization and division into cases, indirect rpoof,
existence and uniqueness proofs, non-constructive methods, and induction.
Students in this course have substantial prior programming experience.
The course curretnly uses C++. Satifies both 15-127
and 21-127 prerequisites for 15-211.
Instructor permission required.
- 15-200: Data Structures
Spring: 9 units
- A sophomore-level course designed for students who desire to expand
their knowledge of computer science and sharpen their programming skills,
but do not desire a concentration in Computer Science. The course focuses
on data abstraction, data structures (including graphs and trees), and
implementing and analyzing the algorithms that utilize those data structures.
Some time is also spent on object-oriented concepts. Prerequisite: 15-125
or 15-127.
- 15-211 Fundamental Structures of Computer Science I
Fall and Spring: 12 units
- Fundamental programming concepts are presented together with supporting
theoretical bases and practical applications. This course emphasizes the
practical application of techniques for writing and analyzing programs:
data abstraction, program verification, and performance analysis. These
techniques are applied in the design and analysis of fundamental algorithms
and data structures. Prerequisites: 15-127
and 21-127.
- 15-212: Fundamental Structures of Computer Science II
Fall and Spring: 12 units
- The course continues the presentation of fundamental programming concepts
begun in 15-211, focusing on more
sophisticated methods for describing and reasoning about computer programs.
High-level languages are introduced including language mechanisms for user-defined
data types, and formal methods are presented for reasoning about program
specifications and correctness. Prerequisite: 15-211.
- 15-312: Programming Languages Design and Processing
Fall and Spring: 9 units
- This course discusses in depth many of the concepts underlying the
design, definition, implementation, and use of modern programming languages.
Formal approaches to defining the syntax and semantics are used to describe
the fundamental concepts underlying programming languages. A wide variety
of paradigms are covered, including imperative, functional, logic, and
concurrent programming paradigms. In addition to the formal studies, experience
with programming in the languages is used to illustrate how different design
goals can lead to radically different languages and models of computation.
An emphasis is also placed on pragmatic issues related to how languages
are implemented on modern hardware. Prerequisite: 15-212.
- 15-347/18-347: Introduction to Computer Architecture
Spring: 12 units
- The goal of this course is to develop an understanding of the structure
and operation of contemporary computer systems from the instruction set
architecture level through the register transfer implementation level.
We explore: theory of computation, levels of abstraction, instruction set
design, assembly language programming, processor data paths, data path
control, pipeline design, design of memory hierarchies, memory management,
input/output. Several of the principles presented in lecture are reinforced
through laboratory projects including assembly language programming, evaluation
of instruction set architectures by benchmarks, behavioral simulation of
an instruction set architecture, and design/simulation of a register transfer
implementation of an instruction set architecture. A contemporary behavioral/functional/logical
simulator will be used for the laboratory projects. Prerequisites: 15-211
and 18-240.
- 15-381: Artificial Intelligence: Representation and Problem Solving
Fall and Spring: 9 units
- Intelligent computer programs can solve problems, process natural language,
reason about their actions, and learn from experience. The methods for
achieving such behaviors involve the manipulation of internal symbolic
representations. The course will focus on the main types of symbolic knowledge
representation and the main techniques for search, planning and problem
solving. It will also cover the essentials of natural language processing
and machine learning. The course includes programming assignments in LISP,
and students are expected either to have knowledge of LISP or Scheme, or
are prepared to acquire that knowledge in the first part of the course.
Prerequisite: 15-212
- 15-384/18-384: Robotic Manipulation
Fall: 9 units
- Foundations and principles of robotic manipulation. Topics include
computational models of objects and motion, the mechanics of robotic manipulators,
the structure of manipulator control systems, planning and programming
of robot actions. Prerequisites: 15-212
and 21-241, or permission of the instructor.
- 15-385: Computer Vision
Spring: 9 units
- The course deals with the science and engineering of computer vision,
that is, the principles and techniques by which computers "see"
and "understand" the world. The emphasis is on physical, mathematical,
and information-processing aspects of vision, rather than biological, psychological,
or cognitive aspects. Topics covered include line drawing understanding,
image formation, early processing of images, region analysis, shape-from
methods, 3D vision, vision architecture and applications. Prerequisites:
15-212 and 21-241, or permission
of the instructor.
- 15-411: Compiler Design
Spring: 12 units
- The course covers the design and implementation of compiler and run-time
systems for high-level languages, and examines the interaction between
language design, compiler design, and run-time organization. Topics covered
include syntactic and lexical analysis, handling of user-defined types
and typechecking, context analysis, code generation and optimization, and
memory management and run-time organization. Prerequisite: 15-312.
- 15-412: Operating Systems
Fall and Spring: 18 units
- Operating systems monitor the execution of user programs and the allocation
of various resources such as memory space and peripheral devices. The course
introduces the basic concepts of multiprogramming, timesharing and asynchronous
processes. These concepts lead to interesting problems of synchronization,
scheduling, memory management, information sharing and protection. Emphasis
of the course is on the design aspects of operating systems. Prerequisite:
15-212 and 18-240.
- 15-413: Software Engineering
Fall and Spring: 12 units
- The field of software engineering deals with problems that arise when
programs are large, when they involve many programmers, and when they exist
over long periods of time. This course will be organized around group projects
to give students practical experience in applying techniques learned in
previous courses to large programs. Topics will include organizing and
designing a programming project, testing, and program reliability, identifying
the nature and sources of software costs, coordinating multiple programmers,
documentation and design of friendly user interfaces. Prerequisites: one
of 15-411, 15-462.
- 15-414: Structured Programming
Spring: 9 units
and Program Proving Offered intermittently
- This course concerns structured programming and program proving as
practical tools for program construction. Formal methods are studied, not
as an end in themselves, but to reveal what constitutes a precise specification
of program behavior, and what constitutes a rigorous argument that a program
meets such a specification. The fundamental goal of this course is the
ability to write concise, clearly documented, and logically correct programs,
without using the computer as a crutch. Students are expected to write
short programs without executing them on the computer, and these exercises
are evaluated for style as well as logical correctness. Prerequisite: 15-212.
- 15-451: Algorithms
Fall and Spring: 9 units
- This course is about the design and analysis of algorithms. We study
specific algorithms for a variety of problems, as well as general design
and analysis techniques. Specific topics include searching, sorting, algorithms
for graph problems, efficient data structures, lower bounds and NP-completeness.
A variety of other topics may be covered at the discretion of the instructor.
These include parallel algorithms, randomized algorithms, geometric algorithms,
low level techniques for efficient programming, cryptography, and cryptographic
protocols. Prerequisites: 15-212
and 21-228.
- 15-453: Formal Languages and Automata
Fall: 9 units
- An introduction to the fundamental ideas and models underlying computing:
finite automata, regular sets, pushdown automata, context-free grammars,
Turing machines and undecidability. The mainly mathematical and conceptual
content of the course is supplemented by the study of its relevance to
text processing and compiling applications. Prerequisites: 15-212
and 21-228; 21-373 is recommended.
- 15-462: Computer Graphics I
Fall: 12 units
- This course provides a comprehensive introduction to computer graphics
modeling, rendering, and animation. Topics covered include raster algorithms,
geometric transformations, keyframe animation, 3-D viewing and projection,
geometric modeling of curves and surfaces, shading, and hidden-surface
elimination. Prerequisites: 15-212,
21-122, and 21-259.
- 15-463: Computer Graphics II
Spring: 12 units
- This course is the second semester of computer graphics, with emphasis
on rendering and image processing. Topics include: image filtering, image
warping, Fourier transforms, visibility algorithms, spatial data structures,
reflection, ray tracing, antialiasing, texture mapping, radiosity, and
volume rendering. Prerequisite: 15-462.
- 15-499: Special Topics in Computer Science
Fall and Spring: 6-12 units
- Offered from time to time on various topics. Prerequisites, hours and
units to be announced at the time of registration.
- 15-5x9: Independent Study
Fall and Spring: 3-12 units
- Specially selected projects and readings in programming systems, computer
systems, theory, and artificial intelligence. Prerequisite hours and units
to be negotiated with individual instructors.
- 15-599: Undergraduate Thesis Research
Fall and Spring: 18 units
- Available only to students registered in the Senior Research Thesis
Program. More information is available in the CS Undergraduate Office.
- 15-612: Distributed Systems
Spring: 12 units
- This is an advanced course focusing on the design, implementation and
management of distributed systems. It covers fundamental topics such as
naming, security, reliability, resource sharing, and remote execution.
It addresses network protocol issues above the transport level and discusses
information sharing mechanisms such as electronic mail, file systems, and
databases. Prerequisites: 15-412,
or 15-347 and permission of the
instructor.
- 15-681: Machine Learning
Fall: 12 units
- Machine Learning is concerned with computer programs that automatically
improve their performance through experience. Machine Learning methods
have been applied to problems such as learning to drive an autonomous vehicle,
learning to recognize human speech, and learning strategies for game playing.
This course covers the primary approaches to machine learning, including
inductive inference of decision trees, neural network learning, statistical
learning methods, genetic algorithms, and explanation-based learning. The
course covers algorithms, applications, and theoretical concepts such as
inductive bias, PAC learning, and Occam's Razor. Programming assignments
will include experimenting with various learning problems and algorithms.
Prerequisite: 15-381 or permission
of the instructor.
- Graduate Courses
- All graduate courses are available to undergraduate students who have
appropriate prerequisites and permission of the instructor. Descriptions
of graduate courses may be obtained from the School of Computer Science.
Maintained by stankus@cs.cmu.edu.
Last modified Monday, November 16, 1996.