Course Offerings

Fall 2024

See complete information about these courses in the course offerings database. For more information about a specific course, including course type, schedule and location, click on its title.

Introduction to Computer Science

CSCI 111 - Watson, Cody A.

A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.

Introduction to Computer Science

CSCI 111 - Khan, Mohammad Taha (Taha)

A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.

Introduction to Computer Science

CSCI 111 - Lu, Kefu

A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.

Data Structures

CSCI 112 - Tolley, William J.

A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python. Laboratory course.

Software Development

CSCI 209 - Sprenkle, Sara E.

An examination of the theories and design techniques used in software development, with an emphasis on making software more maintainable. Hands-on implementation of those techniques. Topics include the software life cycle, design patterns, version control, unit testing, and program documentation.

Neuromorphic Computing

CSCI 252 - Levy, Simon D.

An overview of computational methods inspired by the nervous systems of animals. Topics include philosophical foundations of neuromorphic computing, fundamental mathematical concepts, Hopfield nets, Kohonen's Self-Organizing Map, Sparse Distributed Memory, Latent Semantic Analysis, Tensor Products, and current neuromorphic hardware. Readings come from both popular textbooks and the scholarly literature. A major focus of the course is on writing programs to implement and apply the concepts and algorithms studied in the course.

Theory of Computation

CSCI 313 - Lu, Kefu

A study of the principles of computer science embodied in formal languages, automata, computability, and computational complexity. Topics include context-free grammars, Turing machines, and the halting problem.

Computer and Network Security

CSCI 323 - Khan, Mohammad Taha (Taha)

This course offers a thorough examination of the secure design principles for computer systems and networks. We will explore various attacks and their respective defenses, often referring to past real-world attacks as case studies. Topics covered include fundamental security principles, cryptographic protocols, encryption, memory overflow attacks, hardware attacks, web security, social engineering attacks, network security, malware/spyware, botnets, and online privacy. Students will gain practical experience through programming projects as well as readings from prior security research.

Directed Individual Study: Linux Systems Design

CSCI 402C - Tolley, William J.


Spring 2024

See complete information about these courses in the course offerings database. For more information about a specific course, including course type, schedule and location, click on its title.

Topics in Computer Science: Ethical Hacking

CSCI 297E - Tolley, William J.

This course will provide students with the knowledge and skills necessary to defend against cyber threats by thinking and acting like hackers – individuals who discover unintended functionality in computer systems. Students will learn the fundamentals of cybersecurity, network architecture, and common attack vectors, enabling them to identify and patch vulnerabilities in systems and applications. Additionally, they will learn how the same techniques are used by at-risk populations living under authoritarian information controls to circumvent surveillance and censorship mechanisms. Students will gain practical experience in penetration testing, digital forensics, social engineering, and various other ethical hacking techniques, as well as explore real-world attack case studies, all while adhering to strict ethical and legal guidelines.

Software Engineering through Web Applications

CSCI 335 - Sprenkle, Sara E.

In this course, students learn to develop high-performance software for Web applications using advanced software engineering techniques. The concepts of client-server computing, theories of usable graphical user interfaces, models for Web-based information retrieval and processing, and iterative development are covered.

Human-Computer Interaction

CSCI 339 - Matthews, Elizabeth A. (Liz)

In this course, students learn the basics of Human-Computer Interaction. Students learn to design user studies, conduct user studies ethically, and analyze user feedback with statistics and the programming language R. Concepts covered include analysis of user data, programming in R, user studies, study ethics, UML, user experience design, designing questionnaires, IRB submissions and CITI training, as well as guest lectures in special interest topics.

Directed Individual Study: Advanced Penetration Testing

CSCI 401E - Tolley, William J.


Winter 2024

See complete information about these courses in the course offerings database. For more information about a specific course, including course type, schedule and location, click on its title.

Fundamentals of Programming I

CSCI 111 - Sprenkle, Sara E.

A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.

Fundamentals of Programming I

CSCI 111 - Matthews, Elizabeth A. (Liz)

A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.

Fundamentals of Programming II

CSCI 112 - Tolley, William J.

A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python. Laboratory course.

Fundamentals of Programming II

CSCI 112 - Levy, Simon D.

A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python. Laboratory course.

Computer Organization

CSCI 210 - Watson, Cody A.

Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.

Computer Organization

CSCI 210 - Tolley, William J.

Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.

Computer Organization

CSCI 210 - Sprenkle, Sara E. / Tolley, William J.

Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.

Algorithm Design and Analysis

CSCI 211 - Lu, Kefu

Methods for designing efficient algorithms, including divide-and-conquer, dynamic programming, and greedy algorithms. Analysis of algorithms for correctness and estimating running time and space requirements. Topics include advanced data structures, graph theory, network flow, and computational intractability.

Topics in Computer Science: Generative AI: Creating with Computation

CSCI 297D - Watson, Cody A.

This course delves into the transformative world of generative models, focusing on their principles, design, and applications. Students will engage with leading models like Generative Adversarial Networks (GANs), Variational Autoencoders (VAEs), diffusion models, and transformers and understand their architectures and the nuances of training. Through hands-on projects, students will explore the creative potentials of AI, spanning a variety of disciplines. Emphasizing ethical considerations, this course equips students with a holistic understanding of the generative AI landscape in today's tech ecosystem.

Programming Language Design

CSCI 312 - Levy, Simon D.

Introduction to the theory and design of modern programming languages.  Using the programming language Haskell, students will explore core topics like grammar specification, parsing, data structuring and data typing, modularity, scoping, and expression semantics / evaluation.  The insights and habits gained in this course will enable students to understand common problems they will encounter in everyday programming practice and to sharpen their programming skills for the challenges of real-world applications.

Video Game Design

CSCI 319 - Matthews, Elizabeth A. (Liz)

In this course, students learn to design and program video games using Python and the Pygame module. Concepts covered include video game code organization utilizing object-oriented programming, OOP design patterns, 2D animation, artificial intelligence, and responding to user feedback.

Parallel Computing

CSCI 320 - Lu, Kefu

This course introduces the principles of parallel computing. Students will explore the benefits and challenges of developing programs for the multi-core processors found on virtually all modern computers. Students will attain an understanding of the theory of parallel computing and gain hands on experience writing efficient programs in C using parallelization frameworks such as OpenMP. Topics include race conditions, parallel algorithms, dynamic multithreading, and scheduling.

Directed Individual Study: Reverse Engineering Malware and Networking Security Analysis

CSCI 402A - Tolley, William J.

Individual conferences.

Directed Individual Study:Medical Application of Artificial Intelligence

CSCI 402B - Watson, Cody A.

Directed Individual Study: Web Application Testing

CSCI 403B - Sprenkle, Sara E.

Directed Individual Study: Single Nucleotide Variant Analysis

CSCI 403C - Tolley, William J.