Computer Science
Undergraduate Courses
CS 1004. Introduction to Programming for Non-Majors
Cat I (offered at least 1x per Year).
This course introduces students to the fundamental principles of programming in imperative and scripting languages. Topics include control structures, iterators, functional decomposition, and basic data structures (such as records). Students will be expected to implement, test, and debug programs. Through the use of compelling applications and lab exercises, students will learn how to interface with external data systems and control devices.
CS 1101. Introduction to Program Design
Cat I (offered at least 1x per Year).
This course introduces principles of computation and programming with an emphasis on program design. Topics include the design, implementation, and testing of programs that use a variety of data structures (such as structures, lists, and trees), functions, conditionals, recursion, and higher-order functions. Students will be expected to design simple data models, and implement and debug programs in a functional programming language.
CS 1102. Accelerated Introduction to Program Design
Cat I (offered at least 1x per Year).
In the first half of the term, this course covers the same functional programming material as CS 1101 at roughly twice the pace. The second half of the term is a preview of selected advanced Computer Science topics, such as the design and implementation of application-specific languages, macros, programming with the HTTP protocol, and continuation-passing style. Students will be expected to complete an open-ended individual programming project.
CS 2011. Introduction to Machine Organization and Assembly Language
Cat I (offered at least 1x per Year).
This course introduces students to the structure and behavior of modern digital computers and the way they execute programs. Machine organization topics include the von Neumann model of execution, functional organization of computer hardware, the memory hierarchy, caching performance, and pipelining. Assembly language topics include representations of numbers in computers, basic instruction sets, addressing modes, stacks and procedures, low-level I/O, and the functions of compilers, assemblers, linkers, and loaders. The course also presents how code and data structures of higher-level languages are mapped into the assembly language and machine representations of a modern processor. Programming projects will be carried out in the C language and the assembly language of a modern processor.
CS 2102. Object-Oriented Design Concepts
Cat I (offered at least 1x per Year).
This course introduces students to an object-oriented model of programming. Building from the design methodology covered in CS 1101/CS 1102, this course shows how programs can be decomposed into classes and objects. By emphasizing design, this course shows how to implement small defect-free programs and evaluate design decisions to select an optimal design under specific assumptions. Topics include inheritance, exceptions, interface, design by contract, basic design patterns, and reuse. Students will be expected to design, implement, and debug object-oriented programs composed of multiple classes and over a variety of data structures.
CS 2103. Accelerated Object-Oriented Design Concepts
Cat I (offered at least 1x per Year).
This course covers the data structures and general program-design material from CS2102, but assumes that students have significant prior experience in object-oriented programming. The course covers object-oriented design principles and data structures more deeply and at a faster pace than in CS 2102. Students will be expected to design, implement, test, debug, and critique programs both for correctness and adherence to good object-oriented design principles. The course is designed to strengthen both the design skills and algorithmic thinking of students who already have a foundation in object-oriented programming. Advanced Placement Computer Science A courses should provide sufficient background; students from AP CS Principles courses or gentler introductions to Java Programming are advised to take CS2102 instead. Students may receive credit for only one of the following three courses: CS 2102, CS 2103, CS 210X.
CS 2119. Application Building with Object-Oriented Concepts
Cat I (offered at least 1x per Year).
This course introduces students to an object-oriented model of programming, with an emphasis on the programming approaches useful in creating software applications. Students will be expected to design, implement, and debug object-oriented programs. Topics include inheritance, user interfaces, and database access. This course is for non-CS majors with prior programming experience and an interest in building software applications.
CS 2223. Algorithms
Cat I (offered at least 1x per Year).
Building on a fundamental knowledge of data structures, data abstraction techniques, and mathematical tools, a number of examples of algorithm design and analysis worst case and average case will be developed. Topics include greedy algorithms, divide-and-conquer, dynamic programming, heuristics, and probabilistic algorithms. Problems will be drawn from areas such as sorting, graph theory, and string processing. The influence of the computational model on algorithm design will be discussed. Students will be expected to perform analysis on a variety of algorithms.
CS 2301. Systems Programming for Non-Majors
Cat I (offered at least 1x per Year).
This course introduces the C programming language and system programming concepts to non-CS majors who need to program computers in their own fields. The course assumes that students have had previous programming experience. It quickly introduces the major concepts of the C language and covers manual memory management, pointers and basic data structures, the machine stack, and input/output mechanisms. Students will be expected to design, implement, and debug programs in C. All Computer Science students and other students wishing to prepare for upper-level courses in Computer Science should take CS 2303 instead of CS 2301. Students who have credit for CS 2303 may not receive subsequent credit for CS 2301.
CS 2303. Systems Programming Concepts
Cat I (offered at least 1x per Year).
This course introduces students to a model of programming where the programming language exposes details of how the hardware stores and executes software. Building from the design concepts covered in CS 2102, this course covers manual memory management, pointers, the machine stack, and input/ output mechanisms. The course will involve large-scale programming exercises and will be designed to help students confront issues of safe programming with system-level constructs. The course will cover several tools that assist programmers in these tasks. Students will be expected to design, implement, and debug programs in C++ and C. The course presents the material from CS 2301 at a fast pace and also includes C++ and other advanced topics.
CS 3013. Operating Systems
Cat I (offered at least 1x per Year).
This course provides the student with an understanding of the basic components of a general-purpose operating system. Topics include processes, process management, synchronization, input/output devices and their programming, interrupts, memory management, resource allocation, and an introduction to file systems. Students will be expected to design and implement a large piece of system software in the C programming language. Undergraduate credit may not be earned both for this course and for CS 502.
CS 3041. Human-Computer Interaction
Cat I (offered at least 1x per Year).
This course develops in the student an understanding of the nature and importance of problems concerning the efficiency and effectiveness of human interaction with computer-based systems. Topics include the design and evaluation of interactive computer systems, basic psychological considerations of interaction, interactive language design, interactive hardware design, and special input/output techniques. Students will be expected to complete several projects. A project might be a software evaluation, interface development, or an experiment.
CS 3043. Social Implications of Information Processing
Cat I (offered at least 1x per Year).
This course makes the student aware of the social, moral, ethical, and philosophical impact of computers and computer-based systems on society, both now and in the future. Topics include major computerbased applications and their impact, human machine relationships, and the major problems of controlling the use of computers. This course is recommended for juniors and seniors.
CS 3133. Foundations of Computer Science
Cat I (offered at least 1x per Year).
This course introduces the theoretical foundations of computer science. These form the basis for a more complete understanding of, and proficiency in computer science. Topics include computational models, formal languages, and an introduction to computability and complexity theory, including NP-completeness. Students will be expected to complete a variety of exercises and proofs. Undergraduate credit may not be earned for both this course and for CS 5003. Students who have credit for CS 4123 may not receive credit for CS 3133.
CS 3431. Database Systems I
Cat I (offered at least 1x per Year).
This course introduces the student to the design, use, and application of database management systems. Topics include the relational data model, relational query languages, design theory, and conceptual data design and modeling for relational database design. Techniques that provide for data independence and minimal redundancy will be discussed. Students will be expected to design and implement database system applications. Undergraduate credit may not be earned both for this course and for CS 4432 or CS 542.
CS 3516. Computer Networks
Cat I (offered at least 1x per Year).
This course provides a broad view of computer networks. The course exposes students to all seven layers of OSI Reference Model while providing an introduction into newer topics such as wireless networking and Internet traffic concerns. The objective is to focus on an understanding of fundamental concepts of modern computer network architecture from a design and performance perspective. Topics covered include physical layer considerations, network protocols, wide area networks, local area networks, wireless networks, switches and routing, congestion, Internet traffic, and network security. Students will be expected to do extensive systems/network programming and will be expected to make use of simulation and measurement tools to gain an appreciation of current network design and performance issues. This course is also highly recommended for RBE and IMGD majors.
CS 3733. Software Engineering
Cat I (offered at least 1x per Year).
This course introduces the fundamental principles of software engineering. Modern software development techniques and life cycles are emphasized. Topics include requirements analysis and specification, analysis and design, architecture, implementation, testing and quality, configuration management, and project management. Students will be expected to complete a project that employs techniques from the topics studied. This course should be taken before any course requiring a large programming project. Undergraduate credit may not be earned both for this course and for CS 509.
CS 4099. Special Topics in Computer Science
Cat III (offered at discretion of dept/prgm).
Instances of this course will explore advanced and emerging topics that are not covered by the current regular CS offerings. Content and format will vary to suit the interests and needs of the faculty and students. This course may be repeated for credit as topics change.
CS 4120. Analysis of Algorithms
Cat II (offered at least every other Year).
This course develops the skill of analyzing the behavior of algorithms. Topics include the analysis with respect to average and worst case behavior and correctness of algorithms for internal sorting, pattern matching on strings, graph algorithms, and methods such as recursion elimination, dynamic programming, and program profiling. Students will be expected to write and analyze programs. Undergraduate credit may not be earned both for this course and for CS 5084. This course will be offered in 2022-23, and in alternating years thereafter.
CS 4123. Theory of Computation
Cat II (offered at least every other Year).
Building on the preliminaries established in CS 3133, this course explores fundamental questions of computability and complexity. Emphasis is on both mathematical foundations and applications to computing practice. Topics include the Church-Turing thesis, the halting problem, NP-completeness, time and space complexity classes, and related material as determined by the instructor. Students will be expected to read and write mathematical proofs.
CS 4233. Object-Oriented Analysis and Design
Cat II (offered at least every other Year).
This Software Engineering course will focus on the process of Object-Oriented Analysis and Design. Students will be expected to complete a large number of exercises in Domain Modeling, Use Case Analysis, and Object-Oriented Design. In addition, the course will investigate Design Patterns, which are elements of reusable object-oriented software designs. This course will survey a set of design patterns and consider how these patterns are described and used to solve design problems. This course will be offered in 2022-23, and in alternating years thereafter.
CS 4241. Webware: Computational Technology for Network Information Systems
Cat I (offered at least 1x per Year).
This course explores the computational aspects of network information systems as embodied by the World Wide Web (WWW). Topics include languages for document design, programming languages for executable content, scripting languages, design of WWW based human/computer interfaces, client/server network architecture models, high level network protocols (e.g., http), WWW network resource discovery and network security issues. Students in this course will be expected to complete a substantial software project (e.g., Java based user interface, HTML/CGI based information system, WWW search mechanisms).
CS 4341. Introduction to Artificial Intelligence
Cat I (offered at least 1x per Year).
This course studies the problem of making computers act in ways which we call intelligent. Topics include major theories, tools and applications of artificial intelligence; aspects of knowledge representation; searching and planning; and natural language understanding. Students will be expected to complete projects which express problems that require search in state spaces and to propose appropriate methods for solving the problems. Undergraduate credit may not be earned both for this course and for CS 534.
CS 4342. Machine Learning
Cat I (offered at least 1x per Year).
In this course, students will explore both theoretical and practical aspects of machine learning, including algorithms for regression, classification, dimensionality reduction, clustering, and density estimation. Specific topics may include neural networks and deep learning, Bayesian networks and probabilistic graphical models, principal component analysis, k-means clustering, decision trees and random forests, support vector machines, and kernel methods.
CS 4401. Software Security Engineering
Cat I (offered at least 1x per Year).
This course provides an introduction to the pitfalls and practices of building secure software applications. Topics will include threat modeling, secure software development, defensive programming, web security, and the interaction between security and usability. The course focuses on the application level with minor attention to operating-system level security; network-level security is not covered. Assignments involve designing and implementing secure software, evaluating designs and systems for security-related flaws, and presentations on security issues or tools. All students will be required to sign a pledge of responsible conduct at the start of the course.
CS 4404. Tools and Techniques in Computer Network Security
Cat II (offered at least every other Year).
This course introduces students to modern network security concepts, tools, and techniques. The course covers security threats, attacks, and mitigations at the operating-system and network levels (as opposed to the software level). Topics include authentication, authorization, confidentiality, integrity, anonymity, privacy, intrusion detection and response, and cryptographic applications. Students will become familiar with modern security protocols and tools. Assignments will involve using security-testing software to uncover vulnerabilities, network packet analyzers, and existing security applications to create secure network implementations. The course requires enough programming and systems background to understand attacks and use systems tools but does not involve significant programming projects. Assignments and projects will use a Linux base for implementation.
CS 4432. Database Systems II
Cat II (offered at least every other Year).
This course concentrates on the study of the internals of database management systems. Topics include principles and theories of physical storage management, advanced query languages, query processing and optimization, index structures for relational databases, transaction processing, concurrency control, distributed databases, and database recovery, security, client server and transaction processing systems. Students may be expected to design and implement software components that make up modern database systems. Undergraduate credit may not be earned both for this course and CS 542. This course will be offered in 2021-22, and in alternating years thereafter.
CS 4445. Data Mining and Knowledge Discovery in Databases
Cat II (offered at least every other Year).
This course provides an introduction to Knowledge Discovery in Databases (KDD) and Data Mining. KDD deals with data integration techniques and with the discovery, interpretation, and visualization of patterns in large collections of data. Topics covered in this course include data warehousing and mediation techniques; data mining methods such as rule-based learning, decision trees, association rules, and sequence mining; and data visualization. The work discussed originates in the fields of artificial intelligence, machine learning, statistical data analysis, data visualization, databases, and information retrieval. Several scientific and industrial applications of KDD will be studied. This course will be offered in 2021-22, and in alternating years thereafter.
CS 4513. Distributed Computing Systems
Cat II (offered at least every other Year).
This course extends the study of the design and implementation of operating systems begun in CS 3013 to distributed and advanced computer systems. Topics include principles and theories of resource allocation, file systems, protection schemes, and performance evaluation as they relate to distributed and advanced computer systems. Students may be expected to design and implement programs that emphasize the concepts of file systems and distributed computing systems using current tools and languages. Undergraduate credit may not be earned both for this course and for CS 502. This course will be offered in 2021-22, and in alternating years thereafter.
CS 4515. Computer Architecture
Cat II (offered at least every other Year).
This course explores the architectural design of modern computer systems in terms of instruction sets and the organization of processors, controllers, memories, devices, and communication links. Topics include an overview of computer architectures and system components, theoretical foundations, instruction-level and thread-level pipelining, multifunction pipelines, multi-core systems, caching and memory hierarchies, and multi-core and parallel computer organization. Students may be expected to design and implement programs that simulate significant components of modern computer architectures. This course will be offered in 2022-23, and in alternating years thereafter.
CS 4516. Advanced Computer Networks
Cat II (offered at least every other Year).
This course provides an in-depth look into computer networks. While repeating some of the areas from CS 3516, the goal is to go deeper into computer networks topics. This in-depth treatment in topics such as routing, congestion control, wireless layer protocols, and physical signaling considerations will require the use of basic queuing theory and probability to provide a more formal treatment of computer networks performance. Other topics covered include LAN and WLAN technologies, mobile wireless networks, sensor networks, optical networks, network security, intrusion detection, and network management. Students will be expected to do more sophisticated network programming than seen in CS 3516 and will conduct laboratory activities involving measuring the performance of modern networking applications running on both wired networks and infrastructure wireless networks. Undergraduate credit may not be earned both for this course and for CS 513. This course will be offered in 2021-22, and in alternating years thereafter.
CS 4518. Mobile and Ubiquitous Computing
Cat II (offered at least every other Year).
The goal of this course is to acquaint students with fundamental concepts and state-of-the-art computer science literature in mobile and ubiquitous computing. Topics to be covered include mobile systems issues, human activity and emotion sensing, location sensing, mobile human-computer interaction, mobile social networking, mobile health, power saving techniques, energy and mobile performance measurement studies, and mobile security. The course will introduce the programming of mobile devices such as smartphones running the Android operating system. Students may not earn credit for both CS 403X and CS 4518.
CS 4533. Techniques of Programming Language Translation
Cat II (offered at least every other Year).
This course studies the compiling process for high-level languages. Topics include lexical analysis, syntax analysis, semantic analysis, symbol tables, intermediate languages, optimization, code generation, and run-time systems. Students will be expected to use compiler tools to implement the front end and to write a program to implement the back end of a compiler for a recursive programming language. Undergraduate credit may not be earned for both this course and for CS 544. This course will be offered in 2022-23, and in alternating years thereafter.
CS 4536. Programming Languages
Cat II (offered at least every other Year).
This course covers the design and implementation of programming languages. Topics include data structures for representing programming languages, implementing control structures (such as functions, recursion, and exceptions), garbage collection, and type systems. Students will be expected to implement several small languages using a functional programming language. Undergraduate credit may not be earned for both this course and CS 536. This course will be offered in 2021-22, and in alternating years thereafter.
CS 453X. MACHINE LEARNING
In this course, students will explore both theoretical and practical aspects of machine learning, including algorithms for regression, classification, dimensionality reduction, clustering, and density estimation. Specific topics may include: neural networks and deep learning, Bayesian networks and probabilistic graphical models, principal component analysis, k-means clustering, decision trees and random forests, support vector machines and kernel methods.
Recommended background: Knowledge of Multivariate Calculus (MA 1024 or MA 1034), Linear Algebra (such as MA 2071), Probability (MA 2621 or MA 2631), and Algorithms (CS 2223).
CS 4731. Computer Graphics
Cat I (offered at least 1x per Year).
This course studies the use of the computer to model and graphically render two- and three-dimensional structures. Topics include graphics devices and languages, 2- and 3-D object representations, and various aspects of rendering realistic images. Students will be expected to implement programs which span all stages of the 3-D graphics pipeline, including clipping, projection, arbitrary viewing, hidden surface removal, and shading. Undergraduate credit may not be earned both for this course and for CS 543.
CS 4732. Computer Animation
Cat II (offered at least every other Year).
This course provides an in-depth examination of the algorithms, data structures, and techniques used in modeling and rendering dynamic scenes. Topics include animation hardware and software; parametric blending techniques; modeling physical and articulated objects; forward and inverse kinematics; key-frame, procedural, and behavioral animation; and free-form deformation. Students will be expected to develop programs to implement low-level animation algorithms as well as use commercial animation tools to design and produce small- to moderately-sized animations. This course will be offered in 2022-23, and in alternating years thereafter.
CS 4804. Data Visualization
This course trains students in data visualization, the graphical communication of data and information for presentation, confirmation, and exploration. Students learn the stages of the visualization pipeline, including data characterization, mapping data attributes to graphical attributes, user task abstraction, visual display techniques, tools, paradigms, and perceptual issues. Students evaluate the effectiveness of visualizations for specific data, task, and user types. Students implement visualization algorithms and undertake projects involving the use of commercial and public-domain visualization tools.
CS 480X. DATA VISUALIZATION
This course exposes students to the field of data visualization, i.e., the graphical communication of data and information for the purposes of presentation, confirmation, and exploration. The course introduces the stages of the visualization pipeline. This includes data modeling, mapping data attributes to graphical attributes, visual display techniques, tools, paradigms, and perceptual issues. Students learn to evaluate the effectiveness of visualizations for specific data, task, and user types. Students implement visualization algorithms and undertake projects involving the use of commercial and public-domain visualization tools.
Recommended background: Knowledge of Linear Algebra (such as MA 2071), Probability theory (MA 2621), and Software Engineering (CS 3733).
Graduate Courses
CS 5003. Foundations of Computer Science: an Introduction
This is the study of mathematical foundations of computing, at a slower pace than that of CS 503 and with correspondingly fewer background assumptions. Topics include finite automata and regular languages, pushdown automata and context-free languages, Turing machines and decidability, and an introduction to computational complexity.
CS 5007. Introduction to Applications of Computer Science with Data Structures and Algorithms
This is an introductory graduate course teaching core computer science topics typically found in an undergraduate Computer Science curriculum, but at a graduate-level pace. It is primarily intended for students with little formal preparation in Computer Science to gain experience with fundamental Computer Science topics. After a review of programming concepts the focus of the course will be on data structures from the point of view of the operations performed upon the data and to apply analysis and design techniques to non-numeric algorithms that act on data structures. The data structures covered include lists, stacks, queues, trees and graphs. Projects will focus on the writing of programs to appropriately integrate data structures and algorithms for a variety of applications. This course may not be used to satisfy degree requirements for a B.S., M.S., or Ph.D. degree in Computer Science or a minor in Computer Science. It may satisfy the requirements for other degree programs at the discretion of the program review committee for the particular degree.
CS 5008. Introduction to Systems and Network Programming
This course is focused on significant programming projects and provides an overview of the principles of computer networks and a general-purpose operating system. The course provides the student with an understanding of the basic components of an operating system, including processes, synchronization and memory management. The course exposes students to the Internet protocol suite networking layers while providing an introduction into topics such as wireless networking and Internet traffic considerations. The objective is to focus on an understanding of fundamental concepts of operating systems and computer network architecture from a design and performance perspective.Students will be expected to design and implement a variety of programming projects to gain an appreciation of the design of operating systems and network technologies. This course may not be used to satisfy degree requirements for a B.S., M.S., or Ph.D. degree in Computer Science or a minor in Computer Science. It may satisfy the requirements for other degree programs at the discretion of the program review committee for the particular degree.
CS 504. Analysis of Computations and Systems
The following tools for the analysis of computer programs and systems are studied: probability, combinatorics, the solution of recurrence relations and the establishment of asymptotic bounds. A number of algorithms and advanced data structures are discussed, as well as paradigms for algorithm design.
CS 5084. Introduction to Algorithms: Design and Analysis
This course is an introduction to the design, analysis and proofs of correctness of algorithms. Examples are drawn from algorithms for many areas. Analysis techniques include asymptotic worst case and average case, as well as amortized analysis. Average case analysis includes the development of a probability model. Techniques for proving lower bounds on complexity are discussed, along with NP-completeness. Note: students with a strong background in design and analysis of computer systems, at the level equal to a B.S. in computer science, should not take CS 5084 and should consider taking CS 504 or CS 584.
CS 509. Design of Software Systems
This course introduces students to a methodology and specific design techniques for team-based development of a software system. Against the backdrop of the software engineering life-cycle, this course focuses on the object-oriented paradigm and its supporting processes and tools. Students will be exposed to industrial-accepted standards and tools, such as requirements elicitation, specification, modeling notations, design patterns, software architecture, integrated development environments and testing frameworks. Students will be expected to work together in teams in the complete specification, implementation and testing of a software application.
CS 513. Computer Networks
This course provides an introduction to the theory and practice of the design of computer and communications networks, including the ISO seven-layer reference model. Analysis of network topologies and protocols, including performance analysis, is treated. Current network types including local area and wide area networks are introduced, as are evolving network technologies. The theory, design and performance of local area networks are emphasized. The course includes an introduction to queueing analysis and network programming.
CS 521. Logic in Computer Science
This course is an introduction to mathematical logic from a computer science perspective. Topics covered include the exploration of model theory, proof theory, and decidability for propositional and first-order classical logics, as well as various non-classical logics that provide iseful tools for computer science (such as temporal and intuitionistic logics). The course stresses the application of logic to various areas of computer science such as computability, theorem proving, programming languages, specification,and verification. The specific applications included will vary by instructor.
CS 528. Mobile and Ubiquitous Computing
This course acquaints participants with the fundamental concepts and state-of-the-art computer science research in mobile and ubiquitous computing. Topics covered include mobile systems issues, human activity and emotion sensing, location sensing, mobile HCI, mobile social networking, mobile health, power saving techniques, energy and mobile performance measurement studies and mobile security. The course consists of weekly presentations on current advanced literature, discussions and a term project. The term project involves implementing research ideas on a mobile device such as a smartphone.
CS 529. Multimedia Networking
This course covers basic and advanced topics related to using computers to support audio and video over a network. Topics related to multimedia will be selected from areas such as compression, network protocols, routing, operating systems and human computer interaction. Students will be expected to read assigned research papers and complete several programming intensive projects that illustrate different aspects of multimedia computing.
CS 534. Introduction to Artificial Intelligence
This course gives a broad survey of artificial intelligence. The course will cover methods from search, probabilistic reasoning, and learning, among other topics. Selected topics involving the applications of these tools are investigated. Such topics might include natural language understanding, scene understanding, game playing, and planning.
CS 535. Advanced Topics in Operating Systems
This course discusses advanced topics in the theory, design and implementation of operating systems. Topics will be selected from such areas as performance of operating systems, distributed operating systems, operating systems for multiprocessor systems and operating systems research.
CS 536. Programming Language Design
This course discusses the fundamental concepts and general principles underlying current programming languages and models. Topics include control and data abstractions, language processing and binding, indeterminacy and delayed evaluation, and languages and models for parallel and distributed processing. A variety of computational paradigms are discussed: functional programming, logic programming, object-oriented programming and data flow programming.
CS 538. Knowledge-Based Systems
The course will review knowledge-based problemsolving systems. It will concentrate on an analysis of their architecture, knowledge and problemsolving style in order to classify and compare them. An attempt will be made to evaluate the contribution to our understanding of problems that such systems can tackle.
CS 539. Machine Learning
The focus of this course is machine learning for knowledge-based systems. It will include reviews of work on similarity-based learning (induction), explanation-based learning, analogical and case-based reasoning and learning, and knowledge compilation. It will also consider other approaches to automated knowledge acquisition as well as connectionist learning.
CS 540. Artificial Intelligence in Design
The main goal of this course is to obtain a deeper understanding of what design is, and how AI might be used to support and study it. Students will examine some of the recent Al-based work on design problem-solving. The course will be run in seminar style, with readings from the current literature and with student presentations. The domains will include electrical engineering design, mechanical engineering design, civil engineering design and software design (i.e., automatic programming). This course will be of interest to those wanting to prepare for research in design, or those wishing to increase their understanding of expert systems. Graduate students from departments other than computer science are welcome.
CS 542. Database Management Systems
An introduction to the theory and design of data-base management systems. Topics covered include internals of database management systems, fundamental concepts in database theory, and database application design and development. In particular, logical design and conceptual modeling, physical database design strategies, relational data model and query languages, query optimization, transaction management and distributed databases. Typically there are hands-on assignments and/or a course project. Selected topics from the current database research literature may be touched upon as well.
CS 543. Computer Graphics
This course examines typical graphics systems, both hardware and software; design of low-level software support for raster displays; 3-D surface and solids modeling; hidden line and hidden surface algorithms; and realistic image rendering including shading, shadowing, reflection, refraction and surface texturing.
CS 544. Compiler Construction
A general approach to the design of language processors is presented without regard for either the source language or target machine. All phases of compilation and interpretation are investigated in order to give the student an appreciation for the overall construction of a compiler. Typical projects may include implementation of a small compiler for a recursive or special-purpose language.
CS 546. Human-Computer Interaction
This course prepares graduate students for research in human-computer interaction. Topics include the design and evaluation of interactive computer systems, basic psychological considerations of interaction, interactive language design, interactive hardware design and special input/output techniques. Students are expected to present and review recent research results from the literature, and to complete several projects.
CS 548. Knowledge Discovery and Data Mining
This course presents current research in Knowledge Discovery in Databases (KDD) dealing with data integration, mining, and interpretation of patterns in large collections of data. Topics include data warehousing and data preprocessing techniques; data mining techniques for classification, regression, clustering, deviation detection, and association analysis; and evaluation of patterns minded from data. Industrial and scientific applications are discussed.
CS 557. Software Security Design and Analysis
Software is responsible for enforcing many central security goals in computer systems. These goals include authenticating users and other external principals, authorizing their actions, and ensuring the integrity and confidentiality of their data. This course studies how to design, implement, and analyze mechanisms to enforce these goals in both web systems and programs in traditional languages. Topics include: identifying programming choices that lead to reliable or flawed security outcomes, successful and unsuccessful strategies for incorporating cryptography into software, and analysis techniques that identify security vulnerabilities. The course will cover both practical and theoretical aspects of secure software, and will include a substantial secure software design project.
CS 558. Computer Network Security
This course covers core security threats and mitigations at the network level. Topics include: denial-of-service, network capabilities, intrusion detection and prevention systems, worms, botnets, Web attacks, anonymity, honeypots, cybercrime (such as phishing), and legality and ethics. The course prepares students to think broadly and concretely about network security; it is not designed to teach students low-level tools for monitoring or maintaining system security. Assignments and projects will assess each students ability to think both conceptually and practically about network security.
CS 561. Advanced Topics in Database Systems
This course covers modern database and information systems as well as research issues in the field. Topics and systems covered may include object-oriented, workflow, active, deductive, spatial, temporal and multimedia databases. Also discussed will be recent advances in database systems such as data mining, online analytical processing, data warehousing, declarative and visual query languages, multimedia database tools, web and unstructured data sources, and client-server and heterogeneous systems. The specific subset of topics for a given course offering is selected by the instructor. Research papers from recent journals and conferences are used. Group project required.
CS 564. Advanced Topics in Computer Security
This course examines one or more selected current issues in the area of computer security. Specific topics covered are dependent on the instructor. Potential topics include: modeling and analyzing security protocols, access-control, network security, and human-centered security.
CS 571. Case Studies in Computer Security
This course examines security challenges and failures holistically, taking into account technical concerns, human behavior, and business decisions. Using a series of detailed case studies, students will explore the interplay among these dimensions in creating secure computing systems and infrastructure. Students will also apply lessons from the case studies to emerging secure-systems design problems. The course requires active participation in class discussions, presentations, and writing assignments. It does not involve programming, but assumes that students have substantial prior experience with security protocols, attacks, and mitigations at the implementation level. This course satisfies the behavioral component of the M.S. specialization in computer security.
CS 573. Data Visualization
This course exposes students to the field of data visualization, i.e., the graphical communication of data and information for the purposes of presentation, confirmation, and exploration. The course introduces the stages of the visualization pipeline. This includes data modeling, mapping data attributes to graphical attributes, visual display techniques, tools, paradigms, and perceptual issues. Students learn to evaluate the effectiveness of visualizations for specific data, task, and user types. Students implement visualization algorithms and undertake projects involving the use of commercial and public-domain visualization tools. Students also read papers from the current visualization literature and do classroom presentations.
CS 584. Algorithms: Design and Analysis
This covers the same material as CS5084 though at a more advanced level. As background, students should have experience writing programs in a recursive, high-level language and should have the background in mathematics that could be expected from a B.S. in Computer Science.
CS 588. Computer Science Capstone Experience
The capstone represents a substantial evaluation of the students computer science experience. Students are encouraged to select projects with practical experience relevant to their career goals and personal development. In the capstone, students will propose a project idea in writing with concrete milestones, receive feedback, and pursue the proposal objectives. Students are encouraged to work in teams. This course is a degree requirement for the Master of Computer Science (MCS) and may not be taken before completion of 21 credits in the program. Given its particular role, this course may not be used to satisfy degree requirements for a BS, MS, or PhD degree in Computer Science or a minor in Computer Science. It may not be taken by students in other degree programs.
CS 591. Fundamentals in Cyber Security for Teachers
This course is focused on fundamentals of network and computer security with an emphasis on how intruders gain access to systems, how they escalate privileges, and what steps can be taken to secure a system against such attacks. Topics include computer networking basics, operating system basics, vulnerability, and attacks (social engineering, distributed denial of service attacks, buffer overflows, race conditions, trojans, and viruses), intrusion penetration, cyber defenses, network hardening, system hardening, and security administration. This course enrolls high school teachers based on their education, teaching, and/or professional experience. They must have earned the equivalent of a four-year U.S. bachelors degree to be considered for enrollment. This course is not eligible for credit for the BS/MS programs (either via MS-CS or MS-SEC), MS-CS, MS-SEC, or PhD-CS degrees.
CS 592. Introduction to Digital Forensics for Teachers
This course covers basic concepts and skills of digital forensics. Topics include the digital forensics profession, basic investigation procedure, legal aspects of forensics, setting up the forensic lab environment, evidence data acquisition, forensic analysis of different computer systems (Linux, Mac, and Windows), and data hiding techniques; projects involving using common digital forensic tools. This course enrolls high school teachers based on their education, teaching, and/or professional experience. They must have earned the equivalent of a four-year U.S. bachelors degree to be considered for enrollment. This course is not eligible for credit for the BS/MS programs (either via MS-CS or MS-SEC), MS-CS, MS-SEC, or PhD-CS degrees.
CS 593. Cyber Security Teaching Methods
This course is focused on introduction to existing generally accepted guidelines and frameworks (such as HSCCG, CSEC, CAE Knowledge Units, NCWF) in the discipline of cyber security. Methods for teaching cyber security to transform cyber security subject matter, with pedagogical content knowledge, into student learning. Topics include culturally-relevant methods, scaffolding knowledge, differentiation, assessment, and cyber security instructional technologies (ranges, CTFs, competitions, and unplugged activities). This course enrolls high school teachers based on their education, teaching, and/or professional experience. They must have earned the equivalent of a four-year U.S. bachelors degree to be considered for enrollment. This course is not eligible for credit for the BS/MS programs (either via MS-CS or MS-SEC), MS-CS, MS-SEC, or PhD-CS degrees.
CS 596. Advanced Digital Forensics and Incident Response for Teachers
This course focuses on providing students practical hands-on experiences on digital forensics, cyber-crime scene analysis and electronic discovery. Topics include technical methodologies and formal procedures for conducting forensic investigations; data acquisition, data recovery, file systems and storage analysis, file carving, data hiding and steganography, anti-forensics, network, and mobile forensics; projects involving using, understanding, and designing digital forensics tools. This course enrolls high school teachers based on their education, teaching, and/or professional experience. They must have earned the equivalent of a four-year U.S. bachelors degree to be considered for enrollment. This course is not eligible for credit for the BS/MS programs (either via MS-CS or MS-SEC), MS-CS, MS-SEC, or PhD-CS degrees.