Fall 2017 Special Topic Courses
CSC 295 - 002 Computer Science Education: Training for Teaching Assistants - Dr. Heckman and Ms. Marini
Prerequisites: None
Description: This class provides training for teaching assistants (TAs) of undergraduate computer science courses. Students who enroll in the course should be employed as a TA during the semester of instruction or seeking future employment as a TA.
Students will learn about logistical aspects of TAing (tools and evaluation of student work); student interactions and concerns (including office hours and diversity training); and educational theory (active learning; creation of assessments, evaluation of teaching; and effective education). Students will be expected to complete a project, teaching sample, and reflection.
CSC 495 - 001 Software Security - Dr. King
Prerequisites: CSC 316
Description: This class is the undergraduate version of CSC 515.
Introduces students to the discipline of designing, developing, and testing secure and dependable software-based systems. Students will learn about risks and vulnerabilities, and effective software security techniques. Topics include common vulnerabilities, access control, information leakage, logging, usability, risk analysis, testing, design principles, security policies, and privacy.
By the end of the course, you should be able to do the following:
- Security risk management. Students will be able to assess the security risk of a system under development. Risk management will include the development of formal and informal misuse case and threat models. Risk management will also involve the utilization of security metrics.
- Security testing. Students will be able to perform all types of security testing, including fuzz testing at each of these levels: white box, grey box, and black box/penetration testing.
- Secure coding techniques. Students will understand secure coding practices to prevent common vulnerabilities from being injected into software.
- Security requirements, validation and verification. Students will be able to write security requirements (which include privacy requirements). They will be able to validate these requirements and to perform additional verification practices of static analysis and security inspection.
CSC 495 - 002 Privacy - Dr. Staddon
Prerequisites: CSC 316
- Topics:
- Nonymization/Reidentification: Reidentification attacks (2 weeks)
- Database protection mechanisms, k-anonymity, l-diversity, t-closeness (2 weeks)
- Differential privacy (1 week)
- PETs and Usability:
- Private information retrieval
- Search over encrypted data
- Targeting/Personalization and privacy
- Anonymous communication protocols (e.g. onion routing)
- Enhancing the privacy of text (e.g. stylometry analysis, inference detection)
- Machine learning approaches to measuring privacy concerns
- Qualitative approaches to measuring privacy concerns
- Data mining techniques for inference detection
- Privacy survey design techniques
CSC 495 - 003 Cloud Computing - Dr. Dreher
Prerequisites: CSC 316
Description: The course will provide an introduction and overview to cloud computing principles and architectures at the undergraduate level. The course will start by reviewing the history of centralized and distributed computing and trace how developments over the years have resulted in the current cloud computing technology of today. The course will provide an in-depth overview of cloud types and services, virtualization and cloud architectures for both private and public cloud offerings. Networking topics of relevance to cloud computing will also be discussed. After the foundations of cloud computing have been presented, the course will examine how cloud computing is impacted by performance, security, cost, usability, and utility of cloud computing solutions for various “as a service” implementations. The course will also introduce advanced topics such as cloud storage and cloud hosted databases. Additional topics will examine both the economic and legal aspects of cloud computing systems. Students will learn how to critically evaluate cloud solution options, including the economic and legal aspects of deploying cloud computing systems. The course will also include hands-on lab work building a cloud computing system using the NC State VCL software.
CSC 495 - 004 Compiler Theory - Dr. Shen
Prerequisites: CSC 316 and CSC 333
Description: This is the undergraduate version of CSC 512.
This course covers the basic topics in constructing compilers for programming languages, which include: Overview of Compilation, Scanning, Parsing, Context‐Sensitive Analysis, Intermediate Representations, Procedure Abstraction, Code Shape, Introduction to Code Optimization, Code Generation, and Several Advanced Topics in Program Optimization.
By the end of the course, students should be able to design and implement algorithms for scanners, parsers, semantic analyzers; to critique different implementation choices and analysis approaches; to understand the fundamental theory on regular expression, DFA, NFA, context-free and context-sensitive grammars; to reiterate basic algorithms for register allocation, instruction scheduling, instruction selection; and to comprehend the challenges in code optimizations.
CSC 495 - 005 / 591 - 001 Cryptography - Dr. Alessandra Scafuro
Prerequisites: CSC 316, CSC 226
Description: Cryptography is everywhere in our everyday life. Whenever we connect to Facebook, shop on Amazon, call Lyft, our device runs a sequence of cryptographic protocols that enable for secure communication over a public network such as the Internet. In this class you will learn the concepts and the algorithms behind such cryptographic protocols. You will learn how to formally define security properties such as confidentiality and integrity of data; you will be able to formally prove that a cryptographic protocol achieves a certain security property; and you will be able to identify the cryptographic tools needed in real world protocols [such as SSL, Bitcoin].
You will also discover that cryptography has a much broader range of applications. It solves absolutely paradoxical problems such as proving knowledge of a secret without ever revealing the secret [zero knowledge proofs], or computing the output of a function without ever knowing the input of the function [secure computation].
Note that in this course we do not focus on implementation, neither programming of cryptographic schemes.
CSC 495/591 - 010 Data Driven Decision Making - Dr. Kowolenko
Prerequisites: CSC 316
Description: This course will provide the students with an understanding of the criteria required in decision-making including quantifying stakeholder value, dealing with uncertainty and risk, and critical problem-solving methodologies. Understanding and qualifying data sources, use of structured and unstructured data, unstructured text analytics, decision-making and machine learning algorithms will be used to design an application that can be used for business intelligence (BI) while participating in an action learning setting. Focuses on exploring the decisions processes based on the output of Data Sciences methodologies.
CSC 495/791 - 011 Parameterized Algorithms & Complexity - Dr. Sullivan
Prerequisites: CSC 333
Description: Although it's great when we can prove that a problem is NP-hard (or worse!), in the real world, we usually need to solve it anyways. Without resorting to heuristics, what options do we have? The algorithms community has introduced multiple paradigms over the years for dealing with computational hardness (e.g. approximation, randomization, and average-case analysis). Parameterization is the newest of these approaches (introduced to the world about the same time you were), and has become a crucial tool in cutting-edge algorithm design and analysis.
Classical computational complexity measures an algorithm's running time in terms of the problem size. However, in real-world settings, there is often additional information available -- for example, assumptions on the data or limitations on the kinds of solutions we're interested in. To capitalize on this, we introduce an integer "parameter" that encodes this extra information, and allow our algorithms' complexity to depend on both the input length and the parameter value. Often, this allows us to design algorithms which run in time polynomial in the problem size (but exponential or worse in the parameter value -- they are NP-hard problems, after all). The challenge is to identify parameterizations where complex instances still have small parameter values. This finer-grained notion of complexity also allows us to further classify NP-hard problems and prove new lower bounds on achievable running times.
This research-oriented course will introduce key definitions and techniques from the current body of literature on parameterized algorithms and complexity, in tandem with opportunities to work collaboratively on open problems.
CSC 591 - 002 Data Intensive Computing - Dr. Freeh
Prerequisites: None
Description: This course will explore processing massive amounts of data. Students will study current software frameworks and tools. They will understand the design principles underlying large clusters that support data intensive computing. This project-oriented course will survey many distributed computing frameworks, such as Hadoop, BOINC, and HPCC. Each student will work in a medium-size group on a semester-long project using the above frameworks and supporting systems, such as HDFS, NoSQL (eg, MongoDB), and Hive.
Because the project is a significant portion of the grade students are expected to have a strong systems background, including completion of CSC 501.
Some of the topics covered:
- Big Data Problems
- Overview of Distributed Computing
- NoSQL DBs
- AWS
- ETL-extract transform load
- Stream processing
- HPCC
- Hadoop
- BOINC
- Ceph
- Kafka
- Nebula
- Druid
- Mesos
CSC591 - 003 Foundations of Data Science - Dr. Vatsavai
Prerequisites: None. An undergraduate course in statistics is helpful but not required.
Description: Students will learn core statistical data analysis principles. This course introduces principle ideas in statistical learning and help students prepare for advanced courses in data mining and machine learning. Focus will also be given on applying these principles for variety of data analytical tasks using R.
Topics: Random variables and probability distributions, exploratory data analysis, variable selection, sampling methods, histograms and probability distributions, density estimation, missing data and imputation, mixture models, latent variables, and expectation maximization, regression analysis, discriminant analysis, bagging and boosting, principle component analysis, information theory -- entropy, mutual information, Bayesian information criteria, conditional independence, rescaling and low-dimensional summaries, factor analysis, graphical causal models and causal inference, and evaluating predictive models.
CSC 591 - 004 Internet of Things Analytics - Dr. Harry Perros
Prerequisites: Basic knowledge of statistics and probability theory, programming skills. Graduate-level standing
Description: The course covers the most popular modeling and machine-learning techniques that are used in relation to the Internet of Things (IoT), such as: simulation techniques, basic queueing theory concepts, multivariate regression, time-series forecasting, clustering, neural nets, support vector machines (SVC), and hidden Markov models (HMM).
Emphasis will be placed on hands-on projects. Students enrolled in the CSC791 section will be required to do a research paper or a term project on a related topic.
Learning objectives: At the end of the course, students will be able to a) develop simulation models of IoT systems, b) apply statistical and machine-learning techniques to analyze data from IoT sensors, and c) gain experience with one more of the packages: MatLab, R, Scikit-learn (machine learning in Python), KNIME.
Students enrolled in the CSC791 or ECE 792 sections will be required to do a research paper on a related topic.
CSC 591 - 005 Systems Attacks and Defenses - Dr. Kapravelos
Prerequisites: Graduate or senior standing with at least 3.0 GPA, good knowledge of at least one high level programming language, basics of systems theory and implementation (e.g., file systems, distributed systems, networking, operating systems, etc.)
Description: In this class, we will explore several aspects of security research with the goal to understand the attacker's mindset. The class will help the students to develop a foundation and a well-rounded view for security research. We will cover some of the state-of-the-art attack/defense techniques and ongoing research activities in a number of topics in software security, web security, privacy and network security.
By the end of the course, students should be able: Explain software, network and web vulnerabilities and implement attacks against them. Understand what defense mechanisms exist against these attacks, how they work and why some of them fail against the latest attacks. Describe the methods and motivation of Internet malware and the motivations behind these attacks. Design systems and software with security in mind.
CSC 591 - 006 Game Design - Dr. Roberts
Prerequisites: None
Description: This is the graduate version of CSC 481.
The purpose of this course is to familiarize students with issues and techniques of computer games design in general, and more specifically game engine design. With the proliferation of computer games, a number of distinct genres have emerged. Each genre of computer game provides a unique set of design challenges for designers. While there are no "one size fits all" solutions to game design problems, there are a number of techniques common to many different games. These commonalities have given rise to game engines which are software tools to aid designers. Behind almost all successful commercial games is a game engine.
In this course we will examine some of the components of a commercial-strength game engine. We will survey different genres of games, using some of the unique design challenges each genre provides as a motivation for an in-depth examination of the affordances games engines provide for designing games of that genre. We will cover topics ranging from data structures, resource management, game loops and logical timing systems, scripting, error logging, and networking.
CSC 591/791 - 021 Program Repair - Dr. Stolee
Prerequisites: CSC510 (Software Engineering) preferred; graduate or senior standing with at least 3.0 GPA required, good knowledge of at least one high level programming language required.
Description: All software has bugs. In this special topics course, you will learn about modern techniques in automated fault repair, that is, techniques that locate and patch software faults. We will cover recent research that walks the algorithm of automated program repair: fault identification, fault localization, fix localization, and evaluating the fix. We will also explore topics that pertain to the softer side of repair, such as what is a bug, what makes a good patch, and how to evaluate patch quality. You will also have the opportunity to build and evaluate a simple automated program repair engine. This course is primarily a seminar-based course involving lots of discussion, lectures, small group activities, tool demonstrations, and final project presentations. For more details, visit: http://go.ncsu.edu/programrepairfall2017
CSC 591/791 - 022 Educational Data Mining - Dr. Lynch
Prerequisites: This course is open to students from CS as well as interested graduate students from other departments. CS Students should have taken:
- CSC 316 or equivalent
- CSC 420/520 AI or 422/522 Data Analysis
Description: Non-CS students should have a comparable background in statistics and programming and should seek instructor permission to register for the course.
This course will introduce students to the concepts and techniques underlying Educational Data Mining. EDM is focused on analyzing educational data to extract pedagogically-relevant insights that can be used to support learners, educators, and policy-makers. Students will learn about the technical process of EDM as well as the application areas. We will also discuss appropriate policy questions and look at the way in which data is or is not used in practice. The course will be built around domain relevant readings, individual assignments and a final project.
Topics will include: statistical and symbolic machine learning; data collection and preparation; application areas; data-driven tutoring; big datasets; and data policy.
By the end of the course students should understand:
- How to read and assess EDM research
- How to develop an EDM hypothesis
- How to apply statistical and symbolic learning to educational data
- How to collect, prepare, analyze, and evaluate educational data
- How to write and present an appropriate research paper
CSC 591/791 - 023 Foundations of Software Science - Dr. Menzies
Prerequisites: CSC 226 and CSC 316, or similar, graduate or senior standing with at least 3.0 GPA, good knowledge of at least one high level programming language.
Description: Most software companies now learn their policies via data-driven methods. Modern practitioners treat every planned feature as an experiment, of which only a few are expected to survive. Key performance metrics are carefully monitored and analyzed to judge the progress of a feature. Even simple design decisions such as the color of a link are chosen by the outcome of software experiments.
This subject will explore methods for designing data collection experiments; collecting that data; exploring that data; then presenting that data in such a way to support business-level decision making for software projects.
For more information, see http://fss16.unbox.org
CSC 791 - 001 Generative Methods for Game Design - Dr. Chris Martens
Prerequisites: None
Description: This course will introduce foundations and current research on generative methods, including algorithmic design, text and story generation, and procedural level generation, with applications to game design. The course will have both seminar and traditional assignment components; we will read papers and tinker with systems, culminating in a final project. Students will be expected to have some programming fluency; background in an artistic practice will be helpful but is not required.