Lower Division Courses
CMPS 2: Computer Literacy
Introduction to how computers work and how to use them. Topics covered include network information systems, text editors, formatting, file and directory system, spreadsheets and databases. Computers as symbol manipulation devices. Introduction to programming concepts and computer languages. Impact of computers on society. Designed for students with little or no experience using computers. Preference is given to students who have not taken other computer engineering or computer science courses. Students cannot receive credit for this course and Computer Engineering 3.
CMPS 5C: Introduction to Programming in C/C++
Introductory programming for students who have no prior programming experience. Students learn programming and documentation skills as well as algorithmic problem-solving and programming methodologies. Introduces computers, compilers, and editors. Students write medium-sized programs. This course and course 5C cover the same material, but use different programming languages. (Formerly course 60N.)
CMPS 5J: Introduction to Programming in Java
Introductory programming for School of Engineering majors who have no prior programming experience. Students learn programming and documentation skills, as well as algorithmic problem-solving and programming methodologies. Introduces computers, compilers, and editors. Students write medium-sized programs. The two-quarter sequence courses 5J and 11 cover in two quarters the same material as the accelerated introductory course and lab 12 A/L cover in one quarter. (Formerly course 60G.)
CMPS 5P: Introduction to Programming in Python
Introduction to programming for engineering or science students who have no prior programming experience. Students learn programming and documentation skills, as well as algorithmic problem-solving and programming methodologies. Introduces students to computers, programming tools, and editors. Students write medium-sized programs to solve web-based and scientific problems. This course and course 5J cover largely the same material, but use different programming languages.
CMPS 10: Introduction to Computer Science
An overview of the theory, foundations, and practice of computer science with emphasis on what computers can and cannot do, now and in the future. Topics include algorithms and data, correctness and efficiency of algorithms, hardware, programming languages, limitations of computation, applications, and social issues. No programming skills are required as a prerequisite. Major concepts and open problems in computer science are presented without reliance on sophisticated mathematical tools.
CMPS 11: Intermediate Programming
Continuation of course 5J. Covers basic object-oriented programming; event-driven programming; graphical user interface (GUI) creation; recursion; two-dimensional arrays; and introduces programming in C and Java. The two-quarter sequence courses 5J and 11 cover in two quarters the same material as the accelerated introductory course and lab 12 A/L cover in one quarter. Students cannot receive credit this course and course 12A.
CMPS 12A: Introduction to Programming (accelerated)
Accelerated introduction to programming. Students write medium-sized programs. Topics include: functions; conditionals and loops; classes; event-driven programming and graphic user interfaces (GUIs); recursion; and arrays. Students who have no or very limited programming experience should consider courses 5J and 11 which cover the same material in two quarters. Students may not receive credit for both this course and course 11. Some prior programming experience in a language such as C, C++, Java, or C# strongly recommended.
CMPS 12B: Introduction to Data Structures
Teaches students to implement common data structures and the algorithms associated with each data structure, through progressively difficult exercises. Topics include big "O" notation; pointers, recursion (induction), and dynamic allocation; linked lists and list processing; stacks, queues, binary trees and binary search trees; simple sorting techniques and simple search techniques. Students will gain a working knowledge of the elements of the Java and C programming languages. Prior experience with Unix is assumed. Prerequisite(s): course 12A. Concurrent enrollment in course 12M required. Enrollment limited to 150. (General Education Code(s): IN.) W. Mackey
CMPS 12M: Introduction to Data Structures Laboratory
Complements course 12B, gaining additional competence with a number of important software development tools, languages, and techniques. Included are advanced Unix features and utilities such as grep, find, diff, the shell, and pipes; C programs utilizing I/O, arrays, pointers, and structures; a scripting language to perform simple text and file manipulation; and the make utility. Prerequisite(s): courses 12A and 12L. Concurrent enrollment in course 12B required. W. Mackey
CMPS 13H: Introduction to Programming and Data Structures
Provides an accelerated introduction to programming and data structures. Includes a review of basic programming, including loop and conditional control structures, procedures and parameter passing, and arrays. Course goes on to cover same material as course 12B. Students cannot receive credit for this course and course 12A or 12B. Prerequisite(s): interview only; students must have completed a high school or college level programming course in Java, C, or C++. A short oral examination given to ascertain programming level. Concurrent enrollment in course 13L required.
CMPS 20: Game Design Experience
Surveys history, technology, narrative, ethics, and design of interactive computer games. Covers the interplay of narrative, graphics, rule systems, and artificial intelligence in the creation of interactive games. Intended as an introduction to computer game design with a game programming focus for computer game design majors. Students cannot receive credit for this course and course 80K.
CMPS 60M: Scientific Computation with Matlab and Maple
Basic concepts from calculus visualized using Matlab and Maple; plotting data and functions, integration, differentiation, limits; solving systems of equation; linear regression; and example applications from science and engineering. Prerequisite(s): Mathematics 19B, or 20B, or by consent of instructor. Enrollment limited to 60. M. Warmuth
CMPS 80B: Systems and Simulation
An introduction to systems analysis as an approach to understanding and solving complex problems. The use of simulation as an aid in this problem solving. Examples are taken from ecology, economics, physics, computer science, and other fields. Intended as a generally accessible undergraduate course in which students can develop and explore computer simulation models matched to their individual interests. (General Education Code(s): T2-Natural Sciences, Q.) R. Levinson
CMPS 80C: Computer Arts and Graphics
Covers the design and use of various computer graphics programs for painting, drawing, computer-aided design, modeling, and animation. Students create graphical images using available software and design programs. Exposure to peripherals such as mice, laser printers, and possibly video and experimental peripherals. Use of SGI graphics workstations. Includes discussion of computer art and its development over time, and includes slides and videos of computer graphics. Not intended for computer science or computer engineering majors, who are advised to take course 160. (General Education Code(s): T2-Natural Sciences.) S. Lodha
CMPS 80G: Introduction to Unix
Introduction to computing, the Internet, and the World Wide Web through the language of the Unix operating system. Oriented to the beginner, the course presupposes no previous acquaintance with any particular sort of computer. It covers the basic concepts of text editing and formatting, writing Web pages in basic HTML, and promotes a rigorous understanding of Unix commands and shell scripts. Views communication with a computer as a matter of learning a few simple though powerful languages. (Also offered as Linguistics 80G. Students cannot receive credit for both courses.) (General Education Code(s): T2-Natural Sciences.) The Staff
CMPS 80J: Technology Targeted at Social Issues
Introduces the idea that engineering can be a means for addressing social issues. Case studies and guest speakers. Issues might include: economic development, privacy, activism, safe drinking water, inexpensive shelters, sustainable energy, education, and waste disposal. (General Education Code(s): T7-Natural Sciences or Social Sciences.) S. Lodha, J. Davis
CMPS 80K: Foundations of Game Design
Surveys history, technology, narrative, ethics, and design of interactive computer games. Work in teams to develop novel game design storyboards. Intended as a generally accessible undergraduate course in which students can explore the interplay of narrative, graphics, rule systems, and artificial intelligence in the creation of interactive games. Programming experience not required. Enrollment limited to 150. (General Education Code(s): T2-Natural Sciences.) E. Whitehead
CMPS 80V: Creating Virtual Worlds on the Web
Project-oriented course about creating and publishing interactive 3D content on the web. Focuses on the creation of static and dynamic objects, such as characters, terrain, accessories, and works of art. Also covers inclusion of animation and sound effects with these objects. The objects created can be used in a stand-alone setting (e.g., a 3D document) or incorporated into existing virtual worlds (e.g., as part of a level design in a computer game or assets in massively multiplayer online games). Uses 3D authoring tools (pending availability of resources) like VRML, Second Life, Alice, and/or Acrobat 3D. (Formerly VRML 3D Worlds on the Web.)
Upper Division Courses
CMPS 101: Algorithms and Abstract Data Types
Studies basic algorithms and their relationships to common abstract data types. Covers the notions of abstract data types and the distinction between an abstract data type and an implementation of that data type. The complexity analysis of common algorithms using asymptotic (big "O") notation is emphasized. Topics include sorting and searching techniques, basic graph algorithms, and algorithm design techniques. Abstract data types covered include priority queues, dictionaries, disjoint sets, heaps, balanced trees, and hashing. Familiarity with C, Java, and Unix is assumed. Prerequisite(s): course 12B or 13H; CMPE 16 or 16H; MATH 19B; and one course from the following: MATH 21, 22, 23A, or AMS 10. Enrollment restricted to School of Engineering and mathematics majors and computer science and computer engineering minors.
CMPS 102: Introduction to Analysis of Algorithms
Methods for the systematic construction and mathematical analysis of algorithms. Order notation, the RAM model of computation, lower bounds, and recurrence relations are covered. The algorithm design techniques include divide-and-conquer, branch and bound, and dynamic programming. Applications to combinatorial, graph, string, and geometric algorithms.
CMPS 104A: Fundamentals of Compiler Design I
An introduction to the basic techniques used in compiler design. Topics include compiler structure, symbol tables, regular expressions and languages, finite automata, lexical analysis, context-free languages, LL(1), recursive descent, LALR(1), and LR(1) parsing; and attribute grammars as a model of syntax-directed translation. Students use compiler building tools to construct a working compiler. Prerequisite(s): course 101 and Computer Engineering 12 and 12L. W. Mackey
CMPS 104B: Fundamentals of Compiler Design II
A detailed study of the structure and design of a compiler. Continues study begun in course 104A. Topics include compiler structure emphasizing the back end, type systems, run-time environments; static, stack and heap storage management, garbage collection; addressing, register allocation, code generation; basic blocks and data-flow analysis; local and global code optimization; interpretation versus compilation. Students generate machine code runnable on a real machine. Prerequisite(s): course 104A. W. Mackey
CMPS 105: Systems Programming
Covers fundamentals of systems programming including standard tools, shell programming, file I/O, files and directories, system data files and information, Unix processes, process control, synchronization, signals, event-driven programming, terminal I/O, daemons, interprocess communication, basic network programming, and basic user-interface programming.
CMPS 109: Advanced Programming
An introduction to object-oriented techniques of software development including data abstraction, inheritance, polymorphism, and object-oriented design. Extensive practice using a computer to solve problems, including construction of graphical user interfaces and a multithreaded client/server applications.
CMPS 111: Introduction to Operating Systems
Fundamental principles of operating systems: process synchronization, deadlocks, memory management, resource allocation, scheduling, storage systems, and study of several operating systems. A major programming project will be required.
CMPS 112: Comparative Programming Languages
Covers several programming languages and compares styles, philosophy, and design principles. Principles underlying declarative, functional, and object-oriented programming styles are studied. Students write programs emphasizing each of these techniques.
CMPS 115: Software Methodology
Emphasizes the characteristics of well-engineered software systems. Topics include requirements analysis and specification, design, programming, verification and validation, maintenance, and project management. Practical and research methods are studied. Imparts an understanding of the steps used to effectively develop computer software.
CMPS 116: Software Design Project
Students in teams specify, design, construct, test, and document a complete software system in a specialized application domain. Class time is spent in technical discussions and ongoing design reviews. A formal presentation and demonstration of each project is required. An organizational meeting will be held during the preceding quarter. Projects may be drawn from industry and campus research groups.
CMPS 122: Computer Security
Introduction to computer security (including selected topics in network security). Access control. Security in programming languages. Basic cryptography. Security protocols.
CMPS 128: Distributed Systems: File Sharing, Online Gaming, and More
Covers topics in distributed computing including communication, naming, synchronization, consistency and replication, fault tolerance, and security. Examples drawn from peer-to-peer systems, online gaming, the World Wide Web; other systems also used to illustrate approaches to these topics. Students implement simple distributed systems over the course of the quarter.
CMPS 129: Data Storage Systems
Covers all aspects of storage systems technology from magnetic media up through system software, including principles of magnetic recording, hard drive technology and evolution, performance measurement, file systems, storage networking, disk arrays, network-attached storage, and alternative storage technologies.
CMPS 130: Computational Models
Various representations for regular languages, context-free grammars, normal forms, parsing, pushdown automata, pumping lemmas, Turing machines, the Church-Turing thesis.
CMPS 132: Computability and Computational Complexity
Turing machines, general phase-structure grammars, the Chomsky hierarchy, recursive functions, diagonalization, the Halting problem, computability and unsolvability, computational complexity, time and space bounds, NP-completeness with emphasis on reductions between problems from various areas.
CMPS 140: Artificial Intelligence
Introduction to the contemporary concepts and techniques of artificial intelligence, including any or all of: machine perception and inference, machine learning, optimization problems, computational methods and models of search, game playing and theorem proving. Emphasis may be on any formal method of perceiving, learning, reasoning, and problem solving which proves to be effective. This includes both symbolic and neural network approaches to artificial intelligence. Issues discussed include symbolic versus nonsymbolic methods, local versus global methods, hierarchical organization and control, and brain modeling versus engineering approaches. Lisp or Prolog may be introduced. Involves one major project or regular programming assignments.
CMPS 142: Machine Learning and Data Mining
Introduction to machine learning algorithms and their applications. Topics include classification learning, density estimation and Bayesian learning regression, and online learning. Provides introduction to standard learning methods such as neural networks, decision trees, boosting, and nearest neighbor techniques.
CMPS 146: Game AI
Course provides a comprehensive introduction to the use of artificial intelligence (AI) in computer games. Building on fundamental principles of AI, course explains how to create non-player characters (NPCs) with progressively more sophisticated capabilities.
CMPS 148: Interactive Storytelling
Covers a range of design approaches and technologies including storytelling in games, interactive fiction, interactive drama, and artificial intelligence-based story generation. Through a mixture of readings, assignments, and project work, students explore the theoretical positions, debates, and technical and design issues arising from these approaches. Students may not receive credit for this course and course 248.
CMPS 160: Introduction to Computer Graphics
Introduces different techniques of modeling, transformation, and rendering to obtain computer generated imagery. Topics include 2D and 3D graphical primitives, line drawings, curves and surface modeling, projections, matrix composition, hidden surface removal, and shading algorithms. Several intensive programming assignments on bit-mapped raster scan displays and a major programming project are required.
CMPS 160L: Introduction to Computer Graphics Laboratory
Complements course 160, gaining additional competence with a number of important software development tools, graphics libraries, and graphical user interfaces. Included are OpenGL program, utilizing rubberbanding, picking, trackballing, display lists, double buffering, lighting, shading, materials and textures; and FLTK program, utilizing sliders, buttons, and dialog boxes.
CMPS 190X: Methods of Cryptography
Theory and practice of encryption and decryption. Classic ciphers. Shannon's information-theoretic approach. Block and stream ciphers. The DES standard. Public key systems: Diffie-Hellman key exchange, RSA, digital signatures. Elliptic curve cryptography. Authentication protocols. Prerequisite(s): Mathematics 19B, 21, and Computer Engineering 16, or equivalent courses. Applied Mathematics and Statistics 27 or equivalent may be substituted for Mathematics 19B and 21. Consult with instructor regarding a course equivalent. J. Yellin
Graduate Courses
CMPS 280A: Seminar on Computer Science Research
Weekly seminar covering topics of current research in computer science. Enrollment limited to 30. May be repeated for credit. The Staff
CMPS 280G: Seminar on Software Engineering
Weekly seminar covering topics of current research in software engineering. Prerequisite(s): permission of instructor. Enrollment restricted to graduate students. Enrollment limited to 30. May be repeated for credit. N. Whitehead, C. Flanagan, L. De Alfaro, C. McDowell
CMPS 280J: Seminar on Computer Graphics
Weekly seminar covering topics of curren research in computer graphics. Enrollment restricted to graduate students and by permission of instructor. Enrollment limited to 30. May be repeated for credit. J. Davis
CMPS 280S: Seminar on Computer Systems
Weekly seminar series covering topics of current research in computer systems. Enrollment by permission of instructor. Enrollment limited to 30. May be repeated for credit. E. Miller, S. Brandt, D. Long
CMPS 290A: Topics in Algorithms and Complexity Theory: Probabilistic Algorithms and Average Case Analysis
Examines the use of probability theory both in the design and analysis of algorithms. Uses probability theory to analyze the average performance of deterministic algorithms on randomly chosen or "typical" inputs, rather than on worst case inputs. Also a look at algorithms that use randomization, such as random walk and simulated annealing techniques. Examples of specific topics include martingales, random graphs, and rapidly mixing Markov Chains. Enrollment restricted to graduate students. Enrollment limited to 15. Offered in alternate academic years. May be repeated for credit. D. Haussler
CMPS 290B: Advanced Topics in Computer Graphics
A graduate seminar in computer graphics on topics from recently published research journal articles and conference proceedings. Topics vary from year to year depending on interests of students. Primary areas of interest are likely to be scientific visualization, modeling, rendering, scattered data techniques, wavelets, and color and vision models. Students read technical papers and present class lectures. Guest lectures supplement the student presentations. A research project is required. Enrollment limited to 15. A. Pang, S. Lodha, J. Davis
CMPS 290C: Advanced Topics in Machine Learning
In-depth study of current research topics in machine learning. Topics vary from year to year but include multi-class learning with boosting and SUM algorithms, belief nets, independent component analysis, MCMC sampling, and advanced clustering methods. Students read and present research papers; theoretical homework in addition to a research project. Prerequisite(s): course 242. M. Warmuth, D. Helmbold
CMPS 290D: Neural Computation
An introduction to the design and analysis of neural network algorithms. Concentrates on large artificial neural networks and their applications in pattern recognition, signal processing, and forecasting and control. Topics include Hopfield and Boltzmann machines, perceptions, multilayer feed forward nets, and multilayer recurrent networks. Enrollment restricted to graduate students. Offered in alternate academic years. D. Haussler, M. Warmuth
CMPS 290E: Object-Oriented Programming Methodology
Object-oriented programming methodology is the application of abstract-data types and polymorphism to coding solution. Topics geared to beginning thesis research in this field. Prerequisite(s): courses 201 and 203. Enrollment restricted to graduate students. Enrollment limited to 20. I. Pohl, C. McDowell
CMPS 290F: Applications of Combinatorics
Combinatorial mathematics, including summation methods, working with binomial coefficients, combinatorial sequences (Fibonacci, Stirling, Eulerian, Harmonic, Bernoulli numbers), generating functions and their uses, Bernoulli processes, and other topics in discrete probability. Oriented toward problem solving, applications mainly to computer science, but also physics. (Formerly Topics in Combinatorial Mathematics.) Prerequisite(s): Computer Engineering 16 and Applied Mathematics and Statistics 27. Enrollment restricted to graduate students and upper-division undergraduates. Offered in alternate academic years. May be repeated for credit. J. Yellin
CMPS 290G: Topics in Software Engineering
Research seminar on current topics in software engineering. Topics vary from year to year depending on the current research of the instructor(s) and interests of students. Students read technical papers from relevant journals and conference proceedings. Synthesis and understanding of materials is demonstrated by a required research project. Prerequisite(s): Computer Engineering 276 recommended. Enrollment restricted to graduate students; undergraduates may enroll with permission of instructor. Enrollment limited to 35. May be repeated for credit. E. Whitehead, L. De Alfaro, C. McDowell, L. Werner
CMPS 290H: Topics in Database Systems
Focuses on current research topics in database systems. Different offerings cover different topics depending on current research of instructor(s) and the interests of students. Students read technical papers from journals and conference proceedings and present class lectures. A research project is required. Prerequisite(s): course 180 (or equivalent) or 277 or consent of instructor. Enrollment restricted to graduate students. Enrollment limited to 20. W. Tan, N. Polyzotis, P. Kolaitis
CMPS 290I: Internet Technology and Policy
Graduate seminar that explores the transforming effects of the Internet on the physical access to information, the content of communications, the security of private information, and the availability of investments. Computer engineering and computer science undergraduate students may enroll in this course if they have completed Computer Engineering 152; other graduate and advanced undergraduate students may enroll with consent of the instructor. J. Yellin
CMPS 290S: Advanced Topics in Computer Systems
Focuses on current research topics in computer systems. Topics vary from year to year depending on the current research of the instructor(s) and the interests of the students. Students read technical papers from current journals and conference proceedings, and present class lectures. A research project is required. Prerequisite(s): course 221. Enrollment restricted to graduate students; qualified undergraduates may enroll with instructor's consent. E. Miller, W. Tan, S. Brandt, D. Long
CMPS 290X: Cryptography and Computer Security
Research seminar on encryption and related technologies. Topics include theory of codes, random sequences and generators, public key cryptosystems, private key cyphers, key exchange protocols, quantum computing and cryptography. Major project required. Prerequisite: interview with instructor. Enrollment limited to 12. J. Yellin
CMPS 290Y: Quantum Computing
Quantum information theory and theory of quantum computation. Quantum algorithms for database search, integer factorization, and order finding. Quantum coding and error correction. Shannon and von Neumann entropies. Quantum communication and cryptography. Prerequisite(s): course 201. Recommended: courses 210, 250, Computer Engineering 251, Physics 215. Knowledge of quantum mechanics helpful but not required. Some knowledge of Shannon information theory strongly recommended. See instructor to discuss course requirements before enrolling. Enrollment restricted to graduate students or seniors by consent of instructor. J. Yellin


