# Courses in Computer Science

**I CSI 201 Introduction to Computer Science (4)
**(Formerly I CEN/I CSI 201.) This course first introduces

**I CSI 210 (= I ECE 210) Discrete Structures (4)
**(Formerly I CEN/I CSI 210) Mathematical reasoning, propositions, predicates

**I CSI 213 (= I ECE 213) (formerly I CSI 310) Data Structures (3)**

(Formerly I CEN/I CSI 213/I CSI 310.) This course covers commonly used abstract data structures such as lists, stacks, queues, trees * C* or better to take I CEN/I CSI 333 or I ECE 233. Prerequisite(s): Grade of *C* or better in I CEN/I CSI 201, or I CEN 200 or I ECE 141.

**I CSI 300Z Societal and Ethical Implications of Computing (3)
**Current age challenges for governments, communities, and individuals related to

**I CSI 311 Principles of Programming Languages (3)**

Introduction to the design and implementation of programming languages, including language features, paradigms

*C*or better required in I CSI/I CEN 210 and I CSI/I CEN 213.

**I CSI 333 Programming at the Hardware Software Interface (4)
**Instruction set architecture of contemporary computers; Boolean logic, memory, registers, instructions

*C*or better in I CSI/I ECE 213.

**I CSI 401 Numerical Methods (3)
**Study of practical methods for the numerical solution of a variety of problems on a digital computer. Topics include roots of equations, numerical interpolation, numerical integration and differentiation; the evaluation of mathematical functions,

*C*better in both I CSI/I CEN 213 and A MAT 220.

**I CSI 403 Design and Analysis of Algorithms (3)
**Algorithm efficiency based on asymptotic notation and analysis for iterative and recursive algorithms. Algorithm design strategies: iterative, divide-and-conquer, greedy

*C*or better in both I CSI/I CEN/I ECE 210 and I CSI/I CEN/I ECE 213.

**I CSI 404 Assembly Programming and Computer Organization (3)**

(Formerly I CEN/I CSI 404.) An introduction to the logical organization of the hardware components of computing systems. Topics include logic design from a functional point of view, data representation and processing, description of major components such as the central processing unit and memory, and control and communication within the components and in the system. Only one of I CSI/I CEN/I ECE 404 may be taken for credit. Prerequisite(s): grade of C or better in I CSI 333.

**I CSI 407 Human Computer Interaction (3)
**This course covers the fundamentals and concepts of design, implementation, and evaluation of human-computer interfaces. Topics include human cognitive aspects; user-centered design; design goals and principles; interface and interaction types; prototyping and construction; and evaluation methods. In order to make a balance between theory and practice,

*C*or better in I CSI 311.

**I CSI 409 Automata and Formal Languages (3)**

Introduction to the theory of computation. Models of computation including finite automata, push-down automata. Turing machines are examined along with their formal language counterparts such as regular, context-free

*C*or better in I CSI 311.

**I CSI 410 Database Systems (3)
**This course covers the fundamentals and concepts of design, implementation

*C*or better in both I CSI/I ECE 210 and I CSI/I ECE 213.

**I CSI 412 Operating Systems (3)
**(Formerly I CEN/I CSI 400.) Design and implementation of operating systems. Topics include historical overview of operating systems and their principles, systems programming, file system organization and I/O, resource allocation, memory management

**I CSI 416 (= I ECE 416) Computer Communication Networks (3)
**(Formerly I CEN/I CSI 416.) This course covers fundamentals in computer communication networks and the principles of distributed systems that leverage these networks. The course will focus on key Internet application architectures, principles

**I CSI 417 Compiler Construction (3)
**In this course, students construct a compiler of their own design. Lexical analysis, parsing, semantic analysis, code generation, error detection and recovery, runtime systems

*C*or better in both I CSI 333 and I CSI 409.

**I CSI 418Y Software Engineering (3)**

This course covers advanced object-oriented design principles and software engineering principles, including understanding various software development methodologies, the software development life cycle, how to work with clients to derive requirements and create architecturally sound software, testing and quality assurance, software maintenance practices and how to build a software engineering team. Project work in contemporary concurrent and object-oriented languages. Prerequisite(s): Grade of

*C*or better in I CSI 311.

I CSI 421 Discrete Mathematics with Applications (3)

I CSI 421 Discrete Mathematics with Applications (3)

*C*or better in I CSI/I CEN 210.

**I CSI 422 Computer Graphics (3)**

This course covers the theory and practice of computer graphics. Topics include graphics hardware, point plotting techniques, two and

*C*or better in both A MAT 220 and I CSI 333 or I ECE 233 (formerly I ECE 333).

**I CSI 424 Computer Security (3)**

This course introduces students to the fundamental and technical problems surrounding computer security. The course reviews basic security concepts, design principles, and mechanisms. Throughout the course and based on hands-on exercises, students will develop an in-depth understanding of several vulnerabilities and corresponding countermeasures in system security, web security, and network security areas. Topics include privilege escalation, buffer overflow, race condition, SQL injection, cross-site scripting, packet spoofing, TCP attacks, and firewalls. Prerequisite(s): I CSI 333 or I ECE 233 (formerly I ECE 333).

**I CSI 426 Cryptography (3)**

This course covers cryptographic methods ranging from classical to modern ciphers and their cryptanalysis. Topics include classical cryptography, modular arithmetic

*C*or better in both I CSI 210, and I CSI 333 or I ECE 233 (formerly I ECE 333).

**I CSI 431 Data Mining (3)**

A course on data mining (finding patterns in data) algorithms and their application to interesting data types and situations. We cover algorithms that address the five core data mining tasks: prediction, classification, estimation, clustering, and associations. Course projects will involve advanced topics such as algorithm developments for handling large data sets, sequential, spatial, and streaming data. Prerequisite(s): A MAT 220. Familiarity with Python (or similar scripting language) as well as elementary statistics (e.g. A MAT 370) is also necessary.

**I CSI 432 Network Science (3)
**Social networks have become important tools for analyzing a wide array of human behaviors and interactions. This course discusses networks arising in many different contexts (e.g. worldwide web, viral marketing, sociology, epidemiology) and presents techniques for analyzing such networks. The goal is to understand how the structure of a network influences its behavior. The course covers the necessary background material in graph theory. Prerequisite(s): A MAT 220, I CSI 403. Familiarity with Python (or similar scripting language) and basic probability (e.g. A MAT 370) is recommended.

**I CSI 433 Multimedia Computing (3)
**This course lays the foundation to conduct research in the area of multimedia computing. The course covers state-of-the-art computational techniques and algorithms for multimedia content processing, compression, networking, fusion, summarization, search

*C*or better in I CSI 311.

**I CSI 435 Artificial Intelligence (3)**

An introduction to the broad spectrum of approaches and techniques of Artificial Intelligence, such as search and planning problems, basic machine learning, Markov decision processes, reinforcement learning, Bayesian networks, propositional and first-order logic, and *C *or better in A MAT 220 or I CSI 311; A MAT 367 or A MAT 370, I CSI 401 and I CSI 403.

**I CSI 436 Machine Learning (3)
**This course provides an introduction to supervised and unsupervised learning (e.g., support vector machines, neural networks, k-nearest neighbor classifier, logistic and least squares regression), clustering methods, dimensionality reduction techniques (e.g., principal component analysis), and reinforcement learning theory. Prerequisite(s): grade of

*C*or better in A MAT 214, A MAT 220, A MAT 367, and I CSI 401.

**I CSI 445 Topics in Computer Science (3)**

The contents of this course vary from semester to semester. Each offering covers an advanced senior-level topic in Computer Science. May be repeated for credit when content varies. Prerequisite(s): Grade of *C* or better in I CSI 311 and permission of instructor.

**I CSI 451 (= A PHY 451 & C INF 451) Bayesian Data Analysis and Signal Processing (3)
**This course will introduce both the principles and practice of Bayesian and maximum entropy methods for data analysis, signal processing, and machine learning. This is a hands-on course that will introduce the use of the MATLAB computing language for software development. Students will learn to write their own Bayesian computer programs to solve problems relevant to physics, chemistry, biology, earth science, and signal processing, as well as hypothesis testing and error analysis. Optimization techniques to be covered include gradient ascent, fixed-point methods, and Markov chain Monte Carlo sampling techniques. Only one version may be taken for credit. Prerequisite(s): A MAT 214 (or equivalent) and I CSI 101 or I CSI/I ECE 201. Normally offered in the fall.

**I CSI 487/487Z Honors Seminar (3)
**Each student is required to carry out

**I CSI 488Z Honors Project (3-12)
**Students are required to pursue research supervised by a faculty member and submit final reports describing their research. Outcomes of this research may include software/hardware artifacts, data collected through experiments, bibliographies

**I CSI 490 Internship in Computer Science (1-3)
**Research or development experience with University units or external agencies or companies requiring significant solutions

*C*or better in I CSI/I ECE 213. Students must have junior year standing with

*U*Graded.

**I CSI 497 Independent Study in Computer Science (1–3)
**Independent study of advanced topics under the guidance of a computer science faculty member

*C*or better, and the permission of instructor with whom the student wishes to study.

**I CSI 499 Capstone Project in Computer Science (3)
**This course involves