Courses
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.
CSC241 Introduction to Computing
[3–0, 3 cr.]
This course provides a lengthy first coverage where students would acquire a holistic understanding of computing, and an appreciation of technology’s impact on society. Topics include binary values and number systems, data representation, gates and circuits, computing components, problem solving and algorithm design, low-level and high-level programming languages, abstract data types and algorithms, operating systems, file systems and directories, information systems, artificial intelligence, simulation and other applications, computer networks, the world wide web, and limitations of computing.
CSC243 Introduction to Object Oriented Programming
[3–0, 3 cr.]
This course introduces the fundamental concepts, and techniques, of programming and problem solving, from an object-oriented perspective. Topics include the introduction to computer systems (hardware, software, compilation, execution), fundamental programming constructs, (variables, primitive data types, expressions, assignment), program readability, simple I/O, conditional constructs, iterative control structures, structured decomposition, method call and parameter passing, basic program design using algorithms, algorithm stepwise refinement, pseudo-code, introduction to the object-oriented paradigm (abstraction, objects, classes, entity and application classes, class libraries, methods, encapsulation, class interaction, aggregation), inheritance, error types, simple testing and debugging, 1-D and 2-D arrays, basic searching and sorting algorithms.
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
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, 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) and provides an introduction to NP-completeness theory.
Prerequisites: CSC 245 Objects and Data Abstraction and MTH207 Discrete Structures I
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.
Co-requisite: CSC 320 Computer Organization
CSC323 Digital Systems Design
[3–0, 3 cr.]
The course introduces students to the organization, and architecture, of computer systems. Topics include the fundamental building blocks of digital logic (logic gates, flip-flops, counters, registers), programmable logic devices, (logic expressions, minimization, sum of product forms), register transfer notation, finite state machines, physical considerations, data representation, numeric data representation and number bases, representation of nonnumeric data, digital circuit modeling, HDL (VHDL, Verilog), simulation of digital circuit models, synthesis of digital circuits from HDL models, and the hierarchical and modular design of digital systems (simple data paths and hardwired control unit realization) as well as the introduction to embedded systems.
Prerequisite: CSC243 Introduction to Object Oriented Programming
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.
Prerequisites: CSC245 Objects and Data Abstraction, and CSC320 Computer Organization
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.
CSC375 Database Management Systems
[3–0, 3 cr.]
This course is an introduction to the fundamental concepts and techniques of database systems. Topics include database architecture, 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.
Prerequisite: CSC 245 Objects and Data Abstraction, and MTH 201 Calculus III
CSC412 Introduction to Bioinformatics
[3–0, 3 cr.]
This course provides an introduction to modern computational practices in bioinformatics. Topics include computational methods for: fragment assembly; sequence alignment; modeling evolution; gene finding; gene expression; protein structure and function.
Prerequisite: CSC310 Data Structures & Algorithms
CSC420 Computer Architecture
[3–0, 3 cr.]
This course deals with the architecture of computers, with an emphasis on the architecture of the general purpose computers, using modern concepts such as pipeline design, memory hierarchies, IO systems, and parallel processing. The course tackles advanced computer architecture concepts which include pipelining and pipelined processors, instruction level parallelism, VLSI architectures, superscalar architectures, code scheduling for ILP processors, storage systems and RAID, memory systems, and multiprocessing and cache coherency problem, as well, the course tackles parallel processing.
Prerequisite: CSC320 Computer Organization
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
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 (e.g., Common Criteria, Orange Book, etc.), corporate and institutional security policies, evaluation process and levels, computer system protection principles, access controls, cryptography fundamentals, authentication, security operations, software attacks including malicious code and buffer overflows, social engineering, injection attacks, and related defense tools, network attacks including denial of service, flooding, sniffing and traffic redirection, defense tools and strategies, web sites attacks including cross-site scripting, IPSec, Virtual Private networks and Network Address Translation, and ethics. Hands-on experience is part of the class.
Prerequisite: CSC326 Operating Systems
CSC440 Advanced Object Oriented Programming
[3–0, 3 cr.]
This course presents advanced object oriented programming concepts, and techniques, using modern programming languages and frameworks. Topics include the review of object oriented programming concepts, graphics, graphical user interface components, event-based programming, applets, strings and characters, bit manipulation, exception handling, files and streams, collections, multimedia, multithreading, accessing databases, and design patterns.
Prerequisite: CSC245 Objects and Data Abstraction
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 scripting using JavaScript, VBScript, and PHP, as well as Java Beans, and server side components such as CGI, ASP, and PHP, and the installation and configuration of web servers. The course also discusses accessing databases through web applications. Hands-on experience is part of the class.
Co-requisite: CSC375 Database Management 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 cluster programming techniques. Topics include relevant architectural trends and aspects of multicores, writing multicore programs and extracting data parallelism using vectors and SIMD, thread-level parallelism, task-based parallelism, efficient synchronization, program profiling, and performance tuning. Message-passing cluster-based parallel computing is also introduced. The course includes several programming assignments to provide students first-hand experience with programming, and experimentally analyzing and tuning parallel software.
Prerequisites: CSC310 Algorithms and Data Structures; CSC326 Operating Systems
CSC450 Computer Graphics
[3–0, 3 cr.]
This course is an introduction to computer graphics algorithms, programming methods, and applications. The course focuses on the fundamentals of two and three dimensional raster graphics, scan-conversion, clipping, geometric transformations, computational geometry, computer-human interfaces, animation, and visual realism.
Prerequisite: CSC310 Algorithms and Data Structures
CSC458 Game Programming
[3–0, 3 cr.]
This course introduces the software technologies related to game development, as well as the art and design principles needed to create compelling games. Topics include game history and taxonomy; game play design and the components of a video game experience; software architecture for games; intro to 3D graphics and stereoscopic computer graphics; hardware architecture of contemporary video game platforms; human physical and perceptual limits; game artificial intelligence; multiplayer game design; game physics, and an introduction to real time shading effects.
Prerequisite: CSC310 Data Structures & Algorithms
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 the natural language processing and agents.
Prerequisite: CSC310 Algorithms and Data Structures
CSC480 Social and Professional Issues in Computing
[3–0, 3 cr.]
This course covers the social impact, implications, and effects, of computers on society, and the responsibilities of computer professionals in directing the emerging technology. Topics include the history of computing, the legal and ethical responsibilities of professionals, the risks to the public, Internet censorship, industrial intelligence gathering, intellectual property issues and software copyrights, environmental concerns, medical and biotechnology ethics, hacking, professional liability, “malware” and viruses, whistle blowing, privacy, data security, and universal accessibility. The course includes literate business writing, oral presentations, debates, job hunting and interviewing, professional etiquette, critical thinking, and peer reviewing.
CSC490 Software Engineering
[3–0, 3 cr.]
This course presents the techniques for developing reliable, and cost-effective, medium-to-large-scale object-oriented and classical software. It also involves project development to implement these techniques. Topics include the software life-cycle and process models, the software requirements elicitation, specification, and validation techniques, the design techniques for object-oriented and classical software (architectural, and component, level design and the basic unified modeling language diagrams), software testing (black box and white box testing techniques), unit, integration, validation, and system testing, as well as the basic software project management and quality issues, and the documentation and technical writing, and the use of CASE tools.
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: CSC490 Software Engineering
CSC495 IT Project Management
[3–0, 3 cr.]
This course introduces managing projects within an organizational context as well as managing the changes resulting from introducing or revising information technology systems. Topics include project lifecycle, project stakeholders, project management skills (leading, communicating, negotiating, influencing, and presenting), change control (scope, schedule, cost, quality, risk, project team, and senior management), project planning (definition, scope, schedule, costs, quality, resources, and risks), contingency planning, project reporting and controls (definition, scope, schedule, costs, quality, resources, and risks), the role of IT in organizational change, activities required to ensure the success of IT projects (training, job redesign, communication, etc.). Students are expected to develop detailed project plans, schedules, and budgets; estimate project resources; allocate/coordinate resources; and interface with management. Hands-on experience using project management software is required.
Co-requisite: 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.
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.
Co-requisite: ENG202 Advanced Academic English and ENG203 Fundamentals of Oral 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.
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.
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.
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, 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.