Courses in Computer Science

I CSI 201 (= I ECE 201) Introduction to Computer Science (4)
(Formerly I CEN/I CSI 201.)  This course first introduces with the elementary concepts of computer science such as CPU, memory, I/O devices and binary number system. It then focuses on developing basic programming skills. The topics include input and output data, data types, control structures, functions/methods, arrays, procedural and object-oriented programming concepts, and program debugging and compilation. Only one of I CEN 200 or I ECE 141 and I CEN/I CSI/I ECE 201 may be taken for credit. Prerequisites: no prerequisite; general mathematical knowledge and computer skills are recommended.

I CSI 210 (= I ECE 210) Discrete Structures (4)
(Formerly I CEN/I CSI 210)  Mathematical reasoning, propositions, predicates and quantifiers; Boolean algebra, logic minimization; sets, functions, sequences, matrix algebra; mathematical induction and recursion; number theory, modular arithmetic, counting, permutations and combinations. Only one of I CEN/I CSI/I ECE 210 may be taken for credit. Prerequisite(s): A MAT 112.

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 and graphs. The implementation and time-space analysis of these data structures is discussed in the context of recursion, sorting and searching algorithms.  May not be taken by students with credit for I CSI 310. Only one of I CEN/I CSI/I ECE 213 may be taken for credit. Must be completed with a grade of 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 development and implementation of computer technologies. General and professional ethics. Analysis of various moral aspects of computing (privacy, security, hacking, etc.) for making responsible decisions. Intellectual property concepts such as copyrights, patents, and trademarks. Elements of effective professional and technical communication and documentation. Prerequisite(s): any introductory course in computer science or related field; programming experience is a plus.
       
I CSI 311 Principles of Programming Languages (3)
Introduction to the design and implementation of programming languages, including language features, paradigms and design decisions. Briefly covers functional and logical programming paradigms and reinforces object-oriented concepts. Discusses interpreters, compilers, transpires and virtual machines, including lexical analysis, parsing, semantic analysis, optimization, code generation. Introduction to automata and state machines. Prerequisite(s): Grade of 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 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 of I CSI/I CEN 333 or I ECE 233 may be taken for credit. Prerequisite(s): a grade of C or better in I CSI/I ECE 213.       

I CSI 400 (= I ECE 400) 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 and virtual memory, virtual machines, process scheduling and synchronization of concurrent processes, deadlock detection and prevention, and security. Only one of I CEN/I CSI/I ECE 400 may be taken for credit. Prerequisite(s): I CSI 404 or I ECE 233 (formerly I ECE 333).

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, least squares curve fitting; the solution of simultaneous linear equations, and matrix inversion.  Prerequisite(s): grade of C better in both I CSI/I CEN 213 and A MAT 220.

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 333.

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 and dynamic programming. Set management including hashing, disjoint sets and heaps. Algorithms on graphs and trees.  Prerequisite(s): grade of 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 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 ECE 213 or sufficient proficiency demonstrated to the instructor.

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, emphasis is placed on a course-end project involving design, implementation and evaluation of the user interface for a specific application. Prerequisite(s): grade of 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 and phrase-structured languages. Key results such as pumping lemmas and proofs of undecidability are covered. Additional topics may include computational complexity and applications to Computer Science. Prerequisite(s): grade of C or better in I CSI 311.

I CSI 410 Database Systems (3)
This course covers the fundamentals and concepts of design, implementation and use of databases. Topics include database system architectures, data abstractions and models, query languages, relational algebra and calculus, indexing mechanisms, data integrity, rollback and recovery mechanisms, access control, theory of database design, and access methods including interfaces to programming languages. Prerequisite(s): grade of C or better in both I CSI/I ECE 210 and I CSI/I ECE 213.

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 and protocols, covering reliable data transfer and transport protocols; routing and forwarding; data link layer communications and principles of shared media access. Students will also be introduced to various physical layer techniques like error correction and bandwidth efficiency; content delivery networks; and software-defined networks. The students will apply their understanding of networking fundamentals while working on hands-on programming assignments, packet trace analysis and Internet measurements. Prerequisite(s): I CSI/I CEN 404 or I ECE 233 and A MAT 367 or A MAT 370. 

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 and linking are covered in depth with an emphasis on implementation.  Prerequisite(s): grade of 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)
A deeper coverage of the content of ICSI/IECE 210.  Propositional logic, proofs by induction and combinatorial analysis such as counting problems. Introduction to recurrence equations and graph theory.  Prerequisite(s): Grade of 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 three dimensional transformations, viewing and clipping, hidden surface removal, modeling three-dimensional shapes with polygon meshes, hierarchical modeling of three-dimensional objects, and lighting and shading techniques. Prerequisite(s): grade of 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 and number theory concepts relevant to cryptography, modern block and stream ciphers, public key cryptography, hash functions, digital signatures, secret sharing, and steganography.  Prerequisite(s): grade of 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 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): AMAT 220 and grade of 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 potentially introduction to deep learning. Prerequisite(s): grade of 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 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): grade of C or better in I CSI/I ECE 213. Students must have junior year standing with minimum GPA of 2.5. 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 ECE 213 with a grade of 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 integration and application of knowledge and skills acquired in earlier course work. Students participate in the design and production of a large, modular program typical of those encountered in business, industry, and research. Prerequisite(s): nine credits at the 400 level of computer science courses.