**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 also offers courses that students in all majors may use to satisfy the General Education Program 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, contact the Department of Computer Science or visit its website.

## Related Certificate: Large Data Analysis

The Certificate in Large Data Analysis can be earned in addition to a B.A. or B.S. degree in computer science. The certificate focuses on handling, processing, and extracting information from large data sets. As computers have become faster and smaller, more information can be gathered and used for a large range of applications, such as for weather forecasting; identifying people and trends utilizing Facebook or other social media; understanding the genome; and searching for disease causes and cures, as well as many other areas of study. The certificate is interdisciplinary, requiring courses from three areas of study—computer science, mathematics, and statistics. Computer science teaches students how to handle large amounts of data and how to implement the algorithms to process them, while statistics helps students to understand what can and cannot be legitimately inferred from the data. Mathematics focuses on algorithms and methods for connecting these important areas of data collection.

## 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 Seminar1 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 Class1-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 Computing3 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 Science3 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: Fundamentals4 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-. GE: Quantitative or Formal Reasoning.

**CS:2110 Programming for Informatics4 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. Corequisites: MATH:1020 or MATH:1340 or MATH:1440, if not taken as a prerequisite.

**CS:2111 Programming Practice2 s.h.**

Review of introductory Python programming concepts taught in CS:1210 and CS:2110; enhance mastery of introductory programming. Prerequisites: CS:2110 or CS:1210.

**CS:2210 Discrete Structures3 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. Corequisites: CS:1210 or ENGR:2730, if not taken as a prerequisite. Recommendations: calculus I.

**CS:2230 Computer Science II: Data Structures4 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 or ENGR:2730. Corequisites: CS:2210, if not taken as a prerequisite.

**CS:2420 Databases for Informatics3 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.

**CS:2520 Human-Computer Interaction3 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). Corequisites: CS:2110, if not taken as a prerequisite.

**CS:2620 Networking and Security for Informatics3 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.

**CS:2630 Computer Organization3 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 and CS:2210.

**CS:2800 Digital Arts: An Introduction3 s.h.**

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 foundation for 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. GE: Engineering Be Creative. Same as ARTS:2800, CINE:2800, DANC:2800, MUS:2800, THTR:2800.

**CS:2820 Object-Oriented Software Development4 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 and CS:2230.

**CS:3210 Programming Languages and Toolsarr.**

Varied programming languages and tools. Prerequisites: CS:1210 or CS:2110 or ENGR:2730.

**CS:3330 Algorithms3 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 and (MATH:1850 or MATH:1550) and CS:2230.

**CS:3620 Operating Systems3 s.h.**

Introduction to modern operating systems, including device control, memory management and addressing, process scheduling, interprocess communication, interrupts, synchronization, security. Prerequisites: CS:2630 or ECE:3350.

**CS:3640 Introduction to Networks and Their Applications3 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 or ECE:3350.

**CS:3700 Elementary Numerical Analysis3 s.h.**

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

**CS:3820 Programming Language Concepts3 s.h.**

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

**CS:3910 Informatics Project3 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 and CS:2520 and (CS:2420 or CS:2620 or MSCI:3200).

**CS:3980 Topics in Computer Science I3 s.h.**

Complement to material in other courses. Prerequisites: CS:1210 or CS:2110 or ENGR:2730.

**CS:3990 Honors in Computer Science or Informaticsarr.**

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

**CS:4330 Theory of Computation3 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.

**CS:4350 Logic in Computer Science3 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. Recommendations: computer science, math, or engineering major.

**CS:4400 Database Systems3 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:3330.

**CS:4420 Artificial Intelligence3 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.

**CS:4440 Web Mining3 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. Recommendations: CS:4400 strongly recommended.

**CS:4460 Introduction to Computational Linguistics3 s.h.**

Introduction to computational linguistics; focus on theory and practice of natural language processing and syntactic and semantic analysis. Same as LING:4030.

**CS:4470 Health Data Analytics3 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.

**CS:4480 Knowledge Discovery3 s.h.**

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 Research Methods in Human-Computer Interaction3 s.h.**

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

**CS:4630 Mobile Computing3 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:2820.

**CS:4640 Computer Security3 s.h.**

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

**CS:4700 High Performance and Parallel Computing3 s.h.**

Parallel scientific computing methods such as parallel algorithms for dense and sparse matrices; implementation using libraries such as MPI; current topics such as grid computing. Prerequisites: MATH:2700 and (ECE:3350 or CS:2630). Same as MATH:4860.

**CS:4720 Optimization Techniques3 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 Analysis3 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 or ENGR:2730) and (MATH:2700 or MATH:2550) and (STAT:2010 or STAT:2020). Same as MATH:4740, STAT:4740.

**CS:4980 Topics in Computer Science II3 s.h.**

Complements material in other courses. Prerequisites: CS:2230 or CS:2110.

**CS:5110 Introduction to Informatics3 s.h.**

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

**CS:5340 Limits of Computation3 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 Algorithms3 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 Algorithms3 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 Geometry3 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 Learning3 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 Architecture3 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 Algorithms3 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 Technology3 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 Theory4 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 Algebra4 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:2850 or MATH:3550) and (MATH:3600 or MATH:2560). Requirements: knowledge of computer programming. Same as MATH:5810.

**CS:5800 Fundamentals of Software Engineering3 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 Engineering3 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 Tools3 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. Requirements: ECE:5800 or CS:5800; or graduate standing with solid understanding of object-oriented design and programming, and facility with at least one object-oriented programming language. Same as ECE:5820.

**CS:5830 Software Engineering Project3 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 Foundations3 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 Applications3 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 IIIarr.**

Complements material in other courses.

**CS:5990 Individualized Research or Programming Projectarr.**

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

**CS:6000 Research Seminar: Colloquium Series1 s.h.**

Graduate colloquium. Requirements: graduate standing in computer science.

**CS:6990 Readings for Researcharr.**

Requirements: Ph.D. standing in computer science.

**CS:7990 Research for Dissertationarr.**

Requirements: Ph.D. candidacy (postcomprehensive exam) in computer science.