- About SES
- Undergraduate
- Graduate
- Research
- Initiatives
- Departments

- Engage
- Academics
- Admissions
- Research
- Athletics
- University Life
- News
- About

# Minors

##### Minors

###### Computer Science

The computer science minor is closed to students majoring in Cybersecurity or Information Systems. For students who entered the minor in Fall 2012 or later, the courses for the Computer Science minor are:

- CS 115 Introduction to Computer Science
This is an introductory programming course using the Java language. The topics include: basic facts about object-oriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.

- CS 135 Discrete Structures
The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and base-b notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.

or

- MA 134 Discrete Mathematics
This course provides the background necessary for advanced study of mathematics or computer science. Topics include propositional calculus, predicates and quantifiers, elementary set theory, countability, functions, relations, proof by induction, elementary combinatorics, elements of graph theory, mends, and elements of complexity theory.

- CS 284 Data Structures
This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.

- CS 385 Algorithms
This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.

plus any two courses numbered 300 or higher, except any course that duplicates another; specifically, students may not count towards the minor CS 501, CS 570, or CS 590; also, students may not count toward the minor both courses in each of the following pairs: CS 383 and CS 550, CS 492 and CS 520, CS 496 and CS 510, CS 442 and CS 561.

For students who entered the minor prior to Fall 2012, the courses for the Computer Science minor are:

- CS 115 Introduction to Computer Science
This is an introductory programming course using the Java language. The topics include: basic facts about object-oriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.

- CS 135 Discrete Structures
The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and base-b notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.

- CS 284 Data Structures
This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.

- CS 385 Algorithms
This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.

plus one of the following tracks:

Software Systems

- CS 383 Computer Organization and Programming
The main aspects of computers: data (data types and formats, number bases), hardware (stored program computer concept, addressing methods and program sequencing, instruction sets and their implementation, the CPU and microprogrammed control, input/output organization, peripherals and interfacing, and main memory), communication (network protocols), software (operating systems, dispatching algorithms), and assembly language programming.

- CS 392 Systems Programming
Introduction to systems programming in C on UNIX. Students will be introduced to tools for compilation, dynamic linking, debugging, editing, automatic rebuilding, and version control. Some aspects of the UNIX system call interface will be studied, drawn from this list: process creation, signals, terminal I/O, file I/O, inter-process communication, threads, network protocol stacks, programming with sockets, and introduction to RPC. Style issues to be covered include: naming, layout, commenting, portability, design for robustness and debugability, and language pitfalls. X programming and GUI design will be covered, if time allows.

- CS 492 Operating Systems
The use and internals of modern operating systems. Lectures focus on internals whereas programming assignments focus on use of the operating system interface. Major topics include: the process concept; concurrency and how to program with threads; memory management techniques, including virtual memory and shared libraries; file system data structures; and I/O.

Computer Graphics

- CS 538 Visual Analytics
Visual analytics is the combination of data filtering, statistical algorithms, and visual presentation in an interactive visual interface. This course provides an introduction to both information and scientific visualization. Topics include: perception (color, space/order, and depth/occlusion), interaction (navigation, zooming, focus, and context), design studies and evaluation, and data representation (graphs, trees, volumes, and time series). Applications include: software, scientific, financial, and cartographic visualization. Junior, senior, or graduate standing is required.

- CS 545 Human-Computer Interaction
This is an introduction to Human Computer Interaction (HCI). It covers basic concepts, principles, and frameworks in HCI; models of interaction; and design guidelines and methodologies. The course includes extensive readings and reports, as well as work on projects involving interface design and development.

In place of CS538, one of the following can be taken:

- CS 539 Real-Time Rendering, Gaming, and Simulations Programming
The course is an introduction to the techniques for designing and building computer games and real-time graphics-oriented simulations. The topics include: 3-D game engine architecture, design, and implementation; simulation, modeling, and object control; character behavior and behaviorbased animation; human-computer interaction; and event-driven simulations.

- CS 558 Computer Vision
An introduction to the field of Computer Vision, focusing on the underlying algorithmic, geometric, and optic issues. The course starts with a brief overview of basic image processing topics (convolution, smoothing, and edge detection). It then proceeds on various image analysis topics: binary images, moments-based shape analysis, Hough transform, image formation, depth and shape recovery, photometry, motion, classification, and special topics.

- CS 638 Advanced Computer Graphics
Mathematical foundations and algorithms for advanced computer graphics. Topics include 3-D modeling, texture mapping, curves and surfaces, physics-based modeling, and visualization. Special attention will be paid to surfaces and shapes. The class will consist of lectures and discussion on research papers assigned for reading. In class, we will study the theoretical foundations and algorithmic issues. In programming assignments, we will use OpenGL as the particular API for writing graphics programs. C/C++ programming skills are essential for this course.

###### Cybersecurity

The Cybersecurity minor is closed to students majoring in Computer Science or Information Systems. For students who entered the minor in Fall 2012 or later, the courses for the Cybersecurity minor are:

- CS 115 Introduction to Computer Science
This is an introductory programming course using the Java language. The topics include: basic facts about object-oriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.

- CS 135 Discrete Structures
The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and base-b notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.

- CS 284 Data Structures
This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.

- CS 385 Algorithms
This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.

plus one of the following tracks:

- CS 503 Discrete Mathematics for Cryptography
Topics include basic discrete probability, including urn models and random mappings; a brief introduction to information theory; elements of number theory, including the prime number theorem, the Euler phi function, the Euclidean algorithm, and the Chinese remainder theorem; and elements of abstract algebra and finite fields including basic fundamentals of groups, rings, polynomial rings, vector spaces, and finite fields. Carries credit toward the Applied Mathematics degree only when followed by CS 579. Recommended for high-level undergraduate students.

- CS 578 Privacy in a Networked World
Increasing use of computers and networks in business, government,

recreation, and almost all aspects of daily life has led to a

proliferation of online sensitive data that, if used improperly, can

harm the data subjects. As a result, concern about the ownership,

control, privacy, and accuracy of these data has become a top priority.

This course focuses on both the technical challenges of handling

sensitive data and the policy and legal issues facing data subjects,

data owners, and data users. This course is suitable for advanced

undergraduate computer science majors, graduate students in computer

science, and students in technology management or other majors with

some computer science background. Course readings draw on a variety of

sources, including both technical materials and the popular press. - CS 579 Foundations of Cryptography
This course provides a broad introduction to cornerstones of security

(authenticity, confidentiality, message integrity, and non-repudiation)

and the mechanisms to achieve them as well as the underlying

mathematical basics. Topics include: block and stream ciphers,

public-key systems, key management, certificates, public-key

infrastructure (PKI), digital signature, non-repudiation, and message

authentication. Various security standards and protocols such as DES,

AES, PGP, and Kerberos, are studied.

or

- CS 576 Secure Systems
Attacks on computer systems have become part of everyday life. It is the goal of this class to teach a basic understanding of the possible security failures, as well as the protection mechanism. The class will cover an introduction to network and host security concepts and mechanisms; basic cryptographic algorithms and protocols; authentication and authorization protocols; access control models; common network (wired and wireless) attacks; typical protection approaches, including firewalls and intrustion detection systems; and operating systems and application vulnerabilites, exploits, and countermeasures. The class is designed for undergraduate, master's, and Ph.D. students. Those who take the class are expected to be able to program in C, have some basic knowledge of assembly language, and be familiar with network programming, as well as Unix-like operating systems.

- CS 577 Cybersecurity Laboratory
Cybersecurity Laboratory

Theoretical foundations in cryptographic algorithms, cryptographic

protocols, access control models, formal methods, security policy, etc.

provide the necessary background to understand the real-world

implications of cryptography and network security. This laboratory

course is designed to provide students with a hands-on experience based

on the theoretical knowledge they have acquired by taking other

securityoriented courses. This hands-on experience is of great

importance for future jobs in industry. The course will accomplish its

goals through a number of in-lab programming exercises. Topics covered

include: basic cryptographic algorithms and protocols; authentication

and authorization protocols; access control models; common network

(wired and wireless) attacks; typical protection approaches including

firewalls and intrustion detection systems; and operating systems and

application vulnerabilites, exploits, and countermeasures.

For students who entered the minor prior to Fall 2012, the courses for the Cybersecurity minor are:

- CS 115 Introduction to Computer Science
- CS 135 Discrete Structures
- CS 284 Data Structures
- CS 385 Algorithms
- CS 503 Discrete Mathematics for Cryptography
Topics include basic discrete probability, including urn models and random mappings; a brief introduction to information theory; elements of number theory, including the prime number theorem, the Euler phi function, the Euclidean algorithm, and the Chinese remainder theorem; and elements of abstract algebra and finite fields including basic fundamentals of groups, rings, polynomial rings, vector spaces, and finite fields. Carries credit toward the Applied Mathematics degree only when followed by CS 579. Recommended for high-level undergraduate students.

- CS 578 Privacy in a Networked World
Increasing use of computers and networks in business, government,

recreation, and almost all aspects of daily life has led to a

proliferation of online sensitive data that, if used improperly, can

harm the data subjects. As a result, concern about the ownership,

control, privacy, and accuracy of these data has become a top priority.

This course focuses on both the technical challenges of handling

sensitive data and the policy and legal issues facing data subjects,

data owners, and data users. This course is suitable for advanced

undergraduate computer science majors, graduate students in computer

science, and students in technology management or other majors with

some computer science background. Course readings draw on a variety of

sources, including both technical materials and the popular press. - CS 579 Foundations of Cryptography
This course provides a broad introduction to cornerstones of security

(authenticity, confidentiality, message integrity, and non-repudiation)

and the mechanisms to achieve them as well as the underlying

mathematical basics. Topics include: block and stream ciphers,

public-key systems, key management, certificates, public-key

infrastructure (PKI), digital signature, non-repudiation, and message

authentication. Various security standards and protocols such as DES,

AES, PGP, and Kerberos, are studied.

###### Game Development

The courses for the Game Development minor (not available to CS, CyS, or IS majors) are as follows:

- CS 115 Introduction to Computer Science
- CS 135 Discrete Structures
- CS 284 Data Structures
- CS 385 Algorithms
- CS 535 Financial Computing
This is a course in modeling the values of assets and financial derivatives and the software implementation of these models for pricing, simulations, and scenario analysis. The course includes an introduction to markets and financial derivatives, and a development of the necessary tools from the theories of stochastic processes and parabolic differential equations. An integral part of the course is the use of financial information sources and software packages available on the Internet for modeling and analysis.

- CS 537 Interactive Computer Graphics
This is an introductory-level course to computer graphics. No previous knowledge on the subject is assumed. The objective of the course is to provide a comprehensive introduction to the field of computer graphics, focusing on the underlying theory, and thus providing strong foundations for both designers and users of graphical systems. The course will study the conceptual framework for interactive computer graphics, introduce the use of OpenGL as an application programming interface (API), and cover algorithmic and computer architecture issues.

- CS 541 Artificial Intelligence
An introduction to the large and diverse field of artificial intelligence. Topics include: problem-solving by search and constraint satisfaction; alpha-beta search for two-player games; and logic and knowledge representation, planning, learning, decision theory, statistical learning, and computer vision.

- CS 587 Game Engine Design
In this course we will study the science and concrete programming tools

underlying the design and implementation of game engines. The course

will cover the principal components and techniques of a modern game

engine: physics simulation engines, 3D graphics engines, artificial

intelligence engines, scripting languages, network gaming for massively

multiplayer games.