**Undergraduate majors:**computer science (B.A., B.S.); informatics (B.A., B.S.)

**Undergraduate minors:**computer science; informatics

**Graduate degrees:**M.C.S.; M.S. in computer science; Ph.D. in computer science

**Faculty:**https://cs.uiowa.edu/people

**Website:**https://cs.uiowa.edu/

The Department of Computer Science offers undergraduate programs in computer science and in informatics as well as graduate degree programs in computer science. It offers courses that students in all majors may use to satisfy the GE CLAS Core Quantitative or Formal Reasoning requirement and a First-Year Seminar designed for entering undergraduate students. For general information about the department, faculty, and research activities, visit the Department of Computer Science website or the department's office.

## Related Majors

### Computer Science and Engineering

The Computer Science and Engineering major combines the technical content of a computer science degree and a computer engineering degree into a single program that leads to the Bachelor of Science in Engineering (B.S.E.) degree. The curriculum is jointly offered by the Department of Computer Science and the Department of Electrical and Computer Engineering (College of Engineering). The program provides students with a strong theoretical and conceptual understanding of the principles underlying computer software and hardware along with the engineering analysis, design, and multidisciplinary teamwork skills needed to develop large and complex systems containing both software and hardware components.

Computer science majors may not earn a second major in computer science and engineering. See the B.S.E. in computer science and engineering in the Catalog.

### Data Science

The B.S. in data science produces graduates with the sophisticated analytical and computational skills required to thrive in a quantitative world where new problems are encountered at an ever-increasing rate. The major emphasizes the statistical/probabilistic and algorithmic methods that underlie the preparation, analysis, and communication of complex data. With focus on technical foundations, the data science program promotes skills useful for creating and implementing new or special-purpose analysis and visualization tools. It also promotes a fundamental understanding of how to best handle uncertainty when making data-driven decisions.

Computer science majors may not earn a second major in data science. The Department of Statistics and Actuarial Science and the Department of Computer Science collaborate to offer the major in data science. The B.S. in data science is administered by the Department of Statistics and Actuarial Science; see the B.S. in data science in the Catalog.

## Undergraduate Programs of Study

### Majors

- Major in Computer Science (Bachelor of Arts)
- Major in Informatics (Bachelor of Arts)
- Major in Computer Science (Bachelor of Science)
- Major in Informatics (Bachelor of Science)

### Minors

## Graduate Programs of Study

### Majors

Competence and exposure to computer science are not only useful, they often are prerequisite to advanced study and research in many disciplines. For most graduate students from other disciplines, an appropriate first course is CS:5110 Introduction to Informatics.

## Computer Science Courses

**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: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. 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:1010 with 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 with a minimum grade of C-.

**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 with a minimum grade of C-.

**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 4 s.h.**

Computing machinery at various levels of abstraction including digital logic, control units and data paths, the representation of data, computer arithmetic, register operations, memory organization, instruction sets, I/O, and assembly language; how these relate to execution of programs written in a systems-level programming language such as C. 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, DIGA: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, I/O 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:2110 with 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: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: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-).

**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:2110 with 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:3999 Computer Science or Informatics Honors Cohort 0 s.h.**

Students complete all requirements for honors in the computer science or informatics major; supervision by computer science honors director. Requirements: final semester prior to graduation with honors.

**CS:4310 Design and Implementation of Algorithms 3 s.h.**

Algorithm design techniques with emphasis on programming and implementation in the work of students; topics include data structures, graph algorithms, divide-and-conquer, dynamic programming, randomized algorithms, and dealing with intractability; primarily for master's degree students in computer science. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C-.

**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:4480 Knowledge Discovery 3 s.h.**

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

**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- or (CS:2210 with a minimum grade of C- and CS:2230 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:3620 with a minimum grade of C- or CS:3640 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 ISE: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. 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; coursework 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:7270 Computing Research Ethics 1 s.h.**

Series of weekly student-led discussions moderated by supervising faculty, based on papers selected by faculty that emphasize ethical issues specific to computer science including, but not limited to, ethical issues that arise in building and testing software systems, software as intellectual property, managing sensitive electronic data, human-subjects issues in computer science research, online privacy and surveillance, online crime and hacking, computer security, problems with algorithmic bias, and computer-related research misconduct; research focus; students deal with issues pertinent to computing professionals.

**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.