Computer Science Minor

3079ee16-7387-4b31-8d7c-861227afa375 | 90611

Overview

In the computer science minor students explore an in-depth study of programming or sample selected theoretical or applied areas within the computer science field. At least two of the four electives must have course numbers of 300 or higher and students with the proper prerequisites may use graduate-level computer science courses toward the minor.

Notes about this minor:

  • This minor is closed to students majoring in computer science.
  • Posting of the minor on the student's academic transcript requires a minimum GPA of 2.0 in the minor.
  • Notations may appear in the curriculum chart below outlining pre-requisites, co-requisites, and other curriculum requirements (see footnotes).

Curriculum

Course
Prerequisites
Students must complete a two-course programming sequence*:
CSCI-141
Computer Science I
This course serves as an introduction to computational thinking using a problem-centered approach. Specific topics covered include: expression of algorithms in pseudo code and a programming language; functional and imperative programming techniques; control structures; problem solving using recursion; basic searching and sorting; elementary data structures such as lists, trees, and graphs; and correctness, testing and debugging. Assignments (both in class and for homework) requiring a pseudo code solution and an implementation are an integral part of the course. An end-of-term project is also required.
CSCI-142
Computer Science II
This course delves further into problem solving by continuing the discussion of data structure use and design, but now from an object-oriented perspective. Key topics include more information on tree and graph structures, nested data structures, objects, classes, inheritance, interfaces, object-oriented collection class libraries for abstract data types (e.g. stacks, queues, maps, and trees), and static vs. dynamic data types. Concepts of object-oriented design are a large part of the course. Software qualities related to object orientation, namely cohesion, minimal coupling, modifiability, and extensibility, are all introduced in this course, as well as a few elementary object-oriented design patterns. Input and output streams, graphical user interfaces, and exception handling are covered. Students will also be introduced to a modern integrated software development environment (IDE). Programming projects will be required.
Students must complete a two-course calculus sequence†:
MATH-181
Project-based Calculus I
This is the first in a two-course sequence intended for students majoring in mathematics, science, or engineering. It emphasizes the understanding of concepts, and using them to solve physical problems. The course covers functions, limits, continuity, the derivative, rules of differentiation, applications of the derivative, Riemann sums, definite integrals, and indefinite integrals.
MATH-182
Project-based Calculus II
This is the second in a two-course sequence intended for students majoring in mathematics, science, or engineering. It emphasizes the understanding of concepts, and using them to solve physical problems. The course covers techniques of integration including integration by parts, partial fractions, improper integrals, applications of integration, representing functions by infinite series, convergence and divergence of series, parametric curves, and polar coordinates.
Student must complete a discrete mathematics course‡:
MATH-190
Discrete Mathematics for Computing
This course introduces students to ideas and techniques from discrete mathematics that are widely used in Computer Science. Students will learn about the fundamentals of propositional and predicate calculus, set theory, relations, recursive structures and counting. This course will help increase students’ mathematical sophistication and their ability to handle abstract problems.
Required Course
CSCI-243
The Mechanics of Programming
Students will be introduced to the details of program structure and the mechanics of execution as well as supportive operating system features. Security and performance issues in program design will be discussed. The program translation process will be examined. Programming assignments will be required.
Electives
Choose four of the following:
   CSCI-250
   Concepts of Computer Systems
An introduction to the hardware and software organization of computer systems. The course emphasizes a multilevel model of computer organization. Topics include the digital logic level; the micro architecture level; the machine instruction set level; the operating system level; and the assembly language level. Programming assignments will be required.
   CSCI-251
   Concepts of Parallel and Distributed Systems
This course is an introduction to the organization and programming of systems comprising multiple computers. Topics include the organization of multi-core computers, parallel computer clusters, computing grids, client-server systems, and peer-to-peer systems; computer networks and network protocols; network security; multi-threaded programming; and network programming. Programming projects will be required.
   CSCI-261
   Analysis of Algorithms
This course provides an introduction to the design and analysis of algorithms. It covers a variety of classical algorithms and data structures and their complexity and will equip students with the intellectual tools to design, analyze, implement, and evaluate their own algorithms.
   CSCI-262
   Introduction to Computer Science Theory
This course provides an introduction to the theory of computation, including formal languages, grammars, auto-mata theory, computability, and complexity.
   CSCI-263
   Honors Introduction to Computer Science Theory
This course provides a challenging introduction to the theory of computation with an emphasis on problem solving. Topics include formal languages, grammars, auto-mata theory, computability, and complexity.
   CSCI-264
   Honors Analysis of Algorithms
This course provides a challenging introduction to the design and analysis of algorithms with an emphasis on problem solving and algorithmic research. It covers a variety of classical algorithms and data structures and their complexity, as well as deeper coverage of more advanced material; for example, linear programming, approximation algorithms, and randomized algorithms. The course will equip students with the intellectual tools to design, analyze, implement, and evaluate their own algorithms.
   CSCI-320
   Principles of Data Management
This course provides a broad introduction to the principles and practice of modern data management, with an emphasis on the relational database model. Topics in relational database systems include data modeling; the relational model; relational algebra; Structured Query Language (SQL); and data quality, transactions, integrity and security. Students will also learn approaches to building relational database application programs. Additional topics include object-oriented and object-relational databases; semi-structured databases (such as XML); and information retrieval. A database project is required.
   CSCI-331
   Introduction to Artificial Intelligence
An introduction to the theories and algorithms used to create artificial intelligence (AI) systems. Topics include search algorithms, logic, planning, machine learning, and applications from areas such as computer vision, robotics, and natural language processing. Programming assignments are an integral part of the course.
   CSCI-344
   Programming Language Concepts
This course is a study of the syntax and semantics of a diverse set of high-level programming languages. The languages chosen are compared and contrasted in order to demonstrate general principles of programming language design and implementation. The course emphasizes the concepts underpinning modern languages rather than the mastery of particular language details. Programming projects will be required.
   CSCI-351
   Data Communications and Networks
This course is an in-depth study of data communications and networks. The course covers design of, and algorithms and protocols used in, the physical, data link, network, transport, and application layers in the Internet; methods for modeling and analyzing networks, including graphs, graph algorithms, and discrete event simulation; and an introduction to network science. Programming projects will be required.
   CSCI-352
   Operating Systems
An in-depth study of operating system concepts. Topics include process synchronization, interprocess communication, deadlock, multiprogramming and multiprocessing, processor scheduling and resource management, memory management, static and dynamic relocation, virtual memory, file systems, logical and physical I/O, device allocation, I/O processor scheduling, process and resource protection. Programming projects involving the development of or modification to operating system kernel features will be required.
   CSCI-420
   Principles of Data Mining
This course provides an introduction to the major concepts and techniques used in data mining of large databases. Topics include the knowledge discovery process; data exploration and cleaning; data mining algorithms; and ethical issues underlying data preparation and mining. Data mining projects, presentations, and a term paper are required.
   CSCI-431
   Introduction to Computer Vision
An introduction to the underlying concepts of computer vision. The course will consider fundamental topics, including image formation, edge detection, texture analysis, color, segmentation, shape analysis, detection of objects in images and high level image representation. Depending on the interest of the class, more advanced topics will be covered, such as image database retrieval or robotic vision. Programming homework assignments that implement the concepts discussed in class are an integral part of the course.
   CSCI-452
   System Programming
Application of operating system concepts to the design of hardware interfaces for a multiprogramming environment. Laboratory work includes the development of a multiprogramming (optionally, multiprocessing) kernel with system call and interrupt handling facilities, and the building of device drivers for a variety of peripheral devices. This course provides extensive experience with those aspects of systems programming that deal directly with the hardware interface. A significant team programming project is a major component of this course.
   CSCI-453
   Computer Architecture
Computer Architecture is a study of the design of both modern and classic computer hardware. Topics include: a review of classical computer architectures; the design of operation codes and addressing modes, data formats, and their implementation; internal and external bus structures; architectural features to support virtual storage and page-replacement policies, high-level language features, and operating systems. Students will write programs which simulate the organization of several different processor architectures to help further their understanding of design choices.
   CSCI-455
   Principles of Computer Security
This course provides a broad introduction to the basic principles and practice of computer security and emphasizes policies and mechanisms for building secure and trusted computer systems. Topics include but are not limited to the following: security principles, policies and mechanisms; cryptographic tools; user authentication and access control; secure systems and networking; secure application development; secure data management; impact of mobile, web and cloud computing; intrusion detection and prevention; auditing and forensics; privacy; security management and risk assessment; and legal and ethical aspects. Presentations and projects will be required.
   CSCI-462
   Introduction to Cryptography
This course provides an introduction to cryptography, its mathematical foundations, and its relation to security. It covers classical cryptosystems, private-key cryptosystems (including DES and AES), hashing and public-key cryptosystems (including RSA). The course also provides an introduction to data integrity and authentication.
   CSCI-464
   Xtreme Theory
A fast paced, informal look at current trends in the theory of computing. Each week is dedicated to a different topic and will explore some of the underlying theory as well as the practical applications of the theory. Sample topics may include: quantum cryptography, networks and complex systems, social welfare and game theory, zero knowledge protocols. Students will be evaluated on homework assignments and a final presentation. Offered every other year.
   CSCI-510
   Introduction to Computer Graphics
Introduction to Computer Graphics is a study of the hardware and software principles of interactive raster graphics. Topics include an introduction to the basic concepts, 2-D and 3-D modeling and transformations, viewing transformations, projections, rendering techniques, graphical software packages and graphics systems. The course will focus on rasterization techniques and emphasize the hardware rasterization pipeline including the use of hardware shaders. Students will use a standard computer graphics API to reinforce concepts and study fundamental computer graphics algorithms. Programming projects will be required.
  CSCI-518
   Collaborative Seminar in Computer Graphics
This course examines current topics in Computer Graphics. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Computer Graphics and Visualization cluster.
   CSCI-519
   Seminar in Computer Graphics
This course examines current topics in Computer Graphics. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Computer Graphics and Visualization cluster.
   CSCI-529
   Seminar in Data Management
This course examines current topics in Data Management. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Data Management cluster, the Security cluster, or both clusters.
   CSCI-531
   Introduction to Security Measurement
The course will introduce students into the algorithmic foundations and modern methods used for security evaluation and tools design. It will combine a theoretical revision of the methods and models currently applied for computer security evaluation and an investigation of computer security through the study of user's practice. The students will be required to complete a few homework assignments, to deliver a class presentation and to implement a team project.
   CSCI-532
   Introduction to Intelligent Security Systems
The course will introduce students to the application of intelligent methodologies in computer security and information assurance systems design. It will review different application areas such as intrusion detection and monitoring systems, access control and biological authentication, firewall structure and design. The students will be required to implement a course project on design of a particular security tool with an application of an artificial intelligence methodology and to undertake its performance analysis.
   CSCI-539
   Seminar in Intelligent Systems
This course examines current topics in Intelligent Systems. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Intelligent Systems cluster, the Computational Vision and Acoustics cluster, the Security cluster, or some combination of these three clusters.
   CSCI-541
   Programming Skills
The goal of this course is to introduce the students to a programming paradigm and an appropriate programming language chosen from those that are currently important or that show high promise of becoming important. A significant portion of the learning curve occurs through programming assignments with exemplary solutions discussed later in class. The instructor will post specifics prior to registration. With the approval of the program coordinator, the course can be taken for credit more than once, provided each instance deals with a different paradigm and language.
   CSCI-549
   Seminar in Languages and Tools
This course examines current topics in Languages and Tools. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Languages and Tools cluster, the Security cluster, or both clusters.
   CSCI-559
   Seminar in Systems
This course examines current topics in Systems. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Distributed Systems cluster, the Architecture and Operating Systems cluster, the Security cluster, or some combination of these three clusters.
   CSCI-569
   Seminar in Theory
This course examines current topics in Theory. This is intended to allow faculty to pilot potential new undergraduate offerings. Specific course details (such as prerequisites, course seminar, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific seminar course in this area. Specific course instances will be identified as belonging to the Theory cluster, the Security cluster, or both clusters.
   CSCI-599
   Computer Science Undergraduate Independent Study
Students work with a supervising faculty member on topics of mutual interest. A student works with a potential faculty sponsor to draft a proposal that describes what a student plans to do, what deliverables are expected, how the student's work will be evaluated, and how much credit will be assigned for successful completion of the work. The faculty sponsor proposes the grade, but before the grade is officially recorded, the student must submit a final report that summarizes what was actually accomplished.
  CSCI-610
   Foundations of Computer Graphics
Foundations of Computer Graphics is a study of the hardware and software principles of interactive raster graphics. Topics include an introduction to the basic concepts, 2-D and 3-D modeling and transformations, viewing transformations, projections, rendering techniques, graphical software packages and graphics systems. The course will focus on rasterization techniques and emphasize the hardware rasterization pipeline including the use of hardware shaders. Students will use a standard computer graphics API to reinforce concepts and study fundamental computer graphics algorithms. Programming projects and a survey of the current graphics literature will be required. Note: students who complete CSCI-510 may not take CSCI-610 for credit.
  CSCI-620
   Introduction to Big Data
This course provides a broad introduction to the exploration and management of large datasets being generated and used in the modern world. First, practical techniques used in exploratory data analysis and mining are introduced; topics include data preparation, visualization, statistics for understanding data, and grouping and prediction techniques. Second, approaches used to store, retrieve, and manage data in the real world are presented; topics include traditional database systems, query languages, and data integrity and quality. Case studies will examine issues in data capture, organization, storage, retrieval, visualization, and analysis in diverse settings such as urban crime, drug research, census data, social networking, and space exploration. Big data exploration and management projects, a term paper and a presentation are required. Sufficient background in database systems and statistics is recommended.
  CSCI-621
   Database System Implementation
This course provides a broad introduction to database management systems including data modeling, the relational model, and SQL. Database system implementation issues are covered next, where the focus is on data structures and algorithms used to implement database management systems. Topics include physical data organizations, indexing and hashing, query processing and optimization, database recovery techniques, transaction management, concurrency control, and database performance evaluation. Current research topics in database system implementation are also explored. Programming projects, a term paper, and presentations will be required.
  CSCI-622
   Data Security and Privacy
This course examines policies, methods and mechanisms for securing enterprise and personal data and ensuring data privacy. Topics include data integrity and confidentiality; access control models; secure database architectures; secure transaction processing; information flow, aggregation, and inference controls; auditing; securing data in contemporary (relational, XML and other NO SQL) database systems; data privacy; and legal and ethical issues in data protection. Programming projects are required.
  CSCI-630
   Foundations of Artificial Intelligence
An introduction to the theories and algorithms used to create artificial intelligence (AI) systems. Topics include search algorithms, logic, planning, machine learning, and applications from areas such as computer vision, robotics, and natural language processing. Programming assignments and oral/written summaries of research papers are required.
  CSCI-631
   Foundations of Computer Vision
An introduction to the underlying concepts of computer vision and image understanding. The course will consider fundamental topics, including image formation, edge detection, texture analysis, color, segmentation, shape analysis, detection of objects in images and high level image representation. Depending on the interest of the class, more advanced topics will be covered, such as image database retrieval or robotic vision. Programming assignments are an integral part of the course. Note: students who complete CSCI-431 may not take CSCI-631 for credit.
  CSCI-632
   Mobile Robot Programming
This course covers standard and novel techniques for mobile robot programming, including software architectures, reactive motion control, map building, localization and path planning. Other topics may include multiple robot systems, robot vision and non-traditional and dynamic robots. Students will implement various algorithms in simulation as well as on a real robot, and investigate and report on current research in the area. Course offered every other year.
  CSCI-633
   Biologically Inspired Intelligent Systems
There have been significant advances in recent years in the areas of neuroscience, cognitive science and physiology related to how humans process information. In this course students will focus on developing computational models that are biologically inspired to solve complex problems. A research paper and programming project on a relevant topic will be required. A background in biology is not required.
  CSCI-641
   Advanced Programming Skills
The goal of this course is to introduce the students to a programming paradigm and an appropriate programming language chosen from those that are currently important or that show high promise of becoming important. A significant portion of the learning curve occurs through programming assignments with exemplary solutions discussed later in class. The instructor will post specifics prior to registration. With the approval of the program coordinator, the course can be taken for credit more than once, provided each instance deals with a different paradigm and language. A term project involving independent investigation is also required. Note: students who complete CSCI-541 may not take CSCI-641 for credit.
  CSCI-642
   Secure Coding
This course provides an introduction to secure coding including topics such as principles of secure coding, security architectures and design, operational practices and testing, programmatic use of cryptography, and defenses against software exploitation. Other topics include software based fault isolation, type-safe languages, certifying compilers; proof-carrying code, and automated program analysis and program rewriting. Programming projects, presentations, and a term paper will be required.
  CSCI-651
   Foundations of Computer Networks
This course is an introduction to the concepts and principles of computer networks. Students will design and implement projects using application protocols, and will study transport, network, and data link protocols and algorithms. The course also includes an introduction to local area networks, data transmission fundamentals, and network security. Programming projects and reading research papers will be required.
  CSCI-652
   Distributed Systems
An introduction to the study of distributed systems. The course covers distributed system architectures such as client-server and peer-to-peer, distributed system design issues such as communication, fault tolerance, coordination, and deadlock, distributed system middleware such as remote method invocation (RMI) and tuple space, and the theory of distributed algorithms such as logical clocks and leader election. Programming projects are required.
  CSCI-654
   Foundations of Parallel Computing
This course is a study of the hardware and software issues in parallel computing. Topics include an introduction to the basic concepts, parallel architectures and network topologies, parallel algorithms, parallel metrics, parallel languages, granularity, applications, parallel programming design and debugging. Students will become familiar with various types of parallel architectures and programming environments.
  CSCI-661
   Foundations of Computer Science Theory
This course provides an introduction to the theory of computation, including formal languages, grammars, automata theory, computability, and complexity. This course serves as a bridge course for graduate students and cannot be taken by undergraduate students without permission from the CS Undergraduate Program Coordinator. Note: Students who complete CSCI 262 or CSCI 263 may not take CSCI 661 for credit.
  CSCI-662
   Foundations of Cryptography
This course provides an introduction to cryptography, its mathematical foundations, and its relation to security. It covers classical cryptosystems, private-key cryptosystems (including DES and AES), hashing and public-key cryptosystems (including RSA). The course also provides an introduction to data integrity and authentication. Note: students who complete CSCI-462 may not take CSCI-662 for credit.
  CSCI-664
   Computational Complexity
This course provides an introduction to computational complexity theory. It covers the P=NP problem, time and space complexity, randomization, approximability, and relativization. Course offered every other year.
  CSCI-665
   Foundations of Algorithms
This course provides an introduction to the design and analysis of algorithms. It covers a variety of classical algorithms and their complexity and will equip students with the intellectual tools to design, analyze, implement, and evaluate their own algorithms. Note: students who take CSCI-261 or CSCI-264 may not take CSCI-665 for credit.
  CSCI-711
   Global Illumination
This course will investigate the theory of global illumination (GI) in computer image synthesis. Seminal computer graphics papers will be used to explore the various components of the GI pipeline and explain how the path of light in a virtual scene can be simulated and used to create photorealistic imagery. The course will emphasize the theory behind various GI rendering tools and libraries available for image synthesis. The student will put theory into practice via a set of programming assignments and a capstone project. Topics will include light and color, three-dimensional scene specification, camera models, surface materials and textures, GI rendering methods, procedural shading, tone reproduction, and advanced rendering techniques. Readings and summaries of Computer Graphics literature will be required.
  CSCI-712
   Computer Animation: Algorithms and Techniques
This course takes a look at computer animation from a programmer's perspective. It will investigate the theory, algorithms and techniques for describing and programming motion for virtual 3D worlds. Approaches that will be explored include keyframing systems; kinematics, motion of articulated figures, procedural and behavioral systems, and the use of motion capture data. This course is a programming-oriented course with major deliverables including the implementation of techniques presented in lecture as well as a final project concentrating on an area of a student's choice. Students enrolling in this course are expected to have proficiency in the use of at least one 3D API (e.g. OpenGL, DirectX, Java3D). Readings and summaries of Computer Graphics literature will be required. Offered every other year.
  CSCI-713
   Applied Perception in Graphics and Visualization
The goal of this course is to introduce students to the field of applied perception in graphics and visualization and demonstrate how it has contributed to the development of better display systems and computer graphics rendering techniques. The delivery of the course material will be done primarily through lectures with biweekly programming assignments based upon the techniques presented in class. Students will also be exposed to a wide range of technical papers and be expected to make classroom presentations on selected topics in the field of applied perception in graphics and visualization.
  CSCI-714
   Scientific Visualization
Visualizations of scientific data are helpful in order to understand complex, n-dimensional behavior of simulations. This course covers techniques that are needed to visualize n-dimensional data sets produced by real scientific simulations. Topics include: Visualization design, discrete visualization techniques, scalar and volume visualization techniques and perception of visualizations. Additionally topics such as distributed file systems, specialized file systems and distributed computing needed in order to create the visualizations will be covered. A team project and presentations are required. Course offered every other year.
  CSCI-715
   Applications in Virtual Reality
This course will investigate the application of virtual reality software and technology within a given domain. Working in sets of technical teams, students will collectively investigate and solve a large-scale visualization task within that problem domain. Focus of individual student teams may include (but is not limited to) distributed VR framework, viewing applications, interaction with VR devices / displays, and audio in virtual environments. Students will be required to read and summarize selected articles from VR literature, as well as papers specific to the problem domain being investigated, to assist in making design decisions. A report or survey of one aspect of using a virtual reality system within the given domain is also required. Students should have a strong programming background and a proficiency in a 3D API (OpenGL, DirectX, or Java3D). Students with expertise in distributed systems and an interest in Graphics or virtual reality are also encouraged to register. Offered every other year.
  CSCI-716
   Computational Geometry
Computational Geometry is a subfield of algorithm theory that involves the design and analysis of efficient algorithms for problems involving geometric input and output. In this course the focus will be largely on problems in 2-dimensional space (lines, line segments, polygons, planes, polyhedral, curved objects, etc.) with occasional inclusion of higher dimensional problems. There are many fields of computer science that deal with solving problems of a geometric nature. These include computer graphics, computer vision and image processing, robotics, computer-aided design and manufacturing, computational fluid-dynamics, and geographic information systems, to name a few. One of the goals of this computational geometry course is to provide the basic geometric tools necessary to solve problems in these fields. Note: Programming projects are required.
  CSCI-719
   Topics in Computer Graphics
This course examines current topics in Computer Graphics. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances presented will be identified as belonging to the Computer Graphics and Visualization cluster.
  CSCI-720
   Big Data Analytics
This course provides a graduate-level introduction to the concepts and techniques used in data mining. Topics include the knowledge discovery process; prototype development and building data mining models; current issues and application domains for data mining; and legal and ethical issues involved in collecting and mining data. Both algorithmic and application issues are emphasized to permit students to gain the knowledge needed to conduct research in data mining and apply data mining techniques in practical applications. Data mining projects, a term paper, and presentations are required.
  CSCI-721
   Data Cleaning and Preparation
This course provides an introduction to the concepts and techniques used in preparing data for subsequent data mining. Topics include the knowledge discovery process; data exploration and its role; data extraction, cleaning, integration and transformation; handling numeric, unstructured, text, web, and other forms of data; and ethical issues underlying data preparation and mining. Data cleaning projects, a term paper, and presentations are required.
  CSCI-722
   Data Analytics with Cognitive Computing
Building on prior knowledge of data analytics, this course brings in the impact of natural language processing and cognitive computing on data analysis. Topics include an overview of natural language processing; data mining, information retrieval and knowledge processing; corpus identification and preparation; training and test data and methods; current research in the field; and ethical concerns. Students will apply the concepts learned in class through team projects, programming assignments, presentations, and a research paper.
  CSCI-724
   Web Services and Service Oriented Computing
This course introduces fundamental concepts of Web services and the Service-Oriented Computing (SOC) paradigm, and reviews seminal work, current research, and modern practices in these areas. Topics in Web Services include XML; reference model (WSDL, UDDI, SOAP); service coordination and composition; and service security and privacy. Big data analytics in SOC will also be covered, such as large scale service data retrieval and storage, service clustering and classification, service recommendation, and service discovery. Students will apply the concepts learned in the class through programming assignments and a comprehensive term project.
  CSCI-729
   Topics in Data Management
This course examines current topics in Data Management. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances will be identified as belonging to the Data Management cluster, the Security cluster, or both clusters.
  CSCI-731
   Advanced Computer Vision
This course examines advanced topics in computer vision including motion analysis, video processing and model based object recognition. The topics will be studied with reference to specific applications, for example video interpretation, robot control, road traffic monitoring, and industrial inspection. A research paper, an advanced programming project, and a presentation will be required.
  CSCI-732
   Image Understanding
This course explores the theory and methodologies used to interpret images in terms of semantic content. Techniques from image processing and pattern recognition are extended for the purpose of scene understanding using both a bottom-up and a top-down approach. Topics include human visual perception, knowledge representation, object recognition, contextual classification, scene labeling, constraint propagation, interpretation trees, semantic image segmentation, 3D models and matching, active vision, and reasoning about images. Programming projects are required. Offered every other year.
  CSCI-734
   Foundations of Security Measurement and Evaluation
The course will introduce students into the algorithmic foundations and modern methods used for security evaluation. It will combine a theoretical revision of the methods and models currently applied for computer security evaluation and an investigation of computer security through study of user's practice. The students will be required to complete a few home assignments, to deliver a class presentation, to implement a team project, to lead the team's work and to undertake research on the topic assigned.
  CSCI-735
   Foundations of Intelligent Security Systems
The course will introduce students to the application of intelligent methodologies applications in computer security and information assurance system design. It will review different application areas such as intrusion detection and monitoring systems, access control and biological authentication, firewall structure and design. The students will be required to implement a course project on design of a particular security tool with an application of an artificial intelligence methodology and to undertake research and analysis of artificial intelligence applications in computer security.
  CSCI-736
   Neural Networks and Machine Learning
The course will introduce students into the current state of artificial neural networks. It will review different application areas such as intrusion detection and monitoring systems, pattern recognition, access control and biological authentication, and their design. The students will be required to conduct research and analysis of existing applications and tools as well as to implement a course programming project on design of a specified application based on neural networks and/or fuzzy rules systems.
  CSCI-737
   Pattern Recognition
An introduction to pattern classification and structural pattern recognition. Topics include Bayesian decision theory, evaluation, clustering, feature selection, classification methods (including linear classifiers, nearest-neighbor rules, support vector machines, and neural networks), classifier combination, and recognizing structures (e.g. using HMMs and SCFGs). Students will present current research papers and complete programming projects such as optical character recognizers. Offered every other year.
  CSCI-739
   Topics in Intelligent Systems
This course examines current topics in Intelligent Systems. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances will be identified as belonging to the Intelligent Systems cluster, the Computational Vision and Acoustics cluster, the Security cluster, or some combination of these three clusters. Course offered every other year.
  CSCI-740
   Programming Language Theory
This course is an introduction to the formal study of programming languages, demonstrating important intellectual tools for the precise description of programming languages and investigating the essential features of programming languages using these tools. Topics include: dynamic semantics (such as operational semantics); static semantics (such as type systems); proofs by induction on structures and derivations; formal treatment of essential programming-language features (such as assignment, scope, functions, objects, and threads). Both written and programming assignments will be required.
  CSCI-742
   Compiler Construction
This course discusses design and implementation of language processors and translators. Topics include lexical, syntactic, and semantic descriptions, algorithms for analysis tools, and programming techniques, as well as interpreters and code generation for typical computer architectures. Teams of students will be required to design and implement a programming language with nested block structure and data aggregates.
  CSCI-746
   Software Development Tools
This course investigates and evaluates various software tools used in the development of software. Topics include simple dependency-based tools such as make and ant as well as full-featured integrated development environments. Working with and proposing modeling languages for such tools is an important part of the course. Programming projects will be required.
  CSCI-749
   Topics in Languages and Tools
This course examines current topics in Languages and Tools. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances will be identified as belonging to the Languages and Tools cluster, the Security cluster, or both clusters.
  CSCI-759
   Topics in Systems
This course examines current topics in Systems. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances will be identified as belonging to the Distributed Systems cluster, the Architecture and Operating Systems cluster, the Security cluster, or some combination of these three clusters.
  CSCI-761
   Topics in Advanced Algorithms
This course focuses on advanced algorithms and data structures in a specialized area of computer science or in a specific scientific domain. Both practical and theoretical aspects of algorithms will be explored to provide coverage of the state of the art and shortcomings of computing in the specialized area. This includes proofs of correctness and complexity analysis of the algorithms. Students will write a term paper that explores the current state of research in the area or reports on the student's implementation and experiments with algorithms for a chosen problem. Students will also be required to make presentations. The instructor will post the specifics of each course offering before the registration. With the approval of the program coordinator, this course can be taken for credit more than once, provided each instance concerns a different specialized area or domain.
  CSCI-762
   Advanced Cryptography
This course investigates advanced topics in cryptography. It begins with an overview of necessary background in algebra and number theory, private- and public-key cryptosystems, and basic signature schemes. The course will cover number theory and basic theory of Galois fields used in cryptography; history of primality algorithms and the polynomial-time test of primality; discrete logarithm based cryptosystems including those based on elliptic curves; interactive protocols including the role of zero-knowledge proofs in authentication; construction of untraceable electronic cash on the net; and quantum cryptography, and one or more of digital watermarking, fingerprinting and stenography. Programming will be required.
  CSCI-769
   Topics in Theory
This course examines current topics in Theory. This is intended to allow faculty to pilot potential new graduate offerings. Specific course details (such as prerequisites, course topics, format, learning outcomes, assessment methods, and resource needs) will be determined by the faculty member(s) who propose a specific topics course in this area. Specific course instances will be identified as belonging to the Theory cluster, the Security cluster, or both clusters.

* An equivalent programming sequence may be determined by the minor adviser.

† An equivalent calculus sequence may be determined by the minor adviser.

‡ An equivalent discrete mathematics sequence may be determined by the minor adviser.