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

**CCP:1022 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, and MATH:1550 or MATH:1850, 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, and MATH:1550 or MATH:1850

**CCP:1062 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, and CS:2420 or MSCI:3200, and 24 hours of undergraduate work. Contact Pomerantz Career Center, C310 PC, to override restriction. **Approved GE:** None. **Prerequisite:** CS:2110

**CCP:3169 Internship in Graduate Studies 0 s.h.**

Recognition of practical work experience and internships. Requirements: admission to Graduate College.

**CS:1000 First-Year Seminar 1 s.h.**

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). Requirements: first- or second-semester standing.

**CS:1001 CLAS Master Class 1-3 s.h.**

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 ARTS:1001, BIOC:1001, CLAS:1001, CSD:1001, ENGL:1001, HIST:1001, PHIL:1001, RELS:1010, THTR:1001.

**CS:1020 Principles of Computing 3 s.h.**

Introduction to computing; broad overview of discipline; necessary skills and concepts for effective application of computing resources in student's profession. Recommendations: no credit for students who have completed a higher-numbered CS course. GE: Quantitative or Formal Reasoning.

**CS:1110 Introduction to Computer Science 3 s.h.**

Introduction to computer science and the study of algorithms; foundational ideas, computer organization, software concepts (e.g., networking, databases, security); programming concepts using Python. GE: Quantitative or Formal Reasoning.

**CS:1210 Computer Science I: Fundamentals 4 s.h.**

Introduction to programming using Python; programming constructs, data types, problem-solving strategies, data structures, object-oriented programming. Prerequisites: (MATH:1010 with a minimum grade of C- and MATH:1340 with a minimum grade of C-) or (ALEKS score of 45 or higher and MATH:1010with a minimum grade of C-) or ALEKS score of 75 or higher or MATH:1020 with a minimum grade of C- or (MATH:1005 with a minimum grade of C- and MATH:1010 with a minimum grade of C-) or MPT Level 3 score of 9 or higher or MATH:1460 with a minimum grade of C- or MATH:1380 or MATH:1850. GE: Quantitative or Formal Reasoning.

**CS:2110 Programming for Informatics 4 s.h.**

Computing fundamentals for informatics students, including practical programming skills (e.g., in Perl, other scripting languages) and introduction to algorithms, data structures, databases. Prerequisites: CS:1110.

**CS:2210 Discrete Structures 3 s.h.**

Mathematical methods used in computer science, including logic, proof techniques (with induction), functions, relations, algorithm analysis, recurrence relations, counting methods, combinatorics, graphs, trees. Recommendations: calculus I.

**CS:2230 Computer Science II: Data Structures 4 s.h.**

Design, implementation, and application of data structures (e.g., linked lists, stacks, queues, hash tables, trees); complexity analysis; recursion; introduction to object-oriented programming concepts; abstract data types and their realization using generic interfaces and classes; software design patterns (e.g., iterators, comparators). Prerequisites: CS:1210 with a minimum grade of C- or ENGR:2730 with a minimum grade of C-.

**CS:2420 Databases for Informatics 3 s.h.**

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. Prerequisites: CS:2110 with a minimum grade of C-.

**CS:2520 Human-Computer Interaction 3 s.h.**

Basic theories, principles, and guidelines for design and evaluation of human-computer interactions; design methodologies (e.g., participatory design, low- and high-fidelity prototyping), user interface technologies (e.g., input and output devices, interaction styles), quantitative and qualitative evaluation of user interfaces (e.g., expert reviews, usability testing). Prerequisites: CS:1110.

**CS:2620 Networking and Security for Informatics 3 s.h.**

Introduction to computer networking, overview of network organization and management; basic understanding of encryption and network security; practical experience in network programming. Prerequisites: CS:2110 with a minimum grade of C-.

**CS:2630 Computer Organization 3 s.h.**

Computer building blocks: representing data, computer arithmetic, instruction sets, assembly language, digital logic, control units, ALU design, register operations, memory organization, IO. Prerequisites: CS:2230 with a minimum grade of C- and CS:2210 with a minimum grade of C-.

**CS:2800 Digital Arts: An Introduction 3 s.h.**

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

**CS:2820 Object-Oriented Software Development 4 s.h.**

Object-oriented design and software development methodology; team programming projects; GUIs, event handling, network programming, concurrency, data representation, IO programming. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C-.

**CS:3210 Programming Languages and Tools arr.**

Varied programming languages and tools. Prerequisites: CS:1210 with a minimum grade of C- or CS:2110with a minimum grade of C- or ENGR:2730 with a minimum grade of C-.

**CS:3330 Algorithms 3 s.h.**

Algorithm design techniques (e.g., greedy algorithms, divide-and-conquer, dynamic programming, randomization); fundamental algorithms (e.g., basic graph algorithms); techniques for efficiency analysis; computational intractability and NP-completeness. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C- and (MATH:1850 or MATH:1550 or MATH:1860 or MATH:1560).

**CS:3620 Operating Systems 3 s.h.**

Introduction to modern operating systems, including device control, memory management and addressing, process scheduling, interprocess communication, interrupts, synchronization, security. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C- and (CS:2630 with a minimum grade of C- or ECE:3350 with a minimum grade of C-).

**CS:3640 Introduction to Networks and Their Applications 3 s.h.**

Introduction to networks and the development of network applications; basic concepts of network communication common to applications such as simulation and web services. Prerequisites: CS:2630 with a minimum grade of C- or ECE:3350 with a minimum grade of C-.

**CS:3700 Elementary Numerical Analysis 3 s.h.**

Computer arithmetic, root finding, polynomial approximation, numerical integration, numerical linear algebra, numerical solution of differential equations; use of a higher-level computer language such as Matlab, Python, or Julia. Prerequisites: (MATH:2550 or MATH:2700) and (MATH:1560 or MATH:1860). Same as MATH:3800.

**CS:3820 Programming Language Concepts 3 s.h.**

Imperative, functional, and logical programming languages, and differences between them; syntax specification, types, control structures, recursion, data abstraction. Prerequisites: CS:2230 with a minimum grade of C- and CS:2210 with a minimum grade of C- and (CS:2630 with a minimum grade of C- or ECE:3330 with a minimum grade of C- or CS:2820 with a minimum grade of C- or ECE:3350 with a minimum grade of C-).

**CS:3910 Informatics Project 3 s.h.**

Experience designing, implementing, documenting, and testing a system using appropriate software tools (e.g., a project working with an information management tool consisting of a database system with a Web-based front end); typically done in small groups; capstone project for informatics majors. Prerequisites: CS:2110 with a minimum grade of C- and CS:2520 with a minimum grade of C- and (CS:2420 with a minimum grade of C- or CS:2620 with a minimum grade of C- or MSCI:3200 with a minimum grade of C-).

**CS:3980 Topics in Computer Science I 3 s.h.**

Complement to material in other courses. Prerequisites: CS:1210 with a minimum grade of C- or CS:2110with a minimum grade of C- or ENGR:2730 with a minimum grade of C-.

**CS:3990 Honors in Computer Science or Informatics arr.**

Individual projects. Requirements: computer science or informatics major, and honors standing.

**CS:4330 Theory of Computation 3 s.h.**

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. Prerequisites: CS:3330 with a minimum grade of C-.

**CS:4350 Logic in Computer Science 3 s.h.**

Applications of symbolic logic in computer science; symbolic logic as a powerful tool for modeling computation and computational devices and reasoning formally about them; introduction to several logics (i.e., propositional, predicate, temporal, modal) differing in their expressive power and focus, their uses in computer science; 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. Prerequisites: CS:3330 with a minimum grade of C-. Recommendations: computer science, math, or engineering major.

**CS:4400 Database Systems 3 s.h.**

Introduction to database systems including querying using SQL, design using ER diagrams, developing relational databases, programming web applications using PHP or JDBC. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C- and CS:3330 with a minimum grade of C-.

**CS:4420 Artificial Intelligence 3 s.h.**

Introduction to artificial intelligence covering problem-solving methods, heuristic search, knowledge representation, automated reasoning, planning, game playing, machine learning, and neural networks. Prerequisites: CS:3330 with a minimum grade of C-.

**CS:4440 Web Mining 3 s.h.**

Core methods underlying development of applications on the Web; examples of relevant applications, including those pertaining to information retrieval, summarization of Web documents, and identifying social networks. Prerequisites: CS:3330 with a minimum grade of C-. Recommendations: CS:4400 strongly recommended.

**CS:4470 Health Data Analytics 3 s.h.**

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). Prerequisites: CS:3330 with a minimum grade of C-.

**CS:4500 Research Methods in Human-Computer Interaction 3 s.h.**

Survey of recent research in the field of human-computer interaction; research methods and current readings. Prerequisites: CS:2520 with a minimum grade of C-.

**CS:4630 Mobile Computing 3 s.h.**

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. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C- and CS:2820 with a minimum grade of C-.

**CS:4640 Computer Security 3 s.h.**

Mechanism versus policy; authentication, access control, security domains; perimeter security, defense in depth; cryptographic protocols; key management and distribution; security assessment. Prerequisites: CS:2630 with a minimum grade of C- or ECE:3350 with a minimum grade of C-.

**CS:4700 High Performance and Parallel Computing 3 s.h.**

Parallel algorithms presented and implemented with different approaches and libraries (e.g., OpenMP, MPI); various platforms including Message Passing Clusters, Multicore and GPUs, MapReduce (Hadoop), and related current topics; scientific computing and large data analysis projects. Prerequisites: (CS:2210 with a minimum grade of C- or MATH:4050) and CS:2230 with a minimum grade of C-. Same as MATH:4860.

**CS:4720 Optimization Techniques 3 s.h.**

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. Prerequisites: (MATH:2700 or MATH:2550) and (ME:4111 or MATH:3800 or CS:3700) and (MATH:1560 or MATH:2850). Same as MATH:4820.

**CS:4740 Large Data Analysis 3 s.h.**

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. Prerequisites: (CS:1210 with a minimum grade of C- or ENGR:2730 with a minimum grade of C-) and (MATH:3800 or CS:3700) and (STAT:3200 or IE:3760 or IGPI:3200). Same as IGPI:4740, MATH:4740, STAT:4740.

**CS:4980 Topics in Computer Science II 3 s.h.**

Complements material in other courses. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C-.

**CS:5110 Introduction to Informatics 3 s.h.**

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

**CS:5340 Limits of Computation 3 s.h.**

Turing machines, undecidability and complexity: reductions, Cook's theorem and NP-completeness, approximation algorithms and randomized algorithms. Prerequisites: CS:3330.

**CS:5350 Design and Analysis of Algorithms 3 s.h.**

Review of design and analysis techniques; advanced data structures (binomial and Fibonacci heaps, disjoint sets); graph algorithms (network flows, matching, min-cut); NP-completeness, randomization and approximation algorithms; special topics (string matching, computational geometry, number theoretic algorithms). Prerequisites: CS:3330 or CS:5340.

**CS:5360 Randomized Algorithms 3 s.h.**

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. Prerequisites: CS:3330.

**CS:5370 Computational Geometry 3 s.h.**

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. Prerequisites: CS:3330.

**CS:5430 Machine Learning 3 s.h.**

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. Prerequisites: MATH:1850 and MATH:2700 and STAT:2020 and (CS:2230 or CS:2110).

**CS:5610 High Performance Computer Architecture 3 s.h.**

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. Prerequisites: ECE:3350 or CS:3620. Same as ECE:5320.

**CS:5620 Distributed Systems and Algorithms 3 s.h.**

Models of distributed systems, program correctness—safety and liveness properties, causality, logical and vector clocks, mutual exclusion, distributed snapshot, leader election, distributed algorithms for graph-theoretic problems, fault-tolerance—masking versus nonmasking types, checkpointing, stabilization, consensus—byzantine generals problem, fault-tolerant broadcast and multicast, management of replicated data. Prerequisites: CS:3330 and CS:3620. Requirements: some interest in networking.

**CS:5630 Cloud Computing Technology 3 s.h.**

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. Prerequisites: CS:2820 and (CS:3620 or CS:3640).

**CS:5710 Numerical Analysis: Nonlinear Equations and Approximation Theory 4 s.h.**

Root finding for nonlinear equations; polynomial interpolation; polynomial approximation of functions; numerical integration. Prerequisites: MATH:2700 and (MATH:2850 or MATH:3550). Requirements: knowledge of computer programming. Same as MATH:5800.

**CS:5720 Numerical Analysis: Differential Equations and Linear Algebra 4 s.h.**

Numerical methods for initial value problems for ordinary differential equations; direct and iterative methods for linear systems of equations; eigenvalue problems for matrices. Prerequisites: MATH:2700 and MATH:5800 and (MATH:2850 or MATH:3550) and (MATH:3600 or MATH:2560). Requirements: knowledge of computer programming. Same as MATH:5810.

**CS:5800 Fundamentals of Software Engineering 3 s.h.**

Problem analysis, requirements definition, specification, design, implementation, testing/maintenance, integration, project management; human factors; management, technical communication; design methodologies; software validation, verification; group project experience. Prerequisites: CS:2820 or ECE:3330. Same as ECE:5800.

**CS:5810 Formal Methods in Software Engineering 3 s.h.**

Models, methods, and their application in all phases of software engineering process; specification methods; verification of consistency, completeness of specifications; verification using tools. Prerequisites: ECE:3330 or CS:2820. Recommendations: CS:4350. Same as ECE:5810.

**CS:5820 Software Engineering Languages and Tools 3 s.h.**

Modern agile software development practices for cloud and web-based applications, using state-of-the-art software engineering languages, tools, and technologies; agile software development practices, software-as-a-service (SAAS), and the Ruby on Rails Development Framework. Prerequisites: ECE:3330 or CS:2820. Same as ECE:5820.

**CS:5830 Software Engineering Project 3 s.h.**

Team software development project using concepts and methodologies learned in earlier software engineering classes; practical aspects of large-scale software development. Prerequisites: ECE:5820 and CS:5800. Same as ECE:5830.

**CS:5850 Programming Language Foundations 3 s.h.**

Introduction to formal foundations of programming languages using a variety of models, including attribute grammars, operational, axiomatic, denotational, and algebraic techniques; proofs of program equivalence, correctness, termination. Prerequisites: CS:3330 and CS:3820.

**CS:5860 Lambda Calculus and Applications 3 s.h.**

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 Topics in Computer Science III arr.**

Complements material in other courses.

**CS:5990 Individualized Research or Programming Project arr.**

Individualized research and/or programming projects in computer science, guided by a faculty member.

**CS:6000 Research Seminar: Colloquium Series 1 s.h.**

Graduate colloquium. Requirements: graduate standing in computer science.

**CS:6990 Readings for Research arr.**

Requirements: Ph.D. standing in computer science.

**CS:7604 Computing Research Ethics for Postdocs 0 s.h.**

Review of responsible conduct of research policies specifically tailored to research roles computer science students are likely to play at the University of Iowa and beyond in their professional lives. Requirements: postdoctoral research scholar/fellow standing in computer science.

**CS:7990 Research for Dissertation arr.**

Individualized instruction for Ph.D. candidates in computer science towards thesis requirements. Requirements: Ph.D. candidacy (postcomprehensive exam) in computer science.