Coursework

Course notes can be found here.

Computer Science

CSCI 270: Introduction to Algorithms and Theory of Computing
  • Greedy Algorithms
  • Divide & Conquer Algorithms
  • Dynamic Programming
  • Introduction to the Theory of NP-Completeness and Computability theory
  • Algorithms for Flows and Cuts
ITP 485: Programming Game Engines
  • Assembly, Basic SIMD Instructions, Cache, Allocators, Serialization, Profiling
  • Math: Trigonometry, Dot Product, Cross Product, Matrices, Vector Transformation, Matrix Inverse, Quaternions
  • C++: Preprocessor, Conditional Compilation, Linker, Forward Declarations, …
  • Shaders, HLSL, Double Buffering, Initialize D3D, Transformation between Spaces, Constant Buffers, Indexed Drawing, Z-Buffer
  • Texture Mapping, MIP Mapping, Texture Sampling, Phong Lighting, Materials, Normal Maps, Tangent Space
  • Scripting and Audio Systems
  • Inheritance Hierarchy, Object Components, Loading Data
  • Animations: Blend Shapes, Skeletal Hierarchy, Inverse Bind Pose, KeyFrames, Skinning
  • Collision Detection: Separating Axis, Oriented Bounding Box, Continuous Collision Detection, Collision Phases
  • Multi-Threaded Engines: Race Conditions, Mutexes & Atomics, Multithreaded Architecture
  • Visibility Culling, Post Effects, Deferred Rendering
  • ITP 380: Video Game Programming
    • Gained an understanding of core game systems (including rendering, input, sound, and collision/physics)
    • Developed a strong understanding of essential mathematics for games.
    • Written several functional games in C++ individually.
    • Learned critical thinking skills required to continue further study in the field.
    ITP 303: Full-Stack Web Development
    • Students will build a complete web application from scratch utilizing core web technologies.
    • Students will:
      • Create static, responsive web pages using HTML and CSS
      • Implement interactivity on web pages using vanilla JavaScript
      • Design databases
      • Write SQL queries to create, retrieve, update and delete records from databases
      • Identify advantages of using web frameworks and libraries such as Bootstrap, jQuery, and Laravel
    CSCI 310: Software Engineering
    Introduction to the software engineering process and software lifecycle. Covers project management, requirements, architecture, design, implementation, testing, and maintenance phase activities in team based projects.
    CSCI 360: Introduction to Artificial Intelligence
    Concepts and algorithms underlying the understanding and construction of intelligent systems. Agents, problem solving, search, representation, reasoning, planning, machine learning.
    CSCI 356: Introduction to Computer Systems
    • Translate bit strings to numbers using unsigned, 2’s complement, and IEEE standard floating point representation systems.
    • Reverse engineer machine code and assembly code to a behavioral (high-level) descriptions.
    • Translate high-level software code to corresponding x86 instruction sequences.
    • Assess the cache performance of a system given its memory/cache specifications and a specific address trace.
    • Identify various software vulnerabilities and how they may be exploited.
    • Manually simulate address translation as a means of understanding hardware and software components that do likewise.
    • Experiment to determine efficient storage (specifically heap memory) allocation strategies.
    • Organize code and use compiler settings to achieve enhanced performance on specific processor architectures.
    CSCI 350: Introduction to Operating Systems
    Basic issues in concurrency, deadlock control, synchronization scheduling, memory management, protection and access control, inter-process communication, and structured design. Laboratory experiences with Unix-like operating system.
    CSCI 201: Principles of Software Development
    • The ability to understand software engineering in terms of requirements, design, and implementation
    • The ability to produce a software design based on requirements
    • The ability to produce software, including graphical user interfaces, from a design
    • The ability to write multi-threaded programs
    • The ability to apply a software engineering process to a large software project
    • The ability to use Java in writing programs
    • The ability to work effectively on a team
    CSCI 104: Data Structures and Object Oriented Design
    • Ability to choose appropriate and efficient data structures and algorithms to solve a problem.
    • Ability to compare data structures and algorithms for efficiency using algorithm analysis and experiments.
    • Ability to apply algorithm analysis and knowledge of discrete mathematics to evaluate algorithms and data structures.
    • Ability to implement and use linear data structures, including stacks, queues, lists.
    • Ability to implement and use search structures and algorithms including binary search, search trees, and hash tables.
    • Ability to use and implement search data structures, including search trees and hash tables.
    • Ability to use and implement priority queues.
    • Knowledge of and ability to implement sorting algorithms and compare their performance analytically and empirically.
    • Understanding of graphs and their representations; ability to implement graph search using BFS, DFS, and Dijkstra’s Algorithm.
    • Ability to write recursive functions and understand when recursion is appropriate to a problem.
    • Ability to write readable and maintainable code.
    CSCI 170: Discrete Methods in Computer Science
    • Pigeon-Hole Principle
    • Basic Proof Techniques
    • Sets, Functions, Relations
    • Induction, Strong Induction, Structural Induction
    • Order Notation
    • Runtime Analysis
    • Logic, Applications, Proofs
    • Graphs and Proofs, Spanning Trees, Connectivity, Graph Algorithms
    • Counting
    • Discrete Probability, Conditional Probability, Bayes’ Theorem, Random Variables
    CSCI 103: Introduction to Programming
    • Develop simple algorithms to solve computational problems.
    • Implement key algorithms within the field.
    • Write computer programs using conditional and iterative structures, and functional decomposition.
    • Perform functional decomposition and trace recursive solutions.
    • Select an appropriate basic data structure (e.g. arrays) and access methods (e.g. pointers).
    • Determine the computational complexity of simple algorithms.
    • Apply basic object-oriented principles.
    • Create programs that utilize input/output to perform data analysis.
    EE 109: Introduction to Embedded Systems
    • Understand how digital systems represent information
    • Understand the execution model of a modern computer system
    • Design and implement combinational logic circuits
    • Design and implement sequential logic circuits and FSMs
    • Utilize a microcontroller to sense and activate digital signals
    • Utilize a microcontroller to perform analog-to-digital and digital-to-analog conversion
    • Use state machines as a system design tool
    • Write interrupt-driven and timer-driven programs
    • Design a non-trivial embedded project
    CSCI 109: Introduction to Computer Science
    Understand Computing:
    • as a discipline including its subareas, and their relationship to each other
    • as a body of knowledge including its principal abstractions, structure, and fundamental contributions
    • as a domain of science/engineering including information and its transformation

    Applied Mathematics

    MATH 225: Linear Algebra and Linear Differential Equations
    • Matrices
    • Linear spaces
    • Linear maps
    MATH 229: Calculus III for Engineers and Scientists
    • Vectors and the Geometry of Space
    • Partial Derivatives
    • Multiple Integrals
    • Vector Calculus
    MATH 407: Probability Theory
    • Emphasize indicators and expectations
    • Basic discrete distributions (Bernoulli, Binomial, Geometric, Poisson), with additional material including Stirling’s formula formula, entropy (exponential growth/decay rates)
    • Generating functions and some Huffman coding
    • Second moments, variance, Bayes’s Theorem
    • Basic continuous distributions (Uniform, Exponential, Normal) and the change of variables relation arising when a smooth function is applied to a random variable having a density
    • Basic Poisson process
    • Apply the Central Limit Theorem without proof
    MATH 408: Mathematical Statistics
    This is an upper-division undergraduate mathematical statistics course that introduces the basic mathematical properties of statistical methods for data analysis including:
    • parametric estimation
    • hypothesis testing
    • least square estimation
    • analysis of variance
    • analysis
      of categorical data
    MATH 445: Mathematics of Physics and Engineering II
    Vector field theory; theorems of Gauss, Green, and Stokes; Fourier series and integrals; complex variables; linear partial differential equations; series solutions of ordinary differential equations.
    MATH 425A: Fundamental Concepts of Analysis
    The real numbers, elements of set theory, metric spaces and basic
    topology, sequences and series, limits, continuity, differentiation, integration, sequences and series
    of functions, uniform convergence.

    In Progress

    CSCI 401: Capstone Design and Construction of Large Software Systems
    Group project with an outside stakeholder to develop real-world software solutions to large-scale problems. Topics include software engineering, professional preparation, and recent computer science research.
    CSCI 420: Computer Graphics
    Computer graphics, OpenGL, 2D and 3D transformations, Bzier splines, computer animation, rendering including ray tracing, shading and lighting, artistic rendering, virtual reality, visualization.
    MATH 458: Numerical Methods
    Rounding errors in digital computation; solution of linear algebraic systems; Newton’s method for nonlinear systems; matrix eigenvalues; polynomial approximation; numerical integration; numerical solution of ordinary differential equations.
    ITP 116: Accelerated Programming in Python
    The course is intended to teach the fundamental concepts of the Python programming language to those students who already have experience with a previous programming language.
    PHIL 254: Science, Knowledge and Objectivity
    How does science differ from pseudo-science? When is it rational to accept a scientific theory? And do such theories provide genuine knowledge of reality?