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.