Courses
2026 - 2027
For this academic year's course catalog, please visit our Academic Catalog site. For courses currently offered, please refer to the Schedule of Classes.
All Computer Science majors complete an approved experiential requirement, such as an internship, research project, or other applied learning opportunity, providing students with real-world experience before graduation.
Students are required to complete the department’s assessment during their final semester and are encouraged to showcase their experiential work through presentations or poster sessions.
Many outside the discipline imagine the Computer Science curriculum as a degree in ‘programming’. In fact, a CS degree is an exercise in problem solving, and CS 105 aims to foreground this foundational perspective while allowing time for students to cultivate the technical skills needed to apply it. Using an established problem-solving framework as a foundation, students will learn to think abstractly and to express their ideas in both pseudocode and the Python programming language. Through the use of functional decomposition, students will gain experience in solving large, complex problems by first analyzing them into smaller, more manageable ones. In addition to a robust problem-solving framework, topics include primitive types, variables (and scope), expressions, functions, definite and indefinite loop structures, conditionals, and booleans. Students will learn the rudiments of file operations, basic data structures, program style, design by contract, and testing. No prior experience is required.
Students meet weekly to solve a challenging programming problem. Strategies for solving problems will be discussed. Used as a preparation for programming contests.
Prerequisite(s): CS 173.
This course is an accelerated introduction to the computational problem-solving core to the algorithm design process of computer science. We will learn to design efficient computational solutions to complex real-world problems through abstraction, understand different problem-solving paradigms, and evaluate solutions and their efficiency. In developing these skills, we will additionally develop proficiency in the Python programming language. While programming in and of itself is not computer science, it is the tool through which we can study computer science. We will therefore cover both programming fundamentals as well as algorithmic development and data manipulation techniques.
Prerequisite(s): CS 105 or placement waiver.
A study of intermediate level computer science principles and programming techniques with an emphasis on abstract data types and software engineering. Topics include recursion, sorting, dynamic memory allocation, basic data structures, software engineering principles, and modularization.
Prerequisite(s): CS 109 or CS 111 or CS 112 or CS 113 or CS 114.
This course provides a broad perspective on the access, structure, storage, and representation of data. It encompasses traditional database systems, but extends to other structured and unstructured repositories of data and their access/acquisition in a client-server model of Internet computing. Also developed are an understanding of data representations amenable to structured analysis, and the algorithms and techniques for transforming and restructuring data to allow such analysis.
Prerequisite(s): CS 105 or CS 145 or CS 109 or CS 111 or CS 112 or CS 113 or CS 114.
Crosslisting: DA 230.
This is a mini-seminar devoted to a particular application or programming language. Topics have included: relational database and SQL, software engineering, Advanced C++, cryptography, and parallel programming.
Prerequisite(s): CS 173.
The primary goal of this course is to move from an introductory experience to computational problem solving into a more professional one with a stronger foundational understanding of how computers work. Students will learn a new programming language, develop comfort with different programming environments, better understand how computer memory works, and learn about how to use different building blocks to implement and effectively use linear and linked structures, abstract data types, and binary search trees. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in CS 145 course.
Prerequisite(s): CS 145.
The goal of this course is to provide an understanding of the mathematical techniques that underlie the discipline of computer science. In this course, students learn mathematical proof techniques, such as induction and proof by contradiction, and how to write rigorous proofs. It also serves as an introduction to the fundamentals of the theory of computation. Models of computation, namely finite automata and Turing machines, are studied with the goal of understanding what tasks computers are and are not capable of performing.
Prerequisite(s): MATH 130 or MATH 135 or MATH 145, and CS 145 or CS 109 or CS 111 or CS 112 or CS 113 or CS 114.
This course introduces the foundations of structured data organization. Through the implementation, application, and informal runtime analysis of various data structures, students will gain insight into their use, including which approaches are more efficient for different data manipulations. Students will also learn to leverage object-orientation and abstract data types to enable encapsulated, modular design of such data structures. Course topics include stacks, queues, hash tables, and heaps. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in the CS 145 course.
Prerequisite(s): CS 145.
An introduction to the fundamental ideas and algorithms of machine learning, emphasizing applications over theory. The course provides early exposure to key concepts and techniques in machine learning.
Prerequisite(s): MATH 145 and CS 105 or CS 145 or one from the CS 109-CS 114 course range or CS 271 or CS 231.
Crosslisting: ML 240.
In this course, students study a variety of data organization methods, and implement and analyze the efficiency of basic algorithms that use these data structures. Course topics include lists, stacks, queues, binary search trees, heaps, priority queues, hash tables, and balanced trees. Students will also be introduced to basic functional programming in LISP. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Intermediate Computer Science (CS 173) and a grade of C or higher in Mathematical Foundations of Computer Science (CS 234).
Prerequisite(s): CS 173 and MATH 135 or MATH 145 and CS 234 or MATH 300.
The Introduction to Computer Systems course provides a perspective into how computer systems execute programs, store information, and communicate. It enables students to become better problem solvers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on operating systems, networks, and parallel computing, where a deeper understanding of systems-level issues is required. Topics covered include: basic digital logic design and computer organization, machine-level code and its generation by compilers, performance evaluation and optimization, representation and computer arithmetic, and memory organization and management.
Prerequisite(s): CS 173.
In this course, students study various nonlinear data organization methods, i.e., data structures. Students will implement and analyze both the efficiency and correctness of standard algorithms that use these data structures. Moreover, students will dive deeper into the study of algorithmic techniques and their applications, building on skills developed in prior courses. Topics include (and are not limited to) advanced tree types, graphs (e.g., graph traversals, minimum spanning trees, and shortest paths), various algorithmic techniques (e.g., greedy, divide-and-conquer, and dynamic programming), intractability, and software engineering practices.
Prerequisite(s): CS 231, CS 234, and CS 237.
This course is about the computer science and theory of game design as well as practical game development. It covers computer science concepts such as 3D projection and transformation, rasterization, texture-mapping, shading, path-finding, and game theory, as well as game design topics such as mechanics, elements, theme, iteration, balance, documentation, and interest curves. A significant component of the course consists of prototyping computer games. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective.
Prerequisite(s): CS 271.
The explosion of data collection and advances in artificial intelligence and machine learning have motivated a robust economy around data-based services. While such services provide opportunities for a broad array of individuals and companies to leverage the power of modern data analytics and machine learning, this new economy also exposes new vulnerabilities and privacy risks. This course will explore the growing area of data privacy in modern computing systems including formal frameworks such as differential privacy and secure multiparty computation. Students will work to understand techniques, issues, and trade-offs related to data privacy in a computing context. In particular, students will study: definitions of data privacy, techniques for achieving privacy, limitations and trade-offs inherent in various settings, and the relationship between privacy policy and privacy technology. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a theory elective.
Prerequisite(s): CS 271.
This course is about the design and analysis of big data algorithms, i.e. algorithms that compute on extremely large datasets. Two frameworks are required to understand big data algorithms: MapReduce algorithms for data stored on a cluster, and streaming algorithms for data too large to store. After introducing these frameworks, the course covers numerous examples of big data algorithms, including hashing, frequency moments, Google’s PageRank algorithm, matching algorithms, clustering, the Netflix recommendation algorithm, algorithms on social network graphs, and dimensionality reduction. The analysis of such algorithms requires tools from probability theory and statistics, which will be introduced as needed.
Prerequisite(s): CS 181 or DA 210 and CS 271.
This course will continue from where CS 234 left off in studying computers as mathematical abstractions to understand the limits of computation. In this course, students will learn about topics in computability theory and complexity theory. Topics in computability theory include Turing machines and their variations, the Universal Turing machine, decidability of the halting problem, reductions, and proving the decidability of other problems. Topics in complexity theory include the classes P and NP, NP-completeness, and other fundamental complexity classes. The Department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a theory elective.
Prerequisite(s): CS 145 or one from CS 109-114, and MATH 300 or CS 234 and CS 271.
Crosslisting: MATH 334.
This course is about the design and analysis of randomized algorithms (i.e. algorithms that compute probabilistically). Such algorithms are often robust and fast, though there is a small probability that they return the wrong answer. Examples include Google’s PageRank algorithm, load balancing in computer networks, coping with Big Data via random sampling, navigation of unknown terrains by autonomous mobile entities, and matching medical students to residencies. The analysis of such algorithms requires tools from probability theory, which will be introduced as needed. This course also covers the basics of graph theory, and several randomized algorithms on graphs. Graphs are often used to mathematically model phenomena of interest to computer scientists, including the internet, social networks graphs, and computer networks. Lastly, this course demonstrates the powerful Probabilistic Method to non-constructively prove the existence of certain prescribed graph structures, how to turn such proofs into randomized algorithms, and how to derandomize such algorithms into deterministic algorithms. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a theory elective.
Prerequisite(s): MATH 300 and CS 271 or MATH 220 or DA 220 and CS 145 or one from CS 109-114.
Crosslisting: MATH 427.
This course involves mathematical modeling of real-world problems and the development of approaches to find optimal (or nearly optimal) solutions to these problems. Topics may include: modeling, linear programming and the simplex method, the Karush-Kuhn Tucker conditions for optimality, duality, network optimization, and nonlinear programming.
Prerequisite(s): CS 145 or one from CS 109-114, and MATH 213, and MATH 220 or DA 220 or MATH 221 or ML 221.
Crosslisting: MATH 415.
A survey course of topics in Artificial Intelligence including search, formal systems, learning, connectionism, evolutionary computation and computability. A major emphasis is given to the philosophy of Artificial Intelligence. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective.
Prerequisite(s): CS 271 or MATH 213 or consent.
Students will apply their theoretic background, together with current research ideas to solve real problems. They will study principles of requirements analysis, methods of designing solutions to problems, and testing techniques, with special emphasis on documentation. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective.
Prerequisite(s): CS 271 and CS 281.
A student in good standing may work intensively in areas of special interest under the Directed Study plan. A Directed Study is appropriate when, under the guidance of a faculty member, a student wants to explore a subject more fully than is possible in a regular course or to study a subject not covered in the regular curriculum. A Directed Study should not normally duplicate a course that is regularly offered. Directed Studies are normally taken for 3 or 4 credits. A one-semester Directed Study is limited to a maximum of 4 credit hours. Note: Directed Studies may not be used to fulfill General Education requirements.
A student in good standing may work intensively in areas of special interest under the Directed Study plan. A Directed Study is appropriate when, under the guidance of a faculty member, a student wants to explore a subject more fully than is possible in a regular course or to study a subject not covered in the regular curriculum. A Directed Study should not normally duplicate a course that is regularly offered. Directed Studies are normally taken for 3 or 4 credits. A one-semester Directed Study is limited to a maximum of 4 credit hours. Note: Directed Studies may not be used to fulfill General Education requirements.
Independent Study engages a student in the pursuit of clearly defined goals. In this effort a student may employ skills and information developed in previous course experiences or may develop some mastery of new knowledge or skills. A proposal for an Independent Study project must be approved in advance by the faculty member who agrees to serve as the project advisor. Note: Independent Studies may not be used to fulfill General Education requirements.
Independent Study engages a student in the pursuit of clearly defined goals. In this effort a student may employ skills and information developed in previous course experiences or may develop some mastery of new knowledge or skills. A proposal for an Independent Study project must be approved in advance by the faculty member who agrees to serve as the project advisor. Note: Independent Studies may not be used to fulfill General Education requirements.
In this course, students study in depth the design, analysis, and implementation of efficient algorithms to solve a variety of fundamental problems. The limits of tractable computation and techniques that can be used to deal with intractability are also covered. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271).
Prerequisite(s): CS 234, CS 271, and junior/senior status.
A study of the principles of operating systems and the conceptual view of an operating system as a collection of concurrent processes. Topics include process synchronization and scheduling, resource management, memory management and virtual memory, and file systems. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective.
Prerequisite(s): CS 181 or DA 210, CS 271, and CS 281.
A systematic examination of programming language features independent of a particular language. Topics include syntax, semantics, typing, scope, parameter modes, blocking, encapsulation, translation issues, control, inheritance, language design. A variety of languages from different classes are introduced. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective.
Prerequisite(s): CS 181 or DA 210, CS 271, and CS 281.
A study of regular and context-free languages with the purpose of developing theory to build scanners and parsers. The class will develop its own structured language and construct a working compiler. An examination of compiler construction tools. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective.
Prerequisite(s): CS 181 or DA 210, CS 271, CS 281, and CS 334.
A study of computer network architecture and protocols. Topics include packet and circuit switching, datalink, network and transport layer protocols, reliability, routing, internetworking, and congestion control. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective.
Prerequisite(s): CS 181 or DA 210, CS 271, and CS 281.
A study of the design, implementation and application of database management systems. Topics include the relational data model, physical implementation issues, database design and normalization, query processing and concurrency. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective.
Prerequisite(s): CS 181 or DA 210, CS 271, and CS 281.
An introductory course in both hardware and software aspects of robotics. Students will learn the basics of manipulators, sensors, locomotion, and micro-controllers. Students will also construct a small mobile robot and then program the robot to perform various tasks. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective.
Prerequisite(s): CS 271 and CS 281.
This course aims to enhance mathematics and computer science students' proficiency and comfort in orally communicating content in their disciplines. Students will develop skills in presenting technical information to a non-technical audience. In particular, students will deliver several presentations during the semester on substantive, well-researched themes appropriate to their status in their major.
Prerequisite(s): MATH 300 or CS 271.
Corequisite(s): a 300-level or higher mathematics or computer science course.
Crosslisting: MATH 395.
Topics may include Computer Graphics, Neutral Networks, Advanced Algorithms, Network Security, or other subjects of current interest. Fall 2026 Description: This course is an advanced programming course covering both practical and theoretical aspects of functional programming. Through the language OCaml, students will learn how to effectively leverage a variety of programming techniques, including algebraic data types, polymorphism, tail-recursion, higher-order functions, memorization, and more. Students will also prove both the correctness and efficiency of their code using formal operational semantics, typing rules, structural induction, and similar tools. Some other topics that may be touched on along the way include type inference, program compilation/interpretation, parallel programming, dynamic programming, and the Curry-Howard correspondence.
Prerequisite(s): CS 234 or CS 271 or equivalent with instructor permission.
Topics may include Computer Graphics, Neutral Networks, Advanced Algorithms, Network Security or other subjects of current interest.
Students may enroll in Senior Research in their final year at Denison. Normally, Senior Research requires a major thesis, report, or project in the student's field of concentration and carries eight semester-hours of credit for the year. Typically, a final grade for a year-long Senior Research will not be assigned until the completion of the year-long Senior Research at the end of the second semester. In which case, the first semester Senior Research grade will remain "in progress" (PR) until the completion of the second semester Senior Research. Each semester of Senior Research is limited to a maximum of 4 credit hours. Note: Senior Research may not be used to fulfill General Education requirements.
Students may enroll in Senior Research in their final year at Denison. Normally, Senior Research requires a major thesis, report, or project in the student's field of concentration and carries eight semester-hours of credit for the year. Typically, a final grade for a year-long Senior Research will not be assigned until the completion of the year-long Senior Research at the end of the second semester. In which case, the first semester Senior Research grade will remain "in progress" (PR) until the completion of the second semester Senior Research. Each semester of Senior Research is limited to a maximum of 4 credit hours. Note: Senior Research may not be used to fulfill General Education requirements.
This course is a capstone experience in oral and written communication for mathematics and computer science majors. Students will research a substantive topic, write a rigorous expository article, and make a presentation to the department.
Prerequisite(s): MATH/CS 395 and a 300-400 level computer science course or a 400-level mathematical course.