Undergraduate majors: computer science (BA, BS); informatics (BA, BS)
Undergraduate minors: computer science; informatics
Graduate degrees: MCS; MS in computer science; PhD 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 (BSE) 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 BSE in computer science and engineering in the catalog.
Data Science
The BS 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 a 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 BS in data science is administered by the Department of Statistics and Actuarial Science; see the BS 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
Computer Science Courses
Competence in and exposure to computer science are not only useful, they often are prerequisites 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.
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 study of algorithms; how computers work, simple algorithms and their efficiency, networking, databases, artificial intelligence, graphics, simulation, modeling, security, and social impact of computing; hands-on introduction to programming concepts with Python; for students in data-intensive disciplines. 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:1350 with a minimum grade of C- or MATH:1850 with a minimum grade of C-. GE: Quantitative or Formal Reasoning.
CS:2110 Programming for Informatics 4 s.h.
Introduction to programming, computing principles, and fundamental aspects of computer science; use of Python programming language for topics including expressions, operators, variables, control structures, basic data structures, functions, data modeling, basic data analysis, object-oriented concepts, and proper documentation. 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-. Recommendations: previous or concurrent enrollment in CS:2210.
CS:2420 Analyzing Data for Informatics 3 s.h.
Introduction to data analytics through an understanding of data analysis pipelines including data extraction and collection, data modeling and organization, and use of tools for data analysis; topics include collection of data from a variety of sources, mapping data to appropriate data structures, basic relational database concepts and use, analysis through probability and statistics, use of basic data mining and machine learning tools, and an understanding of privacy issues. Prerequisites: CS:2110 with a minimum grade of C- and (PSY:2811 with a minimum grade of C- or SOC:2160 with a minimum grade of C- or STAT:1020 with a minimum grade of C- or STAT:1030 with a minimum grade of C- or STAT:2010 with a minimum grade of C- or STAT:2020 with a minimum grade of C- or STAT:3120 with a minimum grade of C- or STAT:3510 with a minimum grade of C- or PSQF:4143 with a minimum grade of C-).
CS:2520 Human-Computer Interaction for Informatics 3 s.h.
Basic theories, principles, and guidelines for design and evaluation of human-computer interactions; topics include usability and user experience, user-centered design, quantitative and qualitative evaluation of user interfaces (e.g., expert reviews, usability testing), societal and ethical issues, and front-end development in HTML and JavaScript. Prerequisites: CS:2110 with a minimum grade of C-.
CS:2620 Server-Side Development for Informatics 3 s.h.
Introduction to design, development, testing, and production deployment of data-driven web applications that use cloud/web services; introduction to server-side frameworks, software engineering tools, integration processes, and security mechanisms; topics include representational state transfer (REST) architectural style, key protocols and standards (e.g., HTTP, JSON), use of cloud/web services, data-binding strategies and databases. Prerequisites: CS:2420 with a minimum grade of C- and CS:2520 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 Introduction to Software Development 4 s.h.
Software design and analysis at component and interface levels; implementation of interfaces; refactoring; abstract data types, delegation, polymorphism, and extension; automation and testing; event handling; significant software project that includes reading code written by others. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C-.
CS:3010 Software Engineering Fundamentals in Java 3 s.h.
Basic features of Java programming language; designed for students who know how to program in a language other than Java; exposes students to the latest technology and allows students to learn a new programming language once they understand the fundamentals of programming; topics include the philosophy of Java, concepts of OOP (Object Oriented Programming) as applied in Java, programming basics, inheritance, packages, interfaces, exceptions, threads, streams, generics, event-driven graphical user interfaces, database programming, etc. Prerequisites: CS:1210 with a minimum grade of C- or CS:2110 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-. Requirements: no prior enrollment in CS:3210 with the same subtitle.
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-.
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-.
CS:3700 Introduction to Numerical Methods 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.
Students work in small groups to design, implement, document, and test a system using appropriate software tools; or compile, prepare, visualize, and analyze a data set to support a decision-making process; capstone course for informatics majors. Prerequisites: CS:2620 with a minimum grade of C-.
CS:3980 Topics in Computer Science I 3 s.h.
Complement to material in other courses; for informatics and non-computer science majors. 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-. Requirements: no prior enrollment in CS:3980 with the same subtitle.
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:4500 Research Methods in Human-Computer Interaction 3 s.h.
Introduction to research in the field of human-computer interaction; conducting research experiments; latest research in human-computer interaction. 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:4510 Human-Computer Interaction for Computer Science 3 s.h.
Basic theories, principles, and guidelines for design and evaluation of human-computer interactions; usability and user experience, user-centered design, quantitative and qualitative evaluation of user interfaces (e.g., expert reviews, usability testing), societal and ethical issues; application of topics through a challenging and collaborative software development project. Prerequisites: 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- or ECE:3540 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; for computer science graduate students and advanced undergraduate computer science, computer science and engineering, and data science majors. Prerequisites: CS:2210 with a minimum grade of C- and CS:2230 with a minimum grade of C-. Requirements: no prior enrollment in CS:4980 with the same subtitle.
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 or STAT:3100 or STAT:3101 or STAT:3120) 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 Methods I 3 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 Methods II 3 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; for computer science graduate students.
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: PhD 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 PhD candidates in computer science towards thesis requirements. Requirements: PhD candidacy (postcomprehensive exam) in computer science.