Courses in Computer Science

I CSI 201 (= I CEN 201) Introduction to Computer Science (4)
Computer algorithms and their representation. The principle of information hiding and its relation to program block structure. File structure and access methods. The efficient use of computational resources. Program development and style. Only one of I CEN 200 and I CEN/I CSI 201 may be taken for credit.

I CSI 203 Data Processing Principles (3)
Introduction to systems analysis and structured programming techniques using COBOL (Common Business Oriented Language). Basic COBOL, table handling, sorting, file structures and maintenance, storage media, and basic functions of a multi-programming operating system. Prerequisite(s): I CSI 101 or I CSI 110 or I CSI/I CEN 201. Normally offered spring semester only.

I CSI 204 Scientific Computing (3)
An introduction to scientific computing using MATLAB. Contents include: basic MATLAB programming including MATLAB M-files and anonymous functions; graphics and visualization in MATLAB; elementary vector and matrix operations in MATLAB; elementary numerical analysis, e.g. Gaussian elimination with pivoting, the bisection and Newton's methods. Possible additional topics include brief introductions to vectorization and parallel numerical algorithms and numerical methods for ordinary differential equations. Prerequisite(s): two semesters of calculus; and I CSI 101, or I CSI 105, or I CSI/I CEN 201, or permission of instructor.

I CSI 205 Object Oriented Programming for Data Processing Applications (3)
Introduction to object oriented programming, abstraction and system analysis techniques using an object oriented language such as C++ or Java. Basic syntax and semantics, classes, objects, arrays, and pointers. Modular software design using header or class files and separate compilations and linking. Use of standard class and function libraries and packages. Introduction to memory management and performance issues. Prerequisite(s): I CSI 101 or I CSI 110 or I CSI/I CEN 201. Normally offered fall semester only.

I CSI 210 (= I CEN 210) Discrete Structures (4)
Proofs by induction; mathematical reasoning, propositions, predicates and quantifiers; sets; relations, graphs, and trees; functions; counting, permutations and combinations. Only one version may be taken for credit. Prerequisite(s): high school mathematics through precalculus. Prerequisite(s) or corequisite(s): A MAT 112 or A MAT 118.

I CSI 213 (= I CEN 213) (formerly I CSI 310) Data Structures (3)
Commonly used abstract data structures and their implementation. The use of pointers and recursive programming. Stacks, queues, lists and trees, and their application to such problems as sorting and searching. Analysis of algorithms for using these structures. May not be taken by students with credit for I CSI 310. Must be completed with a grade of C or better in to register for I CSI 333. Prerequisite(s): I CSI/I CEN 201 or permission of department chair.

I CSI 300Z Social, Security, and Privacy Implications of Computing (3)
The ethical and moral implications of using computers to affect the lives of individual and collective members of human society. Material drawn from a variety of topics, including security and privacy in computers, networks, security measures, and human users, data banks vs. rights to privacy, intellectual property, open vs. closed software, software piracy, unauthorized access, and other computer crimes. Prerequisite(s): I CSI 101, I CSI 110, I CSI/I CEN 201 or other hands-on course in programming and permission of the instructor.
I CSI 311 Principles of Programming Languages (3)
Fundamental concepts and general principles underlying programming languages and their use as illustrated by Prolog and Lisp. Analysis and implementation of run-time environment including scope rules, binding, and parameter passing mechanism. Introduction to interpreters and compilers. Prerequisite(s): Grade of C or better required in I CSI/I CEN 210 and I CSI/I CEN 213.

I CSI 333 (= I CEN 333) Programming at the Hardware Software Interface (4)
Instruction set architecture of contemporary computers; Boolean logic, memory, registers, instructions and interrupts. Assembly language programming; assembler passes, symbols, macros, function linkage and separate compilations. C language programming; syntax, control, types, abstractions, pointers and strings. Dynamic memory, standard and user written libraries. ANSI and C++ standards. Instruction set simulation. Only one version may be taken for credit. Prerequisite(s): a grade of C or better in I CSI/I CEN 213.       

I CSI 400 (= I CEN 400) Operating Systems (3)
Historical overview; operating system services; mass storage file organization; memory management in multiprogrammed systems; virtual memory; resource allocation; concurrent processes; deadlock detection and prevention; security; the design of contemporary operating systems such as UNIX. Only one version may be taken for credit. Prerequisite(s): I CSI/I CEN 333.       

I CSI 401 Numerical Methods for Digital Computers (3)
Study of practical methods for the numerical solution of a variety of problems on a digital computer. Topics covered will include roots of equations, numerical interpolation, numerical integration and differentiation; the evaluation of mathematical functions, least squares curve fitting; the solution of simultaneous linear equations, matrix inversion and linear programming. Prerequisite(s): A MAT 220 and I CSI/I CEN 213. Normally offered fall semester only.

I CSI 402 Systems Programming (3)
Programming aspects of operating systems. Topics covered include implementation of storage management, resource allocation, multi-processing, scheduling, synchronization, inter-process communication, and terminal I/O. Emphasis on projects to enhance subject understanding, problem solving, and programming skills. Prerequisite(s): Grade of C or better required in I CSI/I CEN 333.

I CSI 403 Algorithms and Data Structures (3)
Description of common data structures such as lists, push-down stores, queues, trees, and graphs. Definition of algorithm efficiency and efficient algorithms for integer and polynomial arithmetic, sorting, set manipulation, shortest paths, pattern matching, and Fourier transforms. Prerequisite(s): I CSI/I CEN 210 and I CSI/I CEN 213.

I CSI 404 (= I CEN 404) Computer Organization (3)
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 version may be taken for credit. Prerequisite(s): I CSI/I CEN 333 and I CSI/I CEN 210.      

I CSI 405 Object Oriented Programming Principles and Practice (3)
Object oriented software design principles (abstraction, polymorphism and inheritance; design patterns) with emphases on how they are embodied in a contemporary programming language, the principles of the structure, features and operation of such languages and systems, and increasingly complex API examples, design and implementation problems and projects to build proficient design, problem solving, programming and technology skills. Class presentation and discussion of some team developed project designs. A brief review of Java basics is given but proficiency in Java is highly desirable for the current course. This is not a course for programming beginners. Prerequisite(s): C or better in I CSI/I CEN 213 or sufficient proficiency demonstrated to the instructor.

I CSI 407 User Interfaces (3)
The C programming language. Event-driven systems. Aspects of the UNIX operating system that support simulation of multi-tasking in a single processor environment. Window-oriented user interfaces. Pop-up/pull-down menus. Human factors in software engineering. Prerequisite(s): I CSI/I CEN 333.

I CSI 409 Automata and Formal Languages (3)
Introduction to the theory of computation. Models of computation including Turing machines and push-down automata will be examined along with their formal language counterparts such as context-free languages. Additional topics include unsolvability, computational complexity, and applications to computer science. Prerequisite(s): I CSI/I CEN 210.

I CSI 410 Introduction to Databases (3)
Introduction to using relational database software and database management systems. In-depth coverage of a practical Structured Query Language (SQL), physical and logical database design, rollback and recovery techniques, and access methods including interfaces to programming languages. Prerequisite(s): two semesters of course work in computer programming or equivalent experience. Familiarity with data structures and operating systems concepts is helpful but not required. Normally offered fall semester only.

I CSI 411 Database Performance Principles and Transaction Management (3)
Examination of database tuning principles and issues and how they apply to local and distributed transactional databases and data warehouses. Topics include locking and concurrency control, logging and recovery, query tuning, indexing schemes, file partitioning, hardware considerations, and how the database manager interacts with the transaction manager and the operating system. Prerequisite(s): I CSI 410 or a strong working knowledge of SQL.

I CSI 416 (= I CEN 416) Computer Communication Networks (3)
Introduction to computer communication networks. Equal emphasis on all layers of the ISO reference model and the TCP/IP protocol suite. Topics include physical networks, sliding window protocols, remote procedure call, routing, naming and addressing, security, authentication, performance, and applications. Only one version may be taken for credit. Prerequisite(s): I CSI/I CEN 400 or I CSI 402, and A MAT 367 or A MAT 370.       

I CSI 417 Compiler Construction (3)
Compilation vs. interpretation; lexical analysis based on finite automata; parsing; syntax-directed translation; symbol tables; run-time storage allocation; error detection and recovery; code generation and optimization. Prerequisite(s): I CSI/I CEN 333 and I CSI 409.

I CSI 418Y Software Engineering (3)
Software engineering principles, the role of abstraction in programming, abstract data types, modularization and module interfaces, specifications, and teamwork. Project work in contemporary concurrent and object-oriented languages. Prerequisite(s): I CSI 405. Normally offered fall semester only.

I CSI 421 Discrete Mathematics with Applications (3)
A deeper coverage of the content of I CSI/I CEN 210. Proofs by induction, recursive definitions, and combinatorial analysis. Introduction to recurrence equations, graph theory, and abstract algebra. Applications to proofs of correctness and analysis of combinatorial and algebraic algorithms. Prerequisite(s): I CSI/I CEN 210.

I CSI 422 (formerly I CSI 302) Introduction to Computer Graphics (3)
Mathematics, data structures, algorithms, system architecture, and programming projects for implementing two and three dimensional computer graphics software. Rastorization, matrices, linear and projective transformations; clipping, removal of hidden lines and surfaces. Devices, event driven user interaction, and an introduction to window systems and visual programming tools. Prerequisite(s): A MAT 220 and I CSI/I CEN 213, or permission of the instructor.

I CSI 424 Information Security (3)
This course covers the broad spectrum of technical issues surrounding computer security and intrusion detection. Topics considered include: viruses, worms, host- and network-based vulnerabilities and countermeasures, database security, intrusion detection, and privacy and legal issues. Facilities for securing hosts and limiting vulnerability are also discussed. Unlike in a systems administration class, detailed operational issues are not discussed. Prerequisite(s): I CSI/I CEN 400 or I CSI 402.

I CSI 426 Cryptography (3)
The making of ciphers to encode information is the subject of cryptography. This course covers the field from its origins in early historic times through its most up-to-date implementations and uses in digital computers. Various ciphers will be shown and their security assessed. This latter is known as cryptanalysis – the attempt to break a cipher in order to read the underlying message. The course will emphasize how cryptography and cryptanalysis are intimately related, and how the arms race between the two has motivated progress throughout their history. Prerequisite(s): I CSI/I CEN 333. Corequisite(s): I CSI 403.

I CSI 430 Introduction to Mathematical Logic (3)
Topics include logical validity, logical consequence, computerized theorem proving, compactness, soundness, consistency, completeness and incompleteness in the context of propositional logic, first order logic, Frege-Hilbert deduction, and computerized Semantic Tableaux deduction. This course will survey Goedel’s Completeness and Incompleteness Theorems along with decidability, undecidability, and a classification of theoretically computable and uncomputable problems. Prerequisite(s): I CSI/I CEN 210 and permission of instructor.

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): I CSI/I CEN 213 and one of I CSI 401 or A MAT 220. Familiarity with Python (or similar scripting language) as well as elementary statistics (e.g. A MAT 370) is also necessary. Contact the instructor for exceptions.

I CSI 432 Network Science (3)
Social networks have become important tools for analyzing a wide array of human behaviors and interactions. This course will consider networks arising in many different contexts (e.g. worldwide web, viral marketing, sociology, epidemiology) and present techniques for analyzing such networks. The goal is to understand how the structure of a network influences its behavior. The course will cover the necessary background material in graph theory. Prerequisite(s): I CSI 403 or permission of instructor. 

I CSI 433 Theory and Practice of Multimedia Computing (3)
This course lays the foundation for students to conduct research in the area of multimedia computing applications. Multimedia computing involves automated processing and analysis of multiple types of data such as text, images, and videos and audio, in a way that whole is greater than the sum of its parts. The course covers state-of-the-art computational techniques and algorithms for multimedia content processing, compression, networking, fusion, summarization, search and retrieval applicable to different areas such as social media, homeland surveillance and cyber security and privacy. The objective of this course is to prepare students to i) understand the theoretical foundation of multimedia computing, and ii) apply computational tools such as Matlab and Intel OpenCV to the processing and analysis of multimedia data. Prerequisite(s): I CSI/I CEN 213 or permission of instructor.

I CSI 435 Introduction to Artificial Intelligence (3)
An introduction to the broad spectrum of approaches and techniques of Artificial Intelligence. Emphasis on how to represent knowledge in a computer and how to process that knowledge to produce intelligent behavior. Topics include expert systems, heuristic search, natural language processing and logic-based approaches. Programming assignments using artificial intelligence languages. Prerequisite(s): I CSI 311.

I CSI 436 Machine Learning (3)
Machine learning is an important and rapid growing branch of artificial intelligence. The aim of machine learning is to design an algorithm that can extract information from the environment automatically and improve its ability to perform the intended task. Currently, machine learning has been applied in various fields including engineering, bioinformatics, data mining and neurosciences, to name a few. This course provides a broad introduction to machine learning. Specifically, topics that will be covered in the class may include: numerical optimization methods that are essential for machine learning algorithms dimension reduction methods; principal component analysis and ISOMAP classification methods; linear discriminant analysis, k-nearest neighbor classifier, and logistic regression methods; least squares regression, ridge regression, and l1 regularized least squares regression (LASSO) clustering methods; k-means clustering and EM algorithm neural networks support vector machines for classification and regression. Prerequisite(s): A MAT 214, A MAT 220, A MAT 367, and I CSI 401.       

I CSI 440 High Performance Scientific Computing I (3)

Introduction to distributed, shared memory, and non-uniform memory advanced architectures, advanced networks, advanced parallel and distributed languages supporting scientific computing. Basic linear algebra algorithms and their relation to decomposition, memory, access patterns, and scalability. High-level prototyping languages, experimental methods, performance analysis, and polyalgorithm design. Prerequisite(s): I CSI/I CEN 213, I CSI 401, A MAT 220 and knowledge of numerical methods and Fortran; or permission of instructor.

I CSI 441 High Performance Scientific Computing II (3)
Numerical methods for ODEs, PDEs and transforms (FFT) suitable for advanced parallel and distributed computing. Explicit versus implicit message generation and processing in distributed computing environments. Advanced experimental methods. High Performance Fortran, F90 and MPI. Prerequisite(s): I CSI 440.

I CSI 442 An Introduction to Quantum Computation, Information, and Simulation (3)
The main ideas of Quantum Computation, Information, and Simulation are introduced. The course describes what quantum computation is and how it can be used to solve problems faster than classical computers. The challenges of building a quantum computer are addressed. Quantum simulators are explained and built illustrating the vast differences between quantum and classical gates. The course also covers quantum information, explaining how quantum states can be used to program communications. Prerequisite(s): I CSI 403 or I CSI 503, knowledge of the use of Boolean Algebra in circuit design, and programming experience.

I CSI 445 Topics in Computer Science (3)
The contents of this course will vary from semester to semester. Each offering will cover an advanced senior-level topic in Computer Science. May be repeated for credit when content varies. Prerequisite(s): I CSI/I CEN 333 or I CSI 205 and I CSI/I CEN 213 or permission of instructor.

I CSI 451 (= A PHY 451 & I 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 CEN 201. Normally offered in the fall.

I CSI 487/487Z Honors Seminar (3)
Each student is required to carry out independent study under the supervision of a faculty member and present a departmental colloquium on the chosen topic. Students may also be required to complete a theoretical or an experimental project, write reports or make short presentations. Only one version of I CSI 487 may be taken for credit. Prerequisite(s): admission to the honors program.

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 or research papers. Each student is evaluated by a faculty committee during the second semester of their senior year. May be repeated for credit. Prerequisite(s): admission to the honors program.

I CSI 490 Internship in Computer Science (1-3)
Research or development experience with University units or external agencies or companies requiring significant solutions of problems in areas such as software design, development, programming of tests or extensions, etc. in a practical environment. The relevance to computer science and the technical level of the proposed internship, and the intern's qualifications must be approved by the department. A written report must be accepted by the department before the end of the internship semester. May be repeated for credit. Prerequisite(s): I CSI/I CEN 213 and permission of the department. S/U graded.

I CSI 496 Independent Teaching and Learning (1-3)
Participants extend and apply their understanding of computer science by tutoring or assisting in laboratory, tutoring or discussion activities, under faculty supervision, for one or more associated courses. One credit for each weekly contact hour or each 2 to 4 hours of scheduled tutoring, staff meetings, lecture attendance or grading. May be repeated for credit. Total credits of I CSI 496 and I CSI 497 may not exceed 9. Prerequisite(s): permission of instructor. S/U graded.

I CSI 496Y Independent Teaching and Learning (1-3)
Oral discourse version of I CSI 496. In addition to the I CSI 496 requirements, at least two different lab or discussion exercises will be prepared and conducted, and will be evaluated by the faculty supervisor and section students. May be repeated for credit. Total credits of I CSI 496 and I CSI 497 may not exceed 9. Prerequisite(s): permission of instructor. S/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 which are not covered in regularly scheduled courses. Three to four hours per week per semester credit should be spent on readings, technology research, problem solving, experimentation with student created and existing software, faculty discussion, etc., culminating in an acceptable and significant written report or paper. May be repeated for credit. Prerequisite(s): junior or senior standing or equivalent experience, at least I CSI/I CEN 213, and the permission of instructor with whom the student wishes to study.

I CSI 499 Senior Project in Computer Science (3)
Introduction to software engineering. Students will participate in the design and production of a large, modular program typical of those encountered in business and industry. Prerequisite(s): I CSI 311 or I CSI/I CEN 333, and permission of instructor.