Academic Catalog 2023–2024

jump to navigation

Courses

Back to All Disciplines

Computer Science Courses

CSC201 Computer Applications

[1–0, 1 cr.]

The course ensures that all students will acquire basic, internationally recognized computer proficiency skills. Teaching and learning will be hands-on, in a computer-equipped classroom. The topics include the concepts of information technology, using the computer and its operating system and managing files, word processing, spreadsheets, and presentation software.

CSC243 Introduction to Object-Oriented Programming

[3–0, 3 cr.]

This course introduces the fundamental concepts, and techniques, of programming and problem solving. Topics include the introduction to computer systems, fundamental programming constructs, program readability, simple I/O, conditional constructs, iterative control structures, structured decomposition, method call and parameter passing, 1-D and 2-D arrays, basic searching and sorting algorithms, introduction to the object-oriented paradigm, simple testing and debugging.

CSC243B Introduction to Object-Oriented Programming Lab

[1–3, 1 cr.]

Hands-on project and assignment-based course where students will gain strong practical and technical skills in programming.  Course emphasizes the use of shell, tools, utilities, and programming environments. 

Corequisite: CSC243 Introduction to Object-Oriented Programming.

CSC245 Objects and Data Abstraction

[3–0, 3 cr.]

This course presents further techniques of object-oriented programming and problem solving, with emphasis on abstraction and data structures. Topics include object oriented concepts, such as, composition, inheritance, polymorphism, information hiding, and interfaces; basic program design and correctness, such as, abstract data types, preconditions and post conditions, assertions and loop invariants, testing, basic exception handling, and the application of algorithm design techniques. The course also covers basic algorithmic analysis, time and space tradeoffs in algorithms, big-O notation; fundamental data structures and applications, such as, collections, single- and double-linked structures, stacks, queues, and trees; performance issues for data structures; recursion, more sorting algorithms. 

Prerequisite: CSC243 Introduction to Object-Oriented Programming and CSC243B Introduction to Object-Oriented Programming Lab.

CSC245B Objects and Data Abstraction Lab

[1–3, 1 cr.]

Hands-on project and assignment-based course where students will gain strong practical and technical skills in programming.  Course emphasizes the use of shell, tools, utilities, programming environments, user interfaces, software versioning, and GUI applications. 

Corequisite: CSC245 Objects and Data Abstraction

Prerequisite: CSC243 Introduction to Object-Oriented Programming and CSC243B Introduction to Object-Oriented Programming Lab.

CSC310 Algorithms and Data Structures

[3–0, 3 cr.]

This course presents the fundamental computing algorithms and data structures, with emphasis on design and analysis. Topics include the asymptotic analysis of upper and average complexity bounds, recurrence relations, disjoint sets, hashing and hash tables, heaps, priority queues, and graphs (representation, traversals and applications, shortest-path algorithms, network flows, topological sort). The course also covers sorting algorithms and performance analysis, which include mergesort, quicksort and heapsort. The course details the fundamental algorithmic strategies (divide-and-conquer approach, greedy, dynamic programming, and backtracking), and includes a brief introduction to NP-completeness theory. 

Prerequisites: CSC245 Objects and Data Abstraction and CSC245B Objections and Data Abstraction Lab and MTH207 Discrete Structures I.

CSC310B Algorithms and Data Structures Lab

[1–3, 1 cr.]

Hands-on project and assignment-based course where students will gain strong practical and technical skills in the implementation of efficient algorithms. The course includes software design, continuous integration and continuous delivery, version control and source code management, deployment to repository managers, control issues and routines, developer testing, defensive programming, debugging, self-documenting code, refactoring, and design patterns. 

Corequisite: CSC 310 Algorithms and Data Structures

Prerequisite: CSC245 Objects and Data Abstraction and CSC245B Objections and Data Abstraction Lab and MTH207 Discrete Structures I.

CSC310H Algorithms and Data Structures for Honors Program

[3–0, 3 cr.]

This course presents the fundamental computing algorithms and data structures, with emphasis on design and analysis. Topics include the asymptotic analysis of upper and average complexity bounds, the best, the average, and the worst, case behaviors. Recurrence relations, sets, hashing and hash tables, trees and binary trees (properties, tree traversal algorithms), heaps, priority queues, and graphs (representation, depth- and breadth-first traversals and applications, shortest-path algorithms, transitive closure, network flows, topological sort). The course also covers the sorting algorithms and performance analysis which include mergesort, quicksort and heapsort. As well, the course details the fundamental algorithmic strategies (divide-and-conquer approach, greedy, dynamic programming, and backtracking). A brief introduction to NP-completeness theory. 

Prerequisites: CSC 245 Objects and Data Abstraction and MTH207 Discrete Structures I.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC317 Competitive Programming

[3–0, 3 cr.]

This course introduces techniques and skills needed to solve algorithmic problems in a competitive problem-solving environment.  Topics include techniques for attacking and solving challenging computational problems, functional programming, essential mathematics-related problems, data structures, greedy and dynamic programming, combinatorial games, graph algorithms, network flow problems, computational geometry, and string algorithms.

Prerequisite: CSC310 Algorithms and Data Structures and CSC310B Algorithms and Data Structure Lab.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC320 Computer Organization

[3–0, 3 cr.]

Overview of the history of the digital computer, representation of numeric data, introduction to digital logic, logic expressions and Boolean functions, and logic functions minimization as well as processor and system performance, and Amdahl’s law. The course provides an introduction to reconfigurable logic and special-purpose processors, instruction set architecture, and microarchitecture. Processor structures, instruction sequencing, flow-of control, subroutine call and return mechanism, structure of machine-level programs, low level architectural support for high-level languages are also covered as well as memory hierarchy, latency and throughput, cache memories: operating principles, replacement policies, multilevel cache, and cache coherency. Finally, the course covers register-transfer language to describe internal operations in a computer, instruction pipelining and instruction-level parallelism (ILP), an overview of superscalar architectures, and multicore and multithreaded processors.

Co-requisites: CSC245 Objects and Data Abstraction and MTH207 Discrete Structures I

CSC322 Computer Organization Lab

[0–3, 1 cr.]

Students gain experience with computer organization techniques by designing and implementing actual circuits using a high-level language, Verilog HDL and FPGAs. The course culminates in the design and simulation of a complete pipelined CPU. 

Corequisite: CSC 320 Computer Organization.

CSC326 Operating Systems

[3–0, 3 cr.]

This course introduces the fundamentals of operating systems design and implementation. Topics include C language and shell programming, operating system components, dynamic memory allocation, text processing, memory management, virtual memory, files, pipes, processes, process scheduling, process synchronization (mutual exclusion, deadlocks), and threads.  The course includes hands-on labs using Linux that introduce students to pthreads, operating systems administration and basic shell manipulation, mounting systems, maintaining services, tracking and debugging processes and services, and process resources usage. 

Prerequisites: CSC245 Objects and Data Abstraction and CSC245B Objects and Data Abstraction Lab and CSC320 Computer Organization.

CSC375 Database Management Systems

[3–0, 3 cr.]

This course is an introduction to the fundamental concepts and relational and NoSQL database systems. Topics include database architecture, row and columnar databases, data independence, data modeling, physical and relational database design, functional dependency, normal forms, query languages, query optimization, database security, and transactions at the SQL level.  The course also covers NoSQL databases and their core concepts (key-value, column family, document, and graph) in addition to an exploration of how MongoDB implements these core concepts. 

Prerequisite: CSC245 Objects and Data Abstraction and MTH 207 Discrete Structures I

CSC380 Theory of Computation

[3–0, 3 cr.]

This course covers elementary computability, the classes P and NP, NP-completeness (Cook’s theorem), problem-reduction techniques, automata theory including deterministic and nondeterministic finite automata, equivalence of DFAs and NFAs, regular expressions, the pumping lemma for regular expressions, context-free grammars, Turing machines, nondeterministic Turing machines, sets and languages, the halting problem, Chomsky hierarchy, and the Church-Turing thesis. 

Prerequisite: CSC245 Objects and Data Abstraction.

CSC430 Computer Networks

[3–0, 3 cr.]

This course introduces the structure, implementation, and theoretical underpinnings of computer networks. Topics include network structure, performance metrics, circuit switching and packet switching, the Internet protocol stack, physical layer networking concepts, data link layer technologies and protocols, internetworking and routing, transport layer protocols, application layer protocols, client-server programming, and emerging technologies.

Prerequisite: CSC326 Operating Systems

CSC431 Mobile Applications

[3–0, 3 cr.]

This course covers writing cross-platform mobile web apps using a variety of frameworks that can be converted into native apps for Android, iOS, and Windows Phone 7 devices.  Topics include designing user interfaces for mobile devices, accessing mobile device API’s (such as accelerometer, GPS, compass, or camera), and power management issues.   

Co-requisite: CSC375 Database Management Systems.

CSC433 Introduction to Cloud Computing

[3–0, 3 cr.]

This course provides an introduction into the technologies behind cloud computing by exposing students to the leading cloud computing paradigms and programming interfaces (e.g., EC2, Lambda), services.  The course discusses various types of design patterns including basic, distributed, and cloud design patterns.  The course includes a hands-on component that underlying technological concepts such as virtualization (Dockers and Kubernetes), scalability, fault tolerance, and security. 

Prerequisite: CSC326 Operating Systems.  Corequisite: CSC430: Computer Networks.

CSC435 Computer Security

[3–0, 3 cr.]

This course is an introduction to computer security including formal models of security, security goals and fundamentals (confidentiality, integrity, availability, etc.), introduction to risk assessment and management, security standards in government and industry, cryptography, authentication, security operations, software attacks including malicious code and buffer overflows, social engineering, and injection attacks. 

Prerequisite: CSC326 Operating Systems.

CSC437 Networks Security

[3–0, 3 cr.]

This course is an introduction to networks security including denial-of-service, capabilities, network intrusion detection/prevention, worms, forensics, scanning, traffic analysis, legal issues, web attacks, anonymity, wireless and networked devices, honeypots, scams, underground economy, attacker infrastructure, and ethics. Hands-on experience is part of the class. 

Prerequisite: CSC326 Operating Systems

CSC438 Blockchain Systems

[3–0, 3 cr.]

The course covers the technical aspects of cryptocurrencies, blockchain technologies, and distributed consensus. Students will learn how these systems work and how to engineer secure software that interacts with a blockchain system like Bitcoin and Ethereum. 

Prerequisite: CSC326 Operating Systems.

CSC439 Introduction to Computer Forensics

[3–0, 3 cr.]

This course provides a general introduction to the concepts, theories, principles, and practice of digital forensics. Topics include types of digital forensics, forensic acquisition and validation, forensic methodologies, file systems and file examination, expert testimony, legal issues, and challenges for the field.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC443 Web Programming

[3–0, 3 cr.]

This course introduces advanced concepts in web programming and focuses on the development of dynamic web pages that incorporate both client-side and server-side programming. Topics include web programming using JavaScript, NodeJS, React, design patterns, relational and non-relational databases, security, web services, cloud deployment, and scalability and performance Issues. Hands-on experience is part of the course. 

Co-requisite: CSC375 Database Management Systems.

CSC446 Systems Programming

[3–0, 3 cr.]

This course provides students with a basic understanding of the issues involved in writing system programs such as compilers, linkers, loaders and debuggers. Topics include POSIX System-Call API, system processes, system I/O and inter-process communication, system permissions, files, directories, signals, threads, sockets, terminal, etc. Students are introduced to the C programming language. The course includes the design of a small computer system with focus on process, memory virtualization, and concurrency. 

Prerequisites: CSC326 Operating Systems

CSC447 Parallel Programming for Multicore and Cluster Systems

[3–0, 3 cr.]

This course provides an introduction to parallel programming with a focus on multicore architectures and many programming techniques. Topics include relevant architectural trends, techniques, and aspects of multicores and GPU programming including writing parallel programs and extracting data parallelism using vectors and SIMD, thread-level parallelism, task-based parallelism, efficient synchronization, program profiling and performance tuning. 

Prerequisites: CSC310 Algorithms and Data Structures and CSC310B Algorithms and Data Abstraction Lab and CSC326 Operating Systems

CSC460 Artificial Intelligence

[3–0, 3 cr.]

This course is a survey of knowledge-based artificial intelligence. Topics include the history, definition, philosophical foundations, search techniques, game playing, propositional logic, predicate logic, knowledge representation, planning, and agents. 

Prerequisite: CSC310 Algorithms and Data Structures.

CSC461 Introduction to Machine Learning

[3–0, 3 cr.]

This course provides an overview of theoretical and application aspects of machine learning. Topics include supervised and unsupervised learning including generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines, clustering, dimensionality reduction, and kernel methods. The course also covers learning theory, reinforcement learning, adaptive control. An applied approach will be used, where students get hands-on exposure to ML techniques through the use of state-of-the-art machine learning software frameworks.

Prerequisite: CSC310 Algorithms and Data Structures

CSC462 Fundamentals of Deep Learning

[3–0, 3 cr.]

This course presents an introduction to deep learning and its applications. Topics include introduction to neural networks, regularization, convolution neural networks, auto-encoders, recurrent neural networks, long short-term memory networks, generative adversarial networks, and reinforcement learning. An applied approach will be used, where students get hands-on exposure to AI techniques through the use of state-of-the-art machine learning software frameworks.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC463 Computer Vision

[3–0, 3 cr.]

This course presents an introduction to deep learning and its applications. Topics include introduction to neural networks, regularization, convolution neural networks, auto-encoders, recurrent neural networks, long short-term memory networks, generative adversarial networks, and reinforcement learning. An applied approach will be used, where students get hands-on exposure to AI techniques through the use of state-of-the-art machine learning software frameworks. 

Prerequisite: CSC310 Algorithms and Data Structures

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC464 Deep Learning for Natural Language Processing

[3–0, 3 cr.]

Understanding complex language has wide applications in web search, advertisement, customer service, automatic translation, chat bot engineering, etc. Many different machine learning techniques are at the heart of natural language processing (NLP) applications. Recently, Deep Learning (DL) approaches have obtained very high performance across many different NLP tasks. This course covers such approaches. Students will build their own neural network model and apply it to a large scale NLP problem. From the model side, the following topics will be covered:  word vector representations, window-based neural networks, recurrent neural networks, long-short-term-memory models, recursive neural networks, convolutional neural networks. From the NLP side, the course covers the following topics: syntax parsing, vector space modeling, dimensionality reduction, speech tagging, text classification, and sentiment analysis. 

Prerequisite: CSC310 Algorithms and Data Structures

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC490 Software Engineering

[3–0, 3 cr.]

This course presents the techniques for developing reliable, and cost-effective, medium-to-large-scale with an emphasis on agile development methods appropriate for rapidly-moving projects. Basic software development infrastructure; requirements elicitation and tracking; prototyping; basic project management; basic UML; introduction to software architecture; design patterns; testing. 

Co-requisite: CSC375 Database Management Systems.

CSC491 Professional Experience

[0–3, 1 cr.]

Students participate in a project-based Professional Experience in the junior year. The department requires evidence of project-based work and relevant professional experience. 

Co-requisite: CSC375 Database Management Systems or CSC490 Software Engineering

CSC498 Topics in Computer Science

[3–0, 3 cr.]

This course covers selected topics in computer science. This course may be repeated for credits.

CSC498H Topics in Computer Science for Honors Program

[3–0, 3 cr.]

This course covers selected topics in computer science. This course may be repeated for credits.

CSC597 Introduction to Computer Innovation

[3–0, 3 cr.]

This course introduces elements of technology venture creation including opportunity identification and validation, ideation, customer discovery, market analysis, minimum viable product development, business models, intellectual property, and capital raises. 

Prerequisite: CSC375 Database Management Systems.

CSC598 Undergraduate Research in Computer Science

[3–0, 3 cr.]

This course has a limited enrollment and open only to qualified students starting in their fourth semester. Students work on individual projects as suggested each term. Students may also approach faculty to devise their own projects. 

Prerequisite: Instructor permission.

CSC598H Undergraduate Research in Computer Science

[3–0, 3 cr.]

This course has a limited enrollment and open only to students in the honors program starting in their fourth semester.  Students work on individual projects as suggested each term. Students may also approach faculty to devise their own projects. 

Prerequisite: Instructor permission.

CSC599 Capstone Project

[3–0, 3 cr.]

This course is a stand-alone project course that allows students to integrate the many concepts, and skills, they have learned.  The course requires the design, implementation, and oral presentation of a complete significant team project.  The course is offered in a classroom environment with a capacity of 18 students.

Co-requisite: ENG202 Advanced Academic English and COM203 Art of Public Communication. 

Prerequisite: CSC490 Software Engineering.

CSC599H Capstone Project for Honors Program

[3–0, 3 cr.]

This course is a stand-alone project course that allows students to integrate the many concepts, and skills, they have learned.  The course requires the design, implementation, and oral presentation of a complete significant team project.  The course is offered in a classroom environment with a capacity of 18 students.

Co-requisite: ENG202 Advanced Academic English and COM203 Art of Public Communication. 

Prerequisite: CSC490 Software Engineering.

CSC600 Graduate Seminar

[0–0, 0 cr.]

This is a mandatory zero credit course that all graduate students have to pass. Students are required to attend a certain number of seminars/theses defences and make at least one presentation other than their own thesis defence and proposal. All work has to be completed within two years of registering the course.

CSC611 Design and Analysis of Algorithms

[3–0, 3 cr.]

This course addresses both the fundamentals and the research boundaries of algorithm design and analysis. Covered topics include: complexity of algorithms, divide and conquer techniques, greedy methods, dynamic programming, recursive backtracking, amortized analysis, graph algorithms, polynomial-time problem reduction, NP-completeness, approximation algorithms and a selected advanced topic.

CSC612 Foundations of Computer Science

[3–0, 3 cr.]

This course covers finite automata and regular expressions, context-free grammars, pushdown automata, properties of regular and context-free languages, Turing machines, undecidability, computational complexity, Cook-Levin theorem and the polynomial time hierarchy. 

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC613 Computational Methods in Biology

[3–0, 3 cr.]

This course covers the use of computer science methods and algorithms to solve problems related to biology, biochemistry, and/or medicine. Topics include fundamental algorithmic methods in computational molecular biology, and bioinformatics, such as protein sequence analysis, pair wise and multiple alignment, fragment assembly, probabilistic models, phylogenetic analysis, folding and structure prediction, biological structures (protein structures, RNA structures, etc…), and information that could be derived from them. The course is research-based. Students are required to read papers and articles, compare different techniques used to solve problems, and suggest alternatives.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC614 Meta-Heuristics

[3–0, 3 cr.]

This course covers widely used meta-heuristic optimization techniques in computing, such as simulated annealing, Tabu search, genetic algorithms, ant algorithms and de-randomized evolution strategies. Serial as well as parallel algorithms will be studied. Students will develop application projects from a wide range of application areas. The advantages and disadvantages of meta-heuristic search methods are discussed.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC615 Machine Learning

[3–0, 3 cr.]

This course provides an overview of popular algorithms in machine learning. Topics include supervised learning, linear and polynomial regression, classification algorithms, gradient descent, unsupervised learning, instance-based learning, neural networks, and genetic algorithms and boosting. The course requires some knowledge of artificial intelligence, and good programming skills. The theoretical aspects of the algorithms will be studied, and assignments will be given to test their applicability.

Prerequisite: Senior Standing.

CSC616 Cryptography and Data Security

[3–0, 3 cr.]

This course is an advanced survey of modern topics of theory, foundations, and applications of modern cryptography. One-way functions, pseudo-randomness, encryption, authentication, public-key cryptosystems, and notions of security, are covered. The course also covers zero-knowledge proofs, multiparty cryptographic protocols, and practical applications.

CSC617 Fundamentals of Data Science

[3–0, 3 cr.]

This course provides an overview of popular algorithms in machine learning. Topics include supervised learning, linear and polynomial regression, classification algorithms, gradient descent, unsupervised learning, instance-based learning, neural networks, and genetic algorithms and boosting. The course requires some knowledge of artificial intelligence, and good programming skills. The theoretical aspects of the algorithms will be studied, and assignments will be given to test their applicability.

 

CSC617 Fundamentals of Data Science

[3–0, 3 cr.]

This course covers essential topics in data science including data collection and preprocessing, exploratory data analysis and data visualization. The course also covers supervised and unsupervised machine learning techniques including regression, classification, clustering and dimensionality reduction, as well as model selection and assessment, and resampling techniques.

CSC618 Fundamentals of Computer Networks

[3–0, 3 cr.]

The course covers the fundamental aspects, functions, and techniques computer networks. Topics include internetworking: Packet-based communications; network routing; TCP/IP networks and addressing; transmission protocols: TCP and UDP; resource management and congestion control; wireless and datacenter networks, software-defined networks, and programmable data-planes; content distribution networks, peer-to-peer networks, video streaming; network security including firewalls and application gateways.

CSC619 Fundamentals of Database Systems

[3–0, 3 cr.]

This course covers several advanced topics in databases and modern data-intensive systems. Topics include advanced concurrency control techniques, query processing and optimization strategies for relational database systems, advanced indexing methods, parallel and distributed database systems, NoSQL, database-as-a-service (DB clouds), data on the web, data replication, and topics in database security and privacy.

CSC621 Transaction Processing Systems

[3–0, 3 cr.]

This course covers the theoretical foundations underlying commitment protocols that form the basis of transaction processing techniques. Transaction Processing systems have lots of moving parts, client-side forms, web servers, mid-tier application servers, and back-end databases. Although these components are distributed across multiple processes, these processes share state, and use specialized communication protocols and synchronization techniques. This course explains how these systems are constructed. Topics include the transaction abstraction, application servers, transactional communications, persistent queuing and workflow, software fault tolerance, concurrency control algorithms, database recovery algorithms, distributed transactions, two-phase commit, and data replication.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC622 Distributed Systems

[3–0, 3 cr.]

This course is an introduction to distributed systems, distributed system models, network architecture and protocols, inter-process communication, client-server models, group communication, TCP sockets, remote procedure calls, distributed objects and remote invocation, distributed file systems, file service architecture, name services, directory and discovery services, distributed synchronization and coordination, and distributed multimedia systems.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC623 Knowledge-Based Systems

[3–0, 3 cr.]

This course covers knowledge discovery and representation. Among the techniques used to represent knowledge, it focuses on trees, semantic networks, frames and production rules.  The course covers search techniques and inferences used in knowledge based systems. It also covers topics such as theorem proving and expert systems.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC624 Data Mining

[3–0, 3 cr.]

This course covers the fundamental techniques and applications for mining large data sets. Topics include techniques and algorithms for classification, clustering, association rules, scalable and distributed data mining algorithms, and applications.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC625 Discrete Event Simulation

[3–0, 3 cr.]

This course covers the model construction and simulation applied to problems taken from such diverse fields as economics, social science, communication networks and computer systems. It includes programming in simulation languages such as SIMSCRIPT, SIMULA or GPSS. Students will be able to analyze a problem, and determine whether simulation techniques could be used to solve it. Students are also required to develop a viable model of the system program, and to execute a computer simulation of the model, and finally analyze the results of the simulation.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC630 Blockchain Systems

[3–0, 3 cr.]

This course focuses on the fundamentals of Blockchain Technology. It provides a conceptual insight into the role of Blockchains as a means for securing distributed systems, how consensus on their blocks is reached, and the new applications that they empower. It includes the technological foundations of blockchain functionalities such as distributed data structures and decision-making models, their operations, and various architectures. The course presents a brief discussion on current Smart Contract (SM) techniques and platforms, and studies their future directions, prospects, challenges, and risks. Students will learn how blockchain systems are constructed, how to interact with them, and how to design and implement secure distributed applications. Students apply the knowledge they gain by implementing a detailed blockchain system that includes transactions, blocks, cryptography, and a consensus mechanism using a popular programming language such as Java or Python.

CSC631 High Performance Computer Architecture

[3–0, 3 cr.]

This course covers the concepts and examples of advanced computer systems, especially scalable parallel computers. Topics include memory-system design, advanced processor design techniques, pipelined, vector, shared memory, and distributed-memory computer systems, parallel algorithms, and software and architectural issues for efficient parallel processing.

CSC632 ULSI Testing

[3–0, 3 cr.]

This course covers the problems of testing of Ultra Large Scale Integrated Circuits (ULSI), the design of circuits for testability, the design of built-in self-testing circuits, and the use of the IEEE Boundary Scan Standards. Topics include an introduction to the testing process, fault modeling and detection, logic and fault simulation, testability measures, test generation for combinational circuits, test generation for sequential circuits, design for testability, built-in self-test, delay testing, current testing, ATPG-based logic synthesis, system test and core-based design, and testing a system-on-a-chip.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC633 Embedded Systems

[3–0, 3 cr.]

This course introduces methodologies for the systematic design of embedded systems including processors, DSP, memory, and software. Topics include hardware and software aspects of embedded processor architectures, along with operating system fundamentals, system specification, architecture modeling, component partitioning, estimation metrics, hardware and software co-design and diagnostics, system interfacing basics, communication strategies, sensors and actuators, and mobile and wireless technology. Projects use pre-designed hardware and software components. The course covers design case studies in wireless, multimedia, and/or networking domains. 

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC634 Network Programming

[3–0, 3 cr.]

This course covers methods and tools used for network programming and simulation. Covered topics include operating system support for network protocols, inter-process communication tools (such as pipes, sockets and remote procedure calls), design of client and server sides of network protocols, simulation tools for network design and analysis, in addition to experimental research topics in the area of computer networks. 

CSC635 Internet of Things (IoT)

[3–0, 3 cr.]

This course exposes students to the fundamentals of IoT as a paradigm in addition to the foundational problems inherent in this realm. The course will introduce the basic terminology and ecosystem, plus development environments. Topics include IoT hardware and software platforms, data collections and analytics for IoT, security and ethical issues inherent in IoT, and networks programming for IoT. The course explores problem solving for IoT analytics based on machine learning and deep learning using TensorFlow. The course will run as a seminar-style readings, discussions, labs, and presentations by the students.

CSC636 Networks Security

[3–0, 3 cr.]

This course covers theory and practice of network security. Topics include static packet filter, stateful firewall, proxy firewall, IDS, VPN Device, DMZs and screened subnets, networks defence components, internal network security, host hardening, configuration management, audit, human factors, and security policies. The course also covers cryptographic protocols, privacy, anonymity and various case studies.

CSC637 Pervasive Computing and Wireless Networking

[3–0, 3 cr.]

This course covers the fundamental principles of pervasive and mobile computing in addition to the design of state-of-the-art wireless technologies and wireless networking protocols. Topics include pervasive and mobile computing fundamentals and challenges; pervasive and mobile computing services and application areas; mobile device technologies; mobile device platforms; mobile device application development challenges; mobile device programming; wireless network architectures; WLAN, WiMAX, GSM, UMTS, and Bluetooth wireless technologies; Mobile IP; Wireless TCP; pervasive computing and wireless networking research trends.

CSC638 Computer Forensics

[3–0, 3 cr.]

The course provides a basic knowledge of digital forensic examinations, and shows how evidential findings are applied within criminal and civil cases. Topics include and overview of the tools and techniques used, the types of digital storage media likely to be encountered, and clear explanations of the terminology and software commonly found within cases involving computer evidence. The course also highlights the areas of law most relevant to cases involving digital forensic evidence. It reviews the topics covered in relation to an actual case. This part of the study assesses the documentary evidence paper trail, the forensic examination, findings, and the eventual outcome of the case.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC647 Parallel Algorithms and Programming

[3–0, 3 cr.]

This course covers techniques and methods for parallel algorithms and programming. Topics include: models of parallel machines and programs, efficiency and complexity of parallel algorithms, paradigms of parallel programming and corresponding extensions to sequential programming languages, advanced parallel algorithms and programming on clusters and multi-core systems. The course is research oriented. In addition to lectures and exams, students are required to work on selected advanced topics for an experimental course project.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC650 Advanced Computer Graphics

[3–0, 3 cr.]

The course covers major aspects of digital image generation: geometric modeling, computer animation, and rendering.  It also covers recent advanced topics such as subdivision surfaces, real-time global illumination, and physically based animation. 

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC660 Artificial Intelligence: Principles and Techniques

[3–0, 3 cr.]

The course covers computational approaches for modeling uncertainty and solving decision problems. Topics include search techniques, constraint satisfaction problems, game playing (including alpha-beta pruning), propositional logic, predicate logic, knowledge representation, planning, probabilistic reasoning, Bayesian networks and case-based reasoning. It also covers advanced topics in Artificial Intelligence such as natural language processing and robotics.

CSC662 Fundamentals of Deep Learning

[3–0, 3 cr.]

This course presents an introduction to deep learning and its applications. Topics include introduction to neural networks, regularization, convolution neural networks, recurrent neural networks, long short-term memory networks, auto-encoders, transformers, and generative adversarial networks. An applied approach will be used, where students get hands-on exposure to AI techniques through the use of state-of-the-art machine learning software frameworks.

CSC664 Advanced Machine Learning

[3–0, 3 cr.]

This course provides an overview of popular algorithms in machine learning. Topics include supervised learning, linear and polynomial regression, classification algorithms, gradient descent, unsupervised learning, instance-based learning, neural networks, and genetic algorithms and boosting. The course requires some knowledge of artificial intelligence, and good programming skills. The theoretical aspects of the algorithms will be studied, and assignments will be given to test their applicability.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC666 Artificial Intelligence Methods for Natural Language Processing

[3–0, 3 cr.]

This course covers word vector representations, embeddings, syntax parsing, vector space modeling, dimensionality reduction, speech tagging, text classification, sentiment analysis, window-based neural networks, recurrent neural networks, long-short-term-memory models, recursive neural networks, convolutional neural networks.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC668 Data Visualization

[3–0, 3 cr.]

This course covers essential and practical skills necessary to clearly and effectively communicate information from data through graphical means, based on principles from graphic design, visual art, perceptual psychology, and cognitive science. The course introduces the value of data visualization, as well as the principles and techniques of scientific visualization. It also focuses on big data organization and mining for decision support, and on how to best leverage visualization methods. Assignments and projects will involve the use of different tools and resources to manipulate and visualize data with code.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC688 Advanced Topics in Computer Science

[3–0, 3 cr.]

This course covers selected topics in Computer Science. The course may be repeated for credits more than once.

CSC690 Search-Based Software Engineering

[3–0, 3 cr.]

Search-Based Software Engineering formulates Software Engineering problems as search problems and applies meta-heuristics to tackle these problems. The course introduces the most popular meta-heuristic techniques used in the domain such as Hill Climbing, Simulated Annealing, Genetic Algorithms and Ant Colony Optimization. This is focuses on how these methods can be used to solve problems from different stages of the software engineering lifecycle. Examples of such problems are stress testing real-time systems, predicting software quality, test case generation and software project scheduling. 

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC691 Advanced Software Engineering

[3–0, 3 cr.]

The course covers techniques for the construction of reliable and cost-effective large-scale software. Topics include process models, unified process, Unified Modelling Language requirements analysis and specification, design methods and principles, agile software development.  

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC694 Software Quality Assurance and Testing

[3–0, 3 cr.]

The course covers the capability maturity model; process assessment, modeling, and improvement techniques; maintenance; quality; metrics; theoretical and practical aspects of testing software, including classical and object oriented testing methods at various testing levels.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC696 Human-Computer Interaction

[3–0, 3 cr.]

This course provides a comprehensive introduction to the principles and techniques of human-computer interaction and user interface design, with a focus on highly usable software, user and task modeling, user centered design, evaluation of user interfaces, detailed discussion of many user interface design issues such as the use of coding techniques (color, icons, sound, etc.), screen and web page design, feedback and error messages, internationalization of user interfaces, response time, accessibility to the disabled, user interfaces for different types of devices, voice user interfaces, etc. This course requires students to implement user interfaces.

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC697 Managing Software Development

[3–0, 3 cr.]

Students will acquire knowledge and skills for developing a software project management plan; leading a project team; estimating time, cost, and effort; conducting risk analysis;  and configuration management. as well as the legal issues involved in liability, warranty, patentability and copyright. 

Note: This course has not been taught since Fall 2020 and will not be taught in the academic year 2023–2024.

CSC698 Project

[3–0, 3 cr.]

This course entails an independent development, and documentation of substantial software, or computer-based system, using recent or significant techniques and/or tools.

CSC699 Thesis

[6 cr.]

This course entails an independent investigation of a topic of interest, in a basic or applied computer science area, with the objective of producing original results.