Course Descriptions

Important Links

  • Add/Drop Policy
  • Course Schedule on myUI (enter CS in the "Course Subject" field) 
  • Independent Study Contract
  • Course Renumbering Map

Courses 

CCP:1022 (409:022) Internship in Computer Science

Description: Cooperative education and internship assignments, on- or off-campus, provide experience related to each student's academic interests. The cooperative education opportunities are open to undergraduate computer science students who have completed CS:2230 (22C:021), and MATH:1550 (22M:031) or MATH:1850 (22M:025), and 24 hours of undergraduate work. Graduate students must have 15 hours of graduate coursework. For more information on potential assignments and to override restriction, Contact the Career Center, C310 PC. Approved GE: None. Prerequisites: CS:2230 (22C:021), and MATH:1550 (22M:031) or MATH:1850 (22M:025)

CCP:1062 (409:062) Internship in Informatics

Description: Cooperative education and internship assignments, on- or off-campus, provide experience related to each student's academic interests. The cooperative education opportunities are open to undergraduate informatics students who have completed CS:2110 (22C:080), and CS:2420 (22C:084) or MSCI:3200 (06K:182), and 24 hours of undergraduate work. For more information on potential assignments and to override restriction, Contact the Career Center, C310 PC. Approved GE: None. Prerequisite: CS:2110 (22C:080)

CS:1000 (22C:002) First-Year Seminar

Description: Small discussion class taught by a faculty member; topics chosen by instructor; may include outside activities (e.g., films, lectures, performances, readings, visits to research facilities). Open only to first- and second-semester students. It may be taken twice. Approved GE: None

CS:1001 CLAS Master Class

Description: Exploration of a single topic in a series of lectures by faculty presenting divergent perspectives, illuminates intellectual adventure inherent in liberal arts and sciences; encourages discovery of majors and other areas of study within the College of Liberal Arts and Sciences. Same as HIST:1001, ARTS:1001, PHIL:1001, CSD:1001, THTR:1001,BIOC:1001, CLAS:1001,ENGL:1001, RELS:1010. Approved GE: None

CS:1020 (22C:001) Principles of Computing

Description: Introduction to computing for students seeking a broad overview of the discipline. Students acquire necessary concepts and skills to apply computing principles and resources effectively in their chosen profession. Topics include networking and communications, privacy, ethics and security, the limits of computing, and algorithmic problem solving. Lab assignments explore a variety of software tools to support decision making with an emphasis on HTML and CSS for building web pages, a gentle introduction to JavaScript programming language to program web pages, spreadsheet advanced features and database management systems for data processing and querying. This course is not part of the computer science or informatics majors or minors. The course is taught by a faculty member; lab sections are led by TAs. Not open for credit to students who have completed a higher-numbered CS course or MSCI:2000. Approved GE: Quantitative or Formal Reasoning

CS:1110 (22C:005) Introduction to Computer Science

Description: Introductory course in computer science and the study of algorithms appropriate for students in data-intensive disciplines. Topics include how computers work, simple algorithms and their efficiency, networking, databases, artificial intelligence, graphics, simulation and modeling, security and the social impact of computing. The course also includes a gentle hands-on introduction to programming concepts with Python. The course is taught by a faculty member, lab sections are led by TAs. Not open for credit to students who have completed CS:2310 (22C:021) or a higher-numbered CS (22C) course. Approved GE: Quantitative or Formal Reasoning.

CS:1210 (22C:016) Computer Science I: Fundamentals

Description: This is the introduction to programming course in the computer science major and minor curriculum. Prior programming experience is not required, although some students have had some previous exposure to programming. It emphasizes object oriented programming style and methodology. The lecture is taught three times a week. The 50-minute discussion periods, led by a TA, are used to discuss programming exercises, and to answer questions in a small classroom atmosphere. Concepts are presented in the context of working examples and exercises. Language syntax and computing paradigms are studied. Programming projects are used to reinforce key programming notions, including iteration, data types, functions, and objects. Projects may include graphics, string processing, and network applications. Lectures are taught by a faculty member; discussion sections are led by TAs. Approved GE: Quantitative or Formal Reasoning. Prerequisite: MATH:1020 (22M:009) or MATH:1340 (22M:013) or MATH:1440 (22M:015) or math placement to a calculus course

CS:2110 (22C:080) Programming for Informatics

Description: An introduction to programming, computing principles and fundamental aspects of computer science. Topics covered include programming in Python, fundamentals of relational databases, algorithmic idioms, computational complexity, and example applications. After CS:1110 (22C:005), this is the second course in the informatics major. Pre- or co-requisite: MATH:1010 (22M:005) or MATH:1020 (22M:009) or MATH:1240 (22M:010) or MATH:1340 (22M:013) or MATH:1440 (22M:015), if not taken as a prerequisite.

CS:2111 (22C:081) Programming Practice

Description: This course reviews introductory programming concepts and practice in Python. It provides additional practice in the core programming concepts taught in CS:1210 (22C:016) Computer Science I: Fundamentals, and CS:2110 (22C:080) Programming for Informatics.  Students will do weekly programming assignments in order to enhance mastery of the key ideas and techniques in introductory programming. It is a non-lecture course. Faculty and Computer Science graduate students will provide review materials and assignments and meet regularly with individuals or small groups of students to review concepts and discuss homework assignments. Prerequisites: CS:1210 (22C:016) or CS:2110 (22C:080).

CS:2210 (22C:019) Discrete Structures

Description: This is an introduction to mathematical methods used in studying problems of computer science. The topics covered include: mathematical logic; proof techniques, especially mathematical induction; set theory, functions, and relations; procedures, recursion, and operation counts; recurrence relations; analysis of algorithms; counting methods, permutations and combinations; graphs and trees. Calculus I is recommended, but not required as a prerequisite. The course is required for all computer science majors and minors. Two one-hour exams and a final are given, plus weekly quizzes and weekly problem sets from the text. The course is taught by a faculty member. Calculus I is recommended. NOTE: This course must be taken before or concurrently with CS:2230 (22C:021) or CS:2820 (22C:022), whichever is taken first. It may not be taken AFTER either CS:2230 or CS:2820. Approved GE: None. Prerequisite: CS:1210 (22C:016) Recommendations: Calculus I; MATH:1550 (22M:031) or MATH:1850 (22M:025)

CS:2230 (22C:021) Computer Science II: Data Structures

Description: The second course required for computer science majors and minors emphasizes the design, implementation, and analysis of common data structures and algorithms. The goal is to teach how data structures provide the necessary data abstraction for the development of large software systems and their central role in software engineering. Data structures covered include sets, linked lists, stacks, queues, hash tables, trees, heaps, and graphs. Students are introduced to algorithms for searching, sorting, and data structure manipulation and learn the techniques to analyze program efficiency.  Programming using recursion and dynamic data structures are covered. The programming language is Java or C++. The course involves a midterm and final exam and multiple programming and homework assignments.  Lectures are taught by a faculty member; discussion sections are led by TAs. Approved GE: None. Prerequisite: CS:1210 (22C:016). Pre- or co-requisite: CS:2210 (22C:019)

CS:2420 (22C:084) Databases for Informatics

Description: Design and implementation of relational database systems: introduction to the relational model, database design, database normalization, use of database query and manipulation languages such as SQL. Prerequisite: CS:2110 (22C:080)

CS:2520 (22C:082) Human Computer Interaction

Description: The basic theories, principles and guidelines of the design and evaluation of human-computer interactions. Topics include: design methodologies (e.g., participatory design, low- and high-fidelity prototyping), user interface technologies (e.g., input and output devices, interaction styles), and quantitative and qualitative evaluation of user interfaces (e.g., expert reviews, usability testing). Pre- or co-requisite: CS:2110 (22C:080)

CS:2620 (22C:086) Networking & Security for Informatics

Description: Introduction to computer networking and an overview of network organization and management. Students will also develop a basic understanding of encryption and network security, as well as some practical experience in network programming. Prerequisite: CS:2110 (22C:080)

CS:2630 (22C:060) Computer Organization

Description: This course has two main goals: (1) to teach students how a digital computer works and (2) to introduce students to assembly language programming. The hardware component of the course begins by introducing the basic switching components of all digital circuits. It next shows how to analyze circuits and also how to build circuits that conform to specified computational properties. It introduces many standard circuits used by all computers, such as logic and shift circuits, arithmetic circuits, and memory circuits. The course then presents the design of a current general-purpose digital computer; class discussions cover the interface between the computer and its external devices. It presents alternatives in computer design, contrasting complex-instruction-set computers (CISCs) with reduced-instruction-set computers (RISCs). The software component of the course introduces assembly language programming. It describes instructions of classes including control-flow, load and store, operate (arithmetic, logical, and shift and rotate), stack, type conversion, privileged, and I/O. The course also describes addressing modes and their utility. The software component concludes by describing software to control hardware devices. Requirements include 8-10 homework assignments and two or three exams. The course is taught by a faculty member. Prerequisite: CS:2230 (22C:021)

CS:2800 Digital Arts: An Introduction

Description: Introduction to potential of integrating art with technology, providing a foundation of skills and concepts through hands-on experimentation; lectures and demonstrations will introduce key concepts and ideas as well as the history of digital arts; in labs, students will develop skills that will form a foundationfor future investigation; work may include using an Arduino, programming, and developing an interface to control a software project; the final project will be shared with the public in some way; critical discourse, in the form of writing assignments, will allow for reflection and evaluation. Same as ARTS:2800, CINE:2800, Dance:2800, MUS:2800, THTR:2800. Approved GE: Engineering Be Creative.

CS:2820 (22C:022) Object-Oriented Software Development

Description: The course continues the presentation of skills and knowledge necessary for effective software development, building upon the basic competence students gained in CS:1210 (22C:016) and CS:2230 (22C:021).  Students are taught the basics of software engineering and use that knowledge in one or more group projects to develop a software system of substantial size. The goal of this course is to educate students on how to develop large software using objected-oriented analysis, design, programming and testing techniques. The course also aims at developing professional-level programming competence using the object-oriented paradigm and associated concepts of classes, objects, methods, inheritance, and polymorphism. The programming language of instruction is a major object-oriented language such as Java, Ruby, or Scala. Team projects constitute a major portion of the evaluation, but the course also involves a midterm, a final exam and several individual programming assignments. The course is required for all computer science majors and minors. The lecture is taught by a faculty member; discussion sections are led by TAs. Prerequisite: CS:2230 (22C:021)

CS:3210 (22C:109) Programming Languages and Tools

Description: This course offers rotating sections covering different programming languages (Usually C++ and Java) and tools. The topics covered in a section vary by programming language. The goal of this course is to expose students to the latest technology and allow students to learn a new programming language once they understand the fundamentals of programming. Students are assumed to have previous programming experience at the level of CS:1210 (22C:016). The course does not count for credit towards a CS major or minor. The sections are taught by an instructor or a TA. It may be taken four times. Approved GE: None. Prerequisite: CS:1210 (22C:016) or CS:2110 (22C:080) or CS:3110 (22C:104)

Possible offerings under CS:3210 (22C:109):

  • Programming Languages and Tools: Programming with C++

Description: Topics include basic constructs in C++; class specification; multiple inheritance, operator and function name overloading; virtual functions and templates; basic concepts of data abstraction and object-oriented programming in C++. This course is intended for non-computer-science majors who already know how to program in a language other than C++. The course is taught by TAs.

  • Programming Languages and Tools: Programming With C

Description: This course covers the use of major portions of the C programming language: variables, expressions, and statements; program modularization through functions, macros, and blocks; control structures; representation of numeric and textual data using scalar and structured data types; and operating system interfaces to files and other services. Programming methodology topics such as using program design and development tools and managing multi-file programs are examined. The course is taught by TAs.

  • Programming Languages and Tools: Programming with Java

Description: This course covers the philosophy of Java, the Java language, objects and classes, applications in Java, packages and interfaces; exceptions, threads, the abstract window toolkit, applets, and programming for the web. This course is intended for non-CS majors who already know how to program in a language other than Java. Not open for credit to students who have taken a previous course in Java. The course is taught by a faculty member or a TA.

CS:3330 (22C:031) Algorithms

Description: Topics include algorithm design techniques (divide and conquer, dynamic programming, greedy) and analysis techniques (big-0 notation, recurrence); sorting (merge sort, heapsort, and quicksort), searching (B-trees, red-black trees, hashing); basic graph algorithms (depth-first and breadth-first search, minimum spanning trees, shortest paths); and NP-completeness.There are several programming projects. The course is taught by a faculty member. Prerequisites: CS:2230 (22C:021), and MATH:1550 (22M:031) or MATH:1850 (22M:025)

CS:3620 (22C:112) Operating Systems

Description: Introduction to modern operating systems, including device control, memory management and addressing, process scheduling, interprocess communication, interrupts, synchronization, security. Prerequisite: CS:2630 (22C:060)

CS:3640 (22C:118) Introduction to Networks and Their Applications

Description: This course introduces students to computer networks and the application techniques for using networks. The course surveys the basic concepts of messaging and media transfer. After an introduction to general concepts, the subject matter turns to important software applications that rely on networks: parallel simulation, network file sharing, multiplayer games, and distributed databases. The course is taught by a faculty member. Prerequisite: CS:2630 (22C:060)

CS:3700 (22C:072) Elementary Numerical Analysis

Description: This course examines numerical methods for finding solutions of nonlinear equations, polynomial interpolation and approximation of functions, numerical integration, solution of simultaneous linear algebraic equations, and solution of ordinary differential equations. Although not a required prerequisite, students would benefit from some background in linear algebra; MATH:2700 (22M:027) would be sufficient. Problem assignments require use of a computer, and this is generally done in Matlab, a system and language taught in the course. Same as MATH:3800 (22M:072). Prerequisite: MATH:1560 (22M:032) or MATH:1860 (22M:026)

CS:3820 (22C:111) Programming Language Concepts

Description: This course examines advanced topics in programming languages, for example, syntax specification and informal semantic models; program control structures, including recursion, co-routines, backtracking, and concurrency; and data abstraction and structuring methods. The course introduces programming paradigms, such as functional and logic programming, that contrast with more conventional languages. Examples and projects may rely on several languages such as C, C++, Ada, and Java, with Prolog for the logic programming part and ML or Haskell for the functional programming part. Requirements include one or two in-class exams, final exam, and several computer projects. This is a required course for majors in computer science. The course is taught by a faculty member. Prerequisites: CS:2230 (22C:021), and CS:2630 (22C:060) or CS:2820 (22C:022)

CS:3910 (22C:094) Informatics Project

Description: Semester-long capstone course for all informatics majors. Students, typically working in small groups, will design, implement, document, and test a system using appropriate software tools. A sample project might be an information management tool consisting of a database system with a Web-based front-end. Taught by a faculty member. Prerequisites: CS:2420 (22C:084), CS:2520 (22C:082), and CS:2620 (22C:086)

CS:3980 (22C:096) Topics in Computer Science

Description: Complements material in other courses. Recent examples include Game Design, Performing Robots, and HTML5. An instructor number and approval are required for registration in this course. Contact the instructor (or designated individual) for the instructor number, which you enter as the section number when you register. It may be taken four times. Depending on content, this course may or may not count towards the computer science minor. Prerequisites: CS:1210 (22C:016) or  CS:2110 (22C:080) or CS:3110 (22C:104)

CS:3990 (22C:099) Honors in Computer Science or Informatics

Description: This course allows for individualized work on honors projects. Open only to computer science majors in the honors program. Membership in the honors program is open to any undergraduate who maintains a UI grade-point average of 3.20 or higher. If you have not received permission from the instructor to add this section, your enrollment may be administratively dropped. It may be taken twice. Requirement: Computer science or informatics major, and honors standing.

CS:4330 (22C:135) Theory of Computation

Description: Topics covered include Finite automata; regular sets and expressions; context‑free and context‑sensitive grammars, their properties; push‑down automata; standard, universal, and linear‑bounded Turing machines; relationships between formal languages and automata; undecidability and its consequences. Prerequisite: CS:3330 (22C:031)

CS:4350 (22C:188) Logic in Computer Science

Description: The main objective of this course is to expose undergraduate and beginning graduate students to symbolic logic. Symbolic logic is a powerful tool for modeling computation and computational devices and reasoning formally about them. It provides a unifying foundational framework for several areas of computer science and engineering such as databases, artificial intelligence, hardware design, programming languages, software engineering, and security. This course introduces several logics (propositional, predicate, temporal, modal, ...) differing in their expressive power and focus, and discusses some of their uses in computer science. Main themes are how to represent knowledge in these logics, what represents a valid argument, and how to prove or disprove, possibly automatically, the validity of a logical statement. Two one-hour exams and a final are usually given, plus several written homeworks. NOTE: This course may be used to satisfy the theory requirement for BS students in place of CS:5340 (22C:131) or CS:4330 (22C:135). Prerequisite: CS:2210 (22C:019) Recommendations: Computer science, math, or engineering major.

CS:4400 (22C:144) Database Systems

Description: This course covers mostly relational database systems. First, students will learn how to effectively design and create relational databases, and how to use them via the SQL query and manipulation language. Next, the internals of relational database systems will be studied including how the relational database systems store data, optimize and execute SQL queries, and process transactions. Finally, this course will briefly discuss advanced, non-relational issues, such as object-oriented and XML data models, data integration, and data mining. Students are expected to develop databases and associated applications as course project. Prerequisites: CS:2230 (22C:021) and CS:3330 (22C:031)

CS:4420 (22C:145) Artificial Intelligence

Description: Topics include problem-solving methods, state-space representations, heuristic search, problem-reduction techniques, machine inference, and game playing; knowledge representations; overviews of expert systems, language processing systems; and machine perceptions. Requirements include weekly assignments, a midterm, a final exam, and a term project. The course is taught by a faculty member. Prerequisite: CS:3330 (22C:031)

CS:4440 (22C:149) Web Mining

Description: The Web as a vast, variegated and growing resource interconnects our world in many interesting ways. One area of study that has emerged somewhat recently is that of "web mining".  Research and development in web mining span a spectrum of goals from methods for high quality retrieval, to monitoring information sites and streams, to distilling and summarizing web information to identifying social networks and discovering new opportunities and ideas. This course will study the web mining landscape through papers, assignments and a term project. Exposure to Perl and to database technology is preferred. Prerequisite: CS:2230 (22C:021) and CS:2820 (22C:022) Recommendations: CS:4400 (22C:144) strongly recommended.

CS:4470 Health Data Analytics

Description: Analysis of different kinds of health care data, such as patient electronic medical records, public health data, biomedical publications, social media pertaining to health, and ontologies in health care; students will read papers exploring different kinds of research and application development involving such data; course will run in distinct modules with each focused on a dataset type and related research; students must be comfortable with programming (e.g., Java, Python, Perl). Prerequisite: CS:3330

CS:4480 Knowledge Discovery

Description: Knowledge discovery process, including data reduction, cleansing, transformation; advanced modeling techniques from classification, prediction, clustering, association; evaluation and integration. Same as MSCI:4480.

CS:4500 (22C:148) Research Methods in HCI

Description: Survey, discussion, and application of historical and recent research in the field of human-computer interaction with an emphasis on visual presentation, analysis, and communication of data and information; research methods, techniques, current readings, and best practices.

This course exposes students from all disciplines to the problems and challenges of effectively interpreting and communicating ever-increasing amounts of data. The focus of the course is on research methods for human-computer interaction (HCI). Information Visualization is a related field that focuses from an HCI perspective on effective presentation of data and information so that observers and analysts of such can identify trends, make new discoveries, and quantify relationships and changes.

Towards demystifying data analysis and making it accessible to a broader interdisciplinary audience, this course focuses on the practical application of modern tools and techniques, leading participants from traditional data and information visualization to innovative thinking in terms of visual analytics and digital storytelling. Towards this end, it encourages the development of and experimenting with new approaches and techniques tailored to varying analytic tasks and audiences, informed partly by participants' own experience, data and application interests. Prerequisite: CS:2520 (22C:082)

CS:4630 Mobile Computing

Description: Building mobile sensing systems requires addressing issues in sensor acquisition, wireless communication, and middleware development; hands-on projects using embedded computers and sensors; includes significant writing and presentation components; a conference-quality research paper on a novel research project in mobile computing is expected; knowledge of Java is assumed. Prerequisite: CS:2820

CS:4640 (22C:169)  Computer Security

Description: This class will introduce the students with the principals and the state-of-art of computer security research. The covered topics include:

- Cryptography (symmetric/asymmetric cryptography, cryptographic hash, digital signatures);

- User Authentication (textual and graphical passwords, cryptographic authentication);

- Access control models (DAC, MAC, RBAC);

- OS Security (CPU modes, System call, Filesystem permissions);

- Software Vulnerabilities (Time-of-check-to-time-of-use, Stack buffer overflow, Buffer overflow, Format string attack, Integer overflow);

- Automatic software vulnerability detection (static analysis, symbolic execution, concolic execution, fuzzing-based testing);

- Web and Network Security (SQL injection, Cross-site scripting, DNS security);

- Advanced topics (Mobile security, taint tracking, crypto-currency).

The course is taught by a faculty member. Prerequisite: CS:2630 (22C:060)

CS:4700 (22C:177) High Performance and Parallel Computing

Description: Diverse aspects of high performance and scientific computing are covered. The core of this class is on basic parallel algorithms using standard libraries and systems such as MPI for distributed computing and OpenMP for shared memory and multicore computers. All the material is covered starting from sequential implementation. Other issues encountered in scientific computing and programming in general are addressed, including floating point arithmetic, design and style, and efficiency in time and memory. Same as MATH:4860 (22M:178). Prerequisites: CS:2630 (22C:060) and MATH:2700 (22M:027)

CS:4720 (22C:174) Optimization Techniques

Description: Basic theory of optimization, use of numerical algorithms in solution of optimization problems; linear and nonlinear programming, sensitivity analysis, convexity, optimal control theory, dynamic programming, calculus of variations. The course is taught by faculty. Same as MATH:4820 (22M:174). Prerequisites: MATH:2700 (22M:027), MATH:2850 (22M:028), and MATH:3800 (22M:072)

CS:4740 (22C:179) Large Data Analysis

Description: Current areas that deal with problem of Big Data; techniques from computer science, mathematics, statistics; high performance and parallel computing, matrix techniques, cluster analysis, visualization; variety of applications including Google PageRank, seismology, Netflix‑type problems, weather forecasting; fusion of data with simulation; projects. Same as MATH:4740 (22M:179), STAT:4740 (22S:169). Prerequisites: CS:1210 (22C:016) and STAT:3200 (22S:152)

CS:4980 (22C:196) Topics in Computer Science

Description: This course complements material in other courses. Recent offerings have included iOS App Development, Compiler Construction/Raspbery Pi, and Sensing the World. May be taken six times. Prerequisite: CS:2110 (22C:080) or CS:2230 (22C:021) or CS:2820 (22C:022) or CS:3110 (22C:104)

CS:5110 Introduction to Informatics

Description: Fundamentals of computer science: algorithms, complexity, relational databases, systems concepts, programming in Python. Same as IGPI:5110.

CS:5340 (22C:131) Limits of Computation (Formerly CS:4340)

Description: Topics covered include Turing machines, undecidability, complexity classes, reductions, NP-completeness, NP-complete problems, randomized algorithms and randomized complexity classes, approximation algorithms and related complexity classes, dealing with NP-completeness. The course is taught by faculty. Prerequisite: CS:3330 (22C:031)

CS:5350 (22C:231) Design and Analysis of Algorithms

Description: Review of design and analysis techniques; advanced data structures; graph algorithms (network flows, matching, min-cut); NP-completeness, randomization and approximation algorithms; special topics (string matching, computational geometry or number theoretic algorithms). There will be three exams and two projects. The course is taught by a faculty member. Prerequisite: CS:3330 (22C:031) or CS:5340 (22C:131)

CS:5360 Randomized Algorithms

Description:  Use of randomization in the design of algorithms; focus on various fundamental principles in the design of randomized algorithms, such as first and second moment method, random sampling, hashing, probability amplification; tools for analysis, such as the tail bounds of Markov, Chebyshev, Chernoff, and Hoeffding, the Lovasz Local Lemma, Martingale tail bounds, randomized rounding of linear and semi-definite programs; applications to network routing, combinatorial optimization, random walks, social networks, data streaming, and more. Prerequisite: CS:3330

CS:5370 Computational Geometry

Description: Study of data structures for geometric problems such as point location, range searching, finding nearest neighbors, and algorithms for convex hulls, Voronoi diagrams, triangulations, and quad-trees along with their uses; other topics will be determined by student interest; focus on algorithm design and an understanding of the implementation of geometric algorithms; assumes a sound understanding of the material in an undergraduate algorithms course. Prerequisite: CS:3330

CS:5430 Machine Learning

Description: Fundamental machine learning techniques as well as hands-on experience applying these techniques and developing new techniques for solving problems from the real world; topics include regression (least square regression, lasso), classification (naive Bayes, nearest neighbor, support vector machines, logistic regression), kernel methods, unsupervised methods (k-means clustering, spectral clustering, dimensionality reduction), stochastic optimization, deep learning, and recent advances in big data analytics. Prerequisite: MATH:1850 and MATH:2700 and STAT:2020 and (CS:2230 or CS:2110) 

CS:5610 (22C:160) High Performance Computer Architecture

Description: Problems involved in designing and analyzing current machine architectures using hardware description language (HDL) simulation and analysis, hierarchical memory design, pipeline processing, vector machines, numerical applications, multiprocessor architectures and parallel algorithm design techniques; evaluation methods to determine relationship between computer design and design goals. The course is taught by a faculty member. Same as ECE:5320 ( 055:132 ). Prerequisite: 22C:112 (CS:4600) or 22C:113 (CS:4605) or 055:035 (ECE:3350)

CS:5620 (22C:166) Distributed Systems and Algorithms

Description: This course is an introduction to distributed computing with emphasis on distributed algorithms. It covers techniques used in advanced distributed system services including election algorithms, distributed graph algorithms, fault tolerance, distributed agreement, global snapshots, object replication, logical time, self-stabilization, and multicast operations. The course is taught by a faculty member. Prerequisite: 22C:031 (CS:3330) and 22C:112 (CS:3620)

CS:5630 Cloud Computing Technology

Description: Explores infrastructure and programming paradigms of scalable systems and databases; provides experience with popular cluster frameworks (MapReduce, Hadoop, Spark, Flink, or similar) through programming exercises, projects, and experiments; assigned readings and case studies explore themes such as replication, data sharding, looser types of consistency, virtualization, consensus, and barrier synchronization; cloud system stacks developed by Google, Amazon, Facebook, and Microsoft. Prerequisite: CS:2820 and (CS:3620 or CS:3640)

CS:5710 (22C:170) Numerical Analysis Nonlinear Equation Approximation Theory

Description: Topics include the treatment of the general idea of error, rootfinding methods for nonlinear equations, interpolation theory, approximation of functions, and numerical integration. The two courses, 22M:170 and 22M:171, form a general introduction to numerical analysis, and may be taken in either order. The course is taught in small sections, with approximately 25 students per class. Grades are based on two exams (midterm and final exam), and homework problems count for a significant portion of the grade. The course is recommended for well-prepared undergraduates. Same as MATH:5800 (22M:170). Prerequisites: MATH:2700 (22M:027) and MATH:2850 (22M:028), or MATH:3550 (22M:037) Requirements: Knowledge of computer programming

CS:5720 (22C:171) Numerical Analysis: Differential Equations and Linear Algebra

Description: Numerical methods for initial value problems for ordinary differential equations; direct and iterative methods for linear systems of equations; eigenvalue problems for matrices. The course is taught by a faculty member. Same as MATH:5810 (22M:171). Prerequisites: MATH:2700 (22M:027) and MATH:2850 (22M:028), or MATH:3550 (22M:037); and MATH:3600 (22M:100) Requirements: Knowledge of computer programming

CS:5800 (22C:180) Fundamentals of Software Engineering

Description: This course is an introduction to the software engineering process. Students examine lifecycle phases: problem analysis, requirements definition, specification, design, implementation, testing/maintenance, integration, and project management. In addition, human factors, software validation and verification, and group project experience are examined. Requirements include four homework exercises, a semester-long project, and two exams (one midterm and a final). Students should have significant programming exposure, and preferably have undergraduate senior or graduate standing. The course is taught by a faculty member. Same as ECE:5800 (055:180). Prerequisites: CS:2820 (22C:022) or ECE:3330 (055:033)

CS:5810 (22C:181) Formal Methods in Software Engineering

Description: This course introduces formal models, methods, and their application in various phases of software engineering process. The purpose of formal methods is to enable the construction of large, highly reliable software. Their foundation is the precise specification of the run-time properties that a software system is expected to satisfy. The course presents a collection of techniques for formal software development including operational, algebraic, model-based, property-based specification methods; for the verification of consistency and completeness of specifications; for the verification of software properties. Course work includes exercises in specification construction and verification, both on paper and using formal method-based tools. The course is taught by a faculty member. Same as ECE:5810 (055:181). Prerequisite: CS:2820 (22C:022) or ECE:3330 (055:033). Recommendations: CS:4350 (22C:188)

CS:5820 (22C:182) Software Engineering Languages and Tools

Description: Effective with spring 2013 offering, this course, ECE:5820 (055:182/22C:182) Software Engineering Languages and Tools, will be substantially revised to more strongly focus on modern agile software development practices for cloud and web-based applications, using state-of-the-art software engineering languages, tools and technologies. Topics covered in the revised course will include:

1. Agile Software Development Practices

a. Behavior-driven Design
b. Test-driven Development
c. Refactoring
d. Pair programming
e. Teams and collaborative development: version control, configuration management

2. Software-as-a-Service (SaaS) Architecture

a. Architectural patterns for SaaS: Client-Server, Tiered, Model-View-Controller (MVC)
b. RESTful services
c. Data management and CRUD

3. The Ruby on Rails Development Framework

a. The Ruby language (“More powerful that Perl, more object-oriented than Python”)
b. The Rails framework for web application development and deployment
c. Rails tools: Cucumber, Capybara, rSpec, …

4. Developing SaaS applications using Ruby and Rails

a. SaaS Design Patterns
b. Incorporating JavaScript and AJAX
c. Web app performance and security issues

Same as ECE:5820 (055:182). Requirements: ECE:5800 (055:180) or CS:5800 (22C:180); or graduate standing with solid understanding of object-oriented design and programming, and facility with at least one object-oriented programming language.

CS:5830 (22C:183) Software Engineering Project

Description: This course includes the use of object-oriented concepts and object-based models in software system analysis and design; Booch, OMT, and Booch-Rumbaugh unified method and notation; Jacobson's use cases; use of design patterns; software architectures; case studies; team project for a real software project; and object-oriented process and project management. The course is taught by a faculty member. Same as ECE:5830 (055:183). Prerequisites: ECE:5800 (055:180) and ECE:5820 (055:182)

CS:5850 (22C:185) Programming Language Foundations

Description: This is an introductory course on the formal foundations of programming languages. Its overall goals are to expose students to established techniques for providing precise and implementation independent definitions of programming languages, to help student develop deeper insights into key concepts and paradigms in programming, and to investigate methods for constructing correct programs and rigorously proving their properties. The formal foundations are presented using a variety of models, including attribute grammars, operational, axiomatic, denotational, and algebraic techniques. They involve the generation of proofs of program equivalence, correctness, and termination. The course is taught by a faculty member. Prerequisites: CS:3330 (22C:031) and CS:3820 (22C:111)

CS:5860 Lambda Calculus and Applications

Description: Covers both typed and untyped versions of the lambda calculus in depth, including essential theoretical results like confluence for untyped lambda calculus and normalization for typed lambda calculi, as well as applications in computer science, logic, and linguistics; course work includes both theoretical exercises and practical problems using software for manipulating lambda-calculus expressions, students devise their own final projects; no prior experience with lambda calculus, programming, logic, or linguistics is required, although ability to grasp definitions of new concepts and to follow detailed arguments is needed. Prerequisites: CS:3820

CS:5980 (22C:296) Topics in Computer Science III

Description: Various topics in computer science, not covered in other courses. Recent example: Research Topics in Human Computer Interaction.

CS:5990 (22C:199) Individualized research and/or programming projects

Description: Students interested in studying subjects not covered in other courses or in developing a unique programming project may negotiate with a faculty member for individualized instruction. May be taken four times. If you have not received permission from the instructor to add this section, your enrollment may be administratively dropped.

CS:6000 (22C:399) Research Seminar: Colloquium Series

Description: Presentations by internal and external speakers. Repeatable.  Requirements: Graduate standing in computer science

CS:6990 (22C:290) Readings for Research

Description: Individualized instruction for Ph.D. candidates in computer science, covering subjects not covered in other courses. If you have not received permission from the instructor to add this section, your enrollment may be administratively dropped. Requirements: Ph.D. standing in computer science.

CS:7990 (22C:299) Research for Dissertation

Description: Open only to PhD candidates in computer science. Repeatable. Requirements: Ph.D. candidacy (postcomprehensive exam) in computer science.