Required Core Courses
Operating Systems (CMPG 612)
This course focuses on the issues in the design and functioning of operating systems. Topics include file systems, CPU scheduling, memory management, virtual memory and machines, disk scheduling, deadlocks and their prevention, concurrency, protection mechanisms, multiprocessors, distributed systems and security.
Design and Analysis of Algorithms (CMPG 638)
This course focuses on the design and analysis of efficient algorithms. Topics include worst and average case analysis, recurrences and asymptotics. Algorithm design techniques such as divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis and randomization will be discussed. Algorithms for graph problems such as minimum-cost spanning tree, connected components, topological sort, and shortest paths will also be discussed.
Database Systems (CMPG 658)
This course focuses on the foundations of database systems and SQL programming. Topics such as the relational algebra and data model, schema normalization, query optimization, indexing and transaction processing will be discussed. Students will use MySQL for hands-on experimentation with writing queries.
Computer Networking (CMPG 667)
The course introduces the concepts of computer networks and the underlying principles. Topics to be covered include several network protocols and standards of the TCP/IP suite. Students will learn how TCP/IP works, how the different routing algorithms work and the importance of network security. Wireshark will be used to analyze and troubleshoot the network and understand the different underlying concepts.
Artificial Intelligence (CMPG 720)
This course will be a survey of the field of Artificial Intelligence. Topics include intelligent agents, informed and uninformed search, game trees and constraint satisfaction problems. Rule-based expert systems and uncertainty management will be discussed. Fuzzy expert systems, Bayesian network and knowledge presentation will also be discussed
Software Engineering (CMPG 756)
A study of the principles and methods advocated for the development of large and complex software systems. Each student will be required to participate in a team project devoted to the specification, design and implementation of a sizable software system.
Data Mining (CMPG 763)
This course focuses on fundamental data mining algorithms and their applications in the process of knowledge discovery. The course will cover the general aspects and techniques of analyzing large, complex datasets, recognizing patterns and making predictions. The R programming language will also be introduced and used for hands-on experimentation with data mining algorithms.
Cloud Computing and Virtualization (CMPG 764)
The course offers an in-depth study of Cloud Computing and its underlying technologies, specifically Virtualization. Areas of discussion include the internal architecture of clouds, the architecture and structure of Virtual Machines, and cloud management, security, and optimizations. The course also covers Linux Containers and their features. The course supplements all the topics with tracing actual software code (Xen, KVM, QEMU, VirtualBox), study of the latest related research publications, and hands-on experience with the relevant technologies (AWS, Live Migration, Nested Virtualization).
Neural Networks and Learning Systems (CMPG 765)
This course provides the basic concepts of neural networks and other learning techniques including but not limited to: biological foundations of neural networks, basics of neural information processing, an artificial neuron and its activation function, multilayer feedforward neural networks and backpropagation learning, deep learning, Hopfield neural networks and associative memories, recurrent neural networks, support vector machines, validation of learning results, and clustering. Laboratory exercises provide experience with design and utilization neural and other machine learning algorithms and solving real-world classification, prediction, pattern recognition and intelligent data analysis problems. A course project will help students to develop their team-working skills and get a good experience in software project design.
Image Processing and Analysis (CMPG 767)
This course provides the basic concepts of image processing and analysis including but not limited to image sensing and acquisition, visual perception, image enhancement (mostly spatial domain image enhancement, but some essential elements of the frequency domain enhancement will also be considered), image filtering in spatial and frequency domain, edge detection and image segmentation, elements of image restoration, image understanding and recognition, elements of color image processing. Laboratory exercises provide experience with design and software utilization of image processing algorithms and processing images related to various real-world applications (medical and satellite image processing, old images restoration, and digital photography). Students will program various algorithms and use their programs for processing real images. This will help them to accomplish specified challenges as they develop problem solving skills. A course project will help students to develop their team-working skills and get a good experience of software project design.
Cryptography and Security (CMPG 768)
This course introduces students to the principles and practice of cryptography and secure encryption protocols. Topics covered will include wireless network security, cloud security, classical encryption techniques, block cyphers and data encryption standard, public-key cryptography and RSA and digital signatures.
Linux Kernel Programming (CMPG-780)
This course focuses on the Linux Kernel, a large-scale open source software project. Topics include in-depth discussions and hands-on modifications of the Linux memory, process, storage, and network sub-systems. Programming topics include creating kernel modules, simple device drivers, as well as modifying and compiling the kernel source code.
Embedded Systems (ECEG 721)
Design of embedded systems including system level modeling/specification, and architecture synthesis, compilation for area/power/performance, code compression, scheduling and real-time operating systems, and verification and functional validation of embedded systems. Case studies and platform-based design encompassing microcontrollers/digital signal processors, distributed computing and peripherals.
M.S. Thesis/Project Courses
Master Thesis/Project Seminar (CMPG 798)
The aim of the Master Thesis/Master Project in the graduate Computer Science program is to help students to strengthen their knowledge and skills, put ideas and concepts to work in solving actual problems and finally become successful professionals able to gain employment in industry and/or to be accepted into a Computer Science Ph.D. program. Students elected for Master Thesis should work on a master level research project mentored by a faculty member. Students elected for Master Project should develop a sophisticated software system for solving a real-world computational problem as practiced in industry. The work can be performed as a team work (Project) or can be performed as an individual project design or research (Thesis). This course (Master Thesis/Master Project Seminar) is the first course in a 2-semester course sequence. It requires students to develop a research or software design project proposal based on the knowledge and skills acquired in earlier coursework. The research and design concepts should include a detailed feasibility study as well as economical, societal, environmental and ethical aspects. At the end of the semester the design group or individual makes a proposal presentation and submits a detailed project proposal.
Master Thesis/Project (CMPG 799)
This course (Master Thesis/Master Project) is the second course in a 2-semester course sequence. It requires students to develop a research or software design project proposal based on the knowledge and skills acquired in earlier coursework. This course covers the second phase of the Master Thesis research or Master Project design. In this course, students perform and complete actual design and testing of the software system proposed at the first phase (CMPT-798). At the end of the semester an individual working on a Master Thesis submits the thesis and makes a formal final presentation of the obtained results. Respectively, at the end of the semester each design group or a sole designer working on a Mater Project makes a formal final presentation, demonstrates the software system designed, and submits a final report clearly documenting all aspects of the design process. Final presentations should be attended by interested students, guests, faculty members, engineers and IT professionals from local industries. Prerequisite CMPT-798 with the grade no lower than a B.