Computer Science Modules

Courses

CSD 1101: Computer Environment

Credits 6
This module provides students with a solid understanding of the fundamental elements on which computers are based. Topics covered include number systems, representation of numbers in computation, basic electricity, electric circuits, digital systems, logic circuits, data representation, digital memory, computer architecture, and operating systems. This knowledge eliminates some of the '93mysteries'94 about hardware and provides students with a well-rounded understanding of computers. The latter stages of the module focus on assembly programming, which enhances the student'92s understanding of how the computer works at a fairly low-level.

CSD 1121: High-level Programming 1

Credits 6
In presenting the C programming language, this module serves as a foundation for all high-level programming modules and projects. It provides the fundamentals in programming, including control-flows (such as statement grouping, decision making, case selection, procedure iteration, and termination test) and basic data types (such as arrays, structures, and pointers). Additionally, there is an intensive discussion of the lexical, syntax notation, and semantics of the C programming language.

CSD 1130: Game Implementation Techniques

Credits 5
Game Implementation Techniques presents foundational data structures, algorithms, mathematical concepts and techniques used in the design and development of two-dimensional realtime interactive simulation and game software. Topics covered include event-driven programming, game engine design and architecture, real-time rendering, user interaction, state-machines, basic animation techniques and collision detection.

CSD 1171: High-level Programming 2

Credits 6
This course introduces the C++ language with particular emphasis on its object-oriented features. Topics include stylistic and usage differences between C and C++, namespaces, function and operator overloading, classes, inheritance, templates, and fundamental STL components.

CSD 2101: Introduction to Computer Graphics

Credits 6
This course presents fundamental mathematical elements, data structures, and algorithms required to implement interactive 2D and 3D graphics applications on programmable graphics hardware using modern graphics frameworks.n Topics covered including the graphics pipe, programmable graphics hardware, affine transforms, projections, rasterization techniques, texturing pipeline, visibility techniques, frustum culling techniques, clipping algorithms, and applications of the perspective transform including 3D picking, planar shadows, and hyperbolic interpolation.

CSD 2126: Modern C++ Design Patterns

Credits 6
This module builds on the foundation created in the first two high level programming modules (CSD 1101/CSD 1121/ CSD 1170). It presents advanced topics in the C/C++ programming language in greater detail. Such topics include advanced pointer manipulation, utilizing multi-dimensional arrays, complex declarations, and standard library functions. Advanced C++ topics include function and class templates, operator overloading, multiple inheritance, runtime type information, the Standard Library, and performance issues.

CSD 2151: Introduction to Real-Time Rendering

Credits 6
This course introduces algorithms for creating photo-realistic images in interactive simulations. Rendering techniques covered include texturing, illumination models, transparency, shading algorithms, mapping techniques (bump mapping, environment or reflection mapping, etc.), and shadows. Students will learn how to implement all algorithms by using vertex and pixel shaders.

CSD 2161: Computer Networks

Credits 6
This module introduces the hierarchical network communication in a distributed computing environment. Topics cover network technologies, architecture, protocols, and security. The curriculum gives specific emphasis to the TCP/IP stack and in making students familiar with writing portable socket-based software, t also discusses some of the unique challenges of networked games and strategies for addressing them.

CSD 2171: Programming Massively Parallel Processors

Credits 6
This course provides a foundation on programming individual stages of a GPU'92s programmable pipeline using a shader language. The goal of the course is to motivate the concept that processing times of various CPU-based applications can be accelerated by offloading this work from the CPU to the large number of massively parallel processors on the GPU. The emphasis of the course is to program the compute, geometry, and tessellation stages of the programmable pipeline using a modern software API with a compatible shader language for a variety of real-time interactive applications.

CSD 2182: Operating Systems

Credits 6
Linux/Unix as implemented on modern PCs. After an overview of what an operating system is and does, we cover the following: organization and design (the kernel and various subsystems), process management (creation and management of processes and threads, including an introduction to multithreaded programming), inter-process communication, process synchronization (locks, semaphores, and methods to avoid deadlocks), memory management (hardware and process views of memory layout and demand-paged virtual memory), file systems, and security and protection (viruses, worms, and Trojan horses).

CSD 2183: Data Structures

Credits 6
The objective of this module is mainly to introduce the classical Abstract Data Types (ADTs) in Computer Science.n The ADTs provide the hierarchical views of data organization used in programming. Fundamental data structures and their associated algorithms as well as complexity notation are introduced. Simply Reading about data structures and algorithms and listening to a lecture is insufficient to master and implement these fundamental concepts. Every non-trivial program you write at DigiPen and in the real world will make heavy use of data structures and algorithms and this module enables you to reason about and apply them.

CSD 3116: Low-level Programming

Credits 6
This module introduces students to modern microprocessor architectures, using the Intel x86 series as case studies, with the intent to showing the practical implications of such knowledge upon programming decisions. Topics include pipelining, superscalar/VLIW machines, register-renaming, out-of-order execution, multi-core architecture, caches, multicore-cache coherency, x86 instruction set architecture, application binary interfaces, Flynn'92s taxonomy, Streaming SIMD extensions etc.

CSD 3121: Developing Immersive Applications

Credits 6
Virtual Reality (VR), Augmented Reality (AR), and other extended Reality (XR) or immersive applications in general, are increasingly becoming an important medium of interaction with the digital realm. This course provides a practice-based introduction to the concepts and techniques to develop and evaluate immersive applications. Topics covered include implementation techniques, in the context of immersive applications, for interaction, locomotion and creation of virtual environments. At the end of this module, the student will be proficient in explaining the core components of immersive applications, as well as develop and evaluate a basic 3D immersive application with appropriate interaction modalities.

CSD 3126: User Interface and User Experience Design

Credits 6
This module presents fundamental topics in the field of human-computer interface design. Topics covered in the module 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 module guides the students towards an implementation of a novel user interaction.

CSD 3131: Algorithm Analysis

Credits 6
This module provides students with an introduction to the analysis of algorithms specifically proving their correctness and making a statement about their efficiency. Topics for discussion may include loop invariants, strong mathematical induction and recursion, asymptotic notation, recurrence relations and generating functions. Students examine examples of algorithm analysis from searching and sorting algorithms. Second part of the module concentrates on classification of algorithms and building a strong knowledge base of existing algorithms.

CSD 3151: Spatial Data Structures

Credits 6
This module 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.

CSD 3156: Mobile and Cloud Computing

Credits 6
By facilitating a large variety of transportable human-computer interactions, mobile devices have become an essential and integral part of human life. Cloud computing is a model for enabling on-demand access to a shared pool of configurable computing resources such as servers, storage, networks, and applications as services over the Internet. Many popular mobile applications such as Gmail, Netflix, Facebook and WhatsApp are implemented as cloud applications but accessed from mobile devices. This module provides a practical and application oriented introduction to implementing cloud computing services that bring the vast data processing and storage abilities of the cloud to mobile devices.

CSD 3183: Artificial Intelligence for Games

Credits 6
The objective of this module is to introduce data structures and algorithms related to the artificial intelligence applicable in real time interactive applications. It introduces students to a wide range of concepts and practical algorithms that are commonly used to solve game AI problems. Topics covered includes 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 behaviour, agent awareness, agent cooperation, terrain analysis, planning, and learning/ adaptation.

CSD 3186: Machine Learning

Credits 6
The objective of this module is to introduce basics concepts on Machine Learning that are useful for many industrial applications. It introduces students to a wide range of concepts and practical algorithms that are commonly used to pre-process data and extract useful patterns from large amount of data. The topics include early machine learning algorithms such as genetic algorithms, classifier systems, neural network, and various clustering algorithms. It also explores probabilistic algorithms, including Bayesian networks, hidden Markov models, and Monte Carlo methods.

DAA 1715: Introduction to Scripting and Programming

Credits 5
This module introduces porgramming environments to students who are experienced programmers. It 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 module 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.

UXG 1116: Introduction to Computer Technology and Programming

Credits 7
This class introduces programming environments to non-computer science major students. The module provides students with an introductory overview of the fundamental elements on which computers are based, including basic computer hardware systems, operations, and structures. An introduction to basic programming includes simple logic, programming flow, loops, variables, and arrays. Conditionals, evaluations, and other control structures are also included. The instructor may cover special topics in programming or scripting and may focus on currently popular scripting languages in the video game industry.

UXG 1165: Programming Foundations

Credits 7
This module expands on basic programming skills through an exploration of object-oriented programming techniques. Topics may include classes, inheritance, interfaces, polymorphism, and data structures.

UXG 1175: Scripting Languages

Credits 5
Topics may include classes, inheritance, interfaces, polymorphism, and data structures. This module covers the concepts and implementation strategies for using high-level scripting languages in game development. Students will focus on object-oriented programming, high-level English-like structure, speed of development, and ease of use. The module includes a survey of commercial languages, as well as proprietary scripting languages from industry applications. Students will examine the process of conceptualizing a syntax for a game-based scripting language and examine how such a language is compiled and interpreted by a game engine. Using the syntax they have created, they will create a number of scripts that could be used in a game. Additionally, the class will cover such relevant topics as data-driven technology, modular coding, function calls, and procedures.

UXG 2176: Advanced Scripting

Credits 5
This module presents game implementation techniques and game architecture in a scripting language environment. Students investigate concepts of game architecture, such as game-system component separation and game flow while learning about essential elements such as the game state manager, input/output handler, and frame rate controller.n Students learn how to create several different types of classic games in a variety of scripting languages most commonly used for professional games, learning the specific syntax and approaches of each language in the process. As part of their implementation, students learn how-to use the specific graphics, audio interface, physics and math APIs found in the scripting environments used. Students also survey concepts in space partitioning, particle systems, map editors and other elements so that they are capable of creating working prototypes of 2D games.