Computer Science

Degrees and Certificates

Courses

CS 100: Computer Environment

Credits 4

This course provides a detailed examination of the fundamental elements on which computers are based. Topics include number systems and arithmetic computations, electricity and basic circuits, logic circuits, memory, computer architectures, serial communication, pulse width modulation and operating systems. Additionally, operational code and assembly languages are discussed and then implemented on a hardware platform.

CS 115: Introduction to Scripting and Programming

Credits 3
This course introduces programming environments to students who are not experienced programmers. This course covers simple logic, programming flow, and the use of variables.n It introduces students to the history of programming and the basic vocabulary of the programming industry. The course culminates in a series of hands-on exercises using this knowledge to solve problems. At his or her discretion, the instructor may cover special topics in programming or scripting.

CS 120: High-Level Programming I: The C Programming Language

Credits 4

This course covers the fundamentals of programming in C. It focusses on developing a deep understanding of the structured programming concepts and practices. Topics include variables, data types, functions, control structures, pointers, strings, arrays, and dynamic allocation principles.

CS 170: High-Level Programming II: The C++ Programming Language

Credits 4

This course covers the fundamentals of programming in C++. It focusses on developing an understanding of object-oriented concepts and principles. Topics include classes, operator overloading, function and class templates, composition, inheritance, and introduction to standard libraries such as containers and algorithms.

CS 180: Operating Systems I: Man-Machine Interface

Credits 3

This course focusses on dynamic trio of virtualization, concurrency, and persistence that powers modern computing systems. The course is designed to explore various operating system related topics like, virtualization, processes, threads, context switching, synchronization, scheduling, and virtual memory management algorithms. Additionally, it also focuses on the intricacies of file systems & disk management, unravelling the computer system’s inner workings.

CS 200: Computer Graphics I

Credits 3
This course presents fundamental mathematical elements, data structures, and algorithms useful for animating and viewing 2D primitives. The course aims to fulfill two objectives. The first objective is to provide students with a sufficient mathematical and algorithmic background to design and implement 2D graphics applications. The second objective is to prepare students with the knowledge required for writing 3D graphics applications. The first half of the course deals with scan-conversion algorithms for rasterizing 2D primitives such as lines, circles, ellipses, triangles, and arbitrary polygons. The second half of the course is concerned with the viewing and animation of these 2D primitives. The course covers topics such as interpolation techniques, transformations, culling, clipping, animation techniques, and the 2D viewing pipeline.

CS 211: Introduction to Databases

Credits 3

This course provides a broad overview of database systems. It presents the fundamentals, practices, and applications of computer databases. Topics include database architectures, data modeling, design schemes, transaction processing, and database implementation. Additional topics may include emerging technologies in the field.

CS 225: Advanced C/C++

Credits 3

This course covers advanced features and techniques in C and C++. It focuses on developing an understanding of interaction and communication between classes and objects. Topics include bit manipulations, advanced memory management, advanced function and class templates, inheritance, design patterns, and STL containers and algorithms.

CS 230: Introduction to Game Engine Architecture

Credits 3

This course explores the architecture and implementation techniques of game engines. Through hands-on projects, a basic game engine will be created and expanded, applying fundamental programming principles.

CS 250: Computer Graphics II

Credits 3
This course examines the mathematical elements and algorithms used in the design and development of real-time 3D computer graphics applications, such as games, cockpit simulators, and architectural walk-throughs. 3D computer graphics involve drawing pictures of 3D objects, usually on a 2D screen. This process of generating a 2D image of a 3D graphics application can be described as a series of distinct operations performed on a set of input data. Each operation generates results for the successive one. This process is called the graphics rendering pipeline, and it is the core of real-time computer graphics. The graphics pipeline can be conceptualized as consisting of three stages: application, transformation, and rasterization. The course begins by introducing the 3D graphics pipeline. The application stage is examined from the viewpoint of the representation, modeling, and animation of 3D objects. Topics include user interaction, camera animation techniques, simulation of dynamic objects, and collision detection techniques. Next, the course examines the process of mapping 3D graphic objects from model-space to viewport coordinates. The transformation stage implements this process. Finally, the conversion of a geometric primitive in viewport coordinates into a 2D image is studied. The rasterization stage implements this final process.

CS 260: Computer Networks I: Interprocess Communication

Credits 3

This course provides an introduction to hierarchical network communication within a distributed computing environment. The curriculum encompasses network technologies, architecture, and protocols, with a particular focus on the TCP/IP stack.

CS 280: Data Structures

Credits 3
This course introduces classical abstract data types (ADT) in computer science. ADTs provide the hierarchical views of data organization used in programming. Among the topics covered are the algorithms and primitives of the data structures for arrays, linked lists, stacks, queues, trees, hash tables, and graphs. In addition, the course provides an introduction to algorithm complexity and notation.

CS 300: Advanced Computer Graphics I

Credits 3
This course introduces students to algorithms that are essential to creating photorealistic images in interactive simulations. Topics covered include an overview of modern GPU (graphics processor unit) architecture and the common graphics APIs used, including OpenGL and DirectX. Rendering techniques covered include texturing, illumination models, transparency, shading algorithms, mapping techniques (bump mapping, environment/reflection mapping, etc.), and shadows. Students learn how-to implement all algorithms by using vertex and pixel shaders.

CS 315: Low-Level Programming

Credits 3

This course delves into the intricacies of modern microprocessor architectures, instruction sets, and the relationship between source code and machine instructions. Topics include the application of assembly language for program analysis, debugging, optimization, and gaining deeper insights into the impact of high-level code modifications. Additionally, it explores how CPU and memory architectures, cache hierarchies, and memory access patterns play crucial roles in program execution efficiency and overall system performance.

CS 325: User Interface and User Experience Design

Credits 3
This course presents fundamental topics in the field of human-computer interface design. Topics covered in the course will help students understand human capabilities, design principles, prototyping techniques and evaluation methods for human-computer interfaces, with special emphasis on natural user interfaces. The course will guide the students towards an implementation of a novel user interaction.

CS 330: Algorithm Analysis

Credits 3

This course covers a variety of algorithms and algorithmic patterns. It focusses on developing an understanding of the internal structure, workings, and common properties of algorithms. Topics include divide-and-conquer, dynamic programming, greedy algorithms, incremental improvement, and computational complexity.

CS 350: Advanced Computer Graphics II

Credits 3
This course deals with the efficient representation and processing of complex 3D scenes in order to avoid bottlenecks in the use of the CPU and the GPU. Specific topics include a variety of spatial data structures (binary space-partitioning trees, octrees, kd-trees, and grid data structures), several object-culling methods (occlusion, viewport, and portal), and finally the construction and uses of bounding volumes and their hierarchies for collision detection and related geometric operations.

CS 365: Software Engineering

Credits 3
This course covers a wide range of topics in software engineering from the practical standpoint. It encompasses project management issues as well as technical development principles and methods. Topics include system architecture, security, methodologies and notation, UML, object-oriented analysis and design, requirements analysis, implementation, verification, validation, maintenance, and software engineering standards. Risk management and iterative design receive special emphasis. Student teams apply acquired knowledge to a substantial project.

CS 380: Artificial Intelligence for Games

Credits 3
This course introduces students to a wide range of concepts and practical algorithms that are commonly used to solve game AI problems. Case studies from real games are used to illustrate the concepts. Students have a chance to work with and implement core game AI algorithms. Topics covered include the game AI programmer mindset, AI architecture (state machines, rule-based systems, goal-based systems, trigger systems, smart terrain, scripting, message passing, and debugging AI), movement, pathfinding, emergent behavior, agent awareness, agent cooperation, terrain analysis, planning, and learning/adaptation.

CS 388: Introduction to Portable Game System Development

Credits 3
This course introduces students to portable game systems programming and development, which is different from PC programming and development due to the embedded structure of the machine. Students work with a very limited amount of memory and CPU power. To overcome the system'92s memory limitations, several graphics techniques are used, such as tile-based game objects and backgrounds using color palettes. As for the CPU limitations, fixed point decimal is used instead of float numbers, along with asynchronous operations. Several portable game system specific topics, such as managing multiple graphics engines simultaneously and handling the touch pad are discussed.

CS 399: Special Topics in Computer Science

Credits 3
The content of this course may change each time it is offered.n It is for the purpose of offering a new or specialized course of interest to the faculty and students that is not covered by the courses in the current catalog.

CS 400: Raytracing

Credits 3

This course focuses on rendering techniques used for ray tracing. The course culminates with an implementation of a path-tracing algorithm able to generate images demonstrating lighting and modeling techniques not found in traditional real-time graphics. Topics include solid modeling, intersection calculations, and illumination models.

CS 455: Physics Simulation

Credits 3

This course will cover the implementation of various physics topics, as well as collision detection and collision resolution algorithms. Special topics such as stacking, soft-bodies, and friction may be covered.

CS 460: Advanced Animation and Modeling

Credits 3
3D animation and modeling play significant roles in computer simulation and video game software. Game developers need to have a comprehensive understanding of these techniques. This course introduces algorithms for specifying and generating motion for graphical objects. It addresses practical issues, surveys accessible techniques, and provides straightforward implementations for controlling 3D moving entities with different characteristics. The class covers two broad categories. Students will first learn an interpolation-based technique, which allows programmers to fill in the details of the motion or shape once the animator specifies certain basic information, such as keyframes, paths, coordinate grids, or destination geometry. Then, they learn a behavior-based technique, which generates motion that satisfies a set of rules, such as kinematics, physics, or other constraints.

CS 462: Advanced Real-Time Rendering Techniques

Credits 3

This course introduces students to data structures, algorithms, and techniques concerned with rendering images more accurately and efficiently in interactive computer simulations and video game software. Topics include patch and surface algorithms, anti-aliasing theory and practice, advanced lighting techniques, hard and soft shadow map methods, multi-pass rendering techniques, high-dynamic range (HDR) rendering, advanced shading and mapping, and real-time vertex/pixel shader programming essentials. Additionally, students practice these subjects by working with the supporting computer graphics APIs and they will gain experience in reading and implementing recently published state-of-the-art graphics research papers.